Index: /issm/trunk/src/c/parallel/prognostic_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/prognostic_core.cpp	(revision 2012)
+++ /issm/trunk/src/c/parallel/prognostic_core.cpp	(revision 2013)
@@ -58,3 +58,7 @@
 	result=new Result(results->Size()+1,0,1,"h_g",h_g);
 	results->AddObject(result);
+
+	/*Free ressources:*/
+	VecFree(&u_g);
+	VecFree(&h_g);
 }
Index: /issm/trunk/src/c/parallel/transient.cpp
===================================================================
--- /issm/trunk/src/c/parallel/transient.cpp	(revision 2012)
+++ /issm/trunk/src/c/parallel/transient.cpp	(revision 2013)
@@ -153,4 +153,11 @@
 		WriteLockFile(lockname);
 	}
+	/*Free ressources:*/
+	delete results;
+	delete model;
+	delete inputs;
+	xfree((void**)&u_g);
+	xfree((void**)&m_g);
+	xfree((void**)&a_g);
 		
 	_printf_("closing MPI and Petsc\n");
Index: /issm/trunk/src/c/parallel/transient_core_2d.cpp
===================================================================
--- /issm/trunk/src/c/parallel/transient_core_2d.cpp	(revision 2012)
+++ /issm/trunk/src/c/parallel/transient_core_2d.cpp	(revision 2013)
@@ -31,5 +31,5 @@
 	int step,i;
 	double time;
-	
+
 	Vec u_g=NULL;
 	double* u_g_serial=NULL;
@@ -38,11 +38,13 @@
 	double* p_g_serial=NULL;
 	Vec h_g=NULL;
+	Vec new_h_g=NULL;
 	Vec h_g_intermediary=NULL;
 	double* h_g_serial=NULL;
 	Vec s_g=NULL;
+	Vec new_s_g=NULL;
 	double* s_g_serial=NULL;
 	Vec b_g=NULL;
+	Vec new_b_g=NULL;
 	double* b_g_serial=NULL;
-
 
 	/*intermediary: */
@@ -124,6 +126,6 @@
 
 		//extract u_g and p_g from diagnostic_results, and erase diagnostic_results;
-		diagnostic_results->FindResult(&u_g,"u_g");
-		diagnostic_results->FindResult(&p_g,"p_g");
+		VecFree(&u_g); diagnostic_results->FindResult(&u_g,"u_g");
+		VecFree(&p_g); diagnostic_results->FindResult(&p_g,"p_g");
 		delete diagnostic_results;
 
@@ -141,7 +143,11 @@
 		//update surface and bed using the new thickness
 		_printf_("   updating geometry\n");
-		UpdateGeometryx(&h_g,&b_g,&s_g, 
+		UpdateGeometryx(&new_h_g,&new_b_g,&new_s_g, 
 				fem_p->elements, fem_p->nodes,fem_p->loads, fem_p->materials, 
 				h_g_intermediary,b_g,s_g); 
+
+		VecFree(&h_g);h_g=new_h_g; 
+		VecFree(&s_g);s_g=new_s_g; 
+		VecFree(&b_g);b_g=new_b_g; 
 		VecFree(&h_g_intermediary);
 
@@ -152,4 +158,5 @@
 		result=new Result(results->Size()+1,time,step,"s_g",s_g); results->AddObject(result);
 		result=new Result(results->Size()+1,time,step,"b_g",b_g); results->AddObject(result);
+
 	}
 
@@ -161,3 +168,8 @@
 	xfree((void**)&s_g_serial);
 	xfree((void**)&b_g_serial);
+	VecFree(&u_g);
+	VecFree(&p_g);
+	VecFree(&h_g);
+	VecFree(&s_g);
+	VecFree(&b_g);
 }
