Index: /issm/branches/trunk-jpl-damage/src/c/Container/Observations.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/Container/Observations.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/Container/Observations.cpp	(revision 12280)
@@ -78,5 +78,6 @@
 		}
 		else{
-			//We need to average with the current observations (not done yet)
+			/*We need to average with the current observations*/
+			this->quadtree->AddAndAverage(x[i],y[i],observations_list[i]);
 		}
 	}
Index: /issm/branches/trunk-jpl-damage/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/EnumDefinitions/EnumDefinitions.h	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/EnumDefinitions/EnumDefinitions.h	(revision 12280)
@@ -155,4 +155,5 @@
 	PetscProfilingCurrentFlopsEnum,
 	PetscProfilingSolutionTimeEnum,
+	MaxIterationConvergenceFlagEnum,
 	SteadystateMaxiterEnum,
 	SteadystateNumRequestedOutputsEnum,
Index: /issm/branches/trunk-jpl-damage/src/c/EnumDefinitions/Synchronize.sh
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/EnumDefinitions/Synchronize.sh	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/EnumDefinitions/Synchronize.sh	(revision 12280)
@@ -2,6 +2,6 @@
 #Synchronize EnumToStringx.cpp and StringToEnumx.cpp and matlab Enums
 
-#Get all lines of EnumDefinitions2.h which hold Enum | remove all comas | add line number in the first column > put everything in file temp
-cat EnumDefinitions.h | grep -e "[0-9]Enum," -e "[a-zA-Z]Enum," | grep -v include | sed -e "s/,//g" | awk '{ printf "%s %s\n", NR, $0 }' > temp
+#Get all lines of EnumDefinitions2.h which hold Enum | remove all comas > put everything in file temp
+cat EnumDefinitions.h | grep -e "[0-9]Enum," -e "[a-zA-Z]Enum," | grep -v include | sed -e "s/,/ /g" | awk '{print $1}' > temp
 
 #Removed existing files
@@ -13,5 +13,5 @@
 NUMENUMS=$(wc -l temp | awk '{printf("%s",$1);}');
 
-#Build EnumToStringx.cpp {{{1
+#Build EnumToStringx.cpp {{{
 #Header
 cat <<END >  $ISSM_DIR/src/c/modules/EnumToStringx/EnumToStringx.cpp
@@ -35,5 +35,5 @@
 END
 #core
-cat temp |  awk '{print "\t\t" "case " $2" : return \"" substr($2,1,length($2)-4) "\";"}' >> $ISSM_DIR/src/c/modules/EnumToStringx/EnumToStringx.cpp
+cat temp |  awk '{print "\t\t" "case " $1" : return \"" substr($1,1,length($1)-4) "\";"}' >> $ISSM_DIR/src/c/modules/EnumToStringx/EnumToStringx.cpp
 #Footer
 cat <<END >> $ISSM_DIR/src/c/modules/EnumToStringx/EnumToStringx.cpp
@@ -83,5 +83,5 @@
 	echo "   if(stage==$i){" >> $ISSM_DIR//src/c/modules/StringToEnumx/StringToEnumx.cpp
 	awk -v i1=$i1 -v i2=$i2 '{if(NR>=i1 && NR<=i2) print $0 }' temp |
-	awk '{print "\t" ((NR==1)?"      if":"      else if") " (strcmp(name,\"" substr($2,1,length($2)-4) "\")==0) return " $2 ";"}' >> $ISSM_DIR//src/c/modules/StringToEnumx/StringToEnumx.cpp
+	awk '{print "\t" ((NR==1)?"      if":"      else if") " (strcmp(name,\"" substr($1,1,length($1)-4) "\")==0) return " $1 ";"}' >> $ISSM_DIR//src/c/modules/StringToEnumx/StringToEnumx.cpp
 	echo "         else stage=$(($i+1));" >> $ISSM_DIR//src/c/modules/StringToEnumx/StringToEnumx.cpp
 	echo "   }" >> $ISSM_DIR//src/c/modules/StringToEnumx/StringToEnumx.cpp
@@ -101,26 +101,25 @@
 
 # go through the lines of temp
-for (( i=1 ; i<=$NUMENUMS ; i++ )); do
+ENUM=0;
+for NAMEENUM in $(cat temp); do
 
 	#Get name and enum of the line i
-	NAMEENUM=$(cat temp | grep "^[ ]*$i " | awk '{printf("%s",$2);}');
 	NAME=$(echo $NAMEENUM | sed -e "s/Enum//g")
-	ENUM=$i;
 	#offset Enum by one (Enum begins with 0 and not 1!)
-	let ENUM=$ENUM-1
+	let ENUM=$ENUM+1
 
 	#print info {{{
-	if [ $i -lt 10 ]
+	if [ $ENUM -lt 10 ]
 	then
 		printf "\r                                                                      "
-		printf "\r  $i/$NUMENUMS Adding "$NAME"..."
+		printf "\r  $ENUM/$NUMENUMS Adding "$NAME"..."
 	else
-		if [ $i -lt 100 ]
+		if [ $ENUM -lt 100 ]
 		then
 			printf "\r                                                                      "
-			printf "\r $i/$NUMENUMS Adding "$NAME"..."
+			printf "\r $ENUM/$NUMENUMS Adding "$NAME"..."
 		else
 			printf "\r                                                                      "
-			printf "\r$i/$NUMENUMS Adding "$NAME"..."
+			printf "\r$ENUM/$NUMENUMS Adding "$NAME"..."
 		fi
 	fi
@@ -143,4 +142,21 @@
 
 done
+#MaximumNumberOfEnums{{{
+cat <<END > $ISSM_DIR/src/m/enum/MaximumNumberOfEnums.m
+function macro=MaximumNumberOfEnums()
+%$(echo "MaximumNumberOfEnums" | awk {'print toupper($1)'}) - Enum of MaximumNumberOfEnums
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=MaximumNumberOfEnums()
+
+macro=$(cat EnumDefinitions.h | grep -e "[0-9]Enum" -e "[a-zA-Z]Enum" | grep -v include \
+		| awk '{ printf "%s %s\n", NR-1, $0 }' \
+		| grep "MaximumNumberOfEnums" | awk '{print $1}');
+END
+#}}}
 
 #clean up{{{
Index: /issm/branches/trunk-jpl-damage/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 12280)
@@ -159,4 +159,5 @@
 		case PetscProfilingCurrentFlopsEnum : return "PetscProfilingCurrentFlops";
 		case PetscProfilingSolutionTimeEnum : return "PetscProfilingSolutionTime";
+		case MaxIterationConvergenceFlagEnum : return "MaxIterationConvergenceFlag";
 		case SteadystateMaxiterEnum : return "SteadystateMaxiter";
 		case SteadystateNumRequestedOutputsEnum : return "SteadystateNumRequestedOutputs";
Index: /issm/branches/trunk-jpl-damage/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 12280)
@@ -163,4 +163,5 @@
 	      else if (strcmp(name,"PetscProfilingCurrentFlops")==0) return PetscProfilingCurrentFlopsEnum;
 	      else if (strcmp(name,"PetscProfilingSolutionTime")==0) return PetscProfilingSolutionTimeEnum;
+	      else if (strcmp(name,"MaxIterationConvergenceFlag")==0) return MaxIterationConvergenceFlagEnum;
 	      else if (strcmp(name,"SteadystateMaxiter")==0) return SteadystateMaxiterEnum;
 	      else if (strcmp(name,"SteadystateNumRequestedOutputs")==0) return SteadystateNumRequestedOutputsEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"Input")==0) return InputEnum;
 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
-	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
+	      if (strcmp(name,"IntParam")==0) return IntParamEnum;
+	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
 	      else if (strcmp(name,"MacAyeal2dIceFront")==0) return MacAyeal2dIceFrontEnum;
 	      else if (strcmp(name,"MacAyeal3dIceFront")==0) return MacAyeal3dIceFrontEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
-	      else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"P0")==0) return P0Enum;
+	      if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
+	      else if (strcmp(name,"P0")==0) return P0Enum;
 	      else if (strcmp(name,"P1")==0) return P1Enum;
 	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
Index: /issm/branches/trunk-jpl-damage/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/objects/Elements/Tria.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/objects/Elements/Tria.cpp	(revision 12280)
@@ -629,5 +629,8 @@
 		basal_melting_input->GetInputValue(&basal_melting_g,gauss);
 		thickness_input->GetInputValue(&thickness_g,gauss);
-		if(basal_melting_correction_input) basal_melting_correction_input->GetInputValue(&basal_melting_correction_g,gauss);
+		if(basal_melting_correction_input)
+		 basal_melting_correction_input->GetInputValue(&basal_melting_correction_g,gauss);
+		else
+		 basal_melting_correction_g=0.;
 
 		for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))*L[i];
Index: /issm/branches/trunk-jpl-damage/src/c/objects/IoModel.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/objects/IoModel.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/objects/IoModel.cpp	(revision 12280)
@@ -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/branches/trunk-jpl-damage/src/c/objects/IoModel.h
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/objects/IoModel.h	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/objects/IoModel.h	(revision 12280)
@@ -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/branches/trunk-jpl-damage/src/c/objects/Kriging/Observation.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Observation.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Observation.cpp	(revision 12280)
@@ -15,10 +15,11 @@
 Observation::Observation(double x_in,double y_in,int xi_in,int yi_in,int index_in,double value_in){
 
-	this->x     = x_in;
-	this->y     = y_in;
-	this->xi    = xi_in;
-	this->yi    = yi_in;
-	this->index = index_in;
-	this->value = value_in;
+	this->x      = x_in;
+	this->y      = y_in;
+	this->xi     = xi_in;
+	this->yi     = yi_in;
+	this->index  = index_in;
+	this->value  = value_in;
+	this->weight = 1.;
 
 }
@@ -42,4 +43,5 @@
 	printf("   xi    : "); printbinary(this->xi); printf("\n");
 	printf("   yi    : "); printbinary(this->yi); printf("\n");
+	printf("   weight: %g\n",this->weight);
 	printf("   value : %g\n",this->value);
 }
Index: /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Observation.h
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Observation.h	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Observation.h	(revision 12280)
@@ -14,4 +14,5 @@
 		int    xi,yi;
 		int    index;
+		double weight;
 		double value;
 
Index: /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Quadtree.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Quadtree.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Quadtree.cpp	(revision 12280)
@@ -198,4 +198,56 @@
 
 }/*}}}*/
+/*FUNCTION Quadtree::AddAndAverage{{{1*/
+void Quadtree::AddAndAverage(double x,double y,double value){
+
+	QuadtreeBox **pbox = NULL;
+	QuadtreeBox  *box  = NULL;
+	int           xi,yi;
+	int           level,levelbin;
+	int           index;
+	double        length,length2;
+
+	/*Get integer coodinates*/
+	this->IntergerCoordinates(&xi,&yi,x,y);
+
+	/*Initialize levels*/
+	level    = 0;
+	levelbin = (1L<<this->MaxDepth);// = 2^30
+
+	/*Get inital box (the largest)*/
+	pbox=&root;
+
+	/*Find the smallest box where this point is located*/
+	while((box=*pbox) && (box->nbitems<0)){ 
+
+		levelbin>>=1; level+=1; 
+
+		pbox = &box->box[IJ(xi,yi,levelbin)];
+	}
+
+	/*Add obervation in this box (should be full)*/
+	if(box && box->nbitems==4){
+		index  = 0;
+		length = pow(box->obs[0]->x - x,2.) + pow(box->obs[0]->y - y,2.);
+		for(int i=1;i<4;i++){
+			length2 = pow(box->obs[i]->x - x,2.) + pow(box->obs[i]->y - y,2.);
+			if(length2<length){
+				index  = i;
+				length = length2;
+			}
+		}
+
+		/*We found the closest observation, now average observation (do not change xi and yi to avoid round off errors*/
+		box->obs[index]->x = (box->obs[index]->weight*box->obs[index]->x + x)/(box->obs[index]->weight+1);
+		box->obs[index]->y = (box->obs[index]->weight*box->obs[index]->y + y)/(box->obs[index]->weight+1);
+		box->obs[index]->xi= int((box->obs[index]->weight*double(box->obs[index]->xi) + double(xi))/(box->obs[index]->weight+1));
+		box->obs[index]->yi= int((box->obs[index]->weight*double(box->obs[index]->yi) + double(yi))/(box->obs[index]->weight+1));
+		box->obs[index]->value   = (box->obs[index]->weight*box->obs[index]->value + value)/(box->obs[index]->weight+1);
+		box->obs[index]->weight += 1;
+	}
+	else{
+		_error_("Box is not full");
+	}
+}/*}}}*/
 /*FUNCTION Quadtree::Echo{{{1*/
 void  Quadtree::Echo(void){
Index: /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Quadtree.h
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Quadtree.h	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/objects/Kriging/Quadtree.h	(revision 12280)
@@ -53,4 +53,5 @@
 		~Quadtree();
 		void         Add(Observation *observation);
+		void         AddAndAverage(double x,double y,double value);
 		void         DeepEcho(void);
 		void         Echo(void);
Index: /issm/branches/trunk-jpl-damage/src/c/objects/Numerics/ElementVector.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/objects/Numerics/ElementVector.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/objects/Numerics/ElementVector.cpp	(revision 12280)
@@ -166,4 +166,7 @@
 	double* localvalues=NULL;
 
+	/*In debugging mode, check consistency (no NaN, and values not too big)*/
+	this->CheckConsistency();
+
 	if(this->fsize){
 		/*first, retrieve values that are in the f-set from the g-set values vector: */
@@ -200,4 +203,15 @@
 	}
 
+}
+/*}}}*/
+/*FUNCTION ElementVector::CheckConsistency{{{1*/
+void ElementVector::CheckConsistency(void){
+	/*Check element matrix values, only in debugging mode*/
+#ifdef _ISSM_DEBUG_ 
+	for (int i=0;i<this->nrows;i++){
+		if (isnan(this->values[i])) _error_("NaN found in Element Vector");
+		if (fabs( this->values[i])>1.e+50) _error_("Element Vector values exceeds 1.e+50");
+	}
+#endif
 }
 /*}}}*/
Index: /issm/branches/trunk-jpl-damage/src/c/objects/Numerics/ElementVector.h
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/objects/Numerics/ElementVector.h	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/objects/Numerics/ElementVector.h	(revision 12280)
@@ -43,4 +43,5 @@
 		void InsertIntoGlobal(Vector* pf);
 		void Echo(void);
+		void CheckConsistency(void);
 		void Init(ElementVector* pe);
 		void SetValue(double scalar);
Index: /issm/branches/trunk-jpl-damage/src/c/solvers/solver_newton.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/solvers/solver_newton.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/solvers/solver_newton.cpp	(revision 12280)
@@ -67,7 +67,17 @@
 		convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters); 
 		xdelete(&Kff); xdelete(&pf);
-		if(converged==true) break;
+		if(converged==true){	
+			bool max_iteration_state=false;
+			int tempStep=1;
+			double tempTime=1.0;
+			femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
+			break;
+		}
 		if(count>=max_nonlinear_iterations){
-			_printf_(true,"   maximum number of iterations (%i) exceeded\n",max_nonlinear_iterations); 
+			_printf_(true,"   maximum number of Newton iterations (%i) exceeded\n",max_nonlinear_iterations); 
+			bool max_iteration_state=true;
+			int tempStep=1;
+			double tempTime=1.0;
+			femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
 			break;
 		}
Index: /issm/branches/trunk-jpl-damage/src/c/solvers/solver_nonlinear.cpp
===================================================================
--- /issm/branches/trunk-jpl-damage/src/c/solvers/solver_nonlinear.cpp	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/c/solvers/solver_nonlinear.cpp	(revision 12280)
@@ -85,10 +85,20 @@
 		/*Increase count: */
 		count++;
-		if(converged==true)break;
+		if(converged==true){
+			bool max_iteration_state=false;
+			int tempStep=1;
+			double tempTime=1.0;
+			femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
+			break;
+		}
 		if(count>=max_nonlinear_iterations){
-			_printf_(true,"   maximum number of iterations (%i) exceeded\n",max_nonlinear_iterations); 
+			_printf_(true,"   maximum number of nonlinear iterations (%i) exceeded\n",max_nonlinear_iterations); 
 			converged=true;
-		InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
-		InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
+			InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
+			InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);		
+			bool max_iteration_state=true;
+			int tempStep=1;
+			double tempTime=1.0;
+			femmodel->results->AddObject(new BoolExternalResult(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, tempStep, tempTime));
 			break;
 		}
Index: /issm/branches/trunk-jpl-damage/src/m/enum/MaxIterationConvergenceFlagEnum.m
===================================================================
--- /issm/branches/trunk-jpl-damage/src/m/enum/MaxIterationConvergenceFlagEnum.m	(revision 12280)
+++ /issm/branches/trunk-jpl-damage/src/m/enum/MaxIterationConvergenceFlagEnum.m	(revision 12280)
@@ -0,0 +1,11 @@
+function macro=MaxIterationConvergenceFlagEnum()
+%MAXITERATIONCONVERGENCEFLAGENUM - Enum of MaxIterationConvergenceFlag
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=MaxIterationConvergenceFlagEnum()
+
+macro=StringToEnum('MaxIterationConvergenceFlag');
Index: /issm/branches/trunk-jpl-damage/src/m/enum/MaximumNumberOfEnums.m
===================================================================
--- /issm/branches/trunk-jpl-damage/src/m/enum/MaximumNumberOfEnums.m	(revision 12280)
+++ /issm/branches/trunk-jpl-damage/src/m/enum/MaximumNumberOfEnums.m	(revision 12280)
@@ -0,0 +1,11 @@
+function macro=MaximumNumberOfEnums()
+%MAXIMUMNUMBEROFENUMS - Enum of MaximumNumberOfEnums
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=MaximumNumberOfEnums()
+
+macro=440;
Index: /issm/branches/trunk-jpl-damage/src/m/model/marshall.m
===================================================================
--- /issm/branches/trunk-jpl-damage/src/m/model/marshall.m	(revision 12279)
+++ /issm/branches/trunk-jpl-damage/src/m/model/marshall.m	(revision 12280)
@@ -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
