Index: /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 16474)
@@ -68,8 +68,10 @@
 
 /*ElementResult management*/
-/*FUNCTION BoolElementResult::InstanceEnum{{{*/
-int BoolElementResult::InstanceEnum(void){
+/*FUNCTION BoolElementResult::GetResultName{{{*/
+char* BoolElementResult::GetResultName(void){
 
-	return this->enum_type;
+	char* output = NULL;
+	EnumToStringx(&output,this->enum_type);
+	return output;
 
 }
Index: /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h	(revision 16474)
@@ -39,7 +39,7 @@
 		/*}}}*/
 		/*BoolElementResult management: {{{*/
-		int   InstanceEnum();
-		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
-		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
+		char* GetResultName();
+		void  GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
+		void  GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 16474)
@@ -68,8 +68,10 @@
 
 /*ElementResult management*/
-/*FUNCTION DoubleElementResult::InstanceEnum{{{*/
-int DoubleElementResult::InstanceEnum(void){
+/*FUNCTION DoubleElementResult::GetResultName{{{*/
+char* DoubleElementResult::GetResultName(void){
 
-	return this->enum_type;
+	char* output = NULL;
+	EnumToStringx(&output,this->enum_type);
+	return output;
 
 }
Index: /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h	(revision 16474)
@@ -39,5 +39,5 @@
 
 		/*DoubleElementResult management*/
-		int  InstanceEnum();
+		char* GetResultName();
 		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
 		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
Index: /issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h	(revision 16474)
@@ -18,5 +18,5 @@
 		virtual int        GetStep(void) = 0;
 		virtual int        NumberOfNodalValues(void) = 0;
-		virtual int        InstanceEnum() = 0;
+		virtual char*      GetResultName() = 0;
 		virtual void       GetVectorFromResults(Vector <IssmDouble> *vector,int*doflist,int*connectivitylist,int numdof)=0;
 		virtual void       GetElementVectorFromResults(Vector <IssmDouble> *vector,int dof)=0;
Index: /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 16474)
@@ -71,8 +71,10 @@
 
 /*ElementResult management*/
-/*FUNCTION PentaP1ElementResult::InstanceEnum{{{*/
-int PentaP1ElementResult::InstanceEnum(void){
+/*FUNCTION PentaP1ElementResult::GetResultName{{{*/
+char* PentaP1ElementResult::GetResultName(void){
 
-	return this->enum_type;
+	char* output = NULL;
+	EnumToStringx(&output,this->enum_type);
+	return output;
 
 }
Index: /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h	(revision 16474)
@@ -38,5 +38,5 @@
 		/*}}}*/
 		/*PentaP1ElementResult management: {{{*/
-		int   InstanceEnum();
+		char* GetResultName();
 		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
 		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
Index: /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 16474)
@@ -70,8 +70,10 @@
 
 /*ElementResult management*/
-/*FUNCTION TriaP1ElementResult::InstanceEnum{{{*/
-int TriaP1ElementResult::InstanceEnum(void){
+/*FUNCTION TriaP1ElementResult::GetResultName{{{*/
+char* TriaP1ElementResult::GetResultName(void){
 
-	return this->enum_type;
+	char* output = NULL;
+	EnumToStringx(&output,this->enum_type);
+	return output;
 
 }
Index: /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h	(revision 16474)
@@ -37,5 +37,5 @@
 		/*}}}*/
 		/*TriaP1ElementResult management: {{{*/
-		int   InstanceEnum();
+		char* GetResultName();
 		void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
 		void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16474)
@@ -1661,7 +1661,4 @@
 	/*Get result*/
 	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
-	if(elementresult->InstanceEnum()!=enum_in){
-		_error_("Results of offset "<<offset<<" is "<<EnumToStringx(elementresult->InstanceEnum())<<" when "<<EnumToStringx(enum_in)<<" was expected");
-	}  
 	if(interp==P1Enum){
 		int vertexpidlist[NUMVERTICES];
@@ -2808,5 +2805,5 @@
 		for(int i=0;i<this->results->Size();i++){
 			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
-			resultsenums[i]=elementresult->InstanceEnum();
+			resultsenums[i]=StringToEnumx(elementresult->GetResultName());
 			resultstimes[i]=elementresult->GetTime();
 			resultssteps[i]=elementresult->GetStep();
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16474)
@@ -1554,7 +1554,4 @@
 	/*Get result*/
 	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
-	if(elementresult->InstanceEnum()!=enum_in){
-		_error_("Results of offset "<<offset<<" is "<<EnumToStringx(elementresult->InstanceEnum())<<" when "<<EnumToStringx(enum_in)<<" was expected");
-	}
 	if(interp==P1Enum){
 		int vertexpidlist[NUMVERTICES];
@@ -2398,5 +2395,5 @@
 		for(int i=0;i<this->results->Size();i++){
 			ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(i);
-			resultsenums[i]=elementresult->InstanceEnum();
+			resultsenums[i]=StringToEnumx(elementresult->GetResultName());
 			resultstimes[i]=elementresult->GetTime();
 			resultssteps[i]=elementresult->GetStep();
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/ExternalResult.h	(revision 16474)
@@ -25,7 +25,6 @@
 		virtual        ~ExternalResult(){};
 		/*Virtual functions:{{{*/
-		virtual int   InstanceEnum()=0;
 		virtual void  WriteData(FILE* fid,bool io_gather)=0;
-		virtual void  GetResultName(char**)=0;
+		virtual char* GetResultName(void)=0;
 		virtual int   GetStep(void)=0;
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 16474)
@@ -23,6 +23,5 @@
 	private: 
 		int        id;
-		int        enum_type; //in case we have an identifiable enum for this result
-		char*      enum_string;  //in case this result is only identifiable by a unique string, though arbitrary.
+		char*      result_name;
 		ResultType value;
 		int        M;
@@ -34,26 +33,18 @@
 		/*Diverse: must be in front, as it is used in what follows*/
 		void GenericEcho(void){/*{{{*/
-			_printf_("   id: " << this->id << "\n");
-			if(this->enum_type!=-1)_printf_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
-			else _printf_("   string identified:  " << this->enum_string );
-			_printf_("   step: " << this->step << "\n");
-			_printf_("   time: " << this->time << "\n");
+			_printf_("   id          : " << this->id << "\n");
+			_printf_("   result_name : " << this->result_name<< "\n");
+			_printf_("   step        : " << this->step << "\n");
+			_printf_("   time        : " << this->time << "\n");
 		}
 		/*}}}*/
 		void GenericWriteData(FILE* fid){/*{{{*/ 
 
-			int     length;
 			IssmPDouble  passiveDouble;
-			char*   name = NULL;
-
-			/*First write enum: */
-			if(this->enum_type!=-1)EnumToStringx(&name,this->enum_type);
-			else{
-				name=xNew<char>(strlen(this->enum_string)+1); xMemCpy<char>(name,enum_string,strlen(this->enum_string)+1);
-			}
-			length=(strlen(name)+1)*sizeof(char);
+
+			/*First write name: */
+			int length=(strlen(this->result_name)+1)*sizeof(char);
 			fwrite(&length,sizeof(int),1,fid);
-			fwrite(name,length,1,fid);
-			xDelete<char>(name);
+			fwrite(this->result_name,length,1,fid);
 
 			/*Now write time and step: */
@@ -65,20 +56,18 @@
 		/*GenericExternalResult constructors and  destructors*/
 		GenericExternalResult(){ /*{{{*/
-			id        = 0;
-			enum_type = -1;
-			enum_string= NULL;
-			M         = 0;
-			N         = 0;
-			step      = 0;
-			time      = 0;
+			id          = 0;
+			result_name = NULL;
+			M           = 0;
+			N           = 0;
+			step        = 0;
+			time        = 0;
 		} /*}}}*/
 		GenericExternalResult(int in_id, int in_enum_type,ResultType in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
-			id        = 0;
-			enum_type = -1;
-			enum_string=NULL;
-			M         = 0;
-			N         = 0;
-			step      = 0;
-			time      = 0;
+			id          = 0;
+			result_name = NULL;
+			M           = 0;
+			N           = 0;
+			step        = 0;
+			time        = 0;
 			_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");
 		}
@@ -86,22 +75,25 @@
 		GenericExternalResult(int in_id, int in_enum_type,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
 			id        = in_id;
-			enum_type = in_enum_type;
-			enum_string = NULL;
 			value     = in_value;
 			step      = in_step;
 			time      = in_time;
+
+			/*Convert enum to name*/
+			EnumToStringx(&this->result_name,in_enum_type);
 		}
 		/*}}}*/
-		GenericExternalResult(int in_id,const char* in_enum_string,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
+		GenericExternalResult(int in_id,const char* in_result_name,ResultType in_value,int in_step, IssmDouble in_time){ /*{{{*/
 			id        = in_id;
-			enum_type = -1;
-			enum_string = xNew<char>(strlen(in_enum_string)+1); xMemCpy<char>(enum_string,in_enum_string,strlen(in_enum_string)+1);
 			value     = in_value;
 			step      = in_step;
 			time      = in_time;
+
+			/*Copy name*/
+			this->result_name = xNew<char>(strlen(in_result_name)+1);
+			xMemCpy<char>(this->result_name,in_result_name,strlen(in_result_name)+1);
 		}
 		/*}}}*/
 		~GenericExternalResult(){ /*{{{*/
-			if(enum_string)xDelete<char>(enum_string);
+			xDelete<char>(result_name);
 		} /*}}}*/
 
@@ -122,6 +114,5 @@
 		} /*}}}*/
 		Object* copy(void) { /*{{{*/
-			if(enum_type!=-1) return new GenericExternalResult<ResultType>(this->id,this->enum_type,this->value,this->step,this->time);
-			else              return new GenericExternalResult<ResultType>(this->id,this->enum_string,this->value,this->step,this->time);
+			return new GenericExternalResult<ResultType>(this->id,this->result_name,this->value,this->step,this->time);
 		} /*}}}*/
 
@@ -154,17 +145,12 @@
 
 } /*}}}*/
-void GetResultName(char** pname){ /*{{{*/
-	if(this->enum_type!=-1)EnumToStringx(pname,this->enum_type);
-	else{
-		char* name=xNew<char>(strlen(enum_string)+1); xMemCpy<char>(name,enum_string,strlen(enum_string)+1);
-		*pname=name;
-	}
+char* GetResultName(void){ /*{{{*/
+		char* name = xNew<char>(strlen(this->result_name)+1);
+		xMemCpy<char>(name,this->result_name,strlen(this->result_name)+1);
+		return name;
 } /*}}}*/
 int GetStep(void){ /*{{{*/
 	return this->step;
 } /*}}}*/
-int InstanceEnum(void){ /*{{{*/
-	return this->enum_type;
-} /*}}}*/
 };
 
@@ -208,13 +194,16 @@
 template <> inline GenericExternalResult<char*>::GenericExternalResult(int in_id, int in_enum_type,char* in_value,int in_step, IssmDouble in_time){ /*{{{*/
 
-	id=in_id;
-	enum_type=in_enum_type;
-	value=xNew<char>(strlen(in_value)+1);
+	id = in_id;
+	value = xNew<char>(strlen(in_value)+1);
 	xMemCpy<char>(value,in_value,(strlen(in_value)+1));
-	step=in_step;
-	time=in_time;
+	step  = in_step;
+	time  = in_time;
+
+	/*Convert enum to name*/
+	EnumToStringx(&this->result_name,in_enum_type);
 
 } /*}}}*/
 template <> inline GenericExternalResult<char*>::~GenericExternalResult(){ /*{{{*/
+	xDelete<char>(result_name);
 	xDelete<char>(value);
 } /*}}}*/
@@ -257,11 +246,12 @@
 template <> inline GenericExternalResult<IssmPDouble*>::GenericExternalResult(int in_id, int in_enum_type,IssmPDouble* in_values, int in_M,int in_N,int in_step,IssmDouble in_time){/*{{{*/
 
-	id=in_id;
-	enum_type=in_enum_type;
-	M=in_M;
-	N=in_N;
-
-	step=in_step;
-	time=in_time;
+	id = in_id;
+	M  = in_M;
+	N  = in_N;
+
+	EnumToStringx(&this->result_name,in_enum_type);
+
+	step = in_step;
+	time = in_time;
 
 	/*Copy result in values*/
@@ -277,4 +267,5 @@
 } /*}}}*/
 template <> inline GenericExternalResult<IssmPDouble*>::~GenericExternalResult(){ /*{{{*/
+	xDelete<char>(result_name);
 	xDelete<IssmPDouble>(value);
 } /*}}}*/
@@ -304,10 +295,9 @@
 } /*}}}*/
 template <> inline Object* GenericExternalResult<IssmPDouble*>::copy(void){ /*{{{*/
-	return new GenericExternalResult<IssmPDouble*>(this->id,this->enum_type,this->value,this->M,this->N,this->step,this->time);
+	return new GenericExternalResult<IssmPDouble*>(this->id,StringToEnumx(this->result_name),this->value,this->M,this->N,this->step,this->time);
 } /*}}}*/
 template <> inline void GenericExternalResult<IssmPDouble*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
 
 	int     my_rank;
-	int     length;
 	int     type;
 	int     rows,cols;
@@ -324,9 +314,7 @@
 
 	/*First write enum: */
-	EnumToStringx(&name,this->enum_type);
-	length=(strlen(name)+1)*sizeof(char);
+	int length=(strlen(this->result_name)+1)*sizeof(char);
 	fwrite(&length,sizeof(int),1,fid);
-	fwrite(name,length,1,fid);
-	xDelete<char>(name);
+	fwrite(this->result_name,length,1,fid);
 
 	/*Now write time and step: */
@@ -356,15 +344,18 @@
 /*}}}*/
 template <> inline GenericExternalResult<Vector<IssmPDouble>*>::GenericExternalResult(int in_id, int in_enum_type,Vector<IssmPDouble>* in_value,int in_step, IssmDouble in_time){ /*{{{*/
-	id=in_id;
-	enum_type=in_enum_type;
-	M=0;
-	N=0;
-
-	step=in_step;
-	time=in_time;
+	id = in_id;
+	M  = 0;
+	N  = 0;
+
+	/*Convert enum to name*/
+	EnumToStringx(&this->result_name,in_enum_type);
+
+	step = in_step;
+	time = in_time;
 
 	value = in_value;
 } /*}}}*/
 template <> inline GenericExternalResult<Vector<IssmPDouble>*>::~GenericExternalResult(){ /*{{{*/
+	xDelete<char>(this->result_name);
 	delete value;
 } /*}}}*/
@@ -382,5 +373,5 @@
 } /*}}}*/
 template <> inline Object* GenericExternalResult<Vector<IssmPDouble>*>::copy(void){ /*{{{*/
-	return new GenericExternalResult<Vector<IssmPDouble>*>(this->id,this->enum_type,this->value,this->step,this->time);
+	return new GenericExternalResult<Vector<IssmPDouble>*>(this->id,StringToEnumx(this->result_name),this->value,this->step,this->time);
 } /*}}}*/
 template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
@@ -398,10 +389,8 @@
 
 	if(IssmComm::GetRank()==0){
-		/*First write enum: */
-		EnumToStringx(&name,this->enum_type);
-		length=(strlen(name)+1)*sizeof(char);
+		/*First write name: */
+		length=(strlen(this->result_name)+1)*sizeof(char);
 		fwrite(&length,sizeof(int),1,fid);
-		fwrite(name,length,1,fid);
-		xDelete<char>(name);
+		fwrite(this->result_name,length,1,fid);
 
 		/*Now write time and step: */
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16473)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp	(revision 16474)
@@ -66,6 +66,6 @@
 		ElementResult* result=dynamic_cast<ElementResult*>(*object);
 
-		if(result->InstanceEnum()==in_result->InstanceEnum()){
-			if(result->GetStep()==in_result->GetStep()){
+		if(result->GetStep()==in_result->GetStep()){
+			if(strcmp(result->GetResultName(),in_result->GetResultName())==0){
 				this->DeleteObject(result);
 				break;
@@ -91,6 +91,6 @@
 		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
 
-		if(result->InstanceEnum()==in_result->InstanceEnum()){
-			if(result->GetStep()==in_result->GetStep()){
+		if(result->GetStep()==in_result->GetStep()){
+			if(strcmp(result->GetResultName(),in_result->GetResultName())==0){
 				this->DeleteObject(result);
 				break;
@@ -109,6 +109,6 @@
 		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
 
-		if(result->InstanceEnum()==result_enum){
-			if(result->GetStep()==result_step){
+		if(result->GetStep()==result_step){
+			if(strcmp(result->GetResultName(),EnumToStringx(result_enum))==0){
 				this->DeleteObject(result);
 				break;
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16473)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 16474)
@@ -12,12 +12,12 @@
 	int i,j;
 	
-	Parameters *parameters = NULL;
-	DataSet* output_definitions=NULL;
-	int*     output_definition_enums;
-	int      num_output_definitions;
-	int      numgates;
-	char**   gatenames=NULL;
-	IssmDouble** gatesegments=NULL;
-	int*         gatesegments_M=NULL;
+	Parameters  *parameters              = NULL;
+	DataSet     *output_definitions      = NULL;
+	int         *output_definition_enums = NULL;
+	int          num_output_definitions;
+	int          numgates;
+	char       **gatenames               = NULL;
+	IssmDouble **gatesegments            = NULL;
+	int         *gatesegments_M          = NULL;
 
 	/*Get parameters: */
@@ -43,6 +43,6 @@
 				/*Free ressources:*/
 				for(j=0;j<numgates;j++){
-					char* string=gatenames[j]; xDelete<char>(string);
-					IssmDouble* gate=gatesegments[j]; xDelete<IssmDouble>(gate);
+					char*       string = gatenames[j];    xDelete<char>(string);
+					IssmDouble* gate   = gatesegments[j]; xDelete<IssmDouble>(gate);
 				}
 				xDelete<char*>(gatenames);
