Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25521)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25522)
@@ -1083,4 +1083,5 @@
 syn keyword cConstant GenericOptionEnum
 syn keyword cConstant GenericParamEnum
+syn keyword cConstant GenericExternalResultEnum
 syn keyword cConstant GiaAnalysisEnum
 syn keyword cConstant GiaSolutionEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25521)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25522)
@@ -1082,4 +1082,5 @@
 	GenericOptionEnum,
 	GenericParamEnum,
+	GenericExternalResultEnum,
 	GiaAnalysisEnum,
 	GiaSolutionEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25521)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25522)
@@ -1085,4 +1085,5 @@
 		case GenericOptionEnum : return "GenericOption";
 		case GenericParamEnum : return "GenericParam";
+		case GenericExternalResultEnum : return "GenericExternalResult";
 		case GiaAnalysisEnum : return "GiaAnalysis";
 		case GiaSolutionEnum : return "GiaSolution";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25521)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25522)
@@ -1109,4 +1109,5 @@
 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
 	      else if (strcmp(name,"GenericParam")==0) return GenericParamEnum;
+	      else if (strcmp(name,"GenericExternalResult")==0) return GenericExternalResultEnum;
 	      else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
 	      else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"GroundinglineMassFlux")==0) return GroundinglineMassFluxEnum;
 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
-	      else if (strcmp(name,"Gsl")==0) return GslEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+	      if (strcmp(name,"Gsl")==0) return GslEnum;
+	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
 	      else if (strcmp(name,"Hook")==0) return HookEnum;
@@ -1243,9 +1244,9 @@
 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
-	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
+	      if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
+	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
@@ -1366,9 +1367,9 @@
 	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
-	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
          else stage=12;
    }
    if(stage==12){
-	      if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
+	      if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
 	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
 	      else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/Marshalling.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/Marshalling.h	(revision 25521)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/Marshalling.h	(revision 25522)
@@ -43,16 +43,22 @@
 	public:
 		WriteCheckpointFunctor(char** pmarshalled_data_in) : MarshallHandle(MARSHALLING_WRITE),pmarshalled_data(pmarshalled_data_in){}
+		void Echo(void){
+			printf("WriteCheckpointFunctor Echo:\n");
+			printf("   pmarshalled_data: %p\n",pmarshalled_data);
+		}
 		template<typename T> void call(T & value){
 			memcpy(*pmarshalled_data,&value,sizeof(T));
 			*pmarshalled_data+=sizeof(T);
 		}
-		void Echo(void){
-			printf("WriteCheckpointFunctor Echo:\n");
-			printf("   pmarshalled_data: %p\n",pmarshalled_data);
-		}
+		void call(char* & value){
+			int size = 0;
+			if(value) size = strlen(value)+1;
+			this->call(size);
+			this->call(value,size);
+		};
 		template<typename T> void call(T* & value,int size){
 			bool pointer_null = true;
 			if(value) pointer_null = false;
-			call(pointer_null);
+			this->call<bool>(pointer_null);
 			if(value){
 				memcpy(*pmarshalled_data,value,size*sizeof(T));
@@ -76,4 +82,9 @@
 			*pmarshalled_data+=sizeof(T);
 		}
+		void call(char* & value){
+			int size;
+			this->call(size);
+			this->call(value,size);
+		};
 		template<typename T> void call(T* & value,int size){
 			bool pointer_null;
@@ -104,4 +115,10 @@
 			marshalled_data_size+=sizeof(T);
 		}
+		void call(char* & value){
+			int size = 0;
+			if(value) size = strlen(value)+1;
+			this->call(size);
+			if(size) marshalled_data_size+=size*sizeof(char);
+		};
 		template<typename T> void call(T* & value,int size){
 			bool pointer_null = true;
