Index: /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 9475)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 9476)
@@ -16,5 +16,5 @@
 	int         i;
 	Parameters *parameters       = NULL;
-	bool        control_analysis = false;
+	bool        control_analysis;
 	int         nsteps;
 	int         num_control_type;
@@ -30,7 +30,17 @@
 
 	/*retrieve some parameters: */
-	parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	iomodel->Constant(&control_analysis,ControlAnalysisEnum);
+	parameters->AddObject(new BoolParam(ControlAnalysisEnum,control_analysis));
 
 	if(control_analysis){
+
+		/*How many controls and how many responses?*/
+		parameters->AddObject(iomodel->CopyConstantObject(NumControlTypeEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(NumCmResponsesEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(NstepsEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(TolxEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(EpsCmEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(CmGradientEnum));
+		parameters->AddObject(iomodel->CopyConstantObject(MeanvelEnum));
 
 		/*What solution type?*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 9475)
+++ /issm/trunk/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 9476)
@@ -18,10 +18,59 @@
 	Parameters *parameters       = NULL;
 	double     *requestedoutputs = NULL;
-	char       *rheology_law     = NULL;
 	
 	if(*pparameters)return; //do not create parameters twice!
+
+	/*Initialize dataset: */
+	parameters = new Parameters(ParametersEnum);
 		
-	/*Initialize dataset: */
-	parameters = iomodel->CopyConstants();
+	/*Copy some constants from iomodel */
+	parameters->AddObject(iomodel->CopyConstantObject(DimEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(IshutterEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(IsmacayealpattynEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(IsstokesEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(OutputFrequencyEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(EpsResEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(EpsRelEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(EpsAbsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(MaxNonlinearIterationsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(MaxSteadystateIterationsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(EpsvelEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(YtsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(DtEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(NdtEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(TimeAdaptEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(CflCoefficientEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(HydrostaticAdjustmentEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(PenaltyOffsetEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(LowmemEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(ConnectivityEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(BetaEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(MeltingpointEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(ReferencetemperatureEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(LatentheatEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(HeatcapacityEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(ArtificialDiffusivityEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMeltingRateEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(MinThermalConstraintsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(MinMechanicalConstraintsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(StabilizeConstraintsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(StokesreconditioningEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(ShelfDampeningEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(ViscosityOvershootEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(WaitonlockEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(NumberOfElementsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(IoGatherEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMigrationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(IsdiagnosticEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(IsprognosticEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(IsthermalEnum));
+
+	/*Some parameters need to be processed from iomodel*/
+	char* rheology_law = NULL;
+	iomodel->Constant(&rheology_law,RheologyLawEnum);
+	if      (strcmp(rheology_law,"none")==0)      parameters->AddObject(new IntParam(RheologyLawEnum,NoneEnum));
+	else if (strcmp(rheology_law,"paterson")==0)  parameters->AddObject(new IntParam(RheologyLawEnum,PatersonEnum));
+	else if (strcmp(rheology_law,"arrhenius")==0) parameters->AddObject(new IntParam(RheologyLawEnum,ArrheniusEnum));
+	else _error_("Rheology law %s not supported",rheology_law);
 
 	/*some parameters that did not come with the iomodel: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 9475)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 9476)
@@ -63,9 +63,12 @@
 
 	/*recover parameters: */
-	parameters->FindParam(&qmu_analysis,QmuAnalysisEnum);
-	parameters->FindParam(&name,NameEnum);
-	parameters->FindParam(&numberofresponses,NumberOfResponsesEnum);
-	parameters->FindParam(&numberofvertices,NumberOfVerticesEnum);
+	iomodel->Constant(&qmu_analysis,QmuAnalysisEnum);
+	parameters->AddObject(new BoolParam(QmuAnalysisEnum,qmu_analysis));
+
 	if(qmu_analysis){
+
+		parameters->FindParam(&name,NameEnum);
+		parameters->FindParam(&numberofresponses,NumberOfResponsesEnum);
+		parameters->FindParam(&numberofvertices,NumberOfVerticesEnum);
 
 		/*name of qmu input, error and output files:{{{1*/
Index: /issm/trunk/src/c/objects/IoModel.cpp
===================================================================
--- /issm/trunk/src/c/objects/IoModel.cpp	(revision 9475)
+++ /issm/trunk/src/c/objects/IoModel.cpp	(revision 9476)
@@ -124,9 +124,14 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::CopyConstants{{{1*/
-Parameters* IoModel::CopyConstants(void){
+/*FUNCTION IoModel::CopyConstantObject{{{1*/
+Param* IoModel::CopyConstantObject(int constant_enum){
 
 	_assert_(this->constants);
-	return (Parameters*)this->constants->Copy();
+
+	/*Find constant*/
+	Param* param=(Param*)this->constants->FindParamObject(constant_enum);
+	if(!param) _error_("Constant %s not found in iomodel",EnumToStringx(constant_enum));
+
+	return (Param*)param->copy();
 }
 /*}}}*/
Index: /issm/trunk/src/c/objects/IoModel.h
===================================================================
--- /issm/trunk/src/c/objects/IoModel.h	(revision 9475)
+++ /issm/trunk/src/c/objects/IoModel.h	(revision 9476)
@@ -12,4 +12,5 @@
 
 class Elements;
+class Param;
 
 
@@ -44,5 +45,5 @@
 		void        Constant(double *poutput,int constant_enum);
 		void        Constant(char  **poutput,int constant_enum);
-		Parameters *CopyConstants(void);
+		Param      *CopyConstantObject(int constant_enum);
 		double     *Data(int dataenum);
 		void        DeleteData(int num,...);
Index: /issm/trunk/src/m/model/marshall.m
===================================================================
--- /issm/trunk/src/m/model/marshall.m	(revision 9475)
+++ /issm/trunk/src/m/model/marshall.m	(revision 9476)
@@ -25,14 +25,4 @@
 		if strcmpi(field,'verbose'),
 			WriteData(fid,field,VerboseToBinary(md.verbose),{'Integer'});
-		elseif strcmpi(field,'rheology_law'),
-			if strcmpi(md.rheology_law,'none'),
-				WriteData(fid,field,NoneEnum,{'Integer'});
-			elseif strcmpi(md.rheology_law,'paterson'),
-				WriteData(fid,field,PatersonEnum,{'Integer'});
-			elseif strcmpi(md.rheology_law,'arrhenius'),
-				WriteData(fid,field,ArrheniusEnum,{'Integer'});
-			else
-				error('unkown value');
-			end
 		else
 			WriteData(fid,field,md.(field),template.(field)(3:end));
