Index: /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp	(revision 26887)
+++ /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp	(revision 26888)
@@ -30,5 +30,4 @@
 	this->name = NULL;
 	this->weights_enum = UNDEF;
-	this->misfit=0;
 	this->timepassedflag = false;
 }
@@ -43,11 +42,8 @@
 	this->weights_enum=in_weights_enum;
 	this->timepassedflag=in_timepassedflag;
-
-	this->misfit=0;
 }
 /*}}}*/
 Cfdragcoeffabsgrad::~Cfdragcoeffabsgrad(){/*{{{*/
 	if(this->name)xDelete(this->name);
-	this->misfit=0;
 }
 /*}}}*/
@@ -55,5 +51,4 @@
 Object* Cfdragcoeffabsgrad::copy() {/*{{{*/
 	Cfdragcoeffabsgrad* mf = new Cfdragcoeffabsgrad(this->name,this->definitionenum, this->weights_enum,this->timepassedflag);
-	mf->misfit=this->misfit;
 	return (Object*) mf;
 }
@@ -115,5 +110,5 @@
 	int        domaintype,numcomponents;
 	IssmDouble Jelem=0.;
-	IssmDouble misfit,Jdet;
+	IssmDouble Jdet;
 	IssmDouble dp[2],weight;
 	IssmDouble* xyz_list = NULL;
Index: /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.h	(revision 26887)
+++ /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.h	(revision 26888)
@@ -22,6 +22,4 @@
 		bool			timepassedflag;
 
-		IssmDouble  misfit; //value carried over in time.
-
 		/*Cfdragcoeffabsgrad constructors, destructors :*/
 		Cfdragcoeffabsgrad();
Index: /issm/trunk-jpl/src/c/classes/Cflevelsetmisfit.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cflevelsetmisfit.cpp	(revision 26887)
+++ /issm/trunk-jpl/src/c/classes/Cflevelsetmisfit.cpp	(revision 26888)
@@ -32,5 +32,4 @@
 	this->observation_enum = UNDEF;
 	this->weights_enum = UNDEF;
-	this->misfit=0;
 	this->datatime=0.;
 	this->timepassedflag = false;
@@ -49,11 +48,8 @@
 	this->datatime=in_datatime;
 	this->timepassedflag=in_timepassedflag;
-
-	this->misfit=0;
 }
 /*}}}*/
 Cflevelsetmisfit::~Cflevelsetmisfit(){/*{{{*/
 	if(this->name)xDelete(this->name);
-	this->misfit=0;
 }
 /*}}}*/
@@ -61,5 +57,4 @@
 Object* Cflevelsetmisfit::copy() {/*{{{*/
 	Cflevelsetmisfit* mf = new Cflevelsetmisfit(this->name,this->definitionenum, this->model_enum,this->observation_enum,this->weights_enum,this->datatime,this->timepassedflag);
-	mf->misfit=this->misfit;
 	return (Object*) mf;
 }
@@ -95,5 +90,4 @@
 	marshallhandle->call(this->datatime);
 	marshallhandle->call(this->timepassedflag);
-	marshallhandle->call(this->misfit);
 } 
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Cflevelsetmisfit.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cflevelsetmisfit.h	(revision 26887)
+++ /issm/trunk-jpl/src/c/classes/Cflevelsetmisfit.h	(revision 26888)
@@ -25,6 +25,4 @@
 		bool			timepassedflag;
 
-		IssmDouble  misfit; //value carried over in time.
-
 		/*Cflevelsetmisfit constructors, destructors :*/
 		Cflevelsetmisfit();
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(revision 26887)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(revision 26888)
@@ -29,5 +29,4 @@
 	this->definitionenum = -1;
 	this->name = NULL;
-	this->misfit=0;
 	this->datatime=0.;
 	this->timepassedflag = false;
@@ -45,10 +44,8 @@
 	this->timepassedflag=in_timepassedflag;
 
-	this->misfit=0;
 }
 /*}}}*/
 Cfsurfacelogvel::~Cfsurfacelogvel(){/*{{{*/
 	if(this->name)xDelete(this->name);
-	this->misfit=0;
 }
 /*}}}*/
@@ -56,5 +53,4 @@
 Object* Cfsurfacelogvel::copy() {/*{{{*/
 	Cfsurfacelogvel* mf = new Cfsurfacelogvel(this->name,this->definitionenum,this->datatime,this->timepassedflag);
-	mf->misfit=this->misfit;
 	return (Object*) mf;
 }
@@ -82,5 +78,4 @@
 	marshallhandle->call(this->datatime);
 	marshallhandle->call(this->timepassedflag);
-	marshallhandle->call(this->misfit);
 } 
 /*}}}*/
@@ -107,7 +102,9 @@
 	femmodel->parameters->FindParam(&time,TimeEnum);
 
-	IssmDouble J=0.;
-	IssmDouble J_sum=0.;
-	if(this->datatime<=time && !timepassedflag){
+	if(this->datatime<=time && !this->timepassedflag){
+
+		IssmDouble J=0.;
+		IssmDouble J_sum=0.;
+
 		for(Object* & object : femmodel->elements->objects){
 			Element* element=xDynamicCast<Element*>(object);
@@ -120,6 +117,9 @@
 
 		this->timepassedflag = true;
-	}
-	return J;
+		return J_sum;
+	}
+	else{
+		return 0.;
+	}
 }/*}}}*/
 IssmDouble Cfsurfacelogvel::Cfsurfacelogvel_Calculation(Element* element, int definitionenum){/*{{{*/
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.h	(revision 26887)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.h	(revision 26888)
@@ -22,6 +22,4 @@
 		bool			timepassedflag;
 
-		IssmDouble  misfit; //value carried over in time.
-
 		/*Cfsurfacelogvel constructors, destructors :*/
 		Cfsurfacelogvel();
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 26887)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 26888)
@@ -6,5 +6,5 @@
 /*{{{*/
 #ifdef HAVE_CONFIG_H
-   #include <config.h>
+#include <config.h>
 #else
 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
@@ -27,12 +27,11 @@
 Cfsurfacesquare::Cfsurfacesquare(){/*{{{*/
 
-	this->definitionenum = -1;
-	this->name = NULL;
-	this->model_enum = UNDEF;
+	this->definitionenum   = -1;
+	this->name             = NULL;
+	this->model_enum       = UNDEF;
 	this->observation_enum = UNDEF;
-	this->weights_enum = UNDEF;
-	this->misfit=0;
-	this->datatime=0.;
-	this->timepassedflag = false;
+	this->weights_enum     = UNDEF;
+	this->datatime         = 0.;
+	this->timepassedflag   = false;
 }
 /*}}}*/
@@ -49,17 +48,14 @@
 	this->datatime=in_datatime;
 	this->timepassedflag=in_timepassedflag;
-
-	this->misfit=0;
 }
 /*}}}*/
 Cfsurfacesquare::~Cfsurfacesquare(){/*{{{*/
 	if(this->name)xDelete(this->name);
-	this->misfit=0;
-}
-/*}}}*/
+}
+/*}}}*/
+
 /*Object virtual function resolutoin: */
 Object* Cfsurfacesquare::copy() {/*{{{*/
 	Cfsurfacesquare* mf = new Cfsurfacesquare(this->name,this->definitionenum, this->model_enum,this->observation_enum,this->weights_enum,this->datatime,this->timepassedflag);
-	mf->misfit=this->misfit;
 	return (Object*) mf;
 }
@@ -95,5 +91,4 @@
 	marshallhandle->call(this->datatime);
 	marshallhandle->call(this->timepassedflag);
-	marshallhandle->call(this->misfit);
 } 
 /*}}}*/
@@ -102,4 +97,5 @@
 }
 /*}}}*/
+
 /*Definition virtual function resolutoin: */
 int Cfsurfacesquare::DefinitionEnum(){/*{{{*/
@@ -115,29 +111,31 @@
 /*}}}*/
 IssmDouble Cfsurfacesquare::Response(FemModel* femmodel){/*{{{*/
-	 /*diverse: */
-	 IssmDouble time;
-
-	 /*recover time parameters: */
-	 femmodel->parameters->FindParam(&time,TimeEnum);
-
-	 IssmDouble J=0.;
-	 IssmDouble J_sum=0.;
-
-	 if(datatime<=time && !timepassedflag){
-		 for(Object* & object : femmodel->elements->objects){
-			 Element* element=xDynamicCast<Element*>(object);
-			 J+=this->Cfsurfacesquare_Calculation(element,model_enum,observation_enum,weights_enum);
-		 }
-
-		 ISSM_MPI_Allreduce ( (void*)&J,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
-		 ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
-		 J=J_sum;
-
-		 timepassedflag = true;
-		 return J;
-	 }
-	 else return J;
- }
-	/*}}}*/
+
+	/*recover time parameters: */
+	IssmDouble time;
+	femmodel->parameters->FindParam(&time,TimeEnum);
+
+	/*Do the calculation only if this is the first time we are passed datatime*/
+	if(this->datatime<=time && !this->timepassedflag){
+
+		IssmDouble J=0.;
+		IssmDouble J_sum=0.;
+
+		for(Object* & object : femmodel->elements->objects){
+			Element* element=xDynamicCast<Element*>(object);
+			J+=this->Cfsurfacesquare_Calculation(element,model_enum,observation_enum,weights_enum);
+		}
+
+		ISSM_MPI_Allreduce ( (void*)&J,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+		ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+
+		this->timepassedflag = true;
+		return J_sum;
+	}
+	else{
+		return 0.;
+	}
+}
+/*}}}*/
 IssmDouble Cfsurfacesquare::Cfsurfacesquare_Calculation(Element* element, int model_enum, int observation_enum, int weights_enum){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.h	(revision 26887)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.h	(revision 26888)
@@ -26,6 +26,4 @@
 		bool			timepassedflag;
 
-		IssmDouble  misfit; //value carried over in time.
-
 		/*Cfsurfacesquare constructors, destructors :*/
 		Cfsurfacesquare();
