Index: /issm/trunk/src/c/shared/Matlab/ModuleBoot.cpp
===================================================================
--- /issm/trunk/src/c/shared/Matlab/ModuleBoot.cpp	(revision 10196)
+++ /issm/trunk/src/c/shared/Matlab/ModuleBoot.cpp	(revision 10197)
@@ -28,4 +28,5 @@
 	}
 	else if (0){
+		PetscErrorCode   ierr;
 		PetscBool flg;
 		ierr=PetscInitialized(&flg);CHKERRQ(ierr);
Index: /issm/trunk/src/c/solutions/control_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/control_core.cpp	(revision 10196)
+++ /issm/trunk/src/c/solutions/control_core.cpp	(revision 10197)
@@ -20,5 +20,5 @@
 	int     num_controls,num_responses;
 	int     nsteps;
-	double  eps_cm;
+	double  tol_cm;
 	bool    cm_gradient;
 	int     dim;
@@ -53,5 +53,5 @@
 	femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum);
 	femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
-	femmodel->parameters->FindParam(&eps_cm,InversionCostFunctionThresholdEnum);
+	femmodel->parameters->FindParam(&tol_cm,InversionCostFunctionThresholdEnum);
 	femmodel->parameters->FindParam(&cm_gradient,InversionGradientOnlyEnum);
 	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
@@ -105,5 +105,5 @@
 		InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,true);
 		
-		if(controlconvergence(J,responses,eps_cm,n)) break;
+		if(controlconvergence(J[n],tol_cm)) break;
 
 		/*Temporary saving every 5 control steps: */
Index: /issm/trunk/src/c/solutions/controlconvergence.cpp
===================================================================
--- /issm/trunk/src/c/solutions/controlconvergence.cpp	(revision 10196)
+++ /issm/trunk/src/c/solutions/controlconvergence.cpp	(revision 10197)
@@ -17,5 +17,5 @@
 #include "./solutions.h"
 
-bool controlconvergence(double* J,double* responses, double eps_cm, int n){
+bool controlconvergence(double J, double tol_cm){
 
 	int i;
@@ -23,23 +23,7 @@
 
 	/*Has convergence been reached?*/
-	if (!isnan(eps_cm)){
-		i=n-2;
-
-		//go through the previous misfits(starting from n-2)
-		while(i>=0){
-			if (responses[i]==responses[n]){
-				//convergence test only if we have the same misfits
-				if ((J[i]-J[n])/J[n] <= eps_cm){
-					//convergence if convergence criteria fullfilled
-					converged=true;
-					_printf_(VerboseConvergence(),"%s%g%s%g\n","      Convergence criterion: dJ/J = ",(J[i]-J[n])/J[n],"<",eps_cm);
-				}
-				else{
-					_printf_(VerboseConvergence(),"%s%g%s%g\n","      Convergence criterion: dJ/J = ",(J[i]-J[n])/J[n],">",eps_cm);
-				}
-				break;
-			}
-			i=i-1;
-		}
+	if (!isnan(tol_cm) && J<tol_cm){
+		converged=true;
+		_printf_(VerboseConvergence(),"      Convergence criterion reached: J = %g < %g",J,tol_cm);
 	}
 
Index: /issm/trunk/src/c/solutions/solutions.h
===================================================================
--- /issm/trunk/src/c/solutions/solutions.h	(revision 10196)
+++ /issm/trunk/src/c/solutions/solutions.h	(revision 10197)
@@ -36,5 +36,5 @@
 //convergence:
 void convergence(int* pconverged, Mat K_ff,Vec p_f,Vec u_f,Vec u_f_old,Parameters* parameters);
-bool controlconvergence(double* J, double* response, double eps_cm, int n);
+bool controlconvergence(double J,double tol_cm);
 bool steadystateconvergence(FemModel* femmodel);
 
Index: /issm/trunk/src/m/solutions/control_core.m
===================================================================
--- /issm/trunk/src/m/solutions/control_core.m	(revision 10196)
+++ /issm/trunk/src/m/solutions/control_core.m	(revision 10197)
@@ -15,5 +15,5 @@
 	maxiter=femmodel.parameters.InversionMaxiterPerStep;
 	step_threshold=femmodel.parameters.InversionStepThreshold;
-	eps_cm=femmodel.parameters.InversionCostFunctionThreshold;
+	tol_cm=femmodel.parameters.InversionCostFunctionThreshold;
 	gradient_only=femmodel.parameters.InversionGradientOnly;
 	dim=femmodel.parameters.MeshDimension;
@@ -66,5 +66,5 @@
 
 		%Has convergence been reached?
-		converged=controlconvergence(J,responses,eps_cm,n);
+		converged=controlconvergence(J(n),tol_cm);
 		if converged,
 			break;
Index: /issm/trunk/src/m/solutions/controlconvergence.m
===================================================================
--- /issm/trunk/src/m/solutions/controlconvergence.m	(revision 10196)
+++ /issm/trunk/src/m/solutions/controlconvergence.m	(revision 10197)
@@ -1,27 +1,11 @@
-function convergence=controlconvergence(J,responses,eps_cm,n)
+function convergence=controlconvergence(J,tol_cm)
 %CONTROLCONVERGENCE - determine the convergence of control_core solution
 %
 %   Usage:
-%       converged=controlconvergence(J,responses,eps_cm,n);
+%       converged=controlconvergence(J,tol_cm)
 
 	convergence=false;
-	if ~isnan(eps_cm),
-		i=n-2;
-		%go through the previous responsess(starting from n-2)
-		while (i>=1),
-			if (strcmp(responses(i),responses(n))),
-				%convergence test only if we have the same misfits
-				if ((J(i)-J(n))/J(n) <= eps_cm),
-					%convergence if convergence criteria fullfilled
-					convergence=true;
-					issmprintf(VerboseConvergence(),'\n%s%g%s%g\n','      Convergence criterion: dJ/J = ',(J(i)-J(n))/J(n),'<',eps_cm);
-				else
-					issmprintf(VerboseConvergence(),'\n%s%g%s%g\n','      Convergence criterion: dJ/J = ',(J(i)-J(n))/J(n),'>',eps_cm);
-				end
-				break;
-			end
-			i=i-1;                                                                                                                                         
-		end
+	if ~isnan(tol_cm) & J<tol_cm,
+		convergence=true;
+		issmprintf(VerboseConvergence(),'\n      Convergence criterion reached: %g < %g\n',J,tol_cm);
 	end
-
-end %end function
