Index: /issm/trunk/src/c/BuildNodeSetsx/PartitionSets.cpp
===================================================================
--- /issm/trunk/src/c/BuildNodeSetsx/PartitionSets.cpp	(revision 1972)
+++ /issm/trunk/src/c/BuildNodeSetsx/PartitionSets.cpp	(revision 1973)
@@ -105,4 +105,3 @@
 	*ppartitionc=partitionc;
 
-
 }
Index: /issm/trunk/src/c/parallel/diagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 1972)
+++ /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 1973)
@@ -56,4 +56,5 @@
 	int dof012[3]={0,1,2};
 	int dof3[1]={3};
+	double* dofset=NULL;
 
 
@@ -136,6 +137,6 @@
 		VecFree(&ug); ug=NewVec(numberofnodes*3);
 
-		VecMerge(ug,ug_horiz,dofsetgen(2,&dof01[0],3,numberofnodes*3),numberofnodes*2);
-		VecMerge(ug,ug_vert,dofsetgen(1,&dof2[0],3,numberofnodes*3),numberofnodes*1);
+		xfree((void**)&dofset); dofset=dofsetgen(2,&dof01[0],3,numberofnodes*3); VecMerge(ug,ug_horiz,dofset,numberofnodes*2);
+		xfree((void**)&dofset); dofset=dofsetgen(1,&dof2[0],3,numberofnodes*3); VecMerge(ug,ug_vert,dofset,numberofnodes*1);
 		VecFree(&ug_horiz); VecFree(&ug_vert);
 
@@ -160,6 +161,6 @@
 			//recombine ug and pg: 
 			ug_stokes=NewVec(fem_ds->nodesets->GetGSize());
-			VecMerge(ug_stokes,ug,dofsetgen(3,dof012,4,numberofnodes*4),numberofnodes*3);
-			VecMerge(ug_stokes,pg,dofsetgen(1,dof3,4,numberofnodes*4),numberofnodes);
+			xfree((void**)&dofset);dofset=dofsetgen(3,dof012,4,numberofnodes*4); VecMerge(ug_stokes,ug,dofset,numberofnodes*3);
+			xfree((void**)&dofset); dofset=dofsetgen(1,dof3,4,numberofnodes*4); VecMerge(ug_stokes,pg,dofset,numberofnodes);
 
 			inputs->Add("velocity",ug_stokes,numberofdofspernode_ds,numberofnodes);
@@ -167,5 +168,5 @@
 
 			if(debug)_printf_("%s\n"," update boundary conditions for stokes using velocities previously computed...");
-			VecMerge(fem_ds->yg,ug,dofsetgen(3,dof012,4,numberofnodes*4),3*numberofnodes);
+			xfree((void**)&dofset);dofset=dofsetgen(3,dof012,4,numberofnodes*4); VecMerge(fem_ds->yg,ug,dofset,3*numberofnodes);
 			VecFree(&fem_ds->ys); VecFree(&fem_ds->ys0);
 			Reducevectorgtosx(&fem_ds->ys,&fem_ds->ys0, fem_ds->yg,fem_ds->nodesets);
@@ -177,5 +178,5 @@
 			//decondition" pressure
 			VecFree(&pg);
-			VecPartition(&pg, ug, dofsetgen(1,dof3,4,numberofnodes*4), numberofnodes*1);
+			xfree((void**)&dofset);dofset=dofsetgen(1,dof3,4,numberofnodes*4); VecPartition(&pg, ug, dofset, numberofnodes*1);
 			VecScale(pg,stokesreconditioning);
 		}
@@ -197,4 +198,5 @@
 	VecFree(&ug);
 	VecFree(&pg);
+	xfree((void**)&dofset);
 
 }
Index: /issm/trunk/src/c/parallel/diagnostic_core_linear.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic_core_linear.cpp	(revision 1972)
+++ /issm/trunk/src/c/parallel/diagnostic_core_linear.cpp	(revision 1973)
@@ -49,18 +49,18 @@
 	/*!Reduce matrix from g to f size:*/
 	if (debug) _printf_("   reducing matrix from g to f set\n");
-	Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem->Gmn,fem->nodesets);
+	Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem->Gmn,fem->nodesets); MatFree(&Kgg);
 
 
 	/*!Reduce load from g to f size: */
 	if (debug) _printf_("   reducing load from g to f set\n");
-	Reduceloadfromgtofx(&pf, pg, fem->Gmn, Kfs, fem->ys, fem->nodesets);
+	Reduceloadfromgtofx(&pf, pg, fem->Gmn, Kfs, fem->ys, fem->nodesets);VecFree(&pg); MatFree(&Kfs);
 
 	/*Solve: */
 	if (debug) _printf_("   solving\n");
-	Solverx(&uf, Kff, pf, NULL, solver_string);
+	Solverx(&uf, Kff, pf, NULL, solver_string); MatFree(&Kff); VecFree(&pf);
 
 	//Merge back to g set
 	if (debug) _printf_("   merging solution from f to g set\n");
-	Mergesolutionfromftogx(&ug, uf,fem->Gmn,fem->ys,fem->nodesets);
+	Mergesolutionfromftogx(&ug, uf,fem->Gmn,fem->ys,fem->nodesets);VecFree(&uf);
 
 	/*Assign output pointers:*/
