Index: /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 17910)
+++ /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 17911)
@@ -30,5 +30,5 @@
 	/*Intermediaries*/
 	long         omode;
-	double       f; 
+	double       f,dxmin,epsrel; 
 	int          nsteps,maxiter;
 	int          intn,num_controls,solution_type;
@@ -40,4 +40,6 @@
 	femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
 	femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
+	femmodel->parameters->FindParam(&dxmin,InversionDxminEnum);
+	femmodel->parameters->FindParam(&epsrel,InversionEpsrelEnum);
 	femmodel->parameters->SetParam(false,SaveResultsEnum);
 	maxiter=nsteps*10;
@@ -58,6 +60,4 @@
 
 	/*Optimization criterions*/
-	double    dxmin        = 1.e-1;    /*Resolution for the solution x*/
-	double    epsrel       = 1.e-4;     /*Gradient stopping criterion in ]0 1[ -> |gk|/|g1| < epsrel*/
 	long      niter        = long(nsteps); /*Maximum number of iterations*/
 	long      nsim         = long(maxiter);/*Maximum number of function calls*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 17910)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 17911)
@@ -32,7 +32,4 @@
 		parameters->AddObject(iomodel->CopyConstantObject(InversionNstepsEnum));
 		parameters->AddObject(iomodel->CopyConstantObject(InversionIncompleteAdjointEnum));
-		if(inversiontype==0){
-			parameters->AddObject(iomodel->CopyConstantObject(InversionCostFunctionThresholdEnum));
-		}
 
 		/*What solution type?*/
@@ -47,20 +44,27 @@
 		iomodel->FetchData(&control_type,NULL,&num_control_type,InversionControlParametersEnum);
 		iomodel->FetchData(&cm_responses,NULL,&num_cm_responses,InversionCostFunctionsEnum);
-		if(inversiontype==0){
-			iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum);
-			iomodel->FetchData(&optscal,NULL,NULL,InversionGradientScalingEnum);
-			iomodel->FetchData(&maxiter,NULL,NULL,InversionMaxiterPerStepEnum);
-		}
+		parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control_type));
+		parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_cm_responses));
 
-		if(inversiontype!=0){
-			parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control_type));
-			parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_cm_responses));
-		}
-		else{
-			parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control_type));
-			parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_cm_responses));
-			parameters->AddObject(new DoubleMatParam(InversionGradientScalingEnum,optscal,nsteps,num_control_type));
-			parameters->AddObject(new DoubleVecParam(InversionStepThresholdEnum,cm_jump,nsteps));
-			parameters->AddObject(new DoubleVecParam(InversionMaxiterPerStepEnum,maxiter,nsteps));
+		/*Inversion type specifics*/
+		switch(inversiontype){
+			case 0:/*Brent Search*/
+				parameters->AddObject(iomodel->CopyConstantObject(InversionCostFunctionThresholdEnum));
+				iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum);
+				iomodel->FetchData(&optscal,NULL,NULL,InversionGradientScalingEnum);
+				iomodel->FetchData(&maxiter,NULL,NULL,InversionMaxiterPerStepEnum);
+				parameters->AddObject(new DoubleMatParam(InversionGradientScalingEnum,optscal,nsteps,num_control_type));
+				parameters->AddObject(new DoubleVecParam(InversionStepThresholdEnum,cm_jump,nsteps));
+				parameters->AddObject(new DoubleVecParam(InversionMaxiterPerStepEnum,maxiter,nsteps));
+				break;
+			case 1:/*TAO*/
+				break;
+			case 2:/*M1QN3*/
+				parameters->AddObject(iomodel->CopyConstantObject(InversionDxminEnum));
+				parameters->AddObject(iomodel->CopyConstantObject(InversionEpsrelEnum));
+				break;
+			default:
+				_error_("not supported");
+
 		}
 
