Index: /issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3731)
+++ /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3732)
@@ -1365,49 +1365,38 @@
 }
 /*}}}*/
+/*FUNCTION DataSet::UpdateInputsFromConstant{{{1*/
+void  DataSet::UpdateInputsFromConstant(double constant, int name){
+
+	vector<Object*>::iterator object;
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		(*object)->UpdateInputsFromConstant(constant,name);
+	}
+}
+/*}}}*/
+/*FUNCTION DataSet::UpdateInputsFromConstant{{{1*/
+void  DataSet::UpdateInputsFromConstant(int constant, int name){
+
+	vector<Object*>::iterator object;
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		(*object)->UpdateInputsFromConstant(constant,name);
+	}
+}
+/*}}}*/
+/*FUNCTION DataSet::UpdateInputsFromConstant{{{1*/
+void  DataSet::UpdateInputsFromConstant(bool constant, int name){
+
+	vector<Object*>::iterator object;
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+		(*object)->UpdateInputsFromConstant(constant,name);
+	}
+}
+/*}}}*/
 /*FUNCTION DataSet::UpdateInputsFromVector{{{1*/
 void  DataSet::UpdateInputsFromVector(double* vec, int name, int type){
 
 	vector<Object*>::iterator object;
-	
-	Element* element=NULL;
-	Node* node=NULL;
-	Vertex* vertex=NULL;
-	Load* load=NULL;
-	Material* material=NULL;
-	Param* param=NULL;
-
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-
-		if(EnumIsElement((*object)->Enum())){
-
-			element=(Element*)(*object);
-			element->UpdateInputsFromVector(vec,name,type);
-		}
-		else if(((*object)->Enum()==NodeEnum)){
-
-			node=(Node*)(*object);
-			node->UpdateInputsFromVector(vec,name,type);
-		}
-		else if(((*object)->Enum()==VertexEnum)){
-
-			vertex=(Vertex*)(*object);
-			vertex->UpdateInputsFromVector(vec,name,type);
-		}
-		else if(EnumIsLoad((*object)->Enum())){
-
-			load=(Load*)(*object);
-			load->UpdateInputsFromVector(vec,name,type);
-		}
-		else if(EnumIsMaterial((*object)->Enum())){
-
-			material=(Material*)(*object);
-			material->UpdateInputsFromVector(vec,name,type);
-		}
-		else if(((*object)->Enum()==ParamEnum)){
-
-			param=(Param*)(*object);
-			param->UpdateInputsFromVector(vec,name,type);
-		}
-		else ISSMERROR("%s%i%s"," object with id: ",(*object)->Id()," is not an element, in a function that deals only with elements!");
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		(*object)->UpdateInputsFromVector(vec,name,type);
 	}
 }
Index: /issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.h	(revision 3731)
+++ /issm/trunk/src/c/DataSet/DataSet.h	(revision 3732)
@@ -71,4 +71,7 @@
 		void  CreateKMatrix(Mat Kgg, int analysis_type,int sub_analysis_type);
 		void  CreatePVector(Vec pg, int analysis_type,int sub_analysis_type);
+		void  UpdateInputsFromConstant(double constant, int name);
+		void  UpdateInputsFromConstant(int constant, int name);
+		void  UpdateInputsFromConstant(bool constant, int name);
 		void  UpdateInputsFromVector(double* vector,int name, int type);
 		void  UpdateInputsFromSolution(double* solution,int analysis_type,int sub_analysis_type);
@@ -137,4 +140,6 @@
 		void GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum);
 		void GetStrainRateStokes(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int yenum);
+
+		void ChangeEnum(int enumtype,int new_enumtype);
 		/*}}}*/
 
@@ -154,6 +159,7 @@
 		/*}}}*/
 		/*numerics: {{{1*/
+		int   FindParam(bool* pinteger,int enum_type);
+		int   FindParam(int* pinteger,int enum_type);
 		int   FindParam(double* pscalar, int enum_type);
-		int   FindParam(int* pinteger,int enum_type);
 		int   FindParam(char** pstring,int enum_type);
 		int   FindParam(char*** pstringarray,int* pM,int enum_type);
Index: /issm/trunk/src/c/DataSet/Inputs.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3731)
+++ /issm/trunk/src/c/DataSet/Inputs.cpp	(revision 3732)
@@ -23,13 +23,12 @@
 using namespace std;
 /*}}}*/
-/*Inputs: {{{1*/
 
 /*Object constructors and destructor*/
-/*FUNCTION Inputs::Inputs(){{{2*/
+/*FUNCTION Inputs::Inputs(){{{1*/
 Inputs::Inputs(){
 	return;
 }
 /*}}}*/
-/*FUNCTION Inputs::Inputs(int in_enum){{{2*/
+/*FUNCTION Inputs::Inputs(int in_enum){{{1*/
 Inputs::Inputs(int in_enum): DataSet(in_enum) {
 	//do nothing;
@@ -37,5 +36,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::~Inputs(){{{2*/
+/*FUNCTION Inputs::~Inputs(){{{1*/
 Inputs::~Inputs(){
 	return;
@@ -44,5 +43,5 @@
 
 /*Object management*/
-/*FUNCTION Inputs::GetParameterValue(double* pvalue,double* gauss,int enum_type){{{2*/
+/*FUNCTION Inputs::GetParameterValue(double* pvalue,double* gauss,int enum_type){{{1*/
 void Inputs::GetParameterValue(double* pvalue,double* gauss, int enum_type){
 
@@ -68,5 +67,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetParameterValue(double* pvalue,double* gauss,int enum_type,double defaultvalue){{{2*/
+/*FUNCTION Inputs::GetParameterValue(double* pvalue,double* gauss,int enum_type,double defaultvalue){{{1*/
 void Inputs::GetParameterValue(double* pvalue,double* gauss, int enum_type,double defaultvalue){
 
@@ -90,5 +89,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type){{{2*/
+/*FUNCTION Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type){{{1*/
 void Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type){
 
@@ -114,5 +113,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetParameterValue(double* pvalue, Node* node, int enum_type){{{2*/
+/*FUNCTION Inputs::GetParameterValue(double* pvalue, Node* node, int enum_type){{{1*/
 void Inputs::GetParameterValue(double* pvalue,Node* node,int enum_type){
 
@@ -139,5 +138,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetParameterValue(double* pvalue, Node* node1, Node* node2,int enum_type){{{2*/
+/*FUNCTION Inputs::GetParameterValue(double* pvalue, Node* node1, Node* node2,int enum_type){{{1*/
 void Inputs::GetParameterValue(double* pvalue,Node* node1, Node* node2,double gauss_coord,int enum_type){
 
@@ -164,5 +163,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type,double* defaultvalues){{{2*/
+/*FUNCTION Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type,double* defaultvalues){{{1*/
 void Inputs::GetParameterValues(double* values,double* gauss_pointers, int numgauss,int enum_type,double* defaultvalues){
 
@@ -188,5 +187,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetParameterValue(bool* pvalue,int enum-type){{{2*/
+/*FUNCTION Inputs::GetParameterValue(bool* pvalue,int enum-type){{{1*/
 void Inputs::GetParameterValue(bool* pvalue,int enum_type){
 
@@ -212,5 +211,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetParameterValue(int* pvalue,int enum-type){{{2*/
+/*FUNCTION Inputs::GetParameterValue(int* pvalue,int enum-type){{{1*/
 void Inputs::GetParameterValue(int* pvalue,int enum_type){
 
@@ -236,5 +235,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetParameterValue(double* pvalue,int enum-type){{{2*/
+/*FUNCTION Inputs::GetParameterValue(double* pvalue,int enum-type){{{1*/
 void Inputs::GetParameterValue(double* pvalue,int enum_type){
 
@@ -260,5 +259,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss,int enum_type){{{2*/
+/*FUNCTION Inputs::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss,int enum_type){{{1*/
 void Inputs::GetParameterDerivativeValue(double* derivativevalues, double* xyz_list, double* gauss,int enum_type){
 
@@ -283,5 +282,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum){{{2*/
+/*FUNCTION Inputs::GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum){{{1*/
 void Inputs::GetStrainRate(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum){
 
@@ -312,5 +311,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::GetStrainRateStokes(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int zenum){{{2*/
+/*FUNCTION Inputs::GetStrainRateStokes(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int zenum){{{1*/
 void Inputs::GetStrainRateStokes(double* epsilon,double* xyz_list, double* gauss, int xenum, int yenum,int zenum){
 
@@ -347,5 +346,5 @@
 }
 /*}}}*/
-/*FUNCTION Inputs::AddInput{{{2*/
+/*FUNCTION Inputs::AddInput{{{1*/
 int  Inputs::AddInput(Input* in_input){
 
@@ -368,7 +367,21 @@
 }
 /*}}}*/
-
-/*Object functions*/
-
-
-/*}}}*/
+/*FUNCTION Inputs::ChangeEnum{{{1*/
+void  Inputs::ChangeEnum(int enumtype,int newenumtype){
+
+	/*Go through dataset of inputs and look for input with 
+	 * same enum as input enum, once found, just change its name */
+	vector<Object*>::iterator object;
+	Input* input=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		input=(Input*)(*object); 
+
+		if (input->EnumType()==enumtype){
+			input->ChangeEnum(newenumtype);
+			break;
+		}
+	}
+}
+/*}}}*/
Index: /issm/trunk/src/c/DataSet/Parameters.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/Parameters.cpp	(revision 3731)
+++ /issm/trunk/src/c/DataSet/Parameters.cpp	(revision 3732)
@@ -45,4 +45,66 @@
 
 /*Object management*/
+/*FUNCTION Parameters::FindParam(bool* pbool,int enum_type){{{2*/
+int   Parameters::FindParam(bool* pbool,int enum_type){
+	
+	
+	/*Go through a dataset, and find a Param* object 
+	 *which parameter name is "name" : */
+	
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	int found=0;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Find param type objects: */
+		if((*object)->Enum()==ParamEnum){
+
+			/*Ok, this object is a parameter, recover it and ask which name it has: */
+			param=(Param*)(*object);
+
+			if(param->EnumType()==enum_type){
+				/*Ok, this is the one! Recover the value of this parameter: */
+				param->GetParameterValue(pbool);
+				found=1;
+				break;
+			}
+		}
+	}
+	return found;
+}
+/*}}}*/
+/*FUNCTION Parameters::FindParam(int* pinteger,int enum_type){{{2*/
+int   Parameters::FindParam(int* pinteger,int enum_type){
+	
+	
+	/*Go through a dataset, and find a Param* object 
+	 *which parameter name is "name" : */
+	
+	vector<Object*>::iterator object;
+	Param* param=NULL;
+
+	int found=0;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		/*Find param type objects: */
+		if((*object)->Enum()==ParamEnum){
+
+			/*Ok, this object is a parameter, recover it and ask which name it has: */
+			param=(Param*)(*object);
+
+			if(param->EnumType()==enum_type){
+				/*Ok, this is the one! Recover the value of this parameter: */
+				param->GetParameterValue(pinteger);
+				found=1;
+				break;
+			}
+		}
+	}
+	return found;
+}
+/*}}}*/
 /*FUNCTION Parameters::FindParam(double* pscalar, int enum_type){{{2*/
 int   Parameters::FindParam(double* pscalar, int enum_type){
@@ -75,35 +137,4 @@
 }
 /*}}}*/
-/*FUNCTION Parameters::FindParam(int* pinteger,int enum_type){{{2*/
-int   Parameters::FindParam(int* pinteger,int enum_type){
-	
-	
-	/*Go through a dataset, and find a Param* object 
-	 *which parameter name is "name" : */
-	
-	vector<Object*>::iterator object;
-	Param* param=NULL;
-
-	int found=0;
-
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-
-		/*Find param type objects: */
-		if((*object)->Enum()==ParamEnum){
-
-			/*Ok, this object is a parameter, recover it and ask which name it has: */
-			param=(Param*)(*object);
-
-			if(param->EnumType()==enum_type){
-				/*Ok, this is the one! Recover the value of this parameter: */
-				param->GetParameterValue(pinteger);
-				found=1;
-				break;
-			}
-		}
-	}
-	return found;
-}
-/*}}}*/
 /*FUNCTION Parameters::FindParam(char** pstring,int enum_type){{{2*/
 int   Parameters::FindParam(char** pstring,int enum_type){
Index: /issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 3731)
+++ /issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 3732)
@@ -24,10 +24,13 @@
 	parameters->AddObject(new   BoolParam(ControlAnalysisEnum,iomodel->control_analysis));
 	if(iomodel->control_analysis){
-		parameters->AddObject(new   StringParam(ControlTypeEnum,iomodel->control_type));
 
-		if (strcmp(iomodel->control_type,"drag")==0)
-		 parameters->AddObject(new BoolParam(ExtrudeParamEnum,false));
-		else  if (strcmp(iomodel->control_type,"B")==0)
-		 parameters->AddObject(new BoolParam(ExtrudeParamEnum,true));
+		if (strcmp(iomodel->control_type,"drag")==0){
+			parameters->AddObject(new BoolParam(ExtrudeParamEnum,false));
+			parameters->AddObject(new IntParam(ControlTypeEnum,DragCoefficientEnum));
+		}
+		else  if (strcmp(iomodel->control_type,"B")==0){
+			parameters->AddObject(new BoolParam(ExtrudeParamEnum,true));
+			parameters->AddObject(new IntParam(ControlTypeEnum,RheologyBEnum));
+		}
 		else
 		 ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
Index: /issm/trunk/src/c/Qmux/DakotaResponses.cpp
===================================================================
--- /issm/trunk/src/c/Qmux/DakotaResponses.cpp	(revision 3731)
+++ /issm/trunk/src/c/Qmux/DakotaResponses.cpp	(revision 3732)
@@ -252,5 +252,5 @@
 
 			/*Recover some parameters: */
-			femmodel->parameters->FindParam(&numberofdofspernode,NumberOfDofsPernodeEnum);
+			femmodel->parameters->FindParam(&numberofdofspernode,NumberOfDofsPerNodeEnum);
 			femmodel->parameters->FindParam(&numberofnodes,NumberOfNodesEnum);
 			femmodel->parameters->FindParam(&fit,NULL,NULL,FitEnum);
@@ -267,5 +267,5 @@
 			femmodel->elements->UpdateInputsFromVector(vy,VyEnum,VertexEnum);
 			femmodel->elements->UpdateInputsFromVector(vz,VzEnum,VertexEnum);
-			femmodel->elements->UpdateInputsFromVector(fit[0],FitEnum,ConstantEnum);
+			femmodel->elements->UpdateInputsFromVector(&fit[0],FitEnum,ConstantEnum);
 
 			/*Compute misfit: */
@@ -317,9 +317,5 @@
 
 			/*retrieve qmu_mass_flux_segments: */
-			param=(Param*)femmodel->parameters->FindParamObject(QmuMassFluxSegmentsEnum);
-			if(!param)ISSMERROR(" could not find qmu_mass_flux_segments to compute mass_flux");
-			
-			param->GetParameterValue(&segments);
-			num_segments=param->GetM();
+			femmodel->parameters->FindParam(&segments,&num_segments,QmuMassFluxSegmentsEnum);
 
 			/*call mass flux module: */
Index: /issm/trunk/src/c/Qmux/SpawnCoreParallel.cpp
===================================================================
--- /issm/trunk/src/c/Qmux/SpawnCoreParallel.cpp	(revision 3731)
+++ /issm/trunk/src/c/Qmux/SpawnCoreParallel.cpp	(revision 3732)
@@ -43,5 +43,5 @@
 
 	char** responses_descriptors=NULL;
-	Param* param=NULL;
+	int    num_responses_descriptors;
 	char*  string=NULL;
 	int    string_length;
@@ -49,4 +49,5 @@
 	int     qmu_npart;
 	int     verbose=0;
+	int     dummy;
 
 	extern int my_rank;
@@ -60,12 +61,9 @@
 		
 	/*First off, recover the response descriptors for the response functions: */
-	param=(Param*)model->GetFormulation(DiagnosticAnalysisEnum,HorizAnalysisEnum)->parameters->FindParamObject(ResponseDescriptorsEnum);
-	if(!param)ISSMERROR(" could not find response descriptors!");
-
-	param->GetParameterValue(&responses_descriptors);
+	model->GetFormulation(DiagnosticAnalysisEnum,HorizAnalysisEnum)->parameters->FindParam(&responses_descriptors,&num_responses_descriptors,ResponseDescriptorsEnum);
 
 	/*Recover partitioning for dakota: */
-	model->FindParam(&qmu_npart,QmuNpartEnum);
-	model->FindParam(&qmu_part,NULL,NULL,QmuPartEnum);
+	model->FindParam(&qmu_npart,QmuNPartEnum);
+	model->FindParam(&qmu_part,&dummy,QmuPartEnum);
 
 	/*broadcast variables: only cpu 0 has correct values*/
Index: /issm/trunk/src/c/objects/Constraints/Rgb.h
===================================================================
--- /issm/trunk/src/c/objects/Constraints/Rgb.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Constraints/Rgb.h	(revision 3732)
@@ -35,4 +35,8 @@
 		int    MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Constraints/Spc.h
===================================================================
--- /issm/trunk/src/c/objects/Constraints/Spc.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Constraints/Spc.h	(revision 3732)
@@ -40,4 +40,8 @@
 		Object* copy();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/DofVec.h
===================================================================
--- /issm/trunk/src/c/objects/DofVec.h	(revision 3731)
+++ /issm/trunk/src/c/objects/DofVec.h	(revision 3732)
@@ -48,4 +48,7 @@
 		int   Size();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 		Object* copy();
Index: /issm/trunk/src/c/objects/Elements/Beam.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Elements/Beam.cpp	(revision 3732)
@@ -124,15 +124,15 @@
 		nodeinputs[0]=iomodel->vx_obs[index];
 		nodeinputs[1]=iomodel->vx_obs[(int)(iomodel->uppernodes[index]-1)];
-		this->inputs->AddInput(new BeamVertexInput(VxEnum,nodeinputs));
+		this->inputs->AddInput(new BeamVertexInput(VxObsEnum,nodeinputs));
 	}
 	if (iomodel->vy_obs) {
 		nodeinputs[0]=iomodel->vy_obs[index];
 		nodeinputs[1]=iomodel->vy_obs[(int)(iomodel->uppernodes[index]-1)];
-		this->inputs->AddInput(new BeamVertexInput(VyEnum,nodeinputs));
+		this->inputs->AddInput(new BeamVertexInput(VyObsEnum,nodeinputs));
 	}
 	if (iomodel->vz_obs) {
 		nodeinputs[0]=iomodel->vz_obs[index];
 		nodeinputs[1]=iomodel->vz_obs[(int)(iomodel->uppernodes[index]-1)];
-		this->inputs->AddInput(new BeamVertexInput(VzEnum,nodeinputs));
+		this->inputs->AddInput(new BeamVertexInput(VzObsEnum,nodeinputs));
 	}
 	if (iomodel->weights) {
@@ -142,4 +142,24 @@
 	}	
 	if (iomodel->gridonbed) this->inputs->AddInput(new BoolInput(ElementOnBedEnum,(IssmBool)iomodel->gridonbed[index]));
+
+	/*default vx,vy and vz: */
+	if (!iomodel->vx && iomodel->vx_obs) {
+		nodeinputs[0]=iomodel->vx_obs[index];
+		nodeinputs[1]=iomodel->vx_obs[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(VxEnum,nodeinputs));
+		this->inputs->AddInput(new BeamVertexInput(VxOldEnum,nodeinputs));
+	}
+	if (!iomodel->vy && iomodel->vy_obs) {
+		nodeinputs[0]=iomodel->vy_obs[index];
+		nodeinputs[1]=iomodel->vy_obs[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(VyEnum,nodeinputs));
+		this->inputs->AddInput(new BeamVertexInput(VyOldEnum,nodeinputs));
+	}
+	if (!iomodel->vz && iomodel->vz_obs) {
+		nodeinputs[0]=iomodel->vz_obs[index];
+		nodeinputs[1]=iomodel->vz_obs[(int)(iomodel->uppernodes[index]-1)];
+		this->inputs->AddInput(new BeamVertexInput(VzEnum,nodeinputs));
+		this->inputs->AddInput(new BeamVertexInput(VzOldEnum,nodeinputs));
+	}
 
 	//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
Index: /issm/trunk/src/c/objects/Elements/Beam.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Beam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Elements/Beam.h	(revision 3732)
@@ -54,4 +54,8 @@
 		void  SetClone(int* minranks);
 		void    UpdateInputsFromVector(double* vector, int name, int type);
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
 
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 3732)
@@ -159,4 +159,21 @@
 		for(i=0;i<6;i++)nodeinputs[i]=iomodel->weights[penta_node_ids[i]-1];
 		this->inputs->AddInput(new PentaVertexInput(WeightsEnum,nodeinputs));
+	}
+
+	/*default vx,vy and vz: */
+	if (!iomodel->vx && iomodel->vx_obs) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs));
+		this->inputs->AddInput(new PentaVertexInput(VxOldEnum,nodeinputs));
+	}
+	if (!iomodel->vy && iomodel->vy_obs) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs));
+		this->inputs->AddInput(new PentaVertexInput(VyOldEnum,nodeinputs));
+	}
+	if (!iomodel->vz && iomodel->vz_obs) {
+		for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_node_ids[i]-1];
+		this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs));
+		this->inputs->AddInput(new PentaVertexInput(VzOldEnum,nodeinputs));
 	}
 
@@ -447,4 +464,9 @@
 		vy[i]=values[i*numdofpervertex+1];
 	}
+
+	/*Now, we have to move the previous Vx and Vy inputs  to old 
+	 * status, otherwise, we'll wipe them off: */
+	this->inputs->ChangeEnum(VxEnum,VxOldEnum);
+	this->inputs->ChangeEnum(VyEnum,VyOldEnum);
 
 	/*Add vx and vy as inputs to the tria element: */
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 3732)
@@ -141,4 +141,8 @@
 		void  UpdateInputsFromSolutionBalancedvelocities( double* solution,int analysis_type,int sub_analysis_type);
 		void  UpdateInputsFromVector(double* vector, int name, int type);
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Elements/Sing.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Elements/Sing.cpp	(revision 3732)
@@ -90,8 +90,21 @@
 	if (iomodel->vy) this->inputs->AddInput(new SingVertexInput(VyEnum,iomodel->vy[i]));
 	if (iomodel->vz) this->inputs->AddInput(new SingVertexInput(VzEnum,iomodel->vz[i]));
-	if (iomodel->vx_obs) this->inputs->AddInput(new SingVertexInput(VxEnum,iomodel->vx_obs[i]));
-	if (iomodel->vy_obs) this->inputs->AddInput(new SingVertexInput(VyEnum,iomodel->vy_obs[i]));
-	if (iomodel->vz_obs) this->inputs->AddInput(new SingVertexInput(VzEnum,iomodel->vz_obs[i]));
+	if (iomodel->vx_obs) this->inputs->AddInput(new SingVertexInput(VxObsEnum,iomodel->vx_obs[i]));
+	if (iomodel->vy_obs) this->inputs->AddInput(new SingVertexInput(VyObsEnum,iomodel->vy_obs[i]));
+	if (iomodel->vz_obs) this->inputs->AddInput(new SingVertexInput(VzObsEnum,iomodel->vz_obs[i]));
 	if (iomodel->weights) this->inputs->AddInput(new SingVertexInput(WeightsEnum,iomodel->weights[i]));
+	if (!iomodel->vx && iomodel->vx_obs){
+		this->inputs->AddInput(new SingVertexInput(VxEnum,iomodel->vx_obs[i]));
+		this->inputs->AddInput(new SingVertexInput(VxOldEnum,iomodel->vx_obs[i]));
+	}
+	if (!iomodel->vy && iomodel->vy_obs){
+		this->inputs->AddInput(new SingVertexInput(VyEnum,iomodel->vy_obs[i]));
+		this->inputs->AddInput(new SingVertexInput(VyOldEnum,iomodel->vy_obs[i]));
+	}
+	if (!iomodel->vz && iomodel->vz_obs){
+		this->inputs->AddInput(new SingVertexInput(VzEnum,iomodel->vz_obs[i]));
+		this->inputs->AddInput(new SingVertexInput(VzOldEnum,iomodel->vz_obs[i]));
+	}
+
 
 	//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
Index: /issm/trunk/src/c/objects/Elements/Sing.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Sing.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Elements/Sing.h	(revision 3732)
@@ -54,4 +54,8 @@
 		int   MyRank();
 		void  UpdateInputsFromVector(double* vector, int name, int type);
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
 
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 3732)
@@ -146,12 +146,15 @@
 		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx[tria_node_ids[i]-1];
 		this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs));
+		this->inputs->AddInput(new TriaVertexInput(VxOldEnum,nodeinputs));
 	}
 	if (iomodel->vy) {
 		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy[tria_node_ids[i]-1];
 		this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs));
+		this->inputs->AddInput(new TriaVertexInput(VyOldEnum,nodeinputs));
 	}
 	if (iomodel->vz) {
 		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz[tria_node_ids[i]-1];
 		this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs));
+		this->inputs->AddInput(new TriaVertexInput(VzOldEnum,nodeinputs));
 	}
 	if (iomodel->vx_obs) {
@@ -171,5 +174,20 @@
 		this->inputs->AddInput(new TriaVertexInput(WeightsEnum,nodeinputs));
 	}
-
+	/*Default vx,vy and vz?:*/
+	if(!iomodel->vx && iomodel->vx_obs){
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs));
+		this->inputs->AddInput(new TriaVertexInput(VxOldEnum,nodeinputs));
+	}
+	if(!iomodel->vy && iomodel->vy_obs){
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs));
+		this->inputs->AddInput(new TriaVertexInput(VyOldEnum,nodeinputs));
+	}
+	if(!iomodel->vz && iomodel->vz_obs){
+		for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_node_ids[i]-1];
+		this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs));
+		this->inputs->AddInput(new TriaVertexInput(VzOldEnum,nodeinputs));
+	}
 
 	if (iomodel->elementoniceshelf) this->inputs->AddInput(new BoolInput(ElementOnIceShelfEnum,(IssmBool)iomodel->elementoniceshelf[index]));
@@ -445,4 +463,9 @@
 		vy[i]=values[i*numdofpervertex+1];
 	}
+
+	/*Now, we have to move the previous Vx and Vy inputs  to old 
+	 * status, otherwise, we'll wipe them off: */
+	this->inputs->ChangeEnum(VxEnum,VxOldEnum);
+	this->inputs->ChangeEnum(VyEnum,VyOldEnum);
 
 	/*Add vx and vy as inputs to the tria element: */
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 3732)
@@ -51,4 +51,8 @@
 		void  SetClone(int* minranks);
 		void    UpdateInputsFromVector(double* vector, int name, int type);
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
 
Index: /issm/trunk/src/c/objects/FemModel.cpp
===================================================================
--- /issm/trunk/src/c/objects/FemModel.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/FemModel.cpp	(revision 3732)
@@ -179,4 +179,18 @@
 }
 /*}}}*/
+/*FUNCTION FemModel::FindParam(bool* pinteger,int enum_type) {{{1*/
+int FemModel::FindParam(bool* pinteger,int enum_type){
+	
+	return parameters->FindParam(pinteger,enum_type);
+
+}
+/*}}}*/
+/*FUNCTION FemModel::FindParam(int* pinteger,int enum_type) {{{1*/
+int FemModel::FindParam(int* pinteger,int enum_type){
+	
+	return parameters->FindParam(pinteger,enum_type);
+
+}
+/*}}}*/
 /*FUNCTION FemModel::FindParam(double* pscalar,int enum_type) {{{1*/
 int FemModel::FindParam(double* pscalar,int enum_type){
@@ -186,11 +200,4 @@
 }
 /*}}}*/
-/*FUNCTION FemModel::FindParam(int* pinteger,int enum_type) {{{1*/
-int FemModel::FindParam(int* pinteger,int enum_type){
-	
-	return parameters->FindParam(pinteger,enum_type);
-
-}
-/*}}}*/
 /*FUNCTION FemModel::FindParam(char** pstring,int enum_type) {{{1*/
 int FemModel::FindParam(char** pstring,int enum_type){
@@ -211,4 +218,11 @@
 	
 	return parameters->FindParam(pdoublearray,pM,pN,enum_type);
+
+}
+/*}}}*/
+/*FUNCTION FemModel::FindParam(double** pdoublearray,int* pM,int enum_type) {{{1*/
+int FemModel::FindParam(double** pdoublearray,int* pM,int enum_type){
+	
+	return parameters->FindParam(pdoublearray,pM,enum_type);
 
 }
@@ -307,4 +321,6 @@
 /*FUNCTION FemModel::UpdateInputsFromVector(double* vector, int name, int type){{{1*/
 void FemModel::UpdateInputsFromVector(double* vector, int name, int type){
+
+	if(vector==NULL)return; //don't bother
 
 	elements->UpdateInputsFromVector(vector,name,type);
@@ -317,14 +333,62 @@
 }
 /*}}}*/
+/*FUNCTION FemModel::UpdateInputsFromConstant(double constant, int name){{{1*/
+void    FemModel::UpdateInputsFromConstant(double constant, int name){
+	
+	elements->UpdateInputsFromConstant(constant,name);
+	nodes->UpdateInputsFromConstant(constant,name);
+	vertices->UpdateInputsFromConstant(constant,name);
+	loads->UpdateInputsFromConstant(constant,name);
+	materials->UpdateInputsFromConstant(constant,name);
+	parameters->UpdateInputsFromConstant(constant,name);
+
+}
+/*}}}*/
+/*FUNCTION FemModel::UpdateInputsFromConstant(int constant, int name){{{1*/
+void    FemModel::UpdateInputsFromConstant(int constant, int name){
+	
+	elements->UpdateInputsFromConstant(constant,name);
+	nodes->UpdateInputsFromConstant(constant,name);
+	vertices->UpdateInputsFromConstant(constant,name);
+	loads->UpdateInputsFromConstant(constant,name);
+	materials->UpdateInputsFromConstant(constant,name);
+	parameters->UpdateInputsFromConstant(constant,name);
+
+}
+/*}}}*/
+/*FUNCTION FemModel::UpdateInputsFromConstant(bool constant, int name){{{1*/
+void    FemModel::UpdateInputsFromConstant(bool constant, int name){
+	
+	elements->UpdateInputsFromConstant(constant,name);
+	nodes->UpdateInputsFromConstant(constant,name);
+	vertices->UpdateInputsFromConstant(constant,name);
+	loads->UpdateInputsFromConstant(constant,name);
+	materials->UpdateInputsFromConstant(constant,name);
+	parameters->UpdateInputsFromConstant(constant,name);
+
+}
+/*}}}*/
+/*FUNCTION FemModel::UpdateInputsFromSolution(Vec vector, int name, int type){{{1*/
+void FemModel::UpdateInputsFromSolution(Vec vector,int name, int type){
+
+	double* serial_vector=NULL;
+
+	VecToMPISerial(&serial_vector,vector);
+
+	elements->UpdateInputsFromSolution(serial_vector,name,type);
+	nodes->UpdateInputsFromSolution(serial_vector,name,type);
+	vertices->UpdateInputsFromSolution(serial_vector,name,type);
+	loads->UpdateInputsFromSolution(serial_vector,name,type);
+	materials->UpdateInputsFromSolution(serial_vector,name,type);
+	parameters->UpdateInputsFromSolution(serial_vector,name,type);
+
+	/*Free ressources:*/
+	xfree((void**)&serial_vector);
+
+}
+/*}}}*/
 /*FUNCTION FemModel::UpdateInputsFromSolution(double* vector, int name, int type){{{1*/
-void FemModel::UpdateInputsFromSolution(double* vector, int name, int type){
-
-	elements->UpdateInputsFromSolution(vector,name,type);
-	nodes->UpdateInputsFromSolution(vector,name,type);
-	vertices->UpdateInputsFromSolution(vector,name,type);
-	loads->UpdateInputsFromSolution(vector,name,type);
-	materials->UpdateInputsFromSolution(vector,name,type);
-	parameters->UpdateInputsFromSolution(vector,name,type);
-
-}
-/*}}}*/
+void FemModel::UpdateInputsFromSolution(double* vector,int name, int type){
+	ISSMERROR(" not supported yet!");
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/FemModel.h
===================================================================
--- /issm/trunk/src/c/objects/FemModel.h	(revision 3731)
+++ /issm/trunk/src/c/objects/FemModel.h	(revision 3732)
@@ -57,7 +57,9 @@
 		
 		int FindParam(double* pscalar,int enum_type);
+		int FindParam(bool* pinteger,int enum_type);
 		int FindParam(int* pinteger,int enum_type);
 		int FindParam(char** pstring,int enum_type);
 		int FindParam(char*** pstringarray,int* pM,int enum_type);
+		int FindParam(double** pdoublearray,int* pM, int enum_type);
 		int FindParam(double** pdoublearray,int* pM, int* pN,int enum_type);
 		int FindParam(Vec* pvec,int enum_type);
@@ -80,4 +82,8 @@
 
 		void    UpdateInputsFromVector(double* vector, int name, int type);
+		void    UpdateInputsFromConstant(double constant, int name);
+		void    UpdateInputsFromConstant(int constant, int name);
+		void    UpdateInputsFromConstant(bool constant, int name);
+		void    UpdateInputsFromSolution(Vec solution, int analysis_type, int sub_analysis_type);
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
 
Index: /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/BeamVertexInput.cpp	(revision 3732)
@@ -166,2 +166,7 @@
 void BeamVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
+/*FUNCTION BeamVertexInput::ChangeEnum(int newenumtype){{{1*/
+void BeamVertexInput::ChangeEnum(int newenumtype){
+	this->enum_type=newenumtype;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/BeamVertexInput.h	(revision 3732)
@@ -39,4 +39,8 @@
 		int   EnumType();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
@@ -57,4 +61,5 @@
 		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
 		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void ChangeEnum(int newenumtype);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Inputs/BoolInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BoolInput.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/BoolInput.cpp	(revision 3732)
@@ -166,2 +166,7 @@
 void BoolInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
+/*FUNCTION BoolInput::ChangeEnum(int newenumtype){{{1*/
+void BoolInput::ChangeEnum(int newenumtype){
+	this->enum_type=newenumtype;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/BoolInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/BoolInput.h	(revision 3732)
@@ -39,4 +39,8 @@
 		int   EnumType();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
@@ -57,4 +61,5 @@
 		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
 		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void ChangeEnum(int newenumtype);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.cpp	(revision 3732)
@@ -166,2 +166,7 @@
 void DoubleInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
+/*FUNCTION DoubleInput::ChangeEnum(int newenumtype){{{1*/
+void DoubleInput::ChangeEnum(int newenumtype){
+	this->enum_type=newenumtype;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/DoubleInput.h	(revision 3732)
@@ -39,4 +39,8 @@
 		int   EnumType();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
@@ -57,4 +61,5 @@
 		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
 		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void ChangeEnum(int newenumtype);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Inputs/Input.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/Input.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/Input.h	(revision 3732)
@@ -36,4 +36,5 @@
 		virtual void GetStrainRate(double* epsilon, Input* yinput, double* xyz_list, double* gauss)=0;
 		virtual void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss)=0;
+		virtual void ChangeEnum(int newenumtype)=0;
 
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/IntInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/IntInput.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/IntInput.cpp	(revision 3732)
@@ -166,2 +166,7 @@
 void IntInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
+/*FUNCTION IntInput::ChangeEnum(int newenumtype){{{1*/
+void IntInput::ChangeEnum(int newenumtype){
+	this->enum_type=newenumtype;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/IntInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/IntInput.h	(revision 3732)
@@ -39,4 +39,8 @@
 		int   EnumType();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
@@ -57,5 +61,5 @@
 		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
 		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
-
+		void ChangeEnum(int newenumtype);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.cpp	(revision 3732)
@@ -170,2 +170,7 @@
 void PentaVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
+/*FUNCTION PentaVertexInput::ChangeEnum(int newenumtype){{{1*/
+void PentaVertexInput::ChangeEnum(int newenumtype){
+	this->enum_type=newenumtype;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/PentaVertexInput.h	(revision 3732)
@@ -38,4 +38,8 @@
 		int   EnumType();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
@@ -56,4 +60,5 @@
 		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
 		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void ChangeEnum(int newenumtype);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/SingVertexInput.cpp	(revision 3732)
@@ -165,2 +165,7 @@
 void SingVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
+/*FUNCTION SingVertexInput::ChangeEnum(int newenumtype){{{1*/
+void SingVertexInput::ChangeEnum(int newenumtype){
+	this->enum_type=newenumtype;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/SingVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/SingVertexInput.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/SingVertexInput.h	(revision 3732)
@@ -38,4 +38,8 @@
 		int   EnumType();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
@@ -56,4 +60,5 @@
 		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
 		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void ChangeEnum(int newenumtype);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.cpp	(revision 3732)
@@ -167,2 +167,7 @@
 void TriaVertexInput::GetStrainRateStokes(double* epsilon,Input* yinput,Input* zinput, double* xyz_list, double* gauss){ISSMERROR(" not supported yet!");}
 /*}}}*/
+/*FUNCTION TriaVertexInput::ChangeEnum(int newenumtype){{{1*/
+void TriaVertexInput::ChangeEnum(int newenumtype){
+	this->enum_type=newenumtype;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h
===================================================================
--- /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Inputs/TriaVertexInput.h	(revision 3732)
@@ -38,4 +38,8 @@
 		int   EnumType();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
@@ -56,4 +60,5 @@
 		void GetStrainRate(double* epsilon,Input* yinput, double* xyz_list, double* gauss);
 		void GetStrainRateStokes(double* epsilon,Input* yinput, Input* zinput, double* xyz_list, double* gauss);
+		void ChangeEnum(int newenumtype);
 		/*}}}*/
 
Index: /issm/trunk/src/c/objects/Loads/Icefront.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Icefront.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Loads/Icefront.h	(revision 3732)
@@ -51,4 +51,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Loads/Numericalflux.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Numericalflux.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Loads/Numericalflux.h	(revision 3732)
@@ -46,4 +46,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Loads/Pengrid.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Pengrid.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Loads/Pengrid.h	(revision 3732)
@@ -52,4 +52,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Loads/Penpair.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Penpair.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Loads/Penpair.h	(revision 3732)
@@ -44,4 +44,8 @@
 		Object* copy();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Loads/Riftfront.h
===================================================================
--- /issm/trunk/src/c/objects/Loads/Riftfront.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Loads/Riftfront.h	(revision 3732)
@@ -61,4 +61,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Materials/Material.h
===================================================================
--- /issm/trunk/src/c/objects/Materials/Material.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Materials/Material.h	(revision 3732)
@@ -27,4 +27,8 @@
 		virtual void  UpdateFromInputs(void* inputs)=0;
 		virtual void  UpdateInputsFromVector(double* vector, int name, int type)=0;
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		virtual void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type)=0;
 
Index: /issm/trunk/src/c/objects/Materials/Matice.h
===================================================================
--- /issm/trunk/src/c/objects/Materials/Matice.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Materials/Matice.h	(revision 3732)
@@ -46,4 +46,8 @@
 		double GetN();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Materials/Matpar.h
===================================================================
--- /issm/trunk/src/c/objects/Materials/Matpar.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Materials/Matpar.h	(revision 3732)
@@ -58,4 +58,8 @@
 		Object* copy();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Model.cpp
===================================================================
--- /issm/trunk/src/c/objects/Model.cpp	(revision 3731)
+++ /issm/trunk/src/c/objects/Model.cpp	(revision 3732)
@@ -206,7 +206,7 @@
 }
 /*}}}1*/
-/*FUNCTION Model::FindParam(int* pparameter,int enum_type {{{1*/
-
-int   Model::FindParam(int* pparameter,int enum_type){
+/*FUNCTION Model::FindParam(bool* pparameter,int enum_type {{{1*/
+
+int   Model::FindParam(bool* pparameter,int enum_type){
 
 	FemModel* femmodel=NULL;
@@ -224,4 +224,22 @@
 }
 /*}}}1*/
+/*FUNCTION Model::FindParam(int* pparameter,int enum_type {{{1*/
+
+int   Model::FindParam(int* pparameter,int enum_type){
+
+	FemModel* femmodel=NULL;
+
+	/*no analysis_type or sub_analysis_type, find the parameter in the first dataset we find: */
+	if (!femmodels->Size())ISSMERROR(" no fem models were found!");
+
+	/*recover first femmodel: */
+	femmodel=(FemModel*)femmodels->GetObjectByOffset(0);
+
+	if(!femmodel)return 0;
+
+	femmodel->FindParam(pparameter,enum_type);
+
+}
+/*}}}1*/
 /*FUNCTION Model::FindParam(double* pparameter,int enum_type ){{{1*/
 int   Model::FindParam(double* pparameter,int enum_type){
@@ -260,4 +278,22 @@
 }
 /*}}}1*/
+/*FUNCTION Model::FindParam(double** pparameter,int* pM, int enum_type) {{{1*/
+int   Model::FindParam(double** pparameter,int* pM, int enum_type){
+	
+	FemModel* femmodel=NULL;
+
+	/*no analysis_type or sub_analysis_type, find the parameter in the first dataset we find: */
+	if (!femmodels->Size())ISSMERROR(" no fem models were found!");
+
+	/*recover first femmodel: */
+	femmodel=(FemModel*)femmodels->GetObjectByOffset(0);
+	
+	if(!femmodel)return 0;
+	
+	femmodel->FindParam(pparameter,pM, enum_type);
+
+
+}
+/*}}}1*/
 /*FUNCTION Model::FindParam(char** pparameter,int enum_type) {{{1*/
 int   Model::FindParam(char** pparameter,int enum_type){
@@ -277,4 +313,18 @@
 }
 /*}}}1*/
+/*FUNCTION Model::FindParam(bool* pparameter,int enum_type,int analysis_type,int sub_analysis_type) {{{1*/
+int   Model::FindParam(bool* pparameter,int enum_type,int analysis_type,int sub_analysis_type){
+	
+	FemModel* femmodel=NULL;
+
+	/*find the correct formulation: */
+	femmodel=this->GetFormulation(analysis_type,sub_analysis_type);
+	
+	if(!femmodel)return 0;
+
+	/*extract our parameter from the found formulation: */
+	femmodel->FindParam(pparameter,enum_type);
+}
+/*}}}1*/
 /*FUNCTION Model::FindParam(int* pparameter,int enum_type,int analysis_type,int sub_analysis_type) {{{1*/
 int   Model::FindParam(int* pparameter,int enum_type,int analysis_type,int sub_analysis_type){
@@ -319,4 +369,18 @@
 }
 /*}}}1*/
+/*FUNCTION Model::FindParam(double** pparameter,int* pM, int enum_type,int analysis_type,int sub_analysis_type) {{{1*/
+int   Model::FindParam(double** pparameter,int* pM, int enum_type,int analysis_type,int sub_analysis_type){
+
+	FemModel* femmodel=NULL;
+
+	/*find the correct formulation: */
+	femmodel=this->GetFormulation(analysis_type,sub_analysis_type);
+	
+	if(!femmodel)return 0;
+
+	/*extract our parameter from the found formulation: */
+	femmodel->FindParam(pparameter,pM, enum_type);
+}
+/*}}}1*/
 /*FUNCTION Model::FindParam(char** pparameter,int enum_type,int analysis_type,int sub_analysis_type) {{{1*/
 int   Model::FindParam(char** pparameter,int enum_type,int analysis_type,int sub_analysis_type){
@@ -333,4 +397,18 @@
 }
 /*}}}1*/
+/*FUNCTION Model::FindParam(bool* pparameter,int enum_type,int analysis_type) {{{1*/
+int   Model::FindParam(bool* pparameter,int enum_type,int analysis_type){
+	
+	FemModel* femmodel=NULL;
+
+	/*find the correct formulation: */
+	femmodel=this->GetFormulation(analysis_type);
+	
+	if(!femmodel)return 0;
+
+	/*extract our parameter from the found formulation: */
+	femmodel->FindParam(pparameter,enum_type);
+}
+/*}}}1*/
 /*FUNCTION Model::FindParam(int* pparameter,int enum_type,int analysis_type) {{{1*/
 int   Model::FindParam(int* pparameter,int enum_type,int analysis_type){
@@ -373,4 +451,18 @@
 	/*extract our parameter from the found formulation: */
 	femmodel->FindParam(pparameter,pM,pN,enum_type);
+}
+/*}}}1*/
+/*FUNCTION Model::FindParam(double** pparameter,int* pM, int enum_type,int analysis_type) {{{1*/
+int   Model::FindParam(double** pparameter,int* pM, int enum_type,int analysis_type){
+
+	FemModel* femmodel=NULL;
+
+	/*find the correct formulation: */
+	femmodel=this->GetFormulation(analysis_type);
+	
+	if(!femmodel)return 0;
+
+	/*extract our parameter from the found formulation: */
+	femmodel->FindParam(pparameter,pM,enum_type);
 }
 /*}}}1*/
@@ -454,4 +546,43 @@
 }
 /*}}}1*/
+/*FUNCTION Model::UpdateInputsFromConstant(double constant, int name);{{{1*/
+void  Model::UpdateInputsFromConstant(double constant, int name){
+
+	int i;
+	FemModel* femmodel=NULL;
+
+	for(i=0;i<this->femmodels->Size();i++){
+		femmodel=(FemModel*)this->femmodels->GetObjectByOffset(i);
+		femmodel->UpdateInputsFromConstant(constant,name);
+	}
+
+}
+/*}}}1*/
+/*FUNCTION Model::UpdateInputsFromConstant(int constant, int name);{{{1*/
+void  Model::UpdateInputsFromConstant(int constant, int name){
+
+	int i;
+	FemModel* femmodel=NULL;
+
+	for(i=0;i<this->femmodels->Size();i++){
+		femmodel=(FemModel*)this->femmodels->GetObjectByOffset(i);
+		femmodel->UpdateInputsFromConstant(constant,name);
+	}
+
+}
+/*}}}1*/
+/*FUNCTION Model::UpdateInputsFromConstant(bool constant, int name);{{{1*/
+void  Model::UpdateInputsFromConstant(bool constant, int name){
+
+	int i;
+	FemModel* femmodel=NULL;
+
+	for(i=0;i<this->femmodels->Size();i++){
+		femmodel=(FemModel*)this->femmodels->GetObjectByOffset(i);
+		femmodel->UpdateInputsFromConstant(constant,name);
+	}
+
+}
+/*}}}1*/
 /*FUNCTION Model::UpdateInputsFromVector(double* vector,int name, int type);{{{1*/
 void  Model::UpdateInputsFromVector(double* vector,int name, int type){
@@ -459,4 +590,6 @@
 	int i;
 	FemModel* femmodel=NULL;
+
+	if(vector==NULL)return; //don't bother
 
 	for(i=0;i<this->femmodels->Size();i++){
@@ -480,2 +613,7 @@
 }
 /*}}}1*/
+/*FUNCTION Model::UpdateFromDakota(double* variables,char** variables_descriptors,int numvariables,DataSet* parameters, double* qmu_part,int qmu_npart);{{{1:*/
+void    UpdateFromDakota(double* variables,char** variables_descriptors,int numvariables,DataSet* parameters, double* qmu_part,int qmu_npart){
+	ISSMERROR("not supported yet!");
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Model.h
===================================================================
--- /issm/trunk/src/c/objects/Model.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Model.h	(revision 3732)
@@ -35,16 +35,22 @@
 
 		/*all overloaded forms of the FindParam routine: */
+		int   FindParam(bool* pparameter,int enum_type);
 		int   FindParam(int* pparameter,int enum_type);
 		int   FindParam(double* pparameter,int enum_type);
 		int   FindParam(double** pparameter,int* pM,int* pN,int enum_type);
+		int   FindParam(double** pparameter,int* pM,int enum_type);
 		int   FindParam(char** pparameter,int enum_type);
 
+		int   FindParam(bool* pparameter,int enum_type,int analysis_type,int sub_analysis_type);
 		int   FindParam(int* pparameter,int enum_type,int analysis_type,int sub_analysis_type);
 		int   FindParam(double* pparameter,int enum_type,int analysis_type,int sub_analysis_type);
+		int   FindParam(double** pparameter,int* pM, int enum_type,int analysis_type,int sub_analysis_type);
 		int   FindParam(double** pparameter,int* pM, int* pN,int enum_type,int analysis_type,int sub_analysis_type);
 		int   FindParam(char** pparameter,int enum_type,int analysis_type,int sub_analysis_type);
 
+		int   FindParam(bool* pparameter,int enum_type,int analysis_type);
 		int   FindParam(int* pparameter,int enum_type,int analysis_type);
 		int   FindParam(double* pparameter,int enum_type,int analysis_type);
+		int   FindParam(double** pparameter,int* pM,int enum_type,int analysis_type);
 		int   FindParam(double** pparameter,int* pM,int* pN,int enum_type,int analysis_type);
 		int   FindParam(char** pparameter,int enum_type,int analysis_type);
@@ -54,5 +60,10 @@
 
 		void    UpdateInputsFromVector(double* vector, int name, int type);
+		void    UpdateInputsFromConstant(double constant, int name);
+		void    UpdateInputsFromConstant(int constant, int name);
+		void    UpdateInputsFromConstant(bool constant, int name);
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type);
+		void    UpdateFromDakota(double* variables,char** variables_descriptors,int numvariables,DataSet* parameters, double* qmu_part,int qmu_npart);
+
 
 		FemModel* GetActiveFormulation();
Index: /issm/trunk/src/c/objects/Node.h
===================================================================
--- /issm/trunk/src/c/objects/Node.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Node.h	(revision 3732)
@@ -52,4 +52,8 @@
 		void  SetVertexDof(int in_dof);
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Object.h
===================================================================
--- /issm/trunk/src/c/objects/Object.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Object.h	(revision 3732)
@@ -26,4 +26,7 @@
 		virtual Object* copy()=0;
 		virtual void  UpdateInputsFromVector(double* vector, int name, int type)=0;
+		virtual void  UpdateInputsFromConstant(double constant, int name)=0;
+		virtual void  UpdateInputsFromConstant(int constant, int name)=0;
+		virtual void  UpdateInputsFromConstant(bool constant, int name)=0;
 		virtual void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type)=0;
 	
Index: /issm/trunk/src/c/objects/Params/BoolParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/BoolParam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Params/BoolParam.h	(revision 3732)
@@ -52,4 +52,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Params/DoubleMatParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/DoubleMatParam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Params/DoubleMatParam.h	(revision 3732)
@@ -54,4 +54,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Params/DoubleParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/DoubleParam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Params/DoubleParam.h	(revision 3732)
@@ -52,4 +52,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Params/DoubleVecParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/DoubleVecParam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Params/DoubleVecParam.h	(revision 3732)
@@ -53,4 +53,8 @@
 		int   MyRank();
 		void  UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 		/*}}}*/
Index: /issm/trunk/src/c/objects/Params/IntParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/IntParam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Params/IntParam.h	(revision 3732)
@@ -52,4 +52,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Params/PetscMatParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/PetscMatParam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Params/PetscMatParam.h	(revision 3732)
@@ -52,4 +52,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Params/PetscVecParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/PetscVecParam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Params/PetscVecParam.h	(revision 3732)
@@ -52,4 +52,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Params/StringArrayParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/StringArrayParam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Params/StringArrayParam.h	(revision 3732)
@@ -54,4 +54,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Params/StringParam.h
===================================================================
--- /issm/trunk/src/c/objects/Params/StringParam.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Params/StringParam.h	(revision 3732)
@@ -52,4 +52,8 @@
 		int   MyRank();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Result.h
===================================================================
--- /issm/trunk/src/c/objects/Result.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Result.h	(revision 3732)
@@ -44,4 +44,8 @@
 		Object* copy();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/SolPar.h
===================================================================
--- /issm/trunk/src/c/objects/SolPar.h	(revision 3731)
+++ /issm/trunk/src/c/objects/SolPar.h	(revision 3732)
@@ -40,4 +40,8 @@
 		Object* copy();
 		void    UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void    UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/objects/Vertex.h
===================================================================
--- /issm/trunk/src/c/objects/Vertex.h	(revision 3731)
+++ /issm/trunk/src/c/objects/Vertex.h	(revision 3732)
@@ -51,4 +51,8 @@
 		void  UpdatePosition(double* thickness,double* bed);
 		void  UpdateInputsFromVector(double* vector, int name, int type){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(double constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(int constant, int name){ISSMERROR("Not implemented yet!");}
+		void    UpdateInputsFromConstant(bool constant, int name){ISSMERROR("Not implemented yet!");}
+
 		void  UpdateInputsFromSolution(double* solution, int analysis_type, int sub_analysis_type){ISSMERROR("Not implemented yet!");}
 
Index: /issm/trunk/src/c/parallel/ControlInitialization.cpp
===================================================================
--- /issm/trunk/src/c/parallel/ControlInitialization.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/ControlInitialization.cpp	(revision 3732)
@@ -10,5 +10,5 @@
 #include "../modules.h"
 
-void ControlInitialization(Model* model, ParameterInputs* inputs){
+void ControlInitialization(Model* model){
 
 	extern int my_rank;
@@ -81,6 +81,6 @@
 	//compute slopes
 	if(verbose)_printf_("%s\n","computing bed slope (x and y derivatives)...");
-	diagnostic_core_linear(&slopex,fem_sl,inputs,SlopecomputeAnalysisEnum,BedXAnalysisEnum);
-	diagnostic_core_linear(&slopey,fem_sl,inputs,SlopecomputeAnalysisEnum,BedYAnalysisEnum);
+	diagnostic_core_linear(&slopex,fem_sl,SlopecomputeAnalysisEnum,BedXAnalysisEnum);
+	diagnostic_core_linear(&slopey,fem_sl,SlopecomputeAnalysisEnum,BedYAnalysisEnum);
 	FieldExtrudex( slopex, fem_sl->elements,fem_sl->nodes,fem_sl->vertices,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopex",0);
 	FieldExtrudex( slopey, fem_sl->elements,fem_sl->nodes,fem_sl->vertices,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopey",0);
@@ -95,5 +95,5 @@
 	//horizontal velocity
 	if(verbose)_printf_("%s\n"," computing horizontal velocities...");
-	diagnostic_core_nonlinear(&ug,NULL,NULL,NULL,fem_dh,inputs,DiagnosticAnalysisEnum,HorizAnalysisEnum);
+	diagnostic_core_nonlinear(&ug,NULL,NULL,NULL,fem_dh,DiagnosticAnalysisEnum,HorizAnalysisEnum);
 	if(verbose)_printf_("%s\n"," extruding horizontal velocities...");
 	VecDuplicatePatch(&ug_horiz,ug); FieldExtrudex( ug_horiz,fem_dh->elements,fem_dh->nodes, fem_dh->vertices,fem_dh->loads,fem_dh-> materials,fem_dh->parameters,"velocity",1);
@@ -102,5 +102,5 @@
 	if(verbose)_printf_("%s\n"," computing vertical velocities...");
 	inputs->Add("velocity",ug_horiz,numberofdofspernode_dh,numberofnodes);
-	diagnostic_core_linear(&ug_vert,fem_dv,inputs,DiagnosticAnalysisEnum,VertAnalysisEnum);
+	diagnostic_core_linear(&ug_vert,fem_dv,DiagnosticAnalysisEnum,VertAnalysisEnum);
 
 	//Create 3d u_g
@@ -113,5 +113,5 @@
 	//Create 4d u_g
 	if(verbose)_printf_("%s\n"," computing pressure according to Pattyn...");
-	ComputePressurex( &pg,fem_dh->elements, fem_dh->nodes, fem_dh->vertices,fem_dh->loads,  fem_dh->materials, fem_dh->parameters,inputs,DiagnosticAnalysisEnum,HorizAnalysisEnum);
+	ComputePressurex( &pg,fem_dh->elements, fem_dh->nodes, fem_dh->vertices,fem_dh->loads,  fem_dh->materials, fem_dh->parameters,DiagnosticAnalysisEnum,HorizAnalysisEnum);
 	VecScale(pg,1.0/stokesreconditioning);
 	ug_stokes=NewVec(fem_ds->nodesets->GetGSize());
@@ -133,5 +133,5 @@
 	if(verbose)_printf_("%s\n"," computing stokes velocities and pressure ...");
 	VecFree(&ug);
-	diagnostic_core_nonlinear(&ug,NULL,NULL,NULL,fem_ds,inputs,DiagnosticAnalysisEnum,StokesAnalysisEnum);
+	diagnostic_core_nonlinear(&ug,NULL,NULL,NULL,fem_ds,DiagnosticAnalysisEnum,StokesAnalysisEnum);
 
 	//Add in inputs
Index: /issm/trunk/src/c/parallel/balancedthickness.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedthickness.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/balancedthickness.cpp	(revision 3732)
@@ -3,5 +3,5 @@
  */ 
 
-#include "../issm.h"
+#include "../modules.h"
 #include "./parallel.h"
 
@@ -34,5 +34,4 @@
 	Result*  result=NULL;
 
-	ParameterInputs* inputs=NULL;
 	Param*   param=NULL;
 
@@ -87,5 +86,5 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		balancedthickness_core(results,model,inputs);
+		balancedthickness_core(results,model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
@@ -98,5 +97,5 @@
 		#ifdef _HAVE_DAKOTA_ 
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		Qmux(model,inputs,BalancedthicknessAnalysisEnum,NoneAnalysisEnum);
+		Qmux(model,BalancedthicknessAnalysisEnum,NoneAnalysisEnum);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 	 	#else
@@ -124,5 +123,4 @@
 	delete results;
 	delete model;
-	delete inputs;
 
 	/*Get finish time and close*/
Index: /issm/trunk/src/c/parallel/balancedthickness2.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedthickness2.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/balancedthickness2.cpp	(revision 3732)
@@ -3,5 +3,5 @@
  */ 
 
-#include "../issm.h"
+#include "../modules.h"
 #include "./parallel.h"
 
@@ -33,5 +33,4 @@
 	Result*  result=NULL;
 
-	ParameterInputs* inputs=NULL;
 	Param*   param=NULL;
 
@@ -86,5 +85,5 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		balancedthickness2_core(results,model,inputs);
+		balancedthickness2_core(results,model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
@@ -97,5 +96,5 @@
 		#ifdef _HAVE_DAKOTA_ 
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		Qmux(model,inputs,Balancedthickness2AnalysisEnum,NoneAnalysisEnum);
+		Qmux(model,Balancedthickness2AnalysisEnum,NoneAnalysisEnum);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 	 	#else
@@ -123,5 +122,4 @@
 	delete results;
 	delete model;
-	delete inputs;
 
 	/*Get finish time and close*/
Index: /issm/trunk/src/c/parallel/balancedthickness2_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedthickness2_core.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/balancedthickness2_core.cpp	(revision 3732)
@@ -9,7 +9,7 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 #include "./parallel.h"
-#include "../issm.h"
+#include "../modules.h"
 
-void balancedthickness2_core(DataSet* results,Model* model,ParameterInputs* inputs){
+void balancedthickness2_core(DataSet* results,Model* model){
 
 	extern int my_rank;
@@ -55,5 +55,5 @@
 	
 	_printf_("call computational core:\n");
-	diagnostic_core_linear(&h_g,fem_p,inputs,Balancedthickness2AnalysisEnum,NoneAnalysisEnum);
+	diagnostic_core_linear(&h_g,fem_p,Balancedthickness2AnalysisEnum,NoneAnalysisEnum);
 
 	_printf_("Averaging over vertices:\n");
Index: /issm/trunk/src/c/parallel/balancedthickness_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedthickness_core.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/balancedthickness_core.cpp	(revision 3732)
@@ -9,7 +9,7 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 #include "./parallel.h"
-#include "../issm.h"
+#include "../modules.h"
 
-void balancedthickness_core(DataSet* results,Model* model,ParameterInputs* inputs){
+void balancedthickness_core(DataSet* results,Model* model){
 
 	extern int my_rank;
@@ -48,5 +48,5 @@
 	
 	_printf_("call computational core:\n");
-	diagnostic_core_linear(&h_g,fem_p,inputs,BalancedthicknessAnalysisEnum,NoneAnalysisEnum);
+	diagnostic_core_linear(&h_g,fem_p,BalancedthicknessAnalysisEnum,NoneAnalysisEnum);
 
 	_printf_("extrude computed thickness on all layers:\n");
Index: /issm/trunk/src/c/parallel/balancedvelocities.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedvelocities.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/balancedvelocities.cpp	(revision 3732)
@@ -3,5 +3,5 @@
  */ 
 
-#include "../issm.h"
+#include "../modules.h"
 #include "./parallel.h"
 
@@ -32,5 +32,4 @@
 	Result*  result=NULL;
 
-	ParameterInputs* inputs=NULL;
 	Param*   param=NULL;
 
@@ -85,5 +84,5 @@
 		_printf_("call computational core:\n");
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		balancedvelocities_core(results,model,inputs);
+		balancedvelocities_core(results,model);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
@@ -96,5 +95,5 @@
 		#ifdef _HAVE_DAKOTA_ 
 		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		Qmux(model,inputs,BalancedvelocitiesAnalysisEnum,NoneAnalysisEnum);
+		Qmux(model,BalancedvelocitiesAnalysisEnum,NoneAnalysisEnum);
 		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 	 	#else
@@ -122,5 +121,4 @@
 	delete results;
 	delete model;
-	delete inputs;
 
 	/*Get finish time and close*/
Index: /issm/trunk/src/c/parallel/balancedvelocities_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/balancedvelocities_core.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/balancedvelocities_core.cpp	(revision 3732)
@@ -8,7 +8,7 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 #include "./parallel.h"
-#include "../issm.h"
+#include "../modules.h"
 
-void balancedvelocities_core(DataSet* results,Model* model,ParameterInputs* inputs){
+void balancedvelocities_core(DataSet* results,Model* model){
 
 	extern int my_rank;
@@ -47,5 +47,5 @@
 	
 	_printf_("call computational core:\n");
-	diagnostic_core_linear(&v_g,fem_p,inputs,BalancedvelocitiesAnalysisEnum,NoneAnalysisEnum);
+	diagnostic_core_linear(&v_g,fem_p,BalancedvelocitiesAnalysisEnum,NoneAnalysisEnum);
 
 	_printf_("extrude computed thickness on all layers:\n");
Index: /issm/trunk/src/c/parallel/control_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/control_core.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/control_core.cpp	(revision 3732)
@@ -5,6 +5,7 @@
 #include "./parallel.h"
 #include "../modules.h"
-
-void control_core(DataSet* results,Model* model, ParameterInputs* inputs){
+#include "../EnumDefinitions/EnumDefinitions.h"
+
+void control_core(DataSet* results,Model* model){
 
 	extern int my_rank;
@@ -24,5 +25,5 @@
 	Vec     m_g=NULL;
 	double  search_scalar;
-	char*   control_type=NULL;
+	int     control_type=NULL;
 	double* fit=NULL;
 	double* optscal=NULL;
@@ -55,5 +56,5 @@
 
 	/*Process models*/
-	ControlInitialization(model,inputs);
+	ControlInitialization(model);
 	fem_model=model->GetActiveFormulation();
 
@@ -84,23 +85,20 @@
 
 		_printf_("\n%s%i%s%i\n","   control method step ",n+1,"/",nsteps);
-		inputs->Add(control_type,param_g,1,numberofnodes);
-		inputs->Add("fit",fit[n]);
-
+		model->UpdateInputsFromVector(param_g,control_type,VertexEnum);
+		model->UpdateInputsFromVector(&fit[n],FitEnum,ConstantEnum);
+		
 		/*In case we are running a steady state control method, compute new temperature field using new parameter 
 		 * distribution: */
 		if (control_steady){
 			steadystate_results=new DataSet(ResultsEnum);
-			steadystate_core(steadystate_results,model,inputs);
+			steadystate_core(steadystate_results,model);
 			VecFree(&t_g); steadystate_results->FindResult(&t_g,"t_g");
 			delete steadystate_results;
-			inputs->Add("temperature",t_g,1,numberofnodes);
+			model->UpdateInputsFromVector(t_g,TemperatureEnum,VertexEnum);
 		}
 	
-		/*Update parameters: */
-		UpdateFromInputsx(fem_model->elements,fem_model->nodes,fem_model->vertices,fem_model->loads, fem_model->materials,fem_model->parameters,inputs);
-
 		_printf_("%s\n","      computing gradJ...");
 		gradjcompute_results=new DataSet(ResultsEnum); 
-		gradjcompute_core(gradjcompute_results,model, inputs);
+		gradjcompute_core(gradjcompute_results,model);
 		gradjcompute_results->FindResult(&grad_g,"grad_g");
 		delete gradjcompute_results;
@@ -145,5 +143,5 @@
 		_printf_("%s\n","      optimizing along gradient direction");
 		optargs.model=model;
-		optargs.param_g=param_g; optargs.grad_g=grad_g_double; optargs.inputs=inputs;optargs.n=n;
+		optargs.param_g=param_g; optargs.grad_g=grad_g_double; optargs.n=n;
 		optpars.xmin=0; optpars.xmax=1; optpars.tolerance=tolx; optpars.maxiter=(int)maxiter[n];optpars.cm_jump=cm_jump[n];
 		BrentSearch(&search_scalar,J+n,&optpars,&objectivefunctionC,&optargs);
@@ -197,7 +195,7 @@
 	/*Launch diagnostic with the last parameter distribution*/
 	if (control_steady){
-		inputs->Add(control_type,param_g,1,numberofnodes);
+		model->UpdateInputsFromVector(param_g,control_type,VertexEnum);
 		steadystate_results=new DataSet(ResultsEnum);
-		steadystate_core(steadystate_results,model,inputs);
+		steadystate_core(steadystate_results,model);
 
 		//extract u_g ,t_g and m_g from steadystate results, and erase diagnostic_results;
@@ -210,5 +208,5 @@
 		inputs->Add(control_type,param_g,1,numberofnodes);
 		diagnostic_results=new DataSet(ResultsEnum); 
-		diagnostic_core(diagnostic_results,model, inputs);
+		diagnostic_core(diagnostic_results,model);
 
 		//extract u_g from diagnostic_results, and erase diagnostic_results;
Index: /issm/trunk/src/c/parallel/convergence.cpp
===================================================================
--- /issm/trunk/src/c/parallel/convergence.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/convergence.cpp	(revision 3732)
@@ -5,6 +5,7 @@
 #include "../objects/objects.h"
 #include "../modules.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
 
-void convergence(int* pconverged, Mat Kff,Vec pf,Vec uf,Vec old_uf,Parameters* parameters){
+void convergence(double* pconverged, Mat Kff,Vec pf,Vec uf,Vec old_uf,Parameters* parameters){
 
 	/*output*/
Index: /issm/trunk/src/c/parallel/diagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 3732)
@@ -13,4 +13,5 @@
 
 	extern int my_rank;
+	int        dummy;
 
 	/*fem models: */
@@ -34,4 +35,7 @@
 	Vec riftproperties=NULL;
 	double* u_g_initial=NULL;
+	double* vx=NULL;
+	double* vy=NULL;
+	double* vz=NULL;
 
 	/*flags: */
@@ -66,5 +70,5 @@
 	model->FindParam(&isstokes,IsStokesEnum);
 	model->FindParam(&stokesreconditioning,StokesReconditioningEnum);
-	model->FindParam(&numrifts,NumriftsEnum);
+	model->FindParam(&numrifts,NumRiftsEnum);
 	model->FindParam(&qmu_analysis,QmuAnalysisEnum);
 
@@ -83,18 +87,21 @@
 	//for qmu analysis, be sure the velocity input we are starting from  is the one in the parameters: */
 	if(qmu_analysis){
-		model->FindParam(&vx,VxEnum,DiagnosticAnalysisEnum,HorizAnalysisEnum); model->UpdateInputsFromVector(vx,VxEnum,VertexEnum);
-		model->FindParam(&vy,VyEnum,DiagnosticAnalysisEnum,HorizAnalysisEnum); model->UpdateInputsFromVector(vy,VyEnum,VertexEnum);
-		model->FindParam(&vz,VzEnum,DiagnosticAnalysisEnum,HorizAnalysisEnum); model->UpdateInputsFromVector(vz,VzEnum,VertexEnum);
+		model->FindParam(&vx,&dummy,VxEnum,DiagnosticAnalysisEnum,HorizAnalysisEnum); model->UpdateInputsFromVector(vx,VxEnum,VertexEnum);
+		model->FindParam(&vy,&dummy,VyEnum,DiagnosticAnalysisEnum,HorizAnalysisEnum); model->UpdateInputsFromVector(vy,VyEnum,VertexEnum);
+		model->FindParam(&vz,&dummy,VzEnum,DiagnosticAnalysisEnum,HorizAnalysisEnum); model->UpdateInputsFromVector(vz,VzEnum,VertexEnum);
 	}
+
+	/*Compute slopes: */
+	slope_core(&surfaceslopex,&surfaceslopey,model,SurfaceAnalysisEnum);
+	slope_core(&bedslopex,&bedslopey,model,BedAnalysisEnum);
+		
+	/*Update: */
+	model->UpdateInputsFromVector(surfaceslopex,SurfaceSlopexEnum,VertexEnum);
+	model->UpdateInputsFromVector(surfaceslopey,SurfaceSlopeyEnum,VertexEnum);
+	model->UpdateInputsFromVector(bedslopex,BedSlopexEnum,VertexEnum);
+	model->UpdateInputsFromVector(bedslopey,BedSlopeyEnum,VertexEnum);
 
 	if(ishutter){
 			
-		slope_core(&slopex,&slopey,fem_sl,SurfaceAnalysisEnum);
-			
-		if(verbose)_printf_("%s\n"," adding slopes in inputs...");
-		inputs->Add("surfaceslopex",slopex,numberofdofspernode_sl,numberofnodes);
-		inputs->Add("surfaceslopey",slopey,numberofdofspernode_sl,numberofnodes);
-		VecFree(&slopex); VecFree(&slopey);
-
 		if(verbose)_printf_("%s\n"," computing hutter velocities...");
 		diagnostic_core_linear(&ug,fem_dhu,DiagnosticAnalysisEnum,HutterAnalysisEnum);
@@ -128,19 +135,18 @@
 
 		if(verbose)_printf_("%s\n"," extruding horizontal velocities...");
-		VecDuplicatePatch(&ug_horiz,ug); FieldExtrudex( ug_horiz,fem_dh->elements,fem_dh->nodes, fem_dh->vertices,fem_dh->loads,fem_dh->materials,fem_dh->parameters,"velocity",1);
+		
+		FieldExtrudex( ug,fem_dh->elements,fem_dh->nodes, fem_dh->vertices,fem_dh->loads,fem_dh->materials,fem_dh->parameters,"velocity",1);
 
+		SplitSolutionVector(ug,numberofnodes,numberofdofspernode_dh,&vx,&vy);
+		model->UpdateInputsFromVector(vx,VxEnum,VertexEnum);
+		model->UpdateInputsFromVector(vy,VyEnum,VertexEnum);
+		
 		if(verbose)_printf_("%s\n"," computing vertical velocities...");
-		inputs->Add("velocity",ug_horiz,numberofdofspernode_dh,numberofnodes);
 		diagnostic_core_linear(&ug_vert,fem_dv,DiagnosticAnalysisEnum,VertAnalysisEnum);
-
-		if(verbose)_printf_("%s\n"," combining horizontal and vertical velocities...");
-		VecFree(&ug); ug=NewVec(numberofnodes*3);
-
-		xfree((void**)&dofset); dofset=dofsetgen(2,&dof01[0],3,numberofnodes*3); VecMerge(ug,ug_horiz,dofset,numberofnodes*2);
-		xfree((void**)&dofset); dofset=dofsetgen(1,&dof2[0],3,numberofnodes*3); VecMerge(ug,ug_vert,dofset,numberofnodes*1);
-		VecFree(&ug_horiz); VecFree(&ug_vert);
+		model->UpdateInputsFromVector(ug_vert,VzEnum,VertexEnum);
 
 		if(verbose)_printf_("%s\n"," computing pressure according to Pattyn...");
 		ComputePressurex(&pg,fem_dh->elements, fem_dh->nodes, fem_dh->vertices,fem_dh->loads,  fem_dh->materials,fem_dh->parameters,DiagnosticAnalysisEnum,HorizAnalysisEnum);
+		model->UpdateInputsFromVector(pg,PressureEnum,VertexEnum);
 		
 		if (isstokes){
@@ -148,19 +154,4 @@
 			//"recondition" pressure 
 			VecScale(pg,1.0/stokesreconditioning);
-
-			if(verbose)_printf_("%s\n","computing bed slope (x and y derivatives)...");
-			slope_core(&slopex,&slopey,fem_sl,BedAnalysisEnum);
-
-			inputs->Add("bedslopex",slopex,numberofdofspernode_sl,numberofnodes);
-			inputs->Add("bedslopey",slopey,numberofdofspernode_sl,numberofnodes);
-			VecFree(&slopex); VecFree(&slopey);
-			
-			//recombine ug and pg: 
-			ug_stokes=NewVec(fem_ds->nodesets->GetGSize());
-			xfree((void**)&dofset);dofset=dofsetgen(3,dof012,4,numberofnodes*4); VecMerge(ug_stokes,ug,dofset,numberofnodes*3);
-			xfree((void**)&dofset); dofset=dofsetgen(1,dof3,4,numberofnodes*4); VecMerge(ug_stokes,pg,dofset,numberofnodes);
-
-			inputs->Add("velocity",ug_stokes,numberofdofspernode_ds,numberofnodes);
-			VecFree(&ug_stokes);
 
 			if(verbose)_printf_("%s\n"," update boundary conditions for stokes using velocities previously computed...");
Index: /issm/trunk/src/c/parallel/diagnostic_core_linear.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic_core_linear.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/diagnostic_core_linear.cpp	(revision 3732)
@@ -8,5 +8,5 @@
 #include "../modules.h"
 
-void diagnostic_core_linear(Vec* pug,FemModel* fem,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
+void diagnostic_core_linear(Vec* pug,FemModel* fem,int analysis_type,int sub_analysis_type){
 
 	/*parameters:*/
@@ -33,14 +33,11 @@
 	fem->parameters->FindParam(&solver_string,SolverStringEnum);
 
-	/*Update parameters: */
-	UpdateFromInputsx(fem->elements,fem->nodes,fem->vertices,fem->loads, fem->materials,fem->parameters,inputs);
-		
 	//*Generate system matrices
 	if (verbose) _printf_("   Generating matrices\n");
-	SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+	SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,analysis_type,sub_analysis_type); 
 
 	if (verbose) _printf_("   Generating penalty matrices\n");
 		//*Generate penalty system matrices
-		PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
+		PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,analysis_type,sub_analysis_type); 
 
 	/*!Reduce matrix from g to f size:*/
Index: /issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp
===================================================================
--- /issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp	(revision 3732)
@@ -9,5 +9,5 @@
 #include "./parallel.h"
 
-void diagnostic_core_nonlinear(Vec* pug,Mat* pKff0,Mat* pKfs0, DataSet* input_loads,FemModel* fem,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
+void diagnostic_core_nonlinear(Vec* pug,Mat* pKff0,Mat* pKfs0, DataSet* input_loads,FemModel* fem,int analysis_type,int sub_analysis_type){
 
 
@@ -37,5 +37,4 @@
 	char* solver_string=NULL;
 	int verbose=0;
-	int dofs[4]={1,1,0,0}; //recover vx,vy by default. vz and pressure may be.
 
 	/*Recover parameters: */
@@ -57,21 +56,7 @@
 	}
 
-	/*Initialize ug, uf, ug_old and uf_old */
-	if (numberofdofspernode>=3)dofs[2]=1;//only keep vz if running with more than 3 dofs per node
-	if (numberofdofspernode==4)dofs[3]=1;//only keep vz and presure if running with more than 3 dofs per node
-	ug=inputs->Get("velocity",&dofs[0],4);
-	VecDuplicate(ug,&old_ug); VecCopy(ug,old_ug);
-	Reducevectorgtofx(&uf,ug,fem->nodesets);
-	VecDuplicate(uf,&old_uf); VecCopy(uf,old_uf);
-
 	count=1;
 	converged=0;
 	for(;;){
-
-		if (verbose) _printf_("   Updating inputs\n");
-
-		/*Set input parameters: */
-		if(old_ug)inputs->Add("old_velocity",old_ug,numberofdofspernode,numberofnodes);
-		if(ug)inputs->Add("velocity",ug,numberofdofspernode,numberofnodes);
 
 		//save pointer to old velocity
@@ -79,14 +64,11 @@
 		VecFree(&old_uf);old_uf=uf;
 
-		/*Update parameters: */
-		UpdateFromInputsx(fem->elements,fem->nodes,fem->vertices,loads, fem->materials,fem->parameters,inputs);
-
 		if (verbose) _printf_("   Generating matrices\n");
 		//*Generate system matrices
-		SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+		SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,analysis_type,sub_analysis_type); 
 
 		if (verbose) _printf_("   Generating penalty matrices\n");
 		//*Generate penalty system matrices
-		PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
+		PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag,analysis_type,sub_analysis_type); 
 
 		if (verbose) _printf_("   reducing matrix from g to f set\n");
@@ -113,9 +95,10 @@
 		Mergesolutionfromftogx(&ug, uf,fem->Gmn,fem->ys,fem->nodesets);
 
+		//Update inputs using new solution:
+		fem->UpdateInputsFromSolution(ug,analysis_type,sub_analysis_type);
+
 		//Deal with penalty loads
 		if (verbose) _printf_("   penalty constraints\n");
-		if (old_ug) inputs->Add("old_velocity",old_ug,numberofdofspernode,numberofnodes);
-		inputs->Add("velocity",ug,numberofdofspernode,numberofnodes);
-		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,inputs,analysis_type,sub_analysis_type); 
+		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,analysis_type,sub_analysis_type); 
 
 		//if(verbose)_printf_("   number of unstable constraints: %i\n",num_unstable_constraints);
@@ -127,5 +110,5 @@
 		
 		/*add converged to inputs: */
-		inputs->Add("converged",converged);
+		fem->UpdateInputsFromVector(&converged,ConvergedEnum,ConstantEnum);
 
 		//rift convergence
@@ -150,11 +133,7 @@
 	if(pKff0){
 
-		/*Set input parameters: */
-		inputs->Add("old_velocity",old_ug,numberofdofspernode,numberofnodes);
-		inputs->Add("velocity",ug,numberofdofspernode,numberofnodes);
-	
 		kflag=1; pflag=0; //stiffness generation only
 	
-		SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+		SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,analysis_type,sub_analysis_type); 
 		Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem->Gmn,fem->nodesets);
 		MatFree(&Kgg);VecFree(&pg);
Index: /issm/trunk/src/c/parallel/gradjcompute_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/gradjcompute_core.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/gradjcompute_core.cpp	(revision 3732)
@@ -5,4 +5,5 @@
 #include "../modules.h"
 #include "./parallel.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
 
 #ifdef HAVE_CONFIG_H
Index: /issm/trunk/src/c/parallel/slope_core.cpp
===================================================================
--- /issm/trunk/src/c/parallel/slope_core.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/slope_core.cpp	(revision 3732)
@@ -8,5 +8,5 @@
 #include "../modules.h"
 
-void slope_core(Vec* pslopex,Vec* pslopey,FemModel* fem,int AnalysisEnum){
+void slope_core(Vec* pslopex,Vec* pslopey,Model* model,int AnalysisEnum){
 
 	/*parameters: */
@@ -20,9 +20,20 @@
 	Vec slopey=NULL; 
 
-	fem->parameters->FindParam(&verbose,VerboseEnum);
-	fem->parameters->FindParam(&dim,DimEnum);
+	/*femmodel used to compute slopes: */
+	FemModel* fem=NULL;
+
+	/*Recover fem model: */
+	fem=model->fem_sl;
+
+
+	/*Recover some parameters: */
+	model->parameters->FindParam(&verbose,VerboseEnum);
+	model->parameters->FindParam(&dim,DimEnum);
+	model->parameters->FindParam(&isstokes,DimEnum);
+	model->parameters->FindParam(&ishutter,DimEnum);
 
 	if(verbose)_printf_("%s\n","computing surface slope (x and y derivatives)...");
 
+	/*Specify type of computations: */
 	if(AnalysisEnum==SurfaceAnalysisEnum){
 		xanalysis=SurfaceXAnalysisEnum;
@@ -35,10 +46,25 @@
 	else ISSMERROR("%s%s%s"," analysis ",EnumAsString(AnalysisEnum)," not supported yet!");
 
+
+	/*Early return possible? */
+	if(!ishutter && AnalysisEnum==SurfaceAnalysisEnum){
+		/*no need to compute Surface Slope except for Hutter: */
+		*pslopex=NULL;
+		*pslopey=NULL;
+		return;
+	}
+	if(!isstokes && AnalysisEnum==BedAnalysisEnum){
+		/*no need to compute Bed Slope except for full Stokes: */
+		*pslopex=NULL;
+		*pslopey=NULL;
+	}
+	
+	
+	/*Call on core computations: */
 	diagnostic_core_linear(&slopex,fem,SlopecomputeAnalysisEnum,xanalysis);
 	diagnostic_core_linear(&slopey,fem,SlopecomputeAnalysisEnum,yanalysis);
 
-	
+	/*extrude if we are in 3D: */
 	if (dim==3){
-		
 		if(verbose)_printf_("%s\n","extruding slopes in 3d...");
 		FieldExtrudex( slopex, fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,"slopex",0);
Index: /issm/trunk/src/c/parallel/thermal_core_nonlinear.cpp
===================================================================
--- /issm/trunk/src/c/parallel/thermal_core_nonlinear.cpp	(revision 3731)
+++ /issm/trunk/src/c/parallel/thermal_core_nonlinear.cpp	(revision 3732)
@@ -8,5 +8,5 @@
 #include "../modules.h"
 
-void thermal_core_nonlinear(Vec* ptg,double* pmelting_offset,FemModel* fem,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
+void thermal_core_nonlinear(Vec* ptg,double* pmelting_offset,FemModel* fem,int analysis_type,int sub_analysis_type){
 
 	/*solution : */
@@ -56,9 +56,6 @@
 		if(verbose)_printf_("%s\n","starting direct shooting method");
 
-		if(count==1) inputs->Add("reset_penalties",1);
-		else inputs->Add("reset_penalties",0);
-
-		/*Update parameters: */
-		UpdateFromInputsx(fem->elements,fem->nodes,fem->vertices,fem->loads, fem->materials,fem->parameters,inputs);
+		if(count==1) reset_penalties=1; else reset_penalties=0;
+		fem->UpdateInputsFromVector(&reset_penalties,ResetPenaltiesEnum,ConstantEnum);
 
 		//*Generate system matrices
@@ -67,5 +64,5 @@
 			/*Compute Kgg_nopenalty and pg_nopenalty once for all: */
 			if (count==1){
-				SystemMatricesx(&Kgg_nopenalty, &pg_nopenalty,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+				SystemMatricesx(&Kgg_nopenalty, &pg_nopenalty,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,analysis_type,sub_analysis_type); 
 			}
 
@@ -75,10 +72,10 @@
 
 			//apply penalties each time
-			PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
+			PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,analysis_type,sub_analysis_type); 
 		}
 		else{
-			SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+			SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,analysis_type,sub_analysis_type); 
 			//apply penalties
-			PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
+			PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,analysis_type,sub_analysis_type); 
 		}
 
@@ -112,7 +109,7 @@
 		//Deal with penalty loads
 		if (verbose) _printf_("   penalty constraints\n");
+		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,inputs,analysis_type,sub_analysis_type); 
+		
 		inputs->Add("temperature",tg,numberofdofspernode,numberofnodes);
-		
-		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,inputs,analysis_type,sub_analysis_type); 
 
 		if (!converged){
Index: /issm/trunk/src/c/shared/Numerics/numerics.h
===================================================================
--- /issm/trunk/src/c/shared/Numerics/numerics.h	(revision 3731)
+++ /issm/trunk/src/c/shared/Numerics/numerics.h	(revision 3732)
@@ -9,4 +9,5 @@
 #include "./SplitSolutionVector.h"
 #include "./isnan.h"
+#include "./SplitSolutionVector.h"
 
 struct OptArgs;
