Index: /issm/trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 15849)
@@ -66,5 +66,5 @@
 
 	/*Modify core inputs in objects contained in femmodel, to reflect the dakota variables inputs: */
-	InputUpdateFromDakotax(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,d_variables,d_variables_descriptors,d_numvariables);
+	InputUpdateFromDakotax(femmodel,d_variables,d_variables_descriptors,d_numvariables);
 
 	/*Determine solution sequence: */
Index: /issm/trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 15849)
@@ -22,5 +22,5 @@
 
 	/*retrieve boundary conditions from element inputs :*/
-	GetSolutionFromInputsx( &yg, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,  femmodel->parameters);
+	GetSolutionFromInputsx(&yg,femmodel);
 
 	/*update spcs using this new vector of constraints: */
Index: /issm/trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 15849)
@@ -24,5 +24,5 @@
 
 	/*Call SurfaceAreax, because some it might be needed by PVector*/
-	SurfaceAreax(NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+	SurfaceAreax(NULL,femmodel);
 
 	/*compute adjoint*/
@@ -34,5 +34,5 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointEnum);
+		InputToResultx(femmodel,AdjointEnum);
 	}
 }
Index: /issm/trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/adjointstressbalance_core.cpp	(revision 15849)
@@ -27,5 +27,5 @@
 
 	/*Call SurfaceAreax, because some it might be needed by PVector*/
-	SurfaceAreax(NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+	SurfaceAreax(NULL,femmodel);
 
 	/*Compute adjoint*/
@@ -37,9 +37,9 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointxEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointyEnum);
+		InputToResultx(femmodel,AdjointxEnum);
+		InputToResultx(femmodel,AdjointyEnum);
 		if (isFS){
-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointzEnum);
-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointpEnum);
+			InputToResultx(femmodel,AdjointzEnum);
+			InputToResultx(femmodel,AdjointpEnum);
 		}
 	}
Index: /issm/trunk-jpl/src/c/analyses/balancethickness_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 15849)
@@ -26,5 +26,5 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
+		InputToResultx(femmodel,ThicknessEnum);
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/bedslope_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 15849)
@@ -28,6 +28,6 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedSlopeXEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedSlopeYEnum);
+		InputToResultx(femmodel,BedSlopeXEnum);
+		InputToResultx(femmodel,BedSlopeYEnum);
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/control_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/control_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/control_core.cpp	(revision 15849)
@@ -94,5 +94,5 @@
 		/*Return gradient if asked: */
 		if (cm_gradient){
-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GradientEnum);
+			InputToResultx(femmodel,GradientEnum);
 			goto cleanup_and_return;
 		}
@@ -114,5 +114,5 @@
 	/*some results not computed by steadystate_core or stressbalance_core: */
 	if(!dakota_analysis){ //do not save this if we are running the control core from a qmu run!
-		for(i=0;i<num_controls;i++) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type[i]);
+		for(i=0;i<num_controls;i++) InputToResultx(femmodel,control_type[i]);
 
 		#ifdef _HAVE_ADOLC_
Index: /issm/trunk-jpl/src/c/analyses/controltao_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 15849)
@@ -85,5 +85,5 @@
 	SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X);
 	for(int i=0;i<num_controls;i++){
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_list[i]);
+		InputToResultx(femmodel,control_list[i]);
 	}
 	femmodel->results->AddObject(new GenericExternalResult<double*>(femmodel->results->Size()+1,JEnum,user.J,maxiter+3,1,1,0));
Index: /issm/trunk-jpl/src/c/analyses/enthalpy_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 15849)
@@ -27,7 +27,7 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnthalpyEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WaterfractionEnum);
+		InputToResultx(femmodel,TemperatureEnum);
+		InputToResultx(femmodel,EnthalpyEnum);
+		InputToResultx(femmodel,WaterfractionEnum);
 	}
 }
Index: /issm/trunk-jpl/src/c/analyses/gia_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/gia_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/gia_core.cpp	(revision 15849)
@@ -46,11 +46,11 @@
 	dwdtg->Assemble();
 
-	InputUpdateFromVectorx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,wg,GiaWEnum,VertexSIdEnum);
-	InputUpdateFromVectorx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,dwdtg,GiadWdtEnum,VertexSIdEnum);
+	InputUpdateFromVectorx(femmodel,wg,GiaWEnum,VertexSIdEnum);
+	InputUpdateFromVectorx(femmodel,dwdtg,GiadWdtEnum,VertexSIdEnum);
 
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GiaWEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GiadWdtEnum);
+		InputToResultx(femmodel,GiaWEnum);
+		InputToResultx(femmodel,GiadWdtEnum);
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/hydrology_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 15849)
@@ -68,7 +68,7 @@
 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
 				if(VerboseSolution()) _printf0_("   saving results \n");
-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WatercolumnEnum);
-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVxEnum);
-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVyEnum);
+				InputToResultx(femmodel,WatercolumnEnum);
+				InputToResultx(femmodel,HydrologyWaterVxEnum);
+				InputToResultx(femmodel,HydrologyWaterVyEnum);
 
 				/*unload results*/
@@ -89,9 +89,9 @@
 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
 				if(VerboseSolution()) _printf0_("   saving results \n");
-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SedimentHeadEnum);
-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SedimentHeadResidualEnum);
+				InputToResultx(femmodel,SedimentHeadEnum);
+				InputToResultx(femmodel,SedimentHeadResidualEnum);
 				if(isefficientlayer){
-					InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EplHeadEnum);
-					InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologydcMaskEplactiveEnum);
+					InputToResultx(femmodel,EplHeadEnum);
+					InputToResultx(femmodel,HydrologydcMaskEplactiveEnum);
 				}
 				/*unload results*/
Index: /issm/trunk-jpl/src/c/analyses/masstransport_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/masstransport_core.cpp	(revision 15849)
@@ -48,5 +48,5 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
+		InputToResultx(femmodel,ThicknessEnum);
 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
 	}
Index: /issm/trunk-jpl/src/c/analyses/steadystate_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15849)
@@ -53,9 +53,9 @@
 			thermal_core(femmodel);
 			femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
-			GetSolutionFromInputsx(&tg,femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+			GetSolutionFromInputsx(&tg,femmodel);
 		}
 		else{
 			enthalpy_core(femmodel);
-			GetSolutionFromInputsx(&tg,femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+			GetSolutionFromInputsx(&tg,femmodel);
 		}
 		#else
@@ -65,5 +65,5 @@
 		if(VerboseSolution()) _printf0_("   computing new velocity\n");
 		stressbalance_core(femmodel);
-		GetSolutionFromInputsx(&ug,femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+		GetSolutionFromInputsx(&ug,femmodel);
 
 		if(step>1){
@@ -84,13 +84,13 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum);
-		if(isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WaterfractionEnum);
-		if(isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnthalpyEnum);
-		if(!isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum);
+		InputToResultx(femmodel,VxEnum);
+		InputToResultx(femmodel,VyEnum);
+		InputToResultx(femmodel,VzEnum);
+		InputToResultx(femmodel,VelEnum);
+		InputToResultx(femmodel,PressureEnum);
+		InputToResultx(femmodel,TemperatureEnum);
+		if(isenthalpy)  InputToResultx(femmodel,WaterfractionEnum);
+		if(isenthalpy)  InputToResultx(femmodel,EnthalpyEnum);
+		if(!isenthalpy) InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
 	}
Index: /issm/trunk-jpl/src/c/analyses/stressbalance_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/stressbalance_core.cpp	(revision 15849)
@@ -86,9 +86,9 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum);
-		if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
+		InputToResultx(femmodel,VxEnum);
+		InputToResultx(femmodel,VyEnum);
+		InputToResultx(femmodel,VelEnum);
+		InputToResultx(femmodel,PressureEnum);
+		if(dim==3) InputToResultx(femmodel,VzEnum);
 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
 	}
Index: /issm/trunk-jpl/src/c/analyses/surfaceslope_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 15849)
@@ -28,6 +28,6 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("saving results:\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceSlopeXEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceSlopeYEnum);
+		InputToResultx(femmodel,SurfaceSlopeXEnum);
+		InputToResultx(femmodel,SurfaceSlopeYEnum);
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/thermal_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15849)
@@ -24,5 +24,5 @@
 	if(dakota_analysis && solution_type!=TransientSolutionEnum){
 		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
-		ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+		ResetConstraintsx(femmodel);
 	}
 
@@ -37,6 +37,6 @@
 	if(save_results){
 		if(VerboseSolution()) _printf0_("   saving results\n");
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum);
-		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum);
+		InputToResultx(femmodel,TemperatureEnum);
+		InputToResultx(femmodel,BasalforcingsMeltingRateEnum);
 	}
 }
Index: /issm/trunk-jpl/src/c/analyses/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15849)
@@ -79,5 +79,5 @@
 			//Reset Thermal Constraints
 			femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
-			ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+			ResetConstraintsx(femmodel);
 		}
 	}
@@ -154,17 +154,17 @@
 		if(save_results){
 			if(VerboseSolution()) _printf0_("   saving transient results\n");
-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceEnum);
-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedEnum);
-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMassBalanceEnum);
-			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,MaskElementonfloatingiceEnum);
+			InputToResultx(femmodel,SurfaceEnum);
+			InputToResultx(femmodel,BedEnum);
+			InputToResultx(femmodel,SurfaceforcingsMassBalanceEnum);
+			InputToResultx(femmodel,MaskElementonfloatingiceEnum);
 			femmodel->RequestedOutputsx(requested_outputs,numoutputs);
 
 			if(isdelta18o){
-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMonthlytemperaturesEnum);
-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsPrecipitationEnum);
-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalFrictionEnum);
+				InputToResultx(femmodel,SurfaceforcingsMonthlytemperaturesEnum);
+				InputToResultx(femmodel,SurfaceforcingsPrecipitationEnum);
+				InputToResultx(femmodel,BasalFrictionEnum);
 			}
 			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
-				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GLlevelsetEnum);
+				InputToResultx(femmodel,GLlevelsetEnum);
 			}
 
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 15849)
@@ -649,6 +649,6 @@
 
 	/*get vertex vectors for bed and thickness: */
-	GetVectorFromInputsx(&thickness,elements,nodes, vertices, loads, materials, parameters, ThicknessEnum,VertexEnum);
-	GetVectorFromInputsx(&bed      ,elements,nodes, vertices, loads, materials, parameters, BedEnum,      VertexEnum);
+	GetVectorFromInputsx(&thickness,this, ThicknessEnum,VertexEnum);
+	GetVectorFromInputsx(&bed      ,this, BedEnum,      VertexEnum);
 
 	/*Allocate vector*/
@@ -665,5 +665,5 @@
 
 	/*Update element inputs*/
-	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,vz,VzMeshEnum,VertexPIdEnum);
+	InputUpdateFromVectorx(this,vz,VzMeshEnum,VertexPIdEnum);
 
 	/*Free ressources:*/
@@ -731,5 +731,5 @@
 		case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
 		case SurfaceLogVxVyMisfitEnum:   SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
-		case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx( responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
+		case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx(responses,this,weight_index); break;
 		case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,weight_index); break;
 		case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(responses,weight_index); break;
@@ -1473,5 +1473,5 @@
 
 			/*this response was scaled. pick up the response from the inputs: */
-			GetVectorFromInputsx(&vertex_response,elements,nodes, vertices, loads, materials, parameters, StringToEnumx(root),VertexEnum);
+			GetVectorFromInputsx(&vertex_response,this, StringToEnumx(root),VertexEnum);
 
 			/*Now, average it onto the partition nodes: */
@@ -1579,5 +1579,5 @@
 
 	/*Update Mask*/
-	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,serial_mask,HydrologydcMaskEplactiveEnum,NodeSIdEnum);
+	InputUpdateFromVectorx(this,serial_mask,HydrologydcMaskEplactiveEnum,NodeSIdEnum);
 	xDelete<IssmDouble>(serial_mask);
 
@@ -1635,5 +1635,5 @@
 
 	/*Update Inputs*/
-	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,transferg,WaterTransferEnum,NodesEnum);
+	InputUpdateFromVectorx(this,transferg,WaterTransferEnum,NodesEnum);
 	delete transferg;
 }
Index: /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 15849)
@@ -8,10 +8,10 @@
 #include "../../toolkits/toolkits.h"
 
-void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters){
+void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints,FemModel* femmodel){
 
 	/*output: */
-	int converged=0;
-	int num_unstable_constraints=0;
-	int min_mechanical_constraints=0; 
+	int converged                  = 0;
+	int num_unstable_constraints   = 0;
+	int min_mechanical_constraints = 0;
 	int analysis_type;
 
@@ -20,6 +20,6 @@
 
 	/*recover parameters: */
-	parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum);
-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+	femmodel->parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum);
+	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
 
 	/*Do we have penalties linked to rifts? In this case, run our special rifts penalty 
@@ -31,11 +31,11 @@
 
 	#ifdef _HAVE_RIFTS_
-	if (RiftIsPresent(loads,analysis_type)){
-		RiftConstraintsState(&converged,&num_unstable_constraints,loads,min_mechanical_constraints,analysis_type);
+	if(RiftIsPresent(femmodel->loads,analysis_type)){
+		RiftConstraintsState(&converged,&num_unstable_constraints,femmodel->loads,min_mechanical_constraints,analysis_type);
 	}
 	#endif
 	#ifdef _HAVE_THERMAL_
-	if(ThermalIsPresent(loads,analysis_type)){
-		ThermalConstraintsState(loads,&converged,&num_unstable_constraints,analysis_type);
+	if(ThermalIsPresent(femmodel->loads,analysis_type)){
+		ThermalConstraintsState(femmodel->loads,&converged,&num_unstable_constraints,analysis_type);
 	}
 	#endif
Index: /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 15849)
@@ -9,7 +9,7 @@
 
 /* local prototypes: */
-int   ThermalIsPresent(Loads* loads,int analysis_type);
-int    RiftIsPresent(Loads* loads,int analysis_type);
-void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters); 
+int  ThermalIsPresent(Loads* loads,int analysis_type);
+int  RiftIsPresent(Loads* loads,int analysis_type);
+void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints,FemModel* femmodel);
 
 #endif  /* _CONSTRAINTSSTATEX_H */
Index: /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 15849)
@@ -7,10 +7,9 @@
 #include "../../toolkits/toolkits.h"
 
-void	GetSolutionFromInputsx( Vector<IssmDouble>** psolution, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters){
+void GetSolutionFromInputsx(Vector<IssmDouble>** psolution,FemModel* femmodel){
 
 	/*intermediary: */
-	int gsize;
-	int i;
-	Element* element=NULL;
+	int      gsize;
+	Element* element = NULL;
 
 	int configuration_type;
@@ -22,9 +21,9 @@
 
 	/*retrive parameters: */
-	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
 
 	/*Get size of vector: */
-	gsize=nodes->NumberOfDofs(configuration_type,GsetEnum);
-	if (gsize==0) _error_("Allocating a Vec of size 0 as gsize=0 for configuration: " << EnumToStringx(configuration_type));
+	gsize=femmodel->nodes->NumberOfDofs(configuration_type,GsetEnum);
+	if(gsize==0) _error_("Allocating a Vec of size 0 as gsize=0 for configuration: " << EnumToStringx(configuration_type));
 
 	/*Initialize solution: */
@@ -32,6 +31,6 @@
 
 	/*Go through elements and plug solution: */
-	for (i=0;i<elements->Size();i++){
-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(int i=0;i<femmodel->elements->Size();i++){
+		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->GetSolutionFromInputs(solution);
 	}
@@ -42,4 +41,3 @@
 	/*Assign output pointers:*/
 	*psolution=solution;
-
 }
Index: /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 15849)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void GetSolutionFromInputsx( Vector<IssmDouble>** psolution, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters);
+void GetSolutionFromInputsx(Vector<IssmDouble>** psolution,FemModel* femmodel);
 
 #endif  /* _GETSOLUTIONFROMINPUTSXX_H */
Index: /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 15849)
@@ -7,5 +7,5 @@
 #include "../../toolkits/toolkits.h"
 
-void GetVectorFromInputsx( Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, int name, int type){
+void GetVectorFromInputsx( Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type){
 
 	int i;
@@ -15,15 +15,15 @@
 
 		/*Allocate vector*/
-		vector=new Vector<IssmDouble>(vertices->NumberOfVertices());
+		vector=new Vector<IssmDouble>(femmodel->vertices->NumberOfVertices());
 
 		/*Look up in elements*/
-		for(i=0;i<elements->Size();i++){
-			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+		for(i=0;i<femmodel->elements->Size();i++){
+			Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 			element->GetVectorFromInputs(vector,name);
 		}
 
 		/*Look up in materials*/
-		for(i=0;i<materials->Size();i++){
-			Material* material=(Material*)materials->GetObjectByOffset(i);
+		for(i=0;i<femmodel->materials->Size();i++){
+			Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 			material->GetVectorFromInputs(vector,name);
 		}
@@ -39,5 +39,5 @@
 }
 
-void GetVectorFromInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, int name, int type){
+void GetVectorFromInputsx(IssmDouble** pvector,FemModel* femmodel,int name, int type){
 
 	/*output: */
@@ -47,5 +47,5 @@
 	Vector<IssmDouble>* vec_vector=NULL;
 
-	GetVectorFromInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters, name, type);
+	GetVectorFromInputsx(&vec_vector,femmodel,name,type);
 	vector=vec_vector->ToMPISerial();
 
Index: /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 15849)
@@ -8,6 +8,6 @@
 
 /* local prototypes: */
-void	GetVectorFromInputsx( Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int name,int type);
-void	GetVectorFromInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int name,int type);
+void	GetVectorFromInputsx( Vector<IssmDouble>** pvector,FemModel* femmodel,int name,int type);
+void	GetVectorFromInputsx( IssmDouble** pvector,FemModel* femmodel,int name,int type);
 
 #endif  /* _GETVECTORFROMINPUTSXX_H */
Index: /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 15849)
@@ -8,19 +8,18 @@
 #include "../../toolkits/toolkits.h"
 
-void InputToResultx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int enum_type){
+void InputToResultx(FemModel* femmodel,int enum_type){
 
 	/*intermediary:*/
-	int      step;
-	IssmDouble   time;
-	Element *element = NULL;
+	int        step;
+	IssmDouble time;
+	Element   *element = NULL;
 
 	/*Get time and step*/
-	parameters->FindParam(&step,StepEnum);
-	parameters->FindParam(&time,TimeEnum);
+	femmodel->parameters->FindParam(&step,StepEnum);
+	femmodel->parameters->FindParam(&time,TimeEnum);
 
 	/*Go through elemnets, and ask each element to transfer the enum_type input into the results dataset, with step and time information: */
-	for(int i=0;i<elements->Size();i++){
-
-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(int i=0;i<femmodel->elements->Size();i++){
+		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputToResult(enum_type,step,time);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.h	(revision 15849)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void InputToResultx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int enum_type);
+void InputToResultx(FemModel* femmodel,int enum_type);
 
 #endif  /* _INPUTTORESULTX_H */
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 15849)
@@ -7,5 +7,5 @@
 #include "../../toolkits/toolkits.h"
 
-void InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool   constant, int name){
+void InputUpdateFromConstantx(FemModel* femmodel,bool constant, int name){
 
 	int i;
@@ -13,20 +13,20 @@
 
 	/*Elements and loads drive the update: */
-	for(i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromConstant(constant,name);
 	}
 
-	for(i=0;i<loads->Size();i++){
-		Load* load=(Load*)loads->GetObjectByOffset(i);
+	for(i=0;i<femmodel->loads->Size();i++){
+		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 		load->InputUpdateFromConstant(constant,name);
 	}
 
-	for(i=0;i<materials->Size();i++){
-		Material* material=(Material*)materials->GetObjectByOffset(i);
+	for(i=0;i<femmodel->materials->Size();i++){
+		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 		material->InputUpdateFromConstant(constant,name);
 	}
 }
-void InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int    constant, int name){
+void InputUpdateFromConstantx(FemModel* femmodel,int constant, int name){
 
 	int i;
@@ -34,20 +34,20 @@
 
 	/*Elements and loads drive the update: */
-	for(i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromConstant(constant,name);
 	}
 
-	for(i=0;i<loads->Size();i++){
-		Load* load=(Load*)loads->GetObjectByOffset(i);
+	for(i=0;i<femmodel->loads->Size();i++){
+		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 		load->InputUpdateFromConstant(constant,name);
 	}
 
-	for(i=0;i<materials->Size();i++){
-		Material* material=(Material*)materials->GetObjectByOffset(i);
+	for(i=0;i<femmodel->materials->Size();i++){
+		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 		material->InputUpdateFromConstant(constant,name);
 	}
 }
-void InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble constant, int name){
+void InputUpdateFromConstantx(FemModel* femmodel,IssmDouble constant, int name){
 
 	int i;
@@ -55,16 +55,16 @@
 
 	/*Elements and loads drive the update: */
-	for(i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromConstant(constant,name);
 	}
 
-	for(i=0;i<loads->Size();i++){
-		Load* load=(Load*)loads->GetObjectByOffset(i);
+	for(i=0;i<femmodel->loads->Size();i++){
+		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 		load->InputUpdateFromConstant(constant,name);
 	}
 
-	for(i=0;i<materials->Size();i++){
-		Material* material=(Material*)materials->GetObjectByOffset(i);
+	for(i=0;i<femmodel->materials->Size();i++){
+		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 		material->InputUpdateFromConstant(constant,name);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 15849)
@@ -9,7 +9,7 @@
 
 /* local prototypes: */
-void		InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters, bool   constant, int name);
-void		InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters, int    constant, int name);
-void		InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters, IssmDouble constant, int name);
+void InputUpdateFromConstantx(FemModel* femmode,bool   constant    ,int name);
+void InputUpdateFromConstantx(FemModel* femmode,int    constant    ,int name);
+void InputUpdateFromConstantx(FemModel* femmode,IssmDouble constant,int name);
 
 #endif  /* _UPDATEINPUTSFROMCONSTANTXX_H */
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 15849)
@@ -10,5 +10,5 @@
 #include "../InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h"
 
-void  InputUpdateFromDakotax(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials*  materials,Parameters* parameters,double* variables,char* *variables_descriptors,int numvariables){
+void InputUpdateFromDakotax(FemModel* femmodel,double* variables,char* *variables_descriptors,int numvariables){
 
 	int     i,j,k,l;
@@ -27,7 +27,7 @@
 
 	/*retrieve parameters: */
-	parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
-	parameters->FindParam(&qmu_part,&dummy,QmuPartitionEnum);
-	numberofvertices=vertices->NumberOfVertices();
+	femmodel->parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
+	femmodel->parameters->FindParam(&qmu_part,&dummy,QmuPartitionEnum);
+	numberofvertices=femmodel->vertices->NumberOfVertices();
 
 	/*Go through all dakota descriptors, ex: "rho_ice","thermal_conductivity","thickness1","thickness2", etc ..., and 
@@ -54,5 +54,5 @@
 
 			/*Now, pick up the parameter corresponding to root: */
-			parameters->FindParam(&parameter,&nrows,&ncols,StringToEnumx(root));
+			femmodel->parameters->FindParam(&parameter,&nrows,&ncols,StringToEnumx(root));
 
 			/*We've got the parameter, we need to update it using qmu_part (a partitioning vector), 
@@ -83,5 +83,5 @@
 
 			/*Update inputs using the parameter matrix: */
-			InputUpdateFromMatrixDakotax( elements,nodes, vertices,loads, materials,  parameters, parameter, nrows,ncols,StringToEnumx(root), VertexEnum);
+			InputUpdateFromMatrixDakotax(femmodel, parameter, nrows,ncols,StringToEnumx(root), VertexEnum);
 
 			/*increment i to skip the distributed values just collected: */
@@ -100,5 +100,5 @@
 		else{
 			/*Ok, standard variable, just update inputs using the variable: */
-			InputUpdateFromConstantx( elements,nodes, vertices,loads, materials,  parameters, variables[i],StringToEnumx(descriptor));
+			InputUpdateFromConstantx(femmodel,variables[i],StringToEnumx(descriptor));
 		}
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h	(revision 15849)
@@ -8,5 +8,5 @@
 #include "../../classes/classes.h"
 
-void  InputUpdateFromDakotax(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials*  materials,Parameters* parameters,double* variables,char* *variables_descriptors,int numvariables);
+void  InputUpdateFromDakotax(FemModel* femmodel,double* variables,char* *variables_descriptors,int numvariables);
 
 #endif  /* _INPUTUPDATEFROMDAKOTAXX_H */
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 15849)
@@ -8,32 +8,31 @@
 #include "../InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h"
 
-void InputUpdateFromMatrixDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* matrix,int nrows,int ncols, int name, int type){
+void InputUpdateFromMatrixDakotax(FemModel* femmodel,double* matrix,int nrows,int ncols, int name, int type){
 
 	int i;
 	int numberofvertices;
 
-	numberofvertices=vertices->NumberOfVertices();
+	numberofvertices=femmodel->vertices->NumberOfVertices();
 
-	if((ncols==1) && (nrows==numberofvertices)) InputUpdateFromVectorDakotax( elements,nodes, vertices,loads, materials,  parameters,matrix, name,type);
+	if((ncols==1) && (nrows==numberofvertices)) InputUpdateFromVectorDakotax(femmodel,matrix,name,type);
 	else{
 
 		/*Update elements, nodes, loads and materials from inputs: */
-		for(i=0;i<elements->Size();i++){
-			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+		for(i=0;i<femmodel->elements->Size();i++){
+			Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 			element->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
 		}
-		for(i=0;i<nodes->Size();i++){
-			Node* node=(Node*)nodes->GetObjectByOffset(i);
+		for(i=0;i<femmodel->nodes->Size();i++){
+			Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
 			node->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
 		}
-		for(i=0;i<loads->Size();i++){
-			Load* load=(Load*)loads->GetObjectByOffset(i);
+		for(i=0;i<femmodel->loads->Size();i++){
+			Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 			load->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
 		}
-		for(i=0;i<materials->Size();i++){
-			Material* material=(Material*)materials->GetObjectByOffset(i);
+		for(i=0;i<femmodel->materials->Size();i++){
+			Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 			material->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
 		}
 	}
-
 }
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h	(revision 15849)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void InputUpdateFromMatrixDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* matrix,int nrows,int ncols, int name, int type);
+void InputUpdateFromMatrixDakotax(FemModel* femmodel,double* matrix,int nrows,int ncols, int name, int type);
 
 #endif  /* _UPDATEINPUTSFROMMATRIXDAKOTAXX_H */
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 15849)
@@ -7,27 +7,20 @@
 #include "../../toolkits/toolkits.h"
 
-void InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Vector<IssmDouble>* solution){
-
-	IssmDouble* serial_solution=NULL;
+void InputUpdateFromSolutionx(FemModel* femmodel,Vector<IssmDouble>* solution){
 
 	/*Serialize solution, so that elements can index into it on every CPU: */
-	serial_solution=solution->ToMPISerial();
+	IssmDouble* serial_solution=solution->ToMPISerial();
 
 	/*Call overloaded form of InputUpdateFromSolutionx: */
-	InputUpdateFromSolutionx( elements, nodes,  vertices,  loads,  materials,  parameters,serial_solution);
+	InputUpdateFromSolutionx(femmodel,serial_solution);
 
-	/*Free ressources:*/
+	/*cleanup and return*/
 	xDelete<IssmDouble>(serial_solution);
 }
 
-void InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* solution){
+void InputUpdateFromSolutionx(FemModel* femmodel,IssmDouble* solution){
 
-	/*Intermediary*/
-	int i;
-	Element* element=NULL;
-
-	/*Elements drive the update: */
-	for (i=0;i<elements->Size();i++){
-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(int i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromSolution(solution);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h	(revision 15849)
@@ -9,10 +9,6 @@
 
 /* local prototypes: */
-void		InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,Vector<IssmDouble>* solution);
-void        InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* solution);
-
-//with timestep
-void		InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,Vector<IssmDouble>* solution,int timestep);
-void        InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* solution, int timestep);
+void	InputUpdateFromSolutionx(FemModel* femmodel,Vector<IssmDouble>* solution);
+void  InputUpdateFromSolutionx(FemModel* femmodel,IssmDouble* solution);
 
 #endif  /* _UPDATEINPUTSFROMSOLUTIONXX_H */
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 15849)
@@ -7,11 +7,8 @@
 #include "../../toolkits/toolkits.h"
 
-void InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Vector<IssmDouble>* vector, int name, int type){
+void InputUpdateFromVectorDakotax(FemModel* femmodel,Vector<IssmDouble>* vector, int name, int type){
 
-	double* serial_vector=NULL;
-
-	serial_vector=vector->ToMPISerial();
-
-	InputUpdateFromVectorDakotax( elements,nodes, vertices, loads, materials, parameters,serial_vector,name, type);
+	IssmDouble* serial_vector=vector->ToMPISerial();
+	InputUpdateFromVectorDakotax(femmodel,serial_vector,name, type);
 
 	/*Free ressources:*/
@@ -19,46 +16,46 @@
 }
 
-void InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* vector, int name, int type){
+void InputUpdateFromVectorDakotax(FemModel* femmodel,IssmDouble* vector, int name, int type){
 
 	int i;
 
 	/*Update elements, nodes, loads and materials from inputs: */
-	for(i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromVectorDakota(vector,name,type);
 	}
-	for(i=0;i<nodes->Size();i++){
-		Node* node=(Node*)nodes->GetObjectByOffset(i);
+	for(i=0;i<femmodel->nodes->Size();i++){
+		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
 		node->InputUpdateFromVectorDakota(vector,name,type);
 	}
-	for(i=0;i<loads->Size();i++){
-		Load* load=(Load*)loads->GetObjectByOffset(i);
+	for(i=0;i<femmodel->loads->Size();i++){
+		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 		load->InputUpdateFromVectorDakota(vector,name,type);
 	}
-	for(i=0;i<materials->Size();i++){
-		Material* material=(Material*)materials->GetObjectByOffset(i);
+	for(i=0;i<femmodel->materials->Size();i++){
+		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 		material->InputUpdateFromVectorDakota(vector,name,type);
 	}
 }
 
-void InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int* vector, int name, int type){
+void InputUpdateFromVectorDakotax(FemModel* femmodel,int* vector, int name, int type){
 
 	int i;
 
 	/*Update elements, nodes, loads and materials from inputs: */
-	for(i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromVectorDakota(vector,name,type);
 	}
-	for(i=0;i<nodes->Size();i++){
-		Node* node=(Node*)nodes->GetObjectByOffset(i);
+	for(i=0;i<femmodel->nodes->Size();i++){
+		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
 		node->InputUpdateFromVectorDakota(vector,name,type);
 	}
-	for(i=0;i<loads->Size();i++){
-		Load* load=(Load*)loads->GetObjectByOffset(i);
+	for(i=0;i<femmodel->loads->Size();i++){
+		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 		load->InputUpdateFromVectorDakota(vector,name,type);
 	}
-	for(i=0;i<materials->Size();i++){
-		Material* material=(Material*)materials->GetObjectByOffset(i);
+	for(i=0;i<femmodel->materials->Size();i++){
+		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 		material->InputUpdateFromVectorDakota(vector,name,type);
 	}
@@ -70,18 +67,18 @@
 
 	/*Update elements, nodes, loads and materials from inputs: */
-	for(i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromVectorDakota(vector,name,type);
 	}
-	for(i=0;i<nodes->Size();i++){
-		Node* node=(Node*)nodes->GetObjectByOffset(i);
+	for(i=0;i<femmodel->nodes->Size();i++){
+		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
 		node->InputUpdateFromVectorDakota(vector,name,type);
 	}
-	for(i=0;i<loads->Size();i++){
-		Load* load=(Load*)loads->GetObjectByOffset(i);
+	for(i=0;i<femmodel->loads->Size();i++){
+		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 		load->InputUpdateFromVectorDakota(vector,name,type);
 	}
-	for(i=0;i<materials->Size();i++){
-		Material* material=(Material*)materials->GetObjectByOffset(i);
+	for(i=0;i<femmodel->materials->Size();i++){
+		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 		material->InputUpdateFromVectorDakota(vector,name,type);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 15849)
@@ -9,8 +9,8 @@
 
 /* local prototypes: */
-void	InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,Vector<IssmDouble>* vector, int name,int type);
-void	InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,double* vector, int name,int type);
-void	InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int* vector, int name,int type);
-void	InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,bool* vector, int name,int type);
+void	InputUpdateFromVectorDakotax(FemModel* femmodel,Vector<IssmDouble>* vector, int name,int type);
+void	InputUpdateFromVectorDakotax(FemModel* femmodel,IssmDouble* vector, int name,int type);
+void	InputUpdateFromVectorDakotax(FemModel* femmodel,int* vector, int name,int type);
+void	InputUpdateFromVectorDakotax(FemModel* femmodel,bool* vector, int name,int type);
 
 #endif  /* _UPDATEINPUTSFROMVECTORDAKOTAXX_H */
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 15849)
@@ -7,81 +7,76 @@
 #include "../../toolkits/toolkits.h"
 
-void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Vector<IssmDouble>* vector, int name, int type){
+void InputUpdateFromVectorx(FemModel* femmodel,Vector<IssmDouble>* vector, int name, int type){
 
-	IssmDouble* serial_vector=NULL;
-
-	serial_vector=vector->ToMPISerial();
-
-	InputUpdateFromVectorx( elements,nodes, vertices, loads, materials, parameters,serial_vector,name, type);
-
-	/*Free ressources:*/
+	IssmDouble* serial_vector=vector->ToMPISerial();
+	InputUpdateFromVectorx(femmodel,serial_vector,name,type);
 	xDelete<IssmDouble>(serial_vector);
 }
 
-void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* vector, int name, int type){
+void InputUpdateFromVectorx(FemModel* femmodel,IssmDouble* vector, int name, int type){
 
 	int i;
 
 	/*Update elements, nodes, loads and materials from inputs: */
-	for(i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromVector(vector,name,type);
 	}
-	for(i=0;i<nodes->Size();i++){
-		Node* node=(Node*)nodes->GetObjectByOffset(i);
+	for(i=0;i<femmodel->nodes->Size();i++){
+		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
 		node->InputUpdateFromVector(vector,name,type);
 	}
-	for(i=0;i<loads->Size();i++){
-		Load* load=(Load*)loads->GetObjectByOffset(i);
+	for(i=0;i<femmodel->loads->Size();i++){
+		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 		load->InputUpdateFromVector(vector,name,type);
 	}
-	for(i=0;i<materials->Size();i++){
-		Material* material=(Material*)materials->GetObjectByOffset(i);
+	for(i=0;i<femmodel->materials->Size();i++){
+		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 		material->InputUpdateFromVector(vector,name,type);
 	}
 }
 
-void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int* vector, int name, int type){
+void InputUpdateFromVectorx(FemModel* femmodel,int* vector, int name, int type){
 
 	int i;
 
 	/*Update elements, nodes, loads and materials from inputs: */
-	for(i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromVector(vector,name,type);
 	}
-	for(i=0;i<nodes->Size();i++){
-		Node* node=(Node*)nodes->GetObjectByOffset(i);
+	for(i=0;i<femmodel->nodes->Size();i++){
+		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
 		node->InputUpdateFromVector(vector,name,type);
 	}
-	for(i=0;i<loads->Size();i++){
-		Load* load=(Load*)loads->GetObjectByOffset(i);
+	for(i=0;i<femmodel->loads->Size();i++){
+		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 		load->InputUpdateFromVector(vector,name,type);
 	}
-	for(i=0;i<materials->Size();i++){
-		Material* material=(Material*)materials->GetObjectByOffset(i);
+	for(i=0;i<femmodel->materials->Size();i++){
+		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 		material->InputUpdateFromVector(vector,name,type);
 	}
 }
 
-void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool* vector, int name, int type){
+void InputUpdateFromVectorx(FemModel* femmodel,bool* vector, int name, int type){
 
 	int i;
 
 	/*Update elements, nodes, loads and materials from inputs: */
-	for(i=0;i<elements->Size();i++){
-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		element->InputUpdateFromVector(vector,name,type);
 	}
-	for(i=0;i<nodes->Size();i++){
-		Node* node=(Node*)nodes->GetObjectByOffset(i);
+	for(i=0;i<femmodel->nodes->Size();i++){
+		Node* node=(Node*)femmodel->nodes->GetObjectByOffset(i);
 		node->InputUpdateFromVector(vector,name,type);
 	}
-	for(i=0;i<loads->Size();i++){
-		Load* load=(Load*)loads->GetObjectByOffset(i);
+	for(i=0;i<femmodel->loads->Size();i++){
+		Load* load=(Load*)femmodel->loads->GetObjectByOffset(i);
 		load->InputUpdateFromVector(vector,name,type);
 	}
-	for(i=0;i<materials->Size();i++){
-		Material* material=(Material*)materials->GetObjectByOffset(i);
+	for(i=0;i<femmodel->materials->Size();i++){
+		Material* material=(Material*)femmodel->materials->GetObjectByOffset(i);
 		material->InputUpdateFromVector(vector,name,type);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 15849)
@@ -9,8 +9,8 @@
 
 /* local prototypes: */
-void	InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,Vector<IssmDouble>* vector, int name,int type);
-void	InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,IssmDouble* vector, int name,int type);
-void	InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int* vector, int name,int type);
-void	InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,bool* vector, int name,int type);
+void	InputUpdateFromVectorx(FemModel* femmodel,Vector<IssmDouble>* vector, int name,int type);
+void	InputUpdateFromVectorx(FemModel* femmodel,IssmDouble* vector, int name,int type);
+void	InputUpdateFromVectorx(FemModel* femmodel,int* vector, int name,int type);
+void	InputUpdateFromVectorx(FemModel* femmodel,bool* vector, int name,int type);
 
 #endif  /* _UPDATEINPUTSFROMVECTORXX_H */
Index: /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 15849)
@@ -14,8 +14,6 @@
 #include "../ConstraintsStatex/ConstraintsStatex.h"
 
-void ResetConstraintsx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters){
+void ResetConstraintsx(FemModel* femmodel){
 
-	/*output: */
-	int analysis_type;
 
 	/*Display message*/
@@ -23,18 +21,18 @@
 
 	/*recover parameters: */
-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+	int analysis_type;
+	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
 
 	/*Do we have penalties linked to rifts? In this case, run our special rifts penalty 
 	 * management routine, otherwise, skip : */
 	#ifdef _HAVE_RIFTS_
-	if (RiftIsPresent(loads,analysis_type)){
+	if(RiftIsPresent(femmodel->loads,analysis_type)){
 		_error_("rift constraints reset not supported yet!");
 	}
 	#endif
 	#ifdef _HAVE_THERMAL_
-	if(ThermalIsPresent(loads,analysis_type)){
-		ThermalConstraintsReset(loads,analysis_type);
+	if(ThermalIsPresent(femmodel->loads,analysis_type)){
+		ThermalConstraintsReset(femmodel->loads,analysis_type);
 	}
 	#endif
-
 }
Index: /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 15849)
@@ -9,6 +9,6 @@
 
 /* local prototypes: */
-void  ThermalConstraintsReset(Loads* loads, int configuration_type);
-void ResetConstraintsx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters); 
+void ThermalConstraintsReset(Loads* loads, int configuration_type);
+void ResetConstraintsx(FemModel* femmodel);
 
 #endif  /* _RESETCONSTRAINTSX_H */
Index: /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 15849)
@@ -9,17 +9,16 @@
 #include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
 
-void SurfaceAreax( IssmDouble* pS, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+void SurfaceAreax(IssmDouble* pS,FemModel* femmodel){
 
 	/*Intermediary*/
 	Element* element=NULL;
-	int i;
 
 	/*output: */
-	IssmDouble S=0;
+	IssmDouble S = 0.;
 	IssmDouble S_sum;
 
 	/*Compute gradients: */
-	for (i=0;i<elements->Size();i++){
-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(int i=0;i<femmodel->elements->Size();i++){
+		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		S+=element->SurfaceArea();
 	}
@@ -31,5 +30,5 @@
 
 	/*add surface area to element inputs:*/
-	InputUpdateFromConstantx(elements,nodes,vertices,loads,materials,parameters,S,SurfaceAreaEnum);
+	InputUpdateFromConstantx(femmodel,S,SurfaceAreaEnum);
 
 	/*Assign output pointers: */
Index: /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h	(revision 15849)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void SurfaceAreax( IssmDouble* pS, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+void SurfaceAreax(IssmDouble* pS,FemModel* femmodel);
 
 #endif  /* _SURFACEAREAX_H */
Index: /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 15849)
@@ -9,20 +9,19 @@
 #include "../SurfaceAreax/SurfaceAreax.h"
 
-void SurfaceAverageVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int weight_index){
+void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel,int weight_index){
 
 	/*Intermediary*/
-	int i;
 	Element* element=NULL;
 
 	/*output: */
-	IssmDouble J=0;
+	IssmDouble J = 0.;
 	IssmDouble J_sum;
 
 	/*Compute surface area and add to elements inputs */
-	SurfaceAreax(NULL,elements,nodes,vertices, loads,materials,parameters);
+	SurfaceAreax(NULL,femmodel);
 
 	/*Compute Misfit: */
-	for (i=0;i<elements->Size();i++){
-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+	for(int i=0;i<femmodel->elements->Size();i++){
+		element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i));
 		J+=element->SurfaceAverageVelMisfit(weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h	(revision 15848)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.h	(revision 15849)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void SurfaceAverageVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int weight_index);
+void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel,int weight_index);
 
 #endif
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp	(revision 15849)
@@ -31,5 +31,5 @@
 	Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); delete Kff; delete pf; delete df;
 	Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters,true); delete ys; //true means spc0
-	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
+	InputUpdateFromSolutionx(femmodel,ug);
 	delete ug; delete uf;
 }
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15849)
@@ -50,9 +50,9 @@
 	/*Retrieve inputs as the initial state for the non linear iteration*/
 	//femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
-	GetSolutionFromInputsx(&ug_sed, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+	GetSolutionFromInputsx(&ug_sed,femmodel);
 
 	if(isefficientlayer) {
 		femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
-		GetSolutionFromInputsx(&ug_epl, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+		GetSolutionFromInputsx(&ug_epl,femmodel);
 	}
 
@@ -70,6 +70,6 @@
 
 		femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
-		InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);
-		InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);
+		InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
+		InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
 		femmodel->UpdateConstraintsx();
 		femmodel->parameters->SetParam(HydrologySedimentEnum,HydrologyLayerEnum);
@@ -90,6 +90,6 @@
 			delete ug_sed;
 			Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
-			InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed);
-			ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+			InputUpdateFromSolutionx(femmodel,ug_sed);
+			ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
 
 			if (!sedconverged){
@@ -104,7 +104,7 @@
 			if(sedconverged){
 				femmodel->parameters->SetParam(sediment_kmax,HydrologySedimentKmaxEnum);
-				InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sedconverged,ConvergedEnum);
-				InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed);
-				InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sediment_kmax,HydrologySedimentKmaxEnum);
+				InputUpdateFromConstantx(femmodel,sedconverged,ConvergedEnum);
+				InputUpdateFromSolutionx(femmodel,ug_sed);
+				InputUpdateFromConstantx(femmodel,sediment_kmax,HydrologySedimentKmaxEnum);
 				break;
 			}
@@ -114,6 +114,6 @@
 		if(isefficientlayer){
 			femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
-			InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);
-			InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);
+			InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
+			InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
 			femmodel->HydrologyEPLupdateDomainx();
 			femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum);
@@ -134,6 +134,6 @@
 				delete ug_epl; 
 				Mergesolutionfromftogx(&ug_epl,uf_epl,ys,femmodel->nodes,femmodel->parameters); delete ys;
-				InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl);
-				ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+				InputUpdateFromSolutionx(femmodel,ug_epl);
+				ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
 				femmodel->HydrologyEPLupdateDomainx();			
 
@@ -148,7 +148,7 @@
 
 				if(eplconverged){
-					InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,eplconverged,ConvergedEnum);
-					InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sediment_kmax,MeltingOffsetEnum);
-					InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl);
+					InputUpdateFromConstantx(femmodel,eplconverged,ConvergedEnum);
+					InputUpdateFromConstantx(femmodel,sediment_kmax,MeltingOffsetEnum);
+					InputUpdateFromSolutionx(femmodel,ug_epl);
 					break;
 				}
@@ -207,6 +207,6 @@
 	}
 
-	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_sed);
-	if(isefficientlayer)InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_epl);
+	InputUpdateFromSolutionx(femmodel,ug_sed);
+	if(isefficientlayer)InputUpdateFromSolutionx(femmodel,ug_epl);
 
 	/*Free ressources: */
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_linear.cpp	(revision 15849)
@@ -35,5 +35,5 @@
 //#endif
 	Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys;
-	InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug); 
+	InputUpdateFromSolutionx(femmodel,ug); 
 	delete ug;  
 }
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15849)
@@ -42,10 +42,10 @@
 
 	/*Start non-linear iteration using input velocity: */
-	GetSolutionFromInputsx(&ug,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+	GetSolutionFromInputsx(&ug,femmodel);
 	Reducevectorgtofx(&uf,ug,femmodel->nodes,femmodel->parameters);
 
 	//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
-	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,converged,ConvergedEnum);
+	InputUpdateFromSolutionx(femmodel,ug);
 
 	for(;;){
@@ -61,5 +61,5 @@
 			Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);delete df; delete Kff; delete pf;
 			Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
-			InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
+			InputUpdateFromSolutionx(femmodel,ug);
 			delete old_ug;old_ug=ug;
 			delete old_uf;old_uf=uf;
@@ -80,5 +80,5 @@
 		uf->AXPY(duf, 1.0); delete duf;
 		Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);delete ys;
-		InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);
+		InputUpdateFromSolutionx(femmodel,ug);
 
 		/*Check convergence*/
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 15849)
@@ -47,10 +47,10 @@
 
 	/*Start non-linear iteration using input velocity: */
-	GetSolutionFromInputsx(&ug, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+	GetSolutionFromInputsx(&ug,femmodel);
 	Reducevectorgtofx(&uf, ug, femmodel->nodes,femmodel->parameters);
 
 	//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
-	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,converged,ConvergedEnum);
+	InputUpdateFromSolutionx(femmodel,ug);
 
 	for(;;){
@@ -67,8 +67,8 @@
 
 		convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters); delete Kff; delete pf; delete df;
-		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,converged,ConvergedEnum);
+		InputUpdateFromSolutionx(femmodel,ug);
 
-		ConstraintsStatex(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+		ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
 		if(VerboseConvergence()) _printf0_("   number of unstable constraints: " << num_unstable_constraints << "\n");
 
@@ -93,6 +93,6 @@
 			_printf0_("   maximum number of nonlinear iterations (" << max_nonlinear_iterations << ") exceeded\n"); 
 			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,converged,ConvergedEnum);
+			InputUpdateFromSolutionx(femmodel,ug);		
 			bool max_iteration_state=true;
 			int tempStep=1;
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15849)
@@ -44,5 +44,5 @@
 	/*First get ug_horiz:*/
 	femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum);
-	GetSolutionFromInputsx(&ug_horiz, femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters);
+	GetSolutionFromInputsx(&ug_horiz,femmodel);
 	Reducevectorgtofx(&uf_horiz, ug_horiz, femmodel->nodes,femmodel->parameters);
 
@@ -54,5 +54,5 @@
 
 		//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
-		InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_horiz);
+		InputUpdateFromSolutionx(femmodel,ug_horiz);
 		delete ug_horiz;
 
@@ -66,5 +66,5 @@
 		Solverx(&uf_horiz, Kff_horiz, pf_horiz, old_uf_horiz, df_horiz,femmodel->parameters);
 		Mergesolutionfromftogx(&ug_horiz, uf_horiz,ys,femmodel->nodes,femmodel->parameters); delete ys;
-		InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_horiz);
+		InputUpdateFromSolutionx(femmodel,ug_horiz);
 
 		convergence(&converged,Kff_horiz,pf_horiz,uf_horiz,old_uf_horiz,femmodel->parameters); delete Kff_horiz; delete pf_horiz; delete df_horiz;
@@ -82,5 +82,5 @@
 		delete uf_vert; 
 		delete ys; 
-		InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_vert);
+		InputUpdateFromSolutionx(femmodel,ug_vert);
 		delete ug_vert;
 
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 15848)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 15849)
@@ -41,6 +41,6 @@
 	converged=false;
 
-	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);
-	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);
+	InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
+	InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
 	femmodel->UpdateConstraintsx();
 
@@ -54,7 +54,7 @@
 		delete Kff;delete pf;delete tg; delete df;
 		Mergesolutionfromftogx(&tg, tf,ys,femmodel->nodes,femmodel->parameters); delete ys;
-		InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,tg);
+		InputUpdateFromSolutionx(femmodel,tg);
 
-		ConstraintsStatex(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+		ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
 
 		if (!converged){
@@ -68,11 +68,11 @@
 		count++;
 
-		InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
+		InputUpdateFromConstantx(femmodel,converged,ConvergedEnum);
 
 		if(converged)break;
 	}
 
-	InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,tg);
-	InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,melting_offset,MeltingOffsetEnum);
+	InputUpdateFromSolutionx(femmodel,tg);
+	InputUpdateFromConstantx(femmodel,melting_offset,MeltingOffsetEnum);
 
 	/*Free ressources: */
