Index: /issm/trunk-jpl/src/c/objects/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/objects/IoModel.cpp	(revision 12264)
+++ /issm/trunk-jpl/src/c/objects/IoModel.cpp	(revision 12265)
@@ -45,4 +45,7 @@
 	this->fid=iomodel_handle;
 
+	/*Check that Enums are Synchronized*/
+	this->CheckEnumSync();
+
 	/*Initialize and read constants:*/
 	this->constants=new Parameters();
@@ -89,4 +92,33 @@
 /*}}}*/
 
+/*FUNCTION IoModel::CheckEnumSync{{{1*/
+void  IoModel::CheckEnumSync(void){
+
+	extern int my_rank;
+	int record_enum = 0;
+
+
+	/*Check that some fields have been allocated*/
+	_assert_(this->fid || my_rank);
+
+
+	/*Go find in the binary file, the position of the data we want to fetch: */
+	if(my_rank==0){ //cpu 0
+
+		/*First set FILE* position to the beginning of the file: */
+		fseek(this->fid,0,SEEK_SET);
+
+		/*Get first Enum*/
+		if(fread(&record_enum,sizeof(int),1,this->fid)==0){
+			_error_("Marshalled file is empty");
+		}
+		else{
+			if(record_enum!=MaximumNumberOfEnums){
+				_error_("Enums in marshalled file are not compatible with compiled code, make sure you are using the same version of ISSM");
+			}
+		}
+	}
+}
+/*}}}*/
 /*FUNCTION IoModel::Constant(bool* poutput,int constant_enum){{{1*/
 void IoModel::Constant(bool* poutput,int constant_enum){
Index: /issm/trunk-jpl/src/c/objects/IoModel.h
===================================================================
--- /issm/trunk-jpl/src/c/objects/IoModel.h	(revision 12264)
+++ /issm/trunk-jpl/src/c/objects/IoModel.h	(revision 12265)
@@ -41,23 +41,24 @@
 
 		/*Input/Output*/
-		void        Constant(bool   *poutput,int constant_enum);
-		void        Constant(int    *poutput,int constant_enum);
-		void        Constant(double *poutput,int constant_enum);
-		void        Constant(char  **poutput,int constant_enum);
-		Param      *CopyConstantObject(int constant_enum);
-		double     *Data(int dataenum);
-		void        DeleteData(int num,...);
-		void        FetchConstants(void);
-		void        FetchData(bool*     pboolean,int data_enum);
-		void        FetchData(int*      pinteger,int data_enum);
-		void        FetchData(double*   pscalar,int data_enum);
-		void        FetchData(char**    pstring,int data_enum);
-		void        FetchData(int** pmatrix,int* pM,int* pN,int data_enum);
-		void        FetchData(double**  pscalarmatrix,int* pM,int* pN,int data_enum);
-		void        FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
-		void        FetchData(double*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
-		void        FetchData(int num,...);
-		void        FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum=NoneEnum,double default_value=0);
-		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
+		void    CheckEnumSync(void);
+		void    Constant(bool   *poutput,int constant_enum);
+		void    Constant(int    *poutput,int constant_enum);
+		void    Constant(double *poutput,int constant_enum);
+		void    Constant(char  **poutput,int constant_enum);
+		Param  *CopyConstantObject(int constant_enum);
+		double *Data(int dataenum);
+		void    DeleteData(int num,...);
+		void    FetchConstants(void);
+		void    FetchData(bool*     pboolean,int data_enum);
+		void    FetchData(int*      pinteger,int data_enum);
+		void    FetchData(double*   pscalar,int data_enum);
+		void    FetchData(char**    pstring,int data_enum);
+		void    FetchData(int** pmatrix,int* pM,int* pN,int data_enum);
+		void    FetchData(double**  pscalarmatrix,int* pM,int* pN,int data_enum);
+		void    FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
+		void    FetchData(double*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
+		void    FetchData(int num,...);
+		void    FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum=NoneEnum,double default_value=0);
+		FILE*   SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
 };
 
Index: /issm/trunk-jpl/src/m/model/marshall.m
===================================================================
--- /issm/trunk-jpl/src/m/model/marshall.m	(revision 12264)
+++ /issm/trunk-jpl/src/m/model/marshall.m	(revision 12265)
@@ -15,4 +15,7 @@
 	error(['marshall error message: could not open ' [md.miscellaneous.name '.bin'],' file for binary writing']);
 end
+
+%First, right MaximumNumberOfEnum to make sure that the Enums are synchronized
+WriteData(fid,'enum',MaximumNumberOfEnums(),'data',true,'format','Boolean');
 
 %Go through all model fields: check that it is a class and call checkconsistency
