Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 18675)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 18676)
@@ -12,8 +12,8 @@
 
 	/*Intermediary*/
-	int       control;
+	int       control,cost_function;
 	Element  *element = NULL;
 	Material *material = NULL;
-	int       num_control_type;
+	int       num_control_type,num_cost_functions;
 	bool      control_analysis;
 
@@ -25,11 +25,17 @@
 	if(!control_analysis) return;
 
+	iomodel->FetchData(5,InversionControlParametersEnum,InversionCostFunctionsEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+
 	/*Fetch data needed: */
-	iomodel->FetchDataToInput(elements,InversionVxObsEnum,0.);
-	iomodel->FetchDataToInput(elements,InversionVyObsEnum,0.); 
-	iomodel->FetchDataToInput(elements,InversionThicknessObsEnum,0.);
-	iomodel->FetchDataToInput(elements,InversionSurfaceObsEnum,0.);
-
-	iomodel->FetchData(5,InversionControlParametersEnum,InversionCostFunctionsEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+	iomodel->Constant(&num_cost_functions,InversionNumCostFunctionsEnum);
+	for(int i=0;i<num_cost_functions;i++){
+		cost_function= reCast<int,IssmDouble>(iomodel->Data(InversionCostFunctionsEnum)[i]);
+		if(cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(elements,InversionThicknessObsEnum,0.);
+		else if(cost_function==SurfaceAbsVelMisfitEnum || cost_function==SurfaceRelVelMisfitEnum || cost_function==SurfaceLogVelMisfitEnum || cost_function==SurfaceLogVxVyMisfitEnum || cost_function==SurfaceAverageVelMisfitEnum){
+			iomodel->FetchDataToInput(elements,InversionVxObsEnum,0.);
+			iomodel->FetchDataToInput(elements,InversionVyObsEnum,0.); 
+		}
+	}
+	//iomodel->FetchDataToInput(elements,InversionSurfaceObsEnum,0.);
 
 	for(int i=0;i<num_control_type;i++){
