Index: /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 19333)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 19334)
@@ -53,4 +53,19 @@
 			fwrite(&step,sizeof(int),1,fid);
 		} /*}}}*/
+		void GenericMarshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+
+			MARSHALLING_ENUM(this->ObjectEnum());
+
+			bool isnull=true;
+			if(marshall_direction==MARSHALLING_FORWARD || marshall_direction == MARSHALLING_SIZE) if(value) isnull=false;
+
+			MARSHALLING(id);
+			MARSHALLING(result_name);
+			MARSHALLING(isnull)
+			if (!isnull) MARSHALLING(value) else value=NULL;
+			MARSHALLING(step);
+			MARSHALLING(time);
+
+		}  /*}}}*/
 
 		/*GenericExternalResult constructors and  destructors*/
@@ -62,4 +77,5 @@
 			step        = 0;
 			time        = 0;
+			value       = NULL;
 		} /*}}}*/
 		GenericExternalResult(int in_id, int in_enum_type,ResultType in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
@@ -70,4 +86,5 @@
 			step        = 0;
 			time        = 0;
+			value       = in_values;
 			_error_("template GenericExternalResult(int in_id, int in_enum_type,double* in_values, int in_M,int in_N,int in_step,IssmDouble in_time) not implemented for this ResultType\n");
 		}
@@ -78,4 +95,6 @@
 			step      = in_step;
 			time      = in_time;
+			M         = 1;
+			N         = 1;
 
 			/*Convert enum to name*/
@@ -88,4 +107,6 @@
 			step      = in_step;
 			time      = UNDEF;
+			M         = 1;
+			N         = 1;
 
 			/*Convert enum to name*/
@@ -98,4 +119,6 @@
 			step      = in_step;
 			time      = in_time;
+			M         = 1;
+			N         = 1;
 
 			/*Copy name*/
@@ -131,6 +154,4 @@
 		/*}}}*/
 
-
-
 		/*GenericExternalResult management: */
 void  WriteData(FILE* fid,bool io_gather){ /*{{{*/
@@ -193,4 +214,9 @@
 	return BoolExternalResultEnum;
 } /*}}}*/
+template <> inline void GenericExternalResult<bool>::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+
+	this->GenericMarshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+
+}  /*}}}*/
 
 /*Specific instantiations for int: */
@@ -205,4 +231,9 @@
 	return IntExternalResultEnum;
 } /*}}}*/
+template <> inline void GenericExternalResult<int>::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+
+	this->GenericMarshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+
+}  /*}}}*/
 
 /*Specific instantiations for double: */
@@ -220,4 +251,9 @@
 	return value;
 } /*}}}*/
+template <> inline void GenericExternalResult<double>::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+
+	this->GenericMarshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+
+}  /*}}}*/
 
 /*Specific instantiations for char*: */
@@ -229,4 +265,6 @@
 	step  = in_step;
 	time  = in_time;
+	M     = 1;
+	N     = 1;
 
 	/*Convert enum to name*/
@@ -284,4 +322,18 @@
 	return StringExternalResultEnum;
 } /*}}}*/
+template <> inline void GenericExternalResult<char*>::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+
+	int size;
+
+	if(marshall_direction==MARSHALLING_FORWARD || marshall_direction == MARSHALLING_SIZE)size=strlen(value)+1;
+
+	MARSHALLING(id);
+	MARSHALLING(result_name);
+	MARSHALLING(size);
+	MARSHALLING_DYNAMIC(value,char,size);
+	MARSHALLING(step);
+	MARSHALLING(time);
+
+}  /*}}}*/
 
 /*Specific instantiations for IssmPDouble*: */
@@ -382,4 +434,17 @@
 	return value;
 } /*}}}*/
+template <> inline void GenericExternalResult<IssmPDouble*>::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+
+	MARSHALLING_ENUM(this->ObjectEnum());
+
+	MARSHALLING(id);
+	MARSHALLING(result_name);
+	MARSHALLING(M);
+	MARSHALLING(N);
+	MARSHALLING_DYNAMIC(value,IssmPDouble,M*N);
+	MARSHALLING(step);
+	MARSHALLING(time);
+
+}  /*}}}*/
 
 /*Specific instantiations for IssmDouble*: */
@@ -556,4 +621,9 @@
 }
 /*}}}*/
+template <> inline void GenericExternalResult<Vector<IssmDouble>*>::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+
+	_error_("GenericExternalResult instantiated for type Vector<IssmDouble>* called " << result_name << " not implemented yet");
+
+}  /*}}}*/
 
 #endif  /* _EXTERNAL_RESULTOBJECT_H */
Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 19333)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 19334)
@@ -181,12 +181,12 @@
 		}
 		
+		if(save_results){
+			if(VerboseSolution()) _printf0_("   saving temporary results\n");
+			OutputResultsx(femmodel);
+		}
+
 		if(recording_frequency&& step%recording_frequency==0){
 			if(VerboseSolution()) _printf0_("   checkpointing model \n");
 			femmodel->CheckPoint();
-		}
-
-		if(save_results){
-			if(VerboseSolution()) _printf0_("   saving temporary results\n");
-			OutputResultsx(femmodel);
 		}
 	}
