Index: /issm/trunk/src/c/parallel/ControlInitialization.cpp
===================================================================
--- /issm/trunk/src/c/parallel/ControlInitialization.cpp	(revision 2015)
+++ /issm/trunk/src/c/parallel/ControlInitialization.cpp	(revision 2016)
@@ -51,4 +51,5 @@
 	int dof012[3]={0,1,2};
 	int dof3[1]={3};
+	double* dofset=NULL;
 
 	/*first recover parameters common to all solutions:*/
@@ -113,6 +114,6 @@
 	if(debug)_printf_("%s\n"," combining horizontal and vertical velocities...");
 	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_vert); VecFree(&ug_horiz);
 
@@ -122,6 +123,6 @@
 	VecScale(pg,1.0/stokesreconditioning);
 	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);
 
 	//Add in inputs
@@ -131,5 +132,6 @@
 	//update spcs
 	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);
@@ -147,3 +149,7 @@
 	/*Assign output*/
 	model->SetActiveFormulation(fem_ds);
+
+	/*Free ressources:*/
+	xfree((void**)&dofset);
+
 }
Index: /issm/trunk/src/c/parallel/diagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 2015)
+++ /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 2016)
@@ -179,7 +179,6 @@
 		
 			//decondition" pressure
-			
-			xfree((void**)&dofset);dofset=dofsetgen(1,dof3,4,numberofnodes*4); 
-			VecFree(&pg);VecPartition(&pg, ug, dofset, numberofnodes*1);
+			VecFree(&pg);	
+			xfree((void**)&dofset);dofset=dofsetgen(1,dof3,4,numberofnodes*4); VecPartition(&pg, ug, dofset, numberofnodes*1);
 			VecScale(pg,stokesreconditioning);
 		}
Index: /issm/trunk/src/c/parallel/objectivefunctionC.cpp
===================================================================
--- /issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 2015)
+++ /issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 2016)
@@ -51,4 +51,5 @@
 	DataSet* results_steadystate=NULL;
 	int dofs01[2]={0,1};
+	double* dofset=NULL;
 
 	/*Recover active model: */
@@ -103,5 +104,7 @@
 		//extract the correct number of dofs (3 or 4)
 		VecDuplicatePatch(&u_g_full,u_g);VecFree(&u_g);
-		if(!isstokes)VecPartition(&u_g, u_g_full, dofsetgen(2,dofs01,3,numberofnodes*3), numberofnodes*2);
+		if(!isstokes){
+			xfree((void**)& dofset);dofset=dofsetgen(2,dofs01,3,numberofnodes*3); VecPartition(&u_g, u_g_full, dofset, numberofnodes*2);
+		}
 		VecFree(&u_g_full);
 	}
@@ -120,4 +123,5 @@
 	xfree((void**)&param_g_copy);
 	xfree((void**)&u_g_double);
+	xfree((void**)&dofset);
 
 	return J;
