Index: /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 20690)
@@ -10,5 +10,5 @@
 
 	int finiteelement = P1Enum;
-	IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,Balancethickness2AnalysisEnum,finiteelement);
+	IoModelToConstraintsx(constraints,iomodel,"md.balancethickness.spcthickness",Balancethickness2AnalysisEnum,finiteelement);
 
 }/*}}}*/
@@ -30,13 +30,13 @@
 
 	/*Load variables in element*/
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,SmbMassBalanceEnum);
-	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
-	iomodel->FetchDataToInput(elements,BalancethicknessOmegaEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+	iomodel->FetchDataToInput(elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
+	iomodel->FetchDataToInput(elements,"md.balancethickness.omega",BalancethicknessOmegaEnum);
 
 	/*Update elements: */
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 20690)
@@ -10,9 +10,9 @@
 	/*Fetch parameters: */
 	int    stabilization;	
-	iomodel->FindConstant(&stabilization,BalancethicknessStabilizationEnum);
+	iomodel->FindConstant(&stabilization,"md.balancethickness.stabilization");
 
 	/*Do not add constraints in DG*/
 	if(stabilization!=3){
-		IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancethicknessAnalysisEnum,P1Enum);
+		IoModelToConstraintsx(constraints,iomodel,"md.balancethickness.spcthickness",BalancethicknessAnalysisEnum,P1Enum);
 	}
 
@@ -25,5 +25,5 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&stabilization,BalancethicknessStabilizationEnum);
+	iomodel->FindConstant(&stabilization,"md.balancethickness.stabilization");
 
 	/*Loads only in DG*/
@@ -32,5 +32,5 @@
 		/*Get faces and elements*/
 		CreateFaces(iomodel);
-		iomodel->FetchData(1,ThicknessEnum);
+		iomodel->FetchData(1,"md.geometry.thickness");
 
 		/*First load data:*/
@@ -48,5 +48,5 @@
 
 		/*Free data: */
-		iomodel->DeleteData(1,ThicknessEnum);
+		iomodel->DeleteData(1,"md.geometry.thickness");
 	}
 }/*}}}*/
@@ -54,5 +54,5 @@
 
 	int  stabilization;
-	iomodel->FindConstant(&stabilization,BalancethicknessStabilizationEnum);
+	iomodel->FindConstant(&stabilization,"md.balancethickness.stabilization");
 
 	/*Check in 3d*/
@@ -60,5 +60,5 @@
 
 	/*First fetch data: */
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	if(stabilization!=3){
 		::CreateNodes(nodes,iomodel,BalancethicknessAnalysisEnum,P1Enum);
@@ -67,5 +67,5 @@
 		::CreateNodes(nodes,iomodel,BalancethicknessAnalysisEnum,P1DGEnum);
 	}
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  BalancethicknessAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -77,5 +77,5 @@
 
 	/*Fetch data needed: */
-	iomodel->FindConstant(&stabilization,BalancethicknessStabilizationEnum);
+	iomodel->FindConstant(&stabilization,"md.balancethickness.stabilization");
 
 	/*Finite element type*/
@@ -95,22 +95,22 @@
 	}
 
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,VxEnum);
-	iomodel->FetchDataToInput(elements,VyEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,SmbMassBalanceEnum);
-	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+	iomodel->FetchDataToInput(elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
 
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
 void BalancethicknessAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
-	parameters->AddObject(iomodel->CopyConstantObject(BalancethicknessStabilizationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.balancethickness.stabilization",BalancethicknessStabilizationEnum));
 }/*}}}*/
 
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 20690)
@@ -9,5 +9,5 @@
 
 	/*No constraints for now*/
-	//IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,BalancevelocityAnalysisEnum,P1Enum);
+	//IoModelToConstraintsx(constraints,iomodel,"md.balancethickness.spcthickness",BalancevelocityAnalysisEnum,P1Enum);
 }/*}}}*/
 void BalancevelocityAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
@@ -38,18 +38,18 @@
 	}
 
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,VxEnum);
-	iomodel->FetchDataToInput(elements,VyEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,SmbMassBalanceEnum);
-	iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+	iomodel->FetchDataToInput(elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
 
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 20690)
@@ -9,13 +9,13 @@
 
 	int finiteelement;
-	iomodel->FindConstant(&finiteelement,DamageElementinterpEnum);
+	iomodel->FindConstant(&finiteelement,"md.damage.elementinterp");
 
 	/*Fetch parameters: */
 	int stabilization;
-	iomodel->FindConstant(&stabilization,DamageStabilizationEnum);
+	iomodel->FindConstant(&stabilization,"md.damage.stabilization");
 
 	/*Do not add constraints in DG,  they are weakly imposed*/
 	if(stabilization!=3){
-		IoModelToConstraintsx(constraints,iomodel,DamageSpcdamageEnum,DamageEvolutionAnalysisEnum,finiteelement);
+		IoModelToConstraintsx(constraints,iomodel,"md.damage.spcdamage",DamageEvolutionAnalysisEnum,finiteelement);
 	}
 
@@ -34,5 +34,5 @@
 	int finiteelement;
 
-	iomodel->FindConstant(&finiteelement,DamageElementinterpEnum);
+	iomodel->FindConstant(&finiteelement,"md.damage.elementinterp");
 	::CreateNodes(nodes,iomodel,DamageEvolutionAnalysisEnum,finiteelement);
 }/*}}}*/
@@ -45,9 +45,9 @@
 	bool   ismovingfront;
 
-	iomodel->FindConstant(&finiteelement,DamageElementinterpEnum);
-	iomodel->FindConstant(&ismovingfront,TransientIsmovingfrontEnum);
+	iomodel->FindConstant(&finiteelement,"md.damage.elementinterp");
+	iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
 
 	/*Update elements: */
-	iomodel->FetchData(1,FlowequationElementEquationEnum);
+	iomodel->FetchData(1,"md.flowequation.element_equation");
 	int counter=0;
 	for(int i=0;i<iomodel->numberofelements;i++){
@@ -58,13 +58,13 @@
 		}
 	}
-	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+	iomodel->DeleteData(1,"md.flowequation.element_equation");
 
 	/*What input do I need to run my damage evolution model?*/
-	iomodel->FetchDataToInput(elements,VxEnum);
-	iomodel->FetchDataToInput(elements,VyEnum);
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(elements,VzEnum);
-	iomodel->FetchDataToInput(elements,DamageDEnum);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,PressureEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(elements,"md.initialization.vz",VzEnum);
+	iomodel->FetchDataToInput(elements,"md.damage.D",DamageDEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
 
 }/*}}}*/
@@ -76,32 +76,32 @@
 
 	/*retrieve some parameters: */
-	parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(DamageStabilizationEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxiterEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(DamageMaxDamageEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(DamageElementinterpEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.damage.law",DamageLawEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.damage.stabilization",DamageStabilizationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.damage.maxiter",DamageMaxiterEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.damage.max_damage",DamageMaxDamageEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.damage.elementinterp",DamageElementinterpEnum));
 
 	/*Requested outputs*/
-	iomodel->FetchData(&requestedoutputs,&numoutputs,DamageEvolutionRequestedOutputsEnum);
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.damage.requested_outputs");
 	parameters->AddObject(new IntParam(DamageEvolutionNumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new StringArrayParam(DamageEvolutionRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,DamageEvolutionRequestedOutputsEnum);
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.damage.requested_outputs");
 
 	/*Retrieve law dependent parameters: */
 	int law;
-	iomodel->FindConstant(&law,DamageLawEnum);
+	iomodel->FindConstant(&law,"md.damage.law");
 	if (law==0){
-		parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageKappaEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.stress_threshold",DamageStressThresholdEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.kappa",DamageKappaEnum));
 	}
 	else if (law>0){
-		parameters->AddObject(iomodel->CopyConstantObject(DamageC1Enum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageC2Enum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageC3Enum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageC4Enum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageKappaEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageHealingEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageEquivStressEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.c1",DamageC1Enum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.c2",DamageC2Enum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.c3",DamageC3Enum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.c4",DamageC4Enum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.stress_threshold",DamageStressThresholdEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.kappa",DamageKappaEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.healing",DamageHealingEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.equiv_stress",DamageEquivStressEnum));
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp	(revision 20690)
@@ -30,5 +30,5 @@
 
 	if(iomodel->domaintype==Domain2DverticalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 20690)
@@ -22,6 +22,6 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&heatcapacity,MaterialsHeatcapacityEnum);
-	iomodel->FindConstant(&referencetemperature,ConstantsReferencetemperatureEnum);
+	iomodel->FindConstant(&heatcapacity,"md.materials.heatcapacity");
+	iomodel->FindConstant(&referencetemperature,"md.constants.referencetemperature");
 
 	/*return if 2d mesh*/
@@ -29,5 +29,5 @@
 
 	/*Fetch data: */
-	iomodel->FetchData(&spcvector,&M,&N,ThermalSpctemperatureEnum);
+	iomodel->FetchData(&spcvector,&M,&N,"md.thermal.spctemperature");
 
 	//FIX ME: SHOULD USE IOMODELCREATECONSTRAINTS 
@@ -88,5 +88,5 @@
 
 	/*Free ressources:*/
-	iomodel->DeleteData(spcvector,ThermalSpctemperatureEnum);
+	iomodel->DeleteData(spcvector,"md.thermal.spctemperature");
 	xDelete<IssmDouble>(times);
 	xDelete<IssmDouble>(values);
@@ -98,7 +98,7 @@
 void EnthalpyAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
 
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  EnthalpyAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -115,9 +115,9 @@
 
 	/*Is enthalpy requested?*/
-	iomodel->FindConstant(&isenthalpy,ThermalIsenthalpyEnum);
+	iomodel->FindConstant(&isenthalpy,"md.thermal.isenthalpy");
 	if(!isenthalpy) return;
 
 	/*Fetch data needed: */
-	iomodel->FetchData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+	iomodel->FetchData(3,"md.initialization.temperature","md.initialization.waterfraction","md.initialization.pressure");
 
 	/*Update elements: */
@@ -131,43 +131,43 @@
 	}
 
-	iomodel->FindConstant(&dakota_analysis,QmuIsdakotaEnum);
-	iomodel->FindConstant(&ismovingfront,TransientIsmovingfrontEnum);
-	iomodel->FindConstant(&frictionlaw,FrictionLawEnum);
-
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
+	iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
+	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
-	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
-	iomodel->FetchDataToInput(elements,PressureEnum);
-	iomodel->FetchDataToInput(elements,TemperatureEnum);
-	iomodel->FetchDataToInput(elements,WaterfractionEnum);
-	iomodel->FetchDataToInput(elements,EnthalpyEnum);
-	iomodel->FetchDataToInput(elements,WatercolumnEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,VxEnum);
-	iomodel->FetchDataToInput(elements,VyEnum);
-	iomodel->FetchDataToInput(elements,VzEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+	iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.waterfraction",WaterfractionEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.enthalpy",EnthalpyEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.watercolumn",WatercolumnEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vz",VzEnum);
 	InputUpdateFromConstantx(elements,0.,VxMeshEnum);
 	InputUpdateFromConstantx(elements,0.,VyMeshEnum);
 	InputUpdateFromConstantx(elements,0.,VzMeshEnum);
 	if(ismovingfront){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum); // required for updating active nodes
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
 	}
 
 	/*Basal forcings variables*/
-	iomodel->FindConstant(&basalforcing_model,BasalforcingsEnum);
+	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
 	switch(basalforcing_model){
 		case MantlePlumeGeothermalFluxEnum:
 			break;
 		default:
-			iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
+			iomodel->FetchDataToInput(elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
 			break;
 	}
@@ -176,45 +176,47 @@
 	switch(frictionlaw){
 		case 1:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
 			break;
 		case 2:
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionMEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
 			break;
 		case 3:
-			iomodel->FindConstant(&FrictionCoupling,FrictionCouplingEnum);
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionAsEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
+			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.As",FrictionAsEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
 			if (FrictionCoupling==0){
-				iomodel->FetchDataToInput(elements,FrictionEffectivePressureEnum);
+				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
 			}
 			break;
 		case 4:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
-			iomodel->FetchDataToInput(elements,PressureEnum);
-			iomodel->FetchDataToInput(elements,TemperatureEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		case 5:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
-			iomodel->FetchDataToInput(elements,FrictionWaterLayerEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.water_layer",FrictionWaterLayerEnum);
 			break;
 		case 6:
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionMEnum);
-			iomodel->FetchDataToInput(elements,PressureEnum);
-			iomodel->FetchDataToInput(elements,TemperatureEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		default:
 			_error_("not supported");
 	}
+
 	/*Free data: */
-	iomodel->DeleteData(3,TemperatureEnum,WaterfractionEnum,PressureEnum);
+	iomodel->DeleteData(3,"md.initialization.temperature","md.initialization.waterfraction","md.initialization.pressure");
+
 }/*}}}*/
 void EnthalpyAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
@@ -223,21 +225,21 @@
 	char**  requestedoutputs = NULL;
 
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalStabilizationEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalMaxiterEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalReltolEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalIsenthalpyEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalIsdynamicbasalspcEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FrictionLawEnum));
-
-	iomodel->FetchData(&requestedoutputs,&numoutputs,ThermalRequestedOutputsEnum);
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.stabilization",ThermalStabilizationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.maxiter",ThermalMaxiterEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.reltol",ThermalReltolEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.isenthalpy",ThermalIsenthalpyEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.isdynamicbasalspc",ThermalIsdynamicbasalspcEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.friction.law",FrictionLawEnum));
+
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.thermal.requested_outputs");
 	parameters->AddObject(new IntParam(ThermalNumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new StringArrayParam(ThermalRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,ThermalRequestedOutputsEnum);
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.thermal.requested_outputs");
 
 	/*Deal with friction parameters*/
 	int frictionlaw;
-	iomodel->FindConstant(&frictionlaw,FrictionLawEnum);
-	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject(FrictionGammaEnum));
-	if(frictionlaw==3) parameters->AddObject(iomodel->CopyConstantObject(FrictionCouplingEnum));
+	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+	if(frictionlaw==3) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
 }/*}}}*/
 
Index: /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp	(revision 20690)
@@ -17,7 +17,7 @@
 void ExtrapolationAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
 	int finiteelement=P1Enum;
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,ExtrapolationAnalysisEnum,finiteelement);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }
 /*}}}*/
@@ -42,6 +42,6 @@
 	}
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 20690)
@@ -30,5 +30,5 @@
 
 	if(iomodel->domaintype==Domain2DverticalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 20690)
@@ -30,5 +30,5 @@
 
 	if(iomodel->domaintype==Domain2DverticalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 20690)
@@ -18,6 +18,6 @@
 	IssmDouble *vertex_pairing=NULL;
 	IssmDouble *nodeonbase=NULL;
-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(&nodeonbase,NULL,NULL,MeshVertexonbaseEnum);
+	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,"md.masstransport.vertex_pairing");
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(&nodeonbase,NULL,NULL,"md.mesh.vertexonbase");
 	for(int i=0;i<numvertex_pairing;i++){
 
@@ -46,12 +46,12 @@
 
 	/*free ressources: */
-	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
-	iomodel->DeleteData(nodeonbase,MeshVertexonbaseEnum);
+	iomodel->DeleteData(vertex_pairing,"md.masstransport.vertex_pairing");
+	iomodel->DeleteData(nodeonbase,"md.mesh.vertexonbase");
 }/*}}}*/
 void FreeSurfaceBaseAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
 
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,FreeSurfaceBaseAnalysisEnum,P1Enum);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  FreeSurfaceBaseAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -76,17 +76,17 @@
 	}
 
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsFloatingiceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,VxEnum);
-	iomodel->FetchDataToInput(elements,VyEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
 	if(iomodel->domaindim==3){
-		iomodel->FetchDataToInput(elements,VzEnum);
+		iomodel->FetchDataToInput(elements,"md.initialization.vz",VzEnum);
 	}
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 20690)
@@ -18,6 +18,6 @@
 	IssmDouble *vertex_pairing=NULL;
 	IssmDouble *nodeonsurface=NULL;
-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(&nodeonsurface,NULL,NULL,MeshVertexonsurfaceEnum);
+	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,"md.masstransport.vertex_pairing");
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(&nodeonsurface,NULL,NULL,"md.mesh.vertexonsurface");
 	for(int i=0;i<numvertex_pairing;i++){
 
@@ -46,12 +46,12 @@
 
 	/*free ressources: */
-	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
-	iomodel->DeleteData(nodeonsurface,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(vertex_pairing,"md.masstransport.vertex_pairing");
+	iomodel->DeleteData(nodeonsurface,"md.mesh.vertexonsurface");
 }/*}}}*/
 void FreeSurfaceTopAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
 
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,FreeSurfaceTopAnalysisEnum,P1Enum);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  FreeSurfaceTopAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -67,5 +67,5 @@
 
 	/*Fetch data needed: */
-	iomodel->FindConstant(&smb_model,SmbEnum);
+	iomodel->FindConstant(&smb_model,"md.smb.model");
 
 	/*Update elements: */
@@ -79,18 +79,18 @@
 	}
 
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,VxEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
 	}
 	if(iomodel->domaindim==3){
-		iomodel->FetchDataToInput(elements,VzEnum);
+		iomodel->FetchDataToInput(elements,"md.initialization.vz",VzEnum);
 	}
 	switch(smb_model){
 		case SMBforcingEnum:
-			iomodel->FetchDataToInput(elements,SmbMassBalanceEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.);
 			break;
 		default:
Index: /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 20690)
@@ -30,8 +30,8 @@
 	}
 
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,GiaMantleViscosityEnum);
-	iomodel->FetchDataToInput(elements,GiaLithosphereThicknessEnum);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.gia.mantle_viscosity",GiaMantleViscosityEnum);
+	iomodel->FetchDataToInput(elements,"md.gia.lithosphere_thickness",GiaLithosphereThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 }/*}}}*/
 void GiaAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 20690)
@@ -16,5 +16,5 @@
 	bool        isefficientlayer;
 	/*retrieve some parameters: */
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want DC?*/
@@ -22,5 +22,5 @@
 
 	/*Do we want an efficient layer*/
-	iomodel->FindConstant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+	iomodel->FindConstant(&isefficientlayer,"md.hydrology.isefficientlayer");
 
 	/*If not return*/
@@ -28,8 +28,8 @@
 
 	/*If yes, initialize a flip flop counter*/
-	iomodel->FetchData(&eplflip_lock,HydrologydcEplflipLockEnum);
+	iomodel->FetchData(&eplflip_lock,"md.hydrology.eplflip_lock");
 	parameters->AddObject(new IntParam(HydrologydcEplflipLockEnum,eplflip_lock));
 
-	iomodel->FetchData(&eplthickcomp,HydrologydcEplThickCompEnum);
+	iomodel->FetchData(&eplthickcomp,"md.hydrology.epl_thick_comp");
 	parameters->AddObject(new IntParam(HydrologydcEplThickCompEnum,eplthickcomp));
 
@@ -42,9 +42,9 @@
 
 	/*Now, do we really want DC?*/
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 	if(hydrology_model!=HydrologydcEnum) return;
 
 	/*Do we want an efficient layer*/
-	iomodel->FindConstant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+	iomodel->FindConstant(&isefficientlayer,"md.hydrology.isefficientlayer");
 	if(!isefficientlayer) return;
 
@@ -58,15 +58,13 @@
 		}
 	}
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,EplHeadEnum);
-	iomodel->FetchDataToInput(elements,SedimentHeadEnum);
-	iomodel->FetchDataToInput(elements,HydrologydcEplInitialThicknessEnum);
-	iomodel->FetchDataToInput(elements,HydrologydcEplMaxThicknessEnum);
-	iomodel->FetchDataToInput(elements,HydrologydcEplThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.epl_head",EplHeadEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.sediment_head",SedimentHeadEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.epl_thickness",HydrologydcEplThicknessEnum);
 		if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
@@ -76,15 +74,15 @@
 	/*Now, do we really want DC?*/
 	int  hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 	if(hydrology_model!=HydrologydcEnum) return;
 
 	/*Do we want an efficient layer*/
 	bool isefficientlayer;
-	iomodel->FindConstant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+	iomodel->FindConstant(&isefficientlayer,"md.hydrology.isefficientlayer");
 	if(!isefficientlayer) return;
 
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,HydrologyDCEfficientAnalysisEnum,P1Enum);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 
@@ -93,13 +91,13 @@
 	/*Do we really want DC?*/
 	int  hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 	if(hydrology_model!=HydrologydcEnum) return;
 
 	/*Do we want an efficient layer*/
 	bool isefficientlayer;
-	iomodel->FindConstant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+	iomodel->FindConstant(&isefficientlayer,"md.hydrology.isefficientlayer");
 	if(!isefficientlayer) return;
 
-	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpceplHeadEnum,HydrologyDCEfficientAnalysisEnum,P1Enum);
+	IoModelToConstraintsx(constraints,iomodel,"md.hydrology.spcepl_head",HydrologyDCEfficientAnalysisEnum,P1Enum);
 }/*}}}*/
 
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 20690)
@@ -25,24 +25,24 @@
 
 	/*retrieve some parameters: */
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want DC?*/
 	if(hydrology_model!=HydrologydcEnum) return;
 
-	iomodel->FetchData(&isefficientlayer,HydrologydcIsefficientlayerEnum);
-	iomodel->FetchData(&sedimentlimit_flag,HydrologydcSedimentlimitFlagEnum);
-	iomodel->FetchData(&transfer_flag,HydrologydcTransferFlagEnum);
-	iomodel->FetchData(&penalty_factor,HydrologydcPenaltyFactorEnum);
-	iomodel->FetchData(&rel_tol,HydrologydcRelTolEnum);
-	iomodel->FetchData(&penalty_lock,HydrologydcPenaltyLockEnum);
-	iomodel->FetchData(&hydro_maxiter,HydrologydcMaxIterEnum);
+	iomodel->FetchData(&isefficientlayer,   "md.hydrology.isefficientlayer");
+	iomodel->FetchData(&sedimentlimit_flag, "md.hydrology.sedimentlimit_flag" );
+	iomodel->FetchData(&transfer_flag,      "md.hydrology.transfer_flag" );
+	iomodel->FetchData(&penalty_factor,     "md.hydrology.penalty_factor" );
+	iomodel->FetchData(&rel_tol,            "md.hydrology.rel_tol" );
+	iomodel->FetchData(&penalty_lock,       "md.hydrology.penalty_lock" );
+	iomodel->FetchData(&hydro_maxiter,      "md.hydrology.max_iter" );
 
 	if(sedimentlimit_flag==1){
-		iomodel->FetchData(&sedimentlimit,HydrologydcSedimentlimitEnum);
+		iomodel->FetchData(&sedimentlimit,"md.hydrology.sedimentlimit");
 		parameters->AddObject(new DoubleParam(HydrologydcSedimentlimitEnum,sedimentlimit));
 	}
 
 	if(transfer_flag==1){
-		iomodel->FetchData(&leakagefactor,HydrologydcLeakageFactorEnum);
+		iomodel->FetchData(&leakagefactor,"md.hydrology.leakage_factor");
 		parameters->AddObject(new DoubleParam(HydrologydcLeakageFactorEnum,leakagefactor));
 	}
@@ -65,5 +65,5 @@
 	
 	/*Fetch data needed: */
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want DC?*/
@@ -71,5 +71,5 @@
 
 	/*Fetch data needed: */
-	iomodel->FindConstant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+	iomodel->FindConstant(&isefficientlayer,"md.hydrology.isefficientlayer");
 
 	/*Update elements: */
@@ -83,18 +83,18 @@
 	}
 
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,HydrologydcBasalMoulinInputEnum);
-	iomodel->FetchDataToInput(elements,SedimentHeadEnum);
-	iomodel->FetchDataToInput(elements,HydrologydcSedimentTransmitivityEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.basal_moulin_input",HydrologydcBasalMoulinInputEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.sediment_head",SedimentHeadEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.sediment_transmitivity",HydrologydcSedimentTransmitivityEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 
 	if(isefficientlayer){
-		iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveNodeEnum);
+		iomodel->FetchDataToInput(elements,"md.hydrology.mask_eplactive_node",HydrologydcMaskEplactiveNodeEnum);
 	}
 }/*}}}*/
@@ -104,12 +104,12 @@
 	/*Fetch parameters: */
 	int  hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want DC?*/
 	if(hydrology_model!=HydrologydcEnum) return;
 
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 
@@ -118,8 +118,8 @@
 	/*retrieve some parameters: */
 	int hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 	if(hydrology_model!=HydrologydcEnum) return;
 
-	IoModelToConstraintsx(constraints,iomodel,HydrologydcSpcsedimentHeadEnum,HydrologyDCInefficientAnalysisEnum,P1Enum);
+	IoModelToConstraintsx(constraints,iomodel,"md.hydrology.spcsediment_head",HydrologyDCInefficientAnalysisEnum,P1Enum);
 }/*}}}*/
 
@@ -128,8 +128,8 @@
 	/*Fetch parameters: */
 	int hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 	if(hydrology_model!=HydrologydcEnum) return;
 
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(1,MeshVertexonbaseEnum);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(1,"md.mesh.vertexonbase");
 
 	//create penalties for nodes: no node can have water above the max
@@ -142,5 +142,5 @@
 			}
 		}
-		else if(reCast<int>(iomodel->Data(MeshVertexonbaseEnum)[i])){
+		else if(reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){
 			if(iomodel->my_vertices[i]){
 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum));
@@ -148,5 +148,5 @@
 		}
 	}
-	iomodel->DeleteData(1,MeshVertexonbaseEnum);
+	iomodel->DeleteData(1,"md.mesh.vertexonbase");
 }/*}}}*/
 
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 20690)
@@ -10,9 +10,9 @@
 	/*retrieve some parameters: */
 	int          hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	if(hydrology_model!=HydrologyshreveEnum) return;
 
-	IoModelToConstraintsx(constraints,iomodel,HydrologyshreveSpcwatercolumnEnum,HydrologyShreveAnalysisEnum,P1Enum);
+	IoModelToConstraintsx(constraints,iomodel,"md.hydrologyshreve.spcwatercolumn",HydrologyShreveAnalysisEnum,P1Enum);
 
 }/*}}}*/
@@ -24,12 +24,12 @@
 	/*Fetch parameters: */
 	int  hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want Shreve?*/
 	if(hydrology_model!=HydrologyshreveEnum) return;
 
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,HydrologyShreveAnalysisEnum,P1Enum);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  HydrologyShreveAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -40,5 +40,5 @@
 	/*Fetch data needed: */
 	int    hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want Shreve?*/
@@ -55,16 +55,16 @@
 	}
 
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,WatercolumnEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.watercolumn",WatercolumnEnum);
 
 	elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
@@ -74,5 +74,5 @@
 	/*retrieve some parameters: */
 	int  hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want Shreve?*/
@@ -80,5 +80,5 @@
 
 	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
-	parameters->AddObject(iomodel->CopyConstantObject(HydrologyshreveStabilizationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.stabilization",HydrologyshreveStabilizationEnum));
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp	(revision 20690)
@@ -14,9 +14,9 @@
 	/*retrieve some parameters: */
 	int hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	if(hydrology_model!=HydrologysommersEnum) return;
 
-	IoModelToConstraintsx(constraints,iomodel,HydrologySpcheadEnum,HydrologySommersAnalysisEnum,P1Enum);
+	IoModelToConstraintsx(constraints,iomodel,"md.hydrology.spchead",HydrologySommersAnalysisEnum,P1Enum);
 
 }/*}}}*/
@@ -25,5 +25,5 @@
 	/*Fetch parameters: */
 	int  hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want Sommers?*/
@@ -39,5 +39,5 @@
 			}
 		}
-		else if(reCast<int>(iomodel->Data(MeshVertexonbaseEnum)[i])){
+		else if(reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){
 			if(iomodel->my_vertices[i]){
 				loads->AddObject(new Moulin(iomodel->loadcounter+i+1,i,iomodel,HydrologySommersAnalysisEnum));
@@ -45,10 +45,10 @@
 		}
 	}
-	iomodel->DeleteData(1,MeshVertexonbaseEnum);
+	iomodel->DeleteData(1,"md.mesh.vertexonbase");
 
 	/*Deal with Neumann BC*/
 	int M,N;
 	int *segments = NULL;
-	iomodel->FetchData(&segments,&M,&N,MeshSegmentsEnum);
+	iomodel->FetchData(&segments,&M,&N,"md.mesh.segments");
 
 	/*Check that the size seem right*/
@@ -67,12 +67,12 @@
 	/*Fetch parameters: */
 	int  hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want Sommers?*/
 	if(hydrology_model!=HydrologysommersEnum) return;
 
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,HydrologySommersAnalysisEnum,P1Enum);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  HydrologySommersAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -83,5 +83,5 @@
 	/*Fetch data needed: */
 	int    hydrology_model,frictionlaw;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want Sommers?*/
@@ -98,35 +98,35 @@
 	}
 
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
-	iomodel->FetchDataToInput(elements,HydrologyHeadEnum);
-	iomodel->FetchDataToInput(elements,HydrologyGapHeightEnum);
-	iomodel->FetchDataToInput(elements,HydrologyEnglacialInputEnum);
-	iomodel->FetchDataToInput(elements,HydrologyMoulinInputEnum);
-	iomodel->FetchDataToInput(elements,HydrologyBumpSpacingEnum);
-	iomodel->FetchDataToInput(elements,HydrologyBumpHeightEnum);
-	iomodel->FetchDataToInput(elements,HydrologyReynoldsEnum);
-	iomodel->FetchDataToInput(elements,HydrologyNeumannfluxEnum);
-	iomodel->FetchDataToInput(elements,VxEnum);
-	iomodel->FetchDataToInput(elements,VyEnum);
-
-	iomodel->FindConstant(&frictionlaw,FrictionLawEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.head",HydrologyHeadEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.gap_height",HydrologyGapHeightEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.englacial_input",HydrologyEnglacialInputEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.bump_spacing",HydrologyBumpSpacingEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.reynolds",HydrologyReynoldsEnum);
+	iomodel->FetchDataToInput(elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
+
+	iomodel->FindConstant(&frictionlaw,"md.friction.law");
 	/*Friction law variables*/
 	switch(frictionlaw){
 		case 1:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
 			break;
 		case 8:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
 			break;
 		default:
@@ -138,5 +138,5 @@
 	/*retrieve some parameters: */
 	int  hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 
 	/*Now, do we really want Sommers?*/
@@ -144,5 +144,5 @@
 
 	parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model));
-	parameters->AddObject(iomodel->CopyConstantObject(FrictionLawEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.friction.law",FrictionLawEnum));
 }/*}}}*/
 
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 20690)
@@ -17,11 +17,11 @@
 
 	if(iomodel->domaintype==Domain3DEnum){
-		iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+		iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	}
 	else if(iomodel->domaintype==Domain2DverticalEnum){
-		iomodel->FetchData(1,MeshVertexonbaseEnum);
+		iomodel->FetchData(1,"md.mesh.vertexonbase");
 	}
 	::CreateNodes(nodes,iomodel,L2ProjectionBaseAnalysisEnum,P1Enum);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  L2ProjectionBaseAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -40,11 +40,11 @@
 	}
 
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum & iomodel->domaintype!=Domain3DsurfaceEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp	(revision 20690)
@@ -17,20 +17,20 @@
 	/*Now, do we really want DC?*/
 	int  hydrology_model;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 	if(hydrology_model!=HydrologydcEnum) return;
 
 	/*Do we want an efficient layer*/
 	bool isefficientlayer;
-	iomodel->FindConstant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+	iomodel->FindConstant(&isefficientlayer,"md.hydrology.isefficientlayer");
 	if(!isefficientlayer) return;
 
 	if(iomodel->domaintype==Domain3DEnum){
-		iomodel->FetchData(1,MeshVertexonbaseEnum);
+		iomodel->FetchData(1,"md.mesh.vertexonbase");
 	}
 	else if(iomodel->domaintype==Domain2DverticalEnum){
-		iomodel->FetchData(1,MeshVertexonbaseEnum);
+		iomodel->FetchData(1,"md.mesh.vertexonbase");
 	}
 	::CreateNodes(nodes,iomodel,L2ProjectionEPLAnalysisEnum,P1Enum);
-	iomodel->DeleteData(1,MeshVertexonbaseEnum);
+	iomodel->DeleteData(1,"md.mesh.vertexonbase");
 }/*}}}*/
 int  L2ProjectionEPLAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -43,9 +43,9 @@
 
 	/*Now, do we really want DC?*/
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
 	if(hydrology_model!=HydrologydcEnum) return;
 
 	/*Do we want an efficient layer*/
-	iomodel->FindConstant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+	iomodel->FindConstant(&isefficientlayer,"md.hydrology.isefficientlayer");
 	if(!isefficientlayer) return;
 
@@ -60,9 +60,9 @@
 	}
 
-	iomodel->FetchDataToInput(elements,EplHeadEnum);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.epl_head",EplHeadEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 20690)
@@ -12,5 +12,5 @@
 
 void LevelsetAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
-	IoModelToConstraintsx(constraints,iomodel,SpclevelsetEnum,LevelsetAnalysisEnum,P1Enum);
+	IoModelToConstraintsx(constraints,iomodel,"md.levelset.spclevelset",LevelsetAnalysisEnum,P1Enum);
 }
 /*}}}*/
@@ -20,7 +20,7 @@
 void LevelsetAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
 	int finiteelement=P1Enum;
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,LevelsetAnalysisEnum,finiteelement);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }
 /*}}}*/
@@ -44,23 +44,23 @@
 	}
 	
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,VxEnum);
-	iomodel->FetchDataToInput(elements,VyEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
 
 	/*Get moving front parameters*/
 	int  calvinglaw;
-	iomodel->FindConstant(&calvinglaw,CalvingLawEnum);
+	iomodel->FindConstant(&calvinglaw,"md.calving.law");
 	switch(calvinglaw){
 		case DefaultCalvingEnum:
-			iomodel->FetchDataToInput(elements,CalvingCalvingrateEnum);
-			iomodel->FetchDataToInput(elements,CalvingMeltingrateEnum);
+			iomodel->FetchDataToInput(elements,"md.calving.calvingrate",CalvingCalvingrateEnum);
+			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);
 			break;
 		case CalvingLevermannEnum:
-			iomodel->FetchDataToInput(elements,CalvinglevermannCoeffEnum);
-			iomodel->FetchDataToInput(elements,CalvinglevermannMeltingrateEnum);
+			iomodel->FetchDataToInput(elements,"md.calving.coeff",CalvinglevermannCoeffEnum);
+			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvinglevermannMeltingrateEnum);
 			break;
 		case CalvingDevEnum:
-			iomodel->FetchDataToInput(elements,CalvingdevCoeffEnum);
-			iomodel->FetchDataToInput(elements,CalvingMeltingrateEnum);
+			iomodel->FetchDataToInput(elements,"md.calving.coeff",CalvingdevCoeffEnum);
+			iomodel->FetchDataToInput(elements,"md.calving.meltingrate",CalvingMeltingrateEnum);
 			break;
 		default:
@@ -70,5 +70,5 @@
 /*}}}*/
 void LevelsetAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
-	parameters->AddObject(iomodel->CopyConstantObject(LevelsetStabilizationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.levelset.stabilization",LevelsetStabilizationEnum));
 	return;
 }
Index: /issm/trunk-jpl/src/c/analyses/LsfReinitializationAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LsfReinitializationAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/LsfReinitializationAnalysis.cpp	(revision 20690)
@@ -18,7 +18,7 @@
 void LsfReinitializationAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
 	int finiteelement=P1Enum;
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,LsfReinitializationAnalysisEnum,finiteelement);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  LsfReinitializationAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -41,5 +41,5 @@
 	}
 
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 }/*}}}*/
 void LsfReinitializationAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 20690)
@@ -10,9 +10,9 @@
 	/*Fetch parameters: */
 	int stabilization;
-	iomodel->FindConstant(&stabilization,MasstransportStabilizationEnum);
+	iomodel->FindConstant(&stabilization,"md.masstransport.stabilization");
 
 	/*Do not add constraints in DG,  they are weakly imposed*/
 	if(stabilization!=3){
-		IoModelToConstraintsx(constraints,iomodel,MasstransportSpcthicknessEnum,MasstransportAnalysisEnum,P1Enum);
+		IoModelToConstraintsx(constraints,iomodel,"md.masstransport.spcthickness",MasstransportAnalysisEnum,P1Enum);
 	}
 
@@ -32,5 +32,5 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&stabilization,MasstransportStabilizationEnum);
+	iomodel->FindConstant(&stabilization,"md.masstransport.stabilization");
 
 	/*Loads only in DG*/
@@ -39,5 +39,5 @@
 		/*Get faces and elements*/
 		CreateFaces(iomodel);
-		iomodel->FetchData(1,ThicknessEnum);
+		iomodel->FetchData(1,"md.geometry.thickness");
 
 		/*First load data:*/
@@ -55,5 +55,5 @@
 
 		/*Free data: */
-		iomodel->DeleteData(1,ThicknessEnum);
+		iomodel->DeleteData(1,"md.geometry.thickness");
 	}
 
@@ -61,6 +61,6 @@
 	IssmDouble *vertex_pairing=NULL;
 	IssmDouble *nodeonbase=NULL;
-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(&nodeonbase,NULL,NULL,MeshVertexonbaseEnum);
+	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,"md.masstransport.vertex_pairing");
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(&nodeonbase,NULL,NULL,"md.mesh.vertexonbase");
 
 	for(int i=0;i<numvertex_pairing;i++){
@@ -90,6 +90,6 @@
 
 	/*free ressources: */
-	iomodel->DeleteData(vertex_pairing,MasstransportVertexPairingEnum);
-	iomodel->DeleteData(nodeonbase,MeshVertexonbaseEnum);
+	iomodel->DeleteData(vertex_pairing,"md.masstransport.vertex_pairing");
+	iomodel->DeleteData(nodeonbase,"md.mesh.vertexonbase");
 
 }/*}}}*/
@@ -98,5 +98,5 @@
 	/*Fetch parameters: */
 	int  stabilization;
-	iomodel->FindConstant(&stabilization,MasstransportStabilizationEnum);
+	iomodel->FindConstant(&stabilization,"md.masstransport.stabilization");
 
 	/*Check in 3d*/
@@ -104,5 +104,5 @@
 
 	/*Create Nodes either DG or CG depending on stabilization*/
-	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	if(stabilization!=3){
 		::CreateNodes(nodes,iomodel,MasstransportAnalysisEnum,P1Enum);
@@ -111,5 +111,5 @@
 		::CreateNodes(nodes,iomodel,MasstransportAnalysisEnum,P1DGEnum);
 	}
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  MasstransportAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -125,9 +125,9 @@
 
 	/*Fetch data needed: */
-	iomodel->FindConstant(&stabilization,MasstransportStabilizationEnum);
-	iomodel->FindConstant(&dakota_analysis,QmuIsdakotaEnum);
-	iomodel->FindConstant(&isgroundingline,TransientIsgroundinglineEnum);
-	iomodel->FindConstant(&ismovingfront,TransientIsmovingfrontEnum);
-	iomodel->FindConstant(&issmb,TransientIssmbEnum);
+	iomodel->FindConstant(&stabilization,"md.masstransport.stabilization");
+	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
+	iomodel->FindConstant(&isgroundingline,"md.transient.isgroundingline");
+	iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
+	iomodel->FindConstant(&issmb,"md.transient.issmb");
 
 	/*Finite element type*/
@@ -147,28 +147,28 @@
 	}
 
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsFloatingiceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,VxEnum);
-	iomodel->FetchDataToInput(elements,VyEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
 
 	if(!issmb){
-		iomodel->FetchDataToInput(elements,SmbMassBalanceEnum);
+		iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum);
 	}
 	if(stabilization==3){
-		iomodel->FetchDataToInput(elements,MasstransportSpcthicknessEnum); //for DG, we need the spc in the element
+		iomodel->FetchDataToInput(elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for DG, we need the spc in the element
 	}
 	if(stabilization==4){
-		iomodel->FetchDataToInput(elements,MasstransportSpcthicknessEnum); //for FCT, we need the spc in the element (penlaties)
+		iomodel->FetchDataToInput(elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for FCT, we need the spc in the element (penlaties)
 	}
 
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
@@ -178,15 +178,15 @@
 	char**  requestedoutputs = NULL;
 
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(MasstransportIsfreesurfaceEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(MasstransportHydrostaticAdjustmentEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(MasstransportStabilizationEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(MasstransportMinThicknessEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(MasstransportPenaltyFactorEnum));
-
-	iomodel->FetchData(&requestedoutputs,&numoutputs,MasstransportRequestedOutputsEnum);
+	parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.isFS",FlowequationIsFSEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.masstransport.isfreesurface",MasstransportIsfreesurfaceEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.masstransport.hydrostatic_adjustment",MasstransportHydrostaticAdjustmentEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.masstransport.stabilization",MasstransportStabilizationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.masstransport.min_thickness",MasstransportMinThicknessEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.masstransport.penalty_factor",MasstransportPenaltyFactorEnum));
+
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.masstransport.requested_outputs");
 	parameters->AddObject(new IntParam(MasstransportNumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new StringArrayParam(MasstransportRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,MasstransportRequestedOutputsEnum);
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.masstransport.requested_outputs");
 	
 	
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 20690)
@@ -15,22 +15,22 @@
 
 	//create penalties for nodes: no node can have a temperature over the melting point
-	iomodel->FetchData(1,MeshVertexonbaseEnum);
+	iomodel->FetchData(1,"md.mesh.vertexonbase");
 	CreateSingleNodeToElementConnectivity(iomodel);
 
 	for(int i=0;i<iomodel->numberofvertices;i++){
 		if(iomodel->my_vertices[i]){
-			if (reCast<int>(iomodel->Data(MeshVertexonbaseEnum)[i])){
+			if (reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){
 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,MeltingAnalysisEnum));
 			}
 		}
 	}
-	iomodel->DeleteData(1,MeshVertexonbaseEnum);
+	iomodel->DeleteData(1,"md.mesh.vertexonbase");
 
 }/*}}}*/
 void MeltingAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
 
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,MeltingAnalysisEnum,P1Enum);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  MeltingAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -55,14 +55,14 @@
 
 	/*Create inputs: */
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
-	iomodel->FetchDataToInput(elements,PressureEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
 }/*}}}*/
 void MeltingAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 20690)
@@ -31,9 +31,9 @@
 
 	/*Create inputs: */
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,MaskOceanLevelsetEnum);
-	iomodel->FetchDataToInput(elements,MaskLandLevelsetEnum);
-	iomodel->FetchDataToInput(elements,SealevelriseDeltathicknessEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.land_levelset",MaskLandLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.sealevelrise.deltathickness",SealevelriseDeltathicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
 
 }/*}}}*/
@@ -60,19 +60,19 @@
 
 	/*some constant parameters: */
-	parameters->AddObject(iomodel->CopyConstantObject(SealevelriseReltolEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SealevelriseAbstolEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SealevelriseMaxiterEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SealevelriseRigidEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SealevelriseElasticEnum));
-
-	iomodel->FetchData(&elastic,SealevelriseElasticEnum);
+	parameters->AddObject(iomodel->CopyConstantObject("md.slr.reltol",SealevelriseReltolEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.slr.abstol",SealevelriseAbstolEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.slr.maxiter",SealevelriseMaxiterEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.slr.rigid",SealevelriseRigidEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.slr.elastic",SealevelriseElasticEnum));
+
+	iomodel->FetchData(&elastic,"md.slr.elastic");
 	if(elastic){
 
 		/*love numbers: */
-		iomodel->FetchData(&love_h,&nl,NULL,SealevelriseLoveHEnum);
-		iomodel->FetchData(&love_k,&nl,NULL,SealevelriseLoveKEnum);
+		iomodel->FetchData(&love_h,&nl,NULL,"md.slr.love_h");
+		iomodel->FetchData(&love_k,&nl,NULL,"md.slr.love_k");
 
 		/*compute elastic green function for a range of angles*/
-		iomodel->FetchData(&degacc,SealevelriseDegaccEnum);
+		iomodel->FetchData(&degacc,"md.slr.degacc");
 		M=reCast<int,IssmDouble>(180./degacc+1.);
 		G_elastic=xNew<IssmDouble>(M);
@@ -133,5 +133,5 @@
 	
 	/*Transitions: */
-	iomodel->FetchData(&transitions,&transitions_M,&transitions_N,&ntransitions,SealevelriseTransitionsEnum);
+	iomodel->FetchData(&transitions,&transitions_M,&transitions_N,&ntransitions,"md.slr.transitions");
 	if(transitions){
 		parameters->AddObject(new DoubleMatArrayParam(SealevelriseTransitionsEnum,transitions,ntransitions,transitions_M,transitions_N));
@@ -147,8 +147,8 @@
 
 	/*Requested outputs*/
-	iomodel->FetchData(&requestedoutputs,&numoutputs,SealevelriseRequestedOutputsEnum);
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.slr.requested_outputs");
 	parameters->AddObject(new IntParam(SealevelriseNumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new StringArrayParam(SealevelriseRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,SealevelriseRequestedOutputsEnum);
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.slr.requested_outputs");
 
 
Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 20690)
@@ -34,78 +34,77 @@
 	
 	/*Figure out smb model: */
-	iomodel->FindConstant(&smb_model,SmbEnum);
-
+	iomodel->FindConstant(&smb_model,"md.smb.model");
 			
 	switch(smb_model){
 		case SMBforcingEnum:
-			iomodel->FetchDataToInput(elements,SmbMassBalanceEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.);
 			break;
 		case SMBgembEnum:
-			iomodel->FetchDataToInput(elements,SmbTaEnum);
-			iomodel->FetchDataToInput(elements,SmbVEnum);
-			iomodel->FetchDataToInput(elements,SmbDswrfEnum);
-			iomodel->FetchDataToInput(elements,SmbDlwrfEnum);
-			iomodel->FetchDataToInput(elements,SmbPEnum);
-			iomodel->FetchDataToInput(elements,SmbEAirEnum);
-			iomodel->FetchDataToInput(elements,SmbPAirEnum);
-			iomodel->FetchDataToInput(elements,SmbZTopEnum);
-			iomodel->FetchDataToInput(elements,SmbDzTopEnum);
-			iomodel->FetchDataToInput(elements,SmbDzMinEnum);
-			iomodel->FetchDataToInput(elements,SmbZYEnum);
-			iomodel->FetchDataToInput(elements,SmbZMaxEnum);
-			iomodel->FetchDataToInput(elements,SmbZMinEnum);
-			iomodel->FetchDataToInput(elements,SmbTmeanEnum);
-			iomodel->FetchDataToInput(elements,SmbCEnum);
-			iomodel->FetchDataToInput(elements,SmbTzEnum);
-			iomodel->FetchDataToInput(elements,SmbVzEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.Ta",SmbTaEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.V",SmbVEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.dswrf",SmbDswrfEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.dlwrf",SmbDlwrfEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.P",SmbPEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.eAir",SmbEAirEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.pAir",SmbPAirEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.zTop",SmbZTopEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.dzTop",SmbDzTopEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.dzMin",SmbDzMinEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.zY",SmbZYEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.zMax",SmbZMaxEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.zMin",SmbZMinEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.Tmean",SmbTmeanEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.C",SmbCEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.Tz",SmbTzEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.Vz",SmbVzEnum);
 			break;
 		case SMBpddEnum:
-			iomodel->FindConstant(&isdelta18o,SmbIsdelta18oEnum);
-			iomodel->FindConstant(&ismungsm,SmbIsmungsmEnum);
-			iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
-			iomodel->FetchDataToInput(elements,SmbS0pEnum);
-			iomodel->FetchDataToInput(elements,SmbS0tEnum);
+			iomodel->FindConstant(&isdelta18o,"md.smb.isdelta18o");
+			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
+			iomodel->FetchDataToInput(elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.s0p",SmbS0pEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.s0t",SmbS0tEnum);
 			if(isdelta18o || ismungsm){
-				iomodel->FetchDataToInput(elements,SmbTemperaturesLgmEnum);
-				iomodel->FetchDataToInput(elements,SmbTemperaturesPresentdayEnum);
-				iomodel->FetchDataToInput(elements,SmbPrecipitationsPresentdayEnum);
-				iomodel->FetchDataToInput(elements,SmbPrecipitationsLgmEnum);
+				iomodel->FetchDataToInput(elements,"md.smb.temperatures_lgm",SmbTemperaturesLgmEnum);
+				iomodel->FetchDataToInput(elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);
+				iomodel->FetchDataToInput(elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);
+				iomodel->FetchDataToInput(elements,"md.smb.precipitations_lgm",SmbPrecipitationsLgmEnum);
 			}
 			else{
-				iomodel->FetchDataToInput(elements,SmbPrecipitationEnum);
-				iomodel->FetchDataToInput(elements,SmbMonthlytemperaturesEnum);
+				iomodel->FetchDataToInput(elements,"md.smb.precipitation",SmbPrecipitationEnum);
+				iomodel->FetchDataToInput(elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum);
 			}
 			break;
 		case SMBd18opddEnum:
-			iomodel->FindConstant(&ismungsm,SmbIsmungsmEnum);
-			iomodel->FindConstant(&isd18opd,SmbIsd18opdEnum);
-			iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
-			iomodel->FetchDataToInput(elements,SmbS0pEnum);
-			iomodel->FetchDataToInput(elements,SmbS0tEnum);
-			if (isd18opd){
-			        iomodel->FetchDataToInput(elements,SmbTemperaturesPresentdayEnum);
-			        iomodel->FetchDataToInput(elements,SmbPrecipitationsPresentdayEnum);
+			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
+			iomodel->FindConstant(&isd18opd,"md.smb.isd18opd");
+			iomodel->FetchDataToInput(elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.s0p",SmbS0pEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.s0t",SmbS0tEnum);
+			if(isd18opd){
+				iomodel->FetchDataToInput(elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);
+				iomodel->FetchDataToInput(elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);
 			}
 
 			break;
 		case SMBgradientsEnum:
-			iomodel->FetchDataToInput(elements,SmbHrefEnum);
-			iomodel->FetchDataToInput(elements,SmbSmbrefEnum);
-			iomodel->FetchDataToInput(elements,SmbBPosEnum);
-			iomodel->FetchDataToInput(elements,SmbBNegEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.href",SmbHrefEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.smbref",SmbSmbrefEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.b_pos",SmbBPosEnum);
+			iomodel->FetchDataToInput(elements,"md.smb.b_neg",SmbBNegEnum);
 			break;
 		case SMBhenningEnum:
-			iomodel->FetchDataToInput(elements,SmbSmbrefEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.smbref",SmbSmbrefEnum,0.);
 			break;
 		case SMBcomponentsEnum:
-			iomodel->FetchDataToInput(elements,SmbAccumulationEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbEvaporationEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbRunoffEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.accumulation",SmbAccumulationEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.evaporation",SmbEvaporationEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.runoff",SmbRunoffEnum,0.);
 			break;
 		case SMBmeltcomponentsEnum:
-			iomodel->FetchDataToInput(elements,SmbAccumulationEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbEvaporationEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbMeltEnum,0.);
-			iomodel->FetchDataToInput(elements,SmbRefreezeEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.accumulation",SmbAccumulationEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.evaporation",SmbEvaporationEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.melt",SmbMeltEnum,0.);
+			iomodel->FetchDataToInput(elements,"md.smb.refreeze",SmbRefreezeEnum,0.);
 			break;
 		default:
@@ -125,8 +124,8 @@
 	int         N,M;
 	
-	parameters->AddObject(iomodel->CopyConstantObject(SmbEnum));
-	
-	iomodel->FindConstant(&smb_model,SmbEnum);
-	iomodel->FindConstant(&interp,TimesteppingInterpForcingsEnum);
+	parameters->AddObject(iomodel->CopyConstantObject("md.smb.model",SmbEnum));
+	
+	iomodel->FindConstant(&smb_model,"md.smb.model");
+	iomodel->FindConstant(&interp,"md.timestepping.interp_forcings");
 	
 	switch(smb_model){
@@ -135,71 +134,71 @@
 			break;
 		case SMBgembEnum:
-			parameters->AddObject(iomodel->CopyConstantObject(SmbAIdxEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbSwIdxEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbDenIdxEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbOutputFreqEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbCldFracEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbT0wetEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbT0dryEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbKEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbASnowEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbAIceEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbDtEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsgraingrowthEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsalbedoEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsshortwaveEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsthermalEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsaccumulationEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsmeltEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsdensificationEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsturbulentfluxEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbInitDensityScalingEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.aIdx",SmbAIdxEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.swIdx",SmbSwIdxEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.denIdx",SmbDenIdxEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.outputFreq",SmbOutputFreqEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.cldFrac",SmbCldFracEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.t0wet",SmbT0wetEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.t0dry",SmbT0dryEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.K",SmbKEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.aSnow",SmbASnowEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.aIce",SmbAIceEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.dt",SmbDtEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isgraingrowth",SmbIsgraingrowthEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isalbedo",SmbIsalbedoEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isshortwave",SmbIsshortwaveEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isthermal",SmbIsthermalEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isaccumulation",SmbIsaccumulationEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismelt",SmbIsmeltEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdensification",SmbIsdensificationEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isturbulentflux",SmbIsturbulentfluxEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.InitDensityScaling",SmbInitDensityScalingEnum));
 			break;
 		case SMBpddEnum:
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsdelta18oEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsmungsmEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbDesfacEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapsEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapslgmEnum));
-			iomodel->FindConstant(&isdelta18o,SmbIsdelta18oEnum);
-			iomodel->FindConstant(&ismungsm,SmbIsmungsmEnum);
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isdelta18o",SmbIsdelta18oEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.desfac",SmbDesfacEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlapslgm",SmbRlapslgmEnum));
+			iomodel->FindConstant(&isdelta18o,"md.smb.isdelta18o");
+			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
 
 			if(ismungsm){
-			  iomodel->FetchData(&temp,&N,&M,SmbPfacEnum); _assert_(N==2);
+			  iomodel->FetchData(&temp,&N,&M,"md.smb.Pfac"); _assert_(N==2);
 			  parameters->AddObject(new TransientParam(SmbPfacEnum,&temp[0],&temp[M],interp,M));
-			  iomodel->DeleteData(temp,SmbPfacEnum);
+			  iomodel->DeleteData(temp,"md.smb.Pfac");
 			
-			  iomodel->FetchData(&temp,&N,&M,SmbTdiffEnum); _assert_(N==2);
+			  iomodel->FetchData(&temp,&N,&M,"md.smb.Tdiff"); _assert_(N==2);
 			  parameters->AddObject(new TransientParam(SmbTdiffEnum,&temp[0],&temp[M],interp,M));
-			  iomodel->DeleteData(temp,SmbTdiffEnum);
-
-			  iomodel->FetchData(&temp,&N,&M,SmbSealevEnum); _assert_(N==2);
+			  iomodel->DeleteData(temp,"md.smb.Tdiff");
+
+			  iomodel->FetchData(&temp,&N,&M,"md.smb.sealev"); _assert_(N==2);
 			  parameters->AddObject(new TransientParam(SmbSealevEnum,&temp[0],&temp[M],interp,M));
-			  iomodel->DeleteData(temp,SmbSealevEnum);
+			  iomodel->DeleteData(temp,"md.smb.sealev");
 			}
 			if(isdelta18o){
-				iomodel->FetchData(&temp,&N,&M,SmbDelta18oEnum); _assert_(N==2);
+				iomodel->FetchData(&temp,&N,&M,"md.smb.delta18o"); _assert_(N==2);
 				parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M));
-				iomodel->DeleteData(temp,SmbDelta18oEnum);
-
-				iomodel->FetchData(&temp,&N,&M,SmbDelta18oSurfaceEnum); _assert_(N==2);
+				iomodel->DeleteData(temp,"md.smb.delta18o");
+
+				iomodel->FetchData(&temp,&N,&M,"md.smb.delta18o_surface"); _assert_(N==2);
 				parameters->AddObject(new TransientParam(SmbDelta18oSurfaceEnum,&temp[0],&temp[M],interp,M));
-				iomodel->DeleteData(temp,SmbDelta18oSurfaceEnum);
+				iomodel->DeleteData(temp,"md.smb.delta18o_surface");
 			}
 			break;
 		case SMBd18opddEnum:
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsmungsmEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbIsd18opdEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbDesfacEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapsEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SmbRlapslgmEnum));
-			iomodel->FindConstant(&ismungsm,SmbIsmungsmEnum);
-			iomodel->FindConstant(&isd18opd,SmbIsd18opdEnum);
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ismungsm",SmbIsmungsmEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.isd18opd",SmbIsd18opdEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.desfac",SmbDesfacEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlaps",SmbRlapsEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.rlapslgm",SmbRlapslgmEnum));
+			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
+			iomodel->FindConstant(&isd18opd,"md.smb.isd18opd");
 			if(isd18opd){
-				iomodel->FetchData(&temp,&N,&M,SmbDelta18oEnum); _assert_(N==2);
+				iomodel->FetchData(&temp,&N,&M,"md.smb.delta18o"); _assert_(N==2);
 				parameters->AddObject(new TransientParam(SmbDelta18oEnum,&temp[0],&temp[M],interp,M));
-				iomodel->DeleteData(temp,SmbDelta18oEnum);
+				iomodel->DeleteData(temp,"md.smb.delta18o");
 				
-				parameters->AddObject(iomodel->CopyConstantObject(SmbDpermilEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.smb.dpermil",SmbDpermilEnum));
 			}
 			break;
@@ -220,8 +219,8 @@
 	}
 
-	iomodel->FetchData(&requestedoutputs,&numoutputs,SmbRequestedOutputsEnum);
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.smb.requested_outputs");
 	parameters->AddObject(new IntParam(SmbNumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new StringArrayParam(SmbRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,SmbRequestedOutputsEnum);
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.smb.requested_outputs");
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 20690)
@@ -41,12 +41,12 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&g,ConstantsGEnum);
-	iomodel->FindConstant(&rho_ice,MaterialsRhoIceEnum);
-	iomodel->FindConstant(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	iomodel->FindConstant(&isSIA,FlowequationIsSIAEnum);
-	iomodel->FindConstant(&isSSA,FlowequationIsSSAEnum);
-	iomodel->FindConstant(&isL1L2,FlowequationIsL1L2Enum);
-	iomodel->FindConstant(&isHO,FlowequationIsHOEnum);
-	iomodel->FindConstant(&isFS,FlowequationIsFSEnum);
+	iomodel->FindConstant(&g,"md.constants.g");
+	iomodel->FindConstant(&rho_ice,"md.materials.rho_ice");
+	iomodel->FindConstant(&FSreconditioning,"md.stressbalance.FSreconditioning");
+	iomodel->FindConstant(&isSIA,"md.flowequation.isSIA");
+	iomodel->FindConstant(&isSSA,"md.flowequation.isSSA");
+	iomodel->FindConstant(&isL1L2,"md.flowequation.isL1L2");
+	iomodel->FindConstant(&isHO,"md.flowequation.isHO");
+	iomodel->FindConstant(&isFS,"md.flowequation.isFS");
 
 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
@@ -63,8 +63,8 @@
 
 		/*Get finite element type*/
-		if(isSSA)       iomodel->FindConstant(&finiteelement,FlowequationFeSSAEnum);
+		if(isSSA)       iomodel->FindConstant(&finiteelement,"md.flowequation.fe_SSA");
 		else if(isL1L2) finiteelement = P1Enum;
-		else if(isHO)   iomodel->FindConstant(&finiteelement,FlowequationFeHOEnum);
-		else if(isFS){  iomodel->FindConstant(&finiteelement,FlowequationFeFSEnum);
+		else if(isHO)   iomodel->FindConstant(&finiteelement,"md.flowequation.fe_HO");
+		else if(isFS){  iomodel->FindConstant(&finiteelement,"md.flowequation.fe_FS");
 			/*Deduce velocity interpolation from finite element*/
 			switch(finiteelement){
@@ -89,13 +89,13 @@
 
 			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
-			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
-			iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
-			iomodel->FetchData(&nodeonbase,NULL,NULL,MeshVertexonbaseEnum);
-			iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
+			iomodel->FetchData(&vertices_type,NULL,NULL,"md.flowequation.vertex_equation");
+			iomodel->FetchData(&nodeonFS,NULL,NULL,"md.flowequation.borderFS");
+			iomodel->FetchData(&nodeonbase,NULL,NULL,"md.mesh.vertexonbase");
+			iomodel->FetchData(&groundedice_ls,NULL,NULL,"md.mask.groundedice_levelset");
 			if(iomodel->domaintype==Domain3DEnum){
-				iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
+				iomodel->FetchData(&spcvz,&Mz,&Nz,"md.stressbalance.spcvz");
 			}
 			else if (iomodel->domaintype==Domain2DverticalEnum){
-				iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvyEnum);
+				iomodel->FetchData(&spcvz,&Mz,&Nz,"md.stressbalance.spcvy");
 			}
 			else{
@@ -103,27 +103,27 @@
 			}
 			if(iomodel->domaintype==Domain3DEnum){
-				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,0);
-				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,1);
+				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
+				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,finiteelement,1);
 				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,2);
-				iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
+				iomodel->DeleteData(spcvz,"md.stressbalance.spcvz");
 			}
 			else if (iomodel->domaintype==Domain2DverticalEnum){
-				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,0);
+				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
 				IoModelToConstraintsx(constraints,iomodel,spcvz,Mz,Nz,StressbalanceAnalysisEnum,finiteelement,1);
-				iomodel->DeleteData(spcvz,StressbalanceSpcvyEnum);
+				iomodel->DeleteData(spcvz,"md.stressbalance.spcvy");
 			}
 			else{
 				_error_("not supported yet");
 			}
-			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
-			iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
-			iomodel->DeleteData(nodeonbase,MeshVertexonbaseEnum);
-			iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
+			iomodel->DeleteData(vertices_type,"md.flowequation.vertex_equation");
+			iomodel->DeleteData(nodeonFS,"md.flowequation.borderFS");
+			iomodel->DeleteData(nodeonbase,"md.mesh.vertexonbase");
+			iomodel->DeleteData(groundedice_ls,"md.mask.groundedice_levelset");
 
 			/*Pressure spc*/
 			count = constraints->Size();
-			iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
-			iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
-			iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+			iomodel->FetchData(&vertices_type,NULL,NULL,"md.flowequation.vertex_equation");
+			iomodel->FetchData(&surface,NULL,NULL,"md.geometry.surface");
+			iomodel->FetchData(&z,NULL,NULL,"md.mesh.z");
 			switch(finiteelement){
 				case P1Enum:
@@ -173,12 +173,12 @@
 					_error_("not implemented yet");
 			}
-			iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
-			iomodel->DeleteData(surface,SurfaceEnum);
-			iomodel->DeleteData(z,MeshZEnum);
+			iomodel->DeleteData(vertices_type,"md.flowequation.vertex_equation");
+			iomodel->DeleteData(surface,"md.geometry.surface");
+			iomodel->DeleteData(z,"md.mesh.z");
 		}
 		else{
-			IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceAnalysisEnum,finiteelement,0);
+			IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceAnalysisEnum,finiteelement,0);
 			if(iomodel->domaintype!=Domain2DverticalEnum){
-				IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceAnalysisEnum,finiteelement,1);
+				IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceAnalysisEnum,finiteelement,1);
 			}
 		}
@@ -188,15 +188,15 @@
 
 	/*Constraints: fetch data: */
-	iomodel->FetchData(&spcvx,&Mx,&Nx,StressbalanceSpcvxEnum);
-	iomodel->FetchData(&spcvy,&My,&Ny,StressbalanceSpcvyEnum);
-	iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
-	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
-	if(iomodel->domaintype==Domain3DEnum)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
-	if(iomodel->domaintype==Domain3DEnum)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
-	if(iomodel->domaintype==Domain3DEnum)iomodel->FetchData(&nodeonbase,NULL,NULL,MeshVertexonbaseEnum);
-	if(iomodel->domaintype==Domain3DEnum)iomodel->FetchData(&groundedice_ls,NULL,NULL,MaskGroundediceLevelsetEnum);
-	iomodel->FetchData(&vertices_type,NULL,NULL,FlowequationVertexEquationEnum);
-	iomodel->FetchData(&surface,NULL,NULL,SurfaceEnum);
-	iomodel->FetchData(&z,NULL,NULL,MeshZEnum);
+	iomodel->FetchData(&spcvx,&Mx,&Nx,"md.stressbalance.spcvx");
+	iomodel->FetchData(&spcvy,&My,&Ny,"md.stressbalance.spcvy");
+	iomodel->FetchData(&spcvz,&Mz,&Nz,"md.stressbalance.spcvz");
+	iomodel->FetchData(&nodeonSSA,NULL,NULL,"md.flowequation.borderSSA");
+	if(iomodel->domaintype==Domain3DEnum)iomodel->FetchData(&nodeonHO,NULL,NULL,"md.flowequation.borderHO");
+	if(iomodel->domaintype==Domain3DEnum)iomodel->FetchData(&nodeonFS,NULL,NULL,"md.flowequation.borderFS");
+	if(iomodel->domaintype==Domain3DEnum)iomodel->FetchData(&nodeonbase,NULL,NULL,"md.mesh.vertexonbase");
+	if(iomodel->domaintype==Domain3DEnum)iomodel->FetchData(&groundedice_ls,NULL,NULL,"md.mask.groundedice_levelset");
+	iomodel->FetchData(&vertices_type,NULL,NULL,"md.flowequation.vertex_equation");
+	iomodel->FetchData(&surface,NULL,NULL,"md.geometry.surface");
+	iomodel->FetchData(&z,NULL,NULL,"md.mesh.z");
 
 	/*Initialize counter: */
@@ -418,15 +418,15 @@
 
 	/*Free data: */
-	iomodel->DeleteData(spcvx,StressbalanceSpcvxEnum);
-	iomodel->DeleteData(spcvy,StressbalanceSpcvyEnum);
-	iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
-	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
-	if(iomodel->domaintype==Domain3DEnum)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
-	if(iomodel->domaintype==Domain3DEnum)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
-	if(iomodel->domaintype==Domain3DEnum)iomodel->DeleteData(nodeonbase,MeshVertexonbaseEnum);
-	if(iomodel->domaintype==Domain3DEnum)iomodel->DeleteData(groundedice_ls,MaskGroundediceLevelsetEnum);
-	iomodel->DeleteData(vertices_type,FlowequationVertexEquationEnum);
-	iomodel->DeleteData(surface,SurfaceEnum);
-	iomodel->DeleteData(z,MeshZEnum);
+	iomodel->DeleteData(spcvx,"md.stressbalance.spcvx");
+	iomodel->DeleteData(spcvy,"md.stressbalance.spcvy");
+	iomodel->DeleteData(spcvz,"md.stressbalance.spcvz");
+	iomodel->DeleteData(nodeonSSA,"md.flowequation.borderSSA");
+	if(iomodel->domaintype==Domain3DEnum)iomodel->DeleteData(nodeonHO,"md.flowequation.borderHO");
+	if(iomodel->domaintype==Domain3DEnum)iomodel->DeleteData(nodeonFS,"md.flowequation.borderFS");
+	if(iomodel->domaintype==Domain3DEnum)iomodel->DeleteData(nodeonbase,"md.mesh.vertexonbase");
+	if(iomodel->domaintype==Domain3DEnum)iomodel->DeleteData(groundedice_ls,"md.mask.groundedice_levelset");
+	iomodel->DeleteData(vertices_type,"md.flowequation.vertex_equation");
+	iomodel->DeleteData(surface,"md.geometry.surface");
+	iomodel->DeleteData(z,"md.mesh.z");
 
 	/*Free resources:*/
@@ -451,9 +451,9 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&isL1L2,FlowequationIsL1L2Enum);
-	iomodel->FindConstant(&isFS,FlowequationIsFSEnum);
-	iomodel->FindConstant(&isSSA,FlowequationIsSSAEnum);
-	iomodel->FindConstant(&isHO,FlowequationIsHOEnum);
-	iomodel->FindConstant(&numrifts,RiftsNumriftsEnum);
+	iomodel->FindConstant(&isL1L2,"md.flowequation.isL1L2");
+	iomodel->FindConstant(&isFS,"md.flowequation.isFS");
+	iomodel->FindConstant(&isSSA,"md.flowequation.isSSA");
+	iomodel->FindConstant(&isHO,"md.flowequation.isHO");
+	iomodel->FindConstant(&numrifts,"md.rifts.numrifts");
 
 	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
@@ -464,5 +464,5 @@
 
 	/*Create Penpair for penalties: */
-	iomodel->FetchData(&penalties,&numpenalties,NULL,StressbalanceVertexPairingEnum);
+	iomodel->FetchData(&penalties,&numpenalties,NULL,"md.stressbalance.vertex_pairing");
 
 	for(i=0;i<numpenalties;i++){
@@ -484,10 +484,10 @@
 
 	/*free ressources: */
-	iomodel->DeleteData(penalties,StressbalanceVertexPairingEnum);
+	iomodel->DeleteData(penalties,"md.stressbalance.vertex_pairing");
 
 	/*Create Riffront loads for rifts: */
 	if(numrifts){
-		iomodel->FetchData(&riftinfo,&numriftsegments,NULL,RiftsRiftstructEnum);
-		iomodel->FetchData(5,RiftsRiftstructEnum,ThicknessEnum,BaseEnum,SurfaceEnum,MaskGroundediceLevelsetEnum);
+		iomodel->FetchData(&riftinfo,&numriftsegments,NULL,"md.rifts.riftstruct");
+		iomodel->FetchData(5,"md.rifts.riftstruct","md.geometry.thickness","md.geometry.base","md.geometry.surface","md.mask.groundedice_levelset");
 		for(i=0;i<numriftsegments;i++){
 			if(iomodel->my_elements[reCast<int,IssmDouble>(*(riftinfo+RIFTINFOSIZE*i+2))-1]){
@@ -496,5 +496,5 @@
 			}
 		}
-		iomodel->DeleteData(5,RiftsRiftstructEnum,ThicknessEnum,BaseEnum,SurfaceEnum,MaskGroundediceLevelsetEnum);
+		iomodel->DeleteData(5,"md.rifts.riftstruct","md.geometry.thickness","md.geometry.base","md.geometry.surface","md.mask.groundedice_levelset");
 		xDelete<IssmDouble>(riftinfo);
 	}
@@ -507,8 +507,8 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&isSSA,FlowequationIsSSAEnum);
-	iomodel->FindConstant(&isL1L2,FlowequationIsL1L2Enum);
-	iomodel->FindConstant(&isHO,FlowequationIsHOEnum);
-	iomodel->FindConstant(&isFS,FlowequationIsFSEnum);
+	iomodel->FindConstant(&isSSA,"md.flowequation.isSSA");
+	iomodel->FindConstant(&isL1L2,"md.flowequation.isL1L2");
+	iomodel->FindConstant(&isHO,"md.flowequation.isHO");
+	iomodel->FindConstant(&isFS,"md.flowequation.isFS");
 
 	/*Now, check that we have non SIA elements */
@@ -527,5 +527,5 @@
 		if(isSSA){
 			approximation=SSAApproximationEnum;
-			iomodel->FindConstant(&finiteelement,FlowequationFeSSAEnum);
+			iomodel->FindConstant(&finiteelement,"md.flowequation.fe_SSA");
 		}
 		else if(isL1L2){
@@ -535,15 +535,15 @@
 		else if(isHO){
 			approximation = HOApproximationEnum;
-			iomodel->FindConstant(&finiteelement,FlowequationFeHOEnum);
+			iomodel->FindConstant(&finiteelement,"md.flowequation.fe_HO");
 		}
 		else if(isFS){
 			approximation = FSApproximationEnum;
-			iomodel->FindConstant(&finiteelement,FlowequationFeFSEnum);
-		}
-		iomodel->FetchData(3,FlowequationBorderSSAEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
-		if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(3,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum,FlowequationBorderFSEnum);
+			iomodel->FindConstant(&finiteelement,"md.flowequation.fe_FS");
+		}
+		iomodel->FetchData(3,"md.flowequation.borderSSA","md.flowequation.vertex_equation","md.stressbalance.referential");
+		if(iomodel->domaintype!=Domain2DhorizontalEnum) iomodel->FetchData(3,"md.mesh.vertexonbase","md.mesh.vertexonsurface","md.flowequation.borderFS");
 		::CreateNodes(nodes,iomodel,StressbalanceAnalysisEnum,finiteelement,approximation);
-		iomodel->DeleteData(6,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
-					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+		iomodel->DeleteData(6,"md.mesh.vertexonbase","md.mesh.vertexonsurface","md.flowequation.borderSSA","md.flowequation.vertex_equation",
+					"md.stressbalance.referential","md.flowequation.borderFS");
 	}
 	else{
@@ -554,11 +554,11 @@
 		if(!nodes) nodes = new Nodes();
 
-		iomodel->FetchData(6,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
-					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+		iomodel->FetchData(6,"md.mesh.vertexonbase","md.mesh.vertexonsurface","md.flowequation.borderSSA","md.flowequation.borderFS",
+					"md.flowequation.vertex_equation","md.stressbalance.referential");
 		if(isFS){
 			/*P1+ velocity*/
 			for(int i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
+					approximation=reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]);
 					if(approximation==FSApproximationEnum)  approximation=FSvelocityEnum;
 					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,approximation));
@@ -575,5 +575,5 @@
 			for(int i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]);
+					approximation=reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]);
 					node = new Node(iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+i+1,iomodel->numberofvertices+iomodel->numberofelements+i,lid++,i,iomodel,StressbalanceAnalysisEnum,FSpressureEnum);
 					if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum){
@@ -587,10 +587,10 @@
 			for(int i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])));
+					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceAnalysisEnum,reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i])));
 				}
 			}
 		}
-		iomodel->DeleteData(6,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
-					FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+		iomodel->DeleteData(6,"md.mesh.vertexonbase","md.mesh.vertexonsurface","md.flowequation.borderSSA","md.flowequation.borderFS",
+					"md.flowequation.vertex_equation","md.stressbalance.referential");
 	}
 }/*}}}*/
@@ -681,13 +681,13 @@
 
 	/*Fetch constants needed: */
-	iomodel->FindConstant(&isSSA,FlowequationIsSSAEnum);
-	iomodel->FindConstant(&isL1L2,FlowequationIsL1L2Enum);
-	iomodel->FindConstant(&isHO,FlowequationIsHOEnum);
-	iomodel->FindConstant(&isFS,FlowequationIsFSEnum);
-	iomodel->FindConstant(&control_analysis,InversionIscontrolEnum);
-	iomodel->FindConstant(&dakota_analysis,QmuIsdakotaEnum);
-	iomodel->FindConstant(&materials_type,MaterialsEnum);
-	iomodel->FindConstant(&ismovingfront,TransientIsmovingfrontEnum);
-	iomodel->FindConstant(&frictionlaw,FrictionLawEnum);
+	iomodel->FindConstant(&isSSA,"md.flowequation.isSSA");
+	iomodel->FindConstant(&isL1L2,"md.flowequation.isL1L2");
+	iomodel->FindConstant(&isHO,"md.flowequation.isHO");
+	iomodel->FindConstant(&isFS,"md.flowequation.isFS");
+	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
+	iomodel->FindConstant(&materials_type,"md.materials.type");
+	iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
+	iomodel->FindConstant(&frictionlaw,"md.friction.law");
 
 	/*return if no processing required*/
@@ -695,5 +695,5 @@
 
 	/*Fetch data needed and allocate vectors: */
-	iomodel->FetchData(1,FlowequationElementEquationEnum);
+	iomodel->FetchData(1,"md.flowequation.element_equation");
 	finiteelement_list=xNewZeroInit<int>(iomodel->numberofelements);
 
@@ -706,8 +706,8 @@
 	/*Get finite element type*/
 	if(!iscoupling){
-		if(isSSA)       iomodel->FindConstant(&finiteelement,FlowequationFeSSAEnum);
+		if(isSSA)       iomodel->FindConstant(&finiteelement,"md.flowequation.fe_SSA");
 		else if(isL1L2) finiteelement = P1Enum;
-		else if(isHO)   iomodel->FindConstant(&finiteelement,FlowequationFeHOEnum);
-		else if(isFS)   iomodel->FindConstant(&finiteelement,FlowequationFeFSEnum);
+		else if(isHO)   iomodel->FindConstant(&finiteelement,"md.flowequation.fe_HO");
+		else if(isFS)   iomodel->FindConstant(&finiteelement,"md.flowequation.fe_FS");
 		for(int i=0;i<iomodel->numberofelements;i++){
 			finiteelement_list[i]=finiteelement;
@@ -717,5 +717,5 @@
 		if(isFS){
 			for(int i=0;i<iomodel->numberofelements;i++){
-				approximation=reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[i]);
+				approximation=reCast<int>(iomodel->Data("md.flowequation.element_equation")[i]);
 				if(approximation==FSApproximationEnum || approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
 					finiteelement_list[i]=MINIcondensedEnum;
@@ -745,33 +745,33 @@
 
 	/*Create inputs: */
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,VxEnum,0.);
-	iomodel->FetchDataToInput(elements,VyEnum,0.);
-	iomodel->FetchDataToInput(elements,LoadingforceXEnum);
-	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum,0.);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum,0.);
+	iomodel->FetchDataToInput(elements,"md.stressbalance.loadingforcex",LoadingforceXEnum);
+	iomodel->FetchDataToInput(elements,"md.stressbalance.loadingforcey",LoadingforceYEnum);
 	#ifdef LATERALFRICTION
-	iomodel->FetchDataToInput(elements,MeshVertexonboundaryEnum);
+	iomodel->FetchDataToInput(elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum);
 	#endif
 
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 	if(iomodel->domaintype==Domain3DEnum){
-		iomodel->FetchDataToInput(elements,FlowequationBorderFSEnum);
-		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
-		iomodel->FetchDataToInput(elements,VzEnum,0.);
+		iomodel->FetchDataToInput(elements,"md.flowequation.borderFS",FlowequationBorderFSEnum);
+		iomodel->FetchDataToInput(elements,"md.stressbalance.loadingforcez",LoadingforceZEnum);
+		iomodel->FetchDataToInput(elements,"md.initialization.vz",VzEnum,0.);
 	}
 	if(isFS){
-		iomodel->FetchDataToInput(elements,PressureEnum,0.);
-		iomodel->FetchDataToInput(elements,BasalforcingsFloatingiceMeltingRateEnum,0.);
+		iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum,0.);
+		iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum,0.);
 	}
 	/*LATH parameters*/
-	iomodel->FindConstant(&fe_FS,FlowequationFeFSEnum);
+	iomodel->FindConstant(&fe_FS,"md.flowequation.fe_FS");
 	if(fe_FS==LATaylorHoodEnum || fe_FS==LACrouzeixRaviartEnum){
 		InputUpdateFromConstantx(elements,0.,SigmaNNEnum);
@@ -781,45 +781,45 @@
 	switch(frictionlaw){
 		case 1:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
 			break;
 		case 2:
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionMEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
 			break;
 		case 3:
-			iomodel->FindConstant(&FrictionCoupling,FrictionCouplingEnum);
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionAsEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
-			if (FrictionCoupling==0){
-				iomodel->FetchDataToInput(elements,FrictionEffectivePressureEnum);
+			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.As",FrictionAsEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+			if(FrictionCoupling==0){
+				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
 			}
 			break;
 		case 4:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
-			iomodel->FetchDataToInput(elements,PressureEnum);
-			iomodel->FetchDataToInput(elements,TemperatureEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		case 5:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
-			iomodel->FetchDataToInput(elements,FrictionWaterLayerEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.water_layer",FrictionWaterLayerEnum);
 			break;
 		case 6:
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionMEnum);
-			iomodel->FetchDataToInput(elements,PressureEnum);
-			iomodel->FetchDataToInput(elements,TemperatureEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		case 7:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionCoefficientcoulombEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
 			break;
 		default:
@@ -832,5 +832,5 @@
 
 	/*Free data: */
-	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+	iomodel->DeleteData(1,"md.flowequation.element_equation");
 	xDelete<int>(finiteelement_list);
 }/*}}}*/
@@ -843,49 +843,49 @@
 	int     materials_type;
 
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSIAEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSSAEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsL1L2Enum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsHOEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeFSEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRestolEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceReltolEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceAbstolEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceIsnewtonEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalancePenaltyFactorEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRiftPenaltyThresholdEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceFSreconditioningEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceShelfDampeningEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(StressbalanceViscosityOvershootEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FrictionLawEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.isSIA",FlowequationIsSIAEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.isSSA",FlowequationIsSSAEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.isL1L2",FlowequationIsL1L2Enum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.isHO",FlowequationIsHOEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.isFS",FlowequationIsFSEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.fe_FS",FlowequationFeFSEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.restol",StressbalanceRestolEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.reltol",StressbalanceReltolEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.abstol",StressbalanceAbstolEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.isnewton",StressbalanceIsnewtonEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.maxiter",StressbalanceMaxiterEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.penalty_factor",StressbalancePenaltyFactorEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.rift_penalty_threshold",StressbalanceRiftPenaltyThresholdEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.FSreconditioning",StressbalanceFSreconditioningEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.shelf_dampening",StressbalanceShelfDampeningEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.viscosity_overshoot",StressbalanceViscosityOvershootEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.friction.law",FrictionLawEnum));
 
 	/*XTH LATH parameters*/
-	iomodel->FindConstant(&fe_FS,FlowequationFeFSEnum);
+	iomodel->FindConstant(&fe_FS,"md.flowequation.fe_FS");
 	if(fe_FS==XTaylorHoodEnum || fe_FS==LATaylorHoodEnum || fe_FS==LACrouzeixRaviartEnum){
-		parameters->AddObject(iomodel->CopyConstantObject(AugmentedLagrangianREnum));
-		parameters->AddObject(iomodel->CopyConstantObject(AugmentedLagrangianRlambdaEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(AugmentedLagrangianThetaEnum));
-	}
-
-	iomodel->FindConstant(&materials_type,MaterialsEnum);
+		parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.augmented_lagrangian_r",AugmentedLagrangianREnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.augmented_lagrangian_rlambda",AugmentedLagrangianRlambdaEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.XTH_theta",AugmentedLagrangianThetaEnum));
+	}
+
+	iomodel->FindConstant(&materials_type,"md.materials.type");
 	if(materials_type==MatdamageiceEnum){
-		parameters->AddObject(iomodel->CopyConstantObject(DamageLawEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageKappaEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(DamageStressThresholdEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.law",DamageLawEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.kappa",DamageKappaEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.damage.stress_threshold",DamageStressThresholdEnum));
 	}
 
 	/*Requested outputs*/
-	iomodel->FetchData(&requestedoutputs,&numoutputs,StressbalanceRequestedOutputsEnum);
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.stressbalance.requested_outputs");
 	parameters->AddObject(new IntParam(StressbalanceNumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new StringArrayParam(StressbalanceRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,StressbalanceRequestedOutputsEnum);
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.stressbalance.requested_outputs");
 
 	/*Deal with friction parameters*/
 	int frictionlaw;
-	iomodel->FindConstant(&frictionlaw,FrictionLawEnum);
-	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject(FrictionGammaEnum));
-	if(frictionlaw==3) parameters->AddObject(iomodel->CopyConstantObject(FrictionCouplingEnum));
-	if(frictionlaw==5) parameters->AddObject(iomodel->CopyConstantObject(FrictionFEnum));
+	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+	if(frictionlaw==3) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
+	if(frictionlaw==5) parameters->AddObject(iomodel->CopyConstantObject("md.friction.f",FrictionFEnum));
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 20690)
@@ -13,9 +13,9 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&isSIA,FlowequationIsSIAEnum);
-	iomodel->FindConstant(&isSSA,FlowequationIsSSAEnum);
-	iomodel->FindConstant(&isL1L2,FlowequationIsL1L2Enum);
-	iomodel->FindConstant(&isHO,FlowequationIsHOEnum);
-	iomodel->FindConstant(&isFS,FlowequationIsFSEnum);
+	iomodel->FindConstant(&isSIA,"md.flowequation.isSIA");
+	iomodel->FindConstant(&isSSA,"md.flowequation.isSSA");
+	iomodel->FindConstant(&isL1L2,"md.flowequation.isL1L2");
+	iomodel->FindConstant(&isHO,"md.flowequation.isHO");
+	iomodel->FindConstant(&isFS,"md.flowequation.isFS");
 
 	/*Now, is the flag isSIA on? otherwise, do nothing: */
@@ -30,10 +30,10 @@
 	/*If no coupling, call Regular IoModelToConstraintsx, else, OLD stuff, keep for now*/
 	if(!iscoupling){
-		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvxEnum,StressbalanceSIAAnalysisEnum,P1Enum,0);
-		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvyEnum,StressbalanceSIAAnalysisEnum,P1Enum,1);
+		IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvx",StressbalanceSIAAnalysisEnum,P1Enum,0);
+		IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvy",StressbalanceSIAAnalysisEnum,P1Enum,1);
 	}
 	else{
 		/*Fetch data: */
-		iomodel->FetchData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
+		iomodel->FetchData(3,"md.stressbalance.spcvx","md.stressbalance.spcvy","md.flowequation.vertex_equation");
 
 		/*Initialize conunter*/
@@ -44,5 +44,5 @@
 			/*keep only this partition's nodes:*/
 			if((iomodel->my_vertices[i])){
-				if (reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
+				if (reCast<int,IssmDouble>(iomodel->Data("md.flowequation.vertex_equation")[i])!=SIAApproximationEnum){
 
 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,0,StressbalanceSIAAnalysisEnum));
@@ -53,11 +53,11 @@
 				}
 				else{
-					if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvxEnum)[i])){
-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,iomodel->Data(StressbalanceSpcvxEnum)[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+					if (!xIsNan<IssmDouble>(iomodel->Data("md.stressbalance.spcvx")[i])){
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,iomodel->Data("md.stressbalance.spcvx")[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
 					}
 
-					if (!xIsNan<IssmDouble>(iomodel->Data(StressbalanceSpcvyEnum)[i])){
-						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(StressbalanceSpcvyEnum)[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+					if (!xIsNan<IssmDouble>(iomodel->Data("md.stressbalance.spcvy")[i])){
+						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data("md.stressbalance.spcvy")[i],StressbalanceSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
 						count++;
 					}
@@ -68,5 +68,5 @@
 
 	/*Free data: */
-	iomodel->DeleteData(3,StressbalanceSpcvxEnum,StressbalanceSpcvyEnum,FlowequationVertexEquationEnum);
+	iomodel->DeleteData(3,"md.stressbalance.spcvx","md.stressbalance.spcvy","md.flowequation.vertex_equation");
 
 }/*}}}*/
@@ -83,5 +83,5 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&isSIA,FlowequationIsSIAEnum);
+	iomodel->FindConstant(&isSIA,"md.flowequation.isSIA");
 
 	/*Now, is the flag isSIA on? otherwise, do nothing: */
@@ -90,7 +90,7 @@
 	/*First create nodes*/
 	int    lid=0;
-	iomodel->FetchData(4,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+	iomodel->FetchData(4,"md.flowequation.borderSSA","md.flowequation.borderFS","md.flowequation.vertex_equation","md.stressbalance.referential");
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+		iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	}
 
@@ -99,8 +99,8 @@
 
 			/*Create new node if is in this processor's partition*/
-			node = new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceSIAAnalysisEnum,reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i]));
+			node = new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,StressbalanceSIAAnalysisEnum,reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i]));
 
 			/*Deactivate node if not SIA*/
-			if(reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[i])!=SIAApproximationEnum){
+			if(reCast<int>(iomodel->Data("md.flowequation.vertex_equation")[i])!=SIAApproximationEnum){
 				node->Deactivate();
 			}
@@ -111,6 +111,5 @@
 	}
 
-	iomodel->DeleteData(6,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
-				FlowequationVertexEquationEnum,StressbalanceReferentialEnum);
+	iomodel->DeleteData(6,"md.mesh.vertexonbase","md.mesh.vertexonsurface","md.flowequation.borderSSA","md.flowequation.borderFS","md.flowequation.vertex_equation","md.stressbalance.referential");
 
 }/*}}}*/
@@ -124,12 +123,12 @@
 	bool   ismovingfront;
 	int    frictionlaw;
-	iomodel->FindConstant(&isSIA,FlowequationIsSIAEnum);
-	iomodel->FindConstant(&ismovingfront,TransientIsmovingfrontEnum);
-	iomodel->FindConstant(&frictionlaw,FrictionLawEnum);
+	iomodel->FindConstant(&isSIA,"md.flowequation.isSIA");
+	iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
+	iomodel->FindConstant(&frictionlaw,"md.friction.law");
 
 	/*Now, is the flag SIA on? otherwise, do nothing: */
 	if (!isSIA)return;
 
-	iomodel->FetchData(1,FlowequationElementEquationEnum);
+	iomodel->FetchData(1,"md.flowequation.element_equation");
 
 	/*Update elements: */
@@ -146,17 +145,17 @@
 	switch(frictionlaw){
 		case 1:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
 			break;
 		case 2:
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionMEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
 			break;
 		case 6:
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionMEnum);
-			iomodel->FetchDataToInput(elements,PressureEnum);
-			iomodel->FetchDataToInput(elements,TemperatureEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		default:
@@ -164,13 +163,13 @@
 	}
 
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
 	if(ismovingfront){
 		if(iomodel->domaintype!=Domain2DhorizontalEnum)
-			iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum); // required for updating active nodes
+			iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
 	}
 
 	/*Free data: */
-	iomodel->DeleteData(1,FlowequationElementEquationEnum);
+	iomodel->DeleteData(1,"md.flowequation.element_equation");
 }/*}}}*/
 void StressbalanceSIAAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 20690)
@@ -18,9 +18,9 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&isSIA,FlowequationIsSIAEnum);
-	iomodel->FindConstant(&isSSA,FlowequationIsSSAEnum);
-	iomodel->FindConstant(&isL1L2,FlowequationIsL1L2Enum);
-	iomodel->FindConstant(&isHO,FlowequationIsHOEnum);
-	iomodel->FindConstant(&isFS,FlowequationIsFSEnum);
+	iomodel->FindConstant(&isSIA,"md.flowequation.isSIA");
+	iomodel->FindConstant(&isSSA,"md.flowequation.isSSA");
+	iomodel->FindConstant(&isL1L2,"md.flowequation.isL1L2");
+	iomodel->FindConstant(&isHO,"md.flowequation.isHO");
+	iomodel->FindConstant(&isFS,"md.flowequation.isFS");
 
 	/*Do we have coupling*/
@@ -33,11 +33,11 @@
 	/*If no coupling, call Regular IoModelToConstraintsx, else, use P1 elements only*/
 	if(!iscoupling){
-		IoModelToConstraintsx(constraints,iomodel,StressbalanceSpcvzEnum,StressbalanceVerticalAnalysisEnum,P1Enum,0);
+		IoModelToConstraintsx(constraints,iomodel,"md.stressbalance.spcvz",StressbalanceVerticalAnalysisEnum,P1Enum,0);
 	}
 	else{
 		/*Fetch data: */
-		iomodel->FetchData(1,FlowequationBorderFSEnum);
+		iomodel->FetchData(1,"md.flowequation.borderFS");
 		/*Fetch Spc*/
-		iomodel->FetchData(&spcvz,&Mz,&Nz,StressbalanceSpcvzEnum);
+		iomodel->FetchData(&spcvz,&Mz,&Nz,"md.stressbalance.spcvz");
 		if(Nz>1) _error_("not supported yet (needs to be coded)");
 
@@ -51,5 +51,5 @@
 			if(iomodel->my_vertices[i]){
 
-				if (reCast<int,IssmDouble>(iomodel->Data(FlowequationBorderFSEnum)[i])){
+				if (reCast<int,IssmDouble>(iomodel->Data("md.flowequation.borderFS")[i])){
 					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,0,0,StressbalanceVerticalAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for FS
 					count++;
@@ -65,6 +65,6 @@
 
 		/*Free data: */
-		iomodel->DeleteData(1,FlowequationBorderFSEnum);
-		iomodel->DeleteData(spcvz,StressbalanceSpcvzEnum);
+		iomodel->DeleteData(1,"md.flowequation.borderFS");
+		iomodel->DeleteData(spcvz,"md.stressbalance.spcvz");
 	}
 
@@ -80,7 +80,7 @@
 	if(iomodel->domaintype!=Domain3DEnum) return;
 
-	iomodel->FetchData(3,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+	iomodel->FetchData(3,"md.mesh.vertexonbase","md.mesh.vertexonsurface","md.flowequation.vertex_equation");
 	::CreateNodes(nodes,iomodel,StressbalanceVerticalAnalysisEnum,P1Enum);
-	iomodel->DeleteData(3,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum,FlowequationVertexEquationEnum);
+	iomodel->DeleteData(3,"md.mesh.vertexonbase","md.mesh.vertexonsurface","md.flowequation.vertex_equation");
 }/*}}}*/
 int  StressbalanceVerticalAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -102,18 +102,18 @@
 	}
 
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(elements,BasalforcingsFloatingiceMeltingRateEnum);
-	//iomodel->FetchDataToInput(elements,SmbMassBalanceEnum);
-	iomodel->FetchDataToInput(elements,VxEnum,0.);
-	iomodel->FetchDataToInput(elements,VyEnum,0.);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+	//iomodel->FetchDataToInput(elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum,0.);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum,0.);
 }/*}}}*/
 void StressbalanceVerticalAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 20690)
@@ -24,5 +24,5 @@
 	else if (iomodel->solution_enum==TransientSolutionEnum){
 		int smb_model;
-		iomodel->FindConstant(&smb_model,SmbEnum);
+		iomodel->FindConstant(&smb_model,"md.smb.model");
 		if(smb_model==SMBpddEnum) isdynamic=true;
 		if(smb_model==SMBd18opddEnum) isdynamic=true;
@@ -33,8 +33,8 @@
 
 	if(isdynamic){
-		IoModelToDynamicConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,finiteelement);
+		IoModelToDynamicConstraintsx(constraints,iomodel,"md.thermal.spctemperature",ThermalAnalysisEnum,finiteelement);
 	}
 	else{
-		IoModelToConstraintsx(constraints,iomodel,ThermalSpctemperatureEnum,ThermalAnalysisEnum,finiteelement);
+		IoModelToConstraintsx(constraints,iomodel,"md.thermal.spctemperature",ThermalAnalysisEnum,finiteelement);
 	}
 
@@ -45,5 +45,5 @@
 
 	/*create penalties for nodes: no node can have a temperature over the melting point*/
-	iomodel->FetchData(1,ThermalSpctemperatureEnum);
+	iomodel->FetchData(1,"md.thermal.spctemperature");
 	CreateSingleNodeToElementConnectivity(iomodel);
 
@@ -52,10 +52,10 @@
 		/*keep only this partition's nodes:*/
 		if(iomodel->my_vertices[i]){
-			if (xIsNan<IssmDouble>(iomodel->Data(ThermalSpctemperatureEnum)[i])){ //No penalty applied on spc nodes!
+			if (xIsNan<IssmDouble>(iomodel->Data("md.thermal.spctemperature")[i])){ //No penalty applied on spc nodes!
 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,ThermalAnalysisEnum));
 			}
 		}
 	}
-	iomodel->DeleteData(1,ThermalSpctemperatureEnum);
+	iomodel->DeleteData(1,"md.thermal.spctemperature");
 
 }/*}}}*/
@@ -64,7 +64,7 @@
 	int finiteelement = P1Enum;
 	
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 	::CreateNodes(nodes,iomodel,ThermalAnalysisEnum,finiteelement);
-	iomodel->DeleteData(2,MeshVertexonbaseEnum,MeshVertexonsurfaceEnum);
+	iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
 }/*}}}*/
 int  ThermalAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
@@ -90,40 +90,40 @@
 
 	bool dakota_analysis, ismovingfront;
-	iomodel->FindConstant(&dakota_analysis,QmuIsdakotaEnum);
-	iomodel->FindConstant(&ismovingfront,TransientIsmovingfrontEnum);
-	iomodel->FindConstant(&frictionlaw,FrictionLawEnum);
-
-	iomodel->FetchDataToInput(elements,ThicknessEnum);
-	iomodel->FetchDataToInput(elements,SurfaceEnum);
-	iomodel->FetchDataToInput(elements,BaseEnum);
-	iomodel->FetchDataToInput(elements,SealevelEnum,0);
-	iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(elements,MaskGroundediceLevelsetEnum);
+	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
+	iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
+	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+
+	iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(elements,"md.slr.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum);
-	iomodel->FetchDataToInput(elements,MeshVertexonsurfaceEnum);
-	iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
-	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
-	iomodel->FetchDataToInput(elements,PressureEnum);
-	iomodel->FetchDataToInput(elements,TemperatureEnum);
-	iomodel->FetchDataToInput(elements,VxEnum);
-	iomodel->FetchDataToInput(elements,VyEnum);
-	iomodel->FetchDataToInput(elements,VzEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+	iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+	iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(elements,"md.initialization.vz",VzEnum);
 	InputUpdateFromConstantx(elements,0.,VxMeshEnum);
 	InputUpdateFromConstantx(elements,0.,VyMeshEnum);
 	InputUpdateFromConstantx(elements,0.,VzMeshEnum);
 	if(ismovingfront){
-		iomodel->FetchDataToInput(elements,MeshVertexonbaseEnum); // required for updating active nodes
+		iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
 	}
 	/*Basal forcings variables*/
-	iomodel->FindConstant(&basalforcing_model,BasalforcingsEnum);
+	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
 	switch(basalforcing_model){
 		case MantlePlumeGeothermalFluxEnum:
 			break;
 		default:
-			iomodel->FetchDataToInput(elements,BasalforcingsGeothermalfluxEnum);
+			iomodel->FetchDataToInput(elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
 			break;
 	}
@@ -131,39 +131,39 @@
 	switch(frictionlaw){
 		case 1:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
 			break;
 		case 2:
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionMEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
 			break;
 		case 3:
-			iomodel->FindConstant(&FrictionCoupling,FrictionCouplingEnum);
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionAsEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
+			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.As",FrictionAsEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
 			if (FrictionCoupling==0){
-				iomodel->FetchDataToInput(elements,FrictionEffectivePressureEnum);
+				iomodel->FetchDataToInput(elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);
 			}
 			break;
 		case 4:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
-			iomodel->FetchDataToInput(elements,PressureEnum);
-			iomodel->FetchDataToInput(elements,TemperatureEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		case 5:
-			iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(elements,FrictionPEnum);
-			iomodel->FetchDataToInput(elements,FrictionQEnum);
-			iomodel->FetchDataToInput(elements,FrictionWaterLayerEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.water_layer",FrictionWaterLayerEnum);
 			break;
 		case 6:
-			iomodel->FetchDataToInput(elements,FrictionCEnum);
-			iomodel->FetchDataToInput(elements,FrictionMEnum);
-			iomodel->FetchDataToInput(elements,PressureEnum);
-			iomodel->FetchDataToInput(elements,TemperatureEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		default:
@@ -176,23 +176,23 @@
 	char**  requestedoutputs = NULL;
 
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalMaxiterEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalStabilizationEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyFactorEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyThresholdEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyLockEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalIsenthalpyEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ThermalIsdynamicbasalspcEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FrictionLawEnum));
-
-	iomodel->FetchData(&requestedoutputs,&numoutputs,ThermalRequestedOutputsEnum);
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.maxiter",ThermalMaxiterEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.stabilization",ThermalStabilizationEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.penalty_factor",ThermalPenaltyFactorEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.penalty_threshold",ThermalPenaltyThresholdEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.penalty_lock",ThermalPenaltyLockEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.isenthalpy",ThermalIsenthalpyEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.thermal.isdynamicbasalspc",ThermalIsdynamicbasalspcEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.friction.law",FrictionLawEnum));
+
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.thermal.requested_outputs");
 	parameters->AddObject(new IntParam(ThermalNumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new StringArrayParam(ThermalRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,ThermalRequestedOutputsEnum);
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.thermal.requested_outputs");
 
 	/*Deal with friction parameters*/
 	int frictionlaw;
-	iomodel->FindConstant(&frictionlaw,FrictionLawEnum);
-	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject(FrictionGammaEnum));
-	if(frictionlaw==3) parameters->AddObject(iomodel->CopyConstantObject(FrictionCouplingEnum));
+	iomodel->FindConstant(&frictionlaw,"md.friction.law");
+	if(frictionlaw==4 || frictionlaw==6) parameters->AddObject(iomodel->CopyConstantObject("md.friction.gamma",FrictionGammaEnum));
+	if(frictionlaw==3) parameters->AddObject(iomodel->CopyConstantObject("md.friction.coupling",FrictionCouplingEnum));
 }/*}}}*/
 
Index: /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp	(revision 20690)
@@ -17,5 +17,5 @@
 	int fe_FS;
 
-	iomodel->FindConstant(&fe_FS,FlowequationFeFSEnum);
+	iomodel->FindConstant(&fe_FS,"md.flowequation.fe_FS");
 	if(fe_FS==LATaylorHoodEnum) finiteelement = P1Enum;
 	else if(fe_FS==LACrouzeixRaviartEnum) finiteelement = P1DGEnum;
@@ -34,5 +34,5 @@
 	int fe_FS;
 
-	iomodel->FindConstant(&fe_FS,FlowequationFeFSEnum);
+	iomodel->FindConstant(&fe_FS,"md.flowequation.fe_FS");
 	if(fe_FS==LATaylorHoodEnum) finiteelement = P1Enum;
 	else if(fe_FS==LACrouzeixRaviartEnum) finiteelement = P1DGEnum;
@@ -47,14 +47,14 @@
 	}
 
-	iomodel->FetchDataToInput(elements,VxEnum,0.);
-	iomodel->FetchDataToInput(elements,VyEnum,0.);
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(elements,VzEnum,0.);
-	iomodel->FetchDataToInput(elements,PressureEnum,0.);
+	iomodel->FetchDataToInput(elements,"md.initialization.vx",VxEnum,0.);
+	iomodel->FetchDataToInput(elements,"md.initialization.vy",VyEnum,0.);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(elements,"md.initialization.vz",VzEnum,0.);
+	iomodel->FetchDataToInput(elements,"md.initialization.pressure",PressureEnum,0.);
 	InputUpdateFromConstantx(elements,0.,SigmaNNEnum);
 }/*}}}*/
 void UzawaPressureAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
 
-	parameters->AddObject(iomodel->CopyConstantObject(AugmentedLagrangianRhopEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(AugmentedLagrangianRholambdaEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.augmented_lagrangian_rhop",AugmentedLagrangianRhopEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.augmented_lagrangian_rholambda",AugmentedLagrangianRholambdaEnum));
 }/*}}}*/
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 20690)
@@ -30,6 +30,6 @@
 
 	/*Checks in debugging mode*/
-	_assert_(iomodel->Data(MeshUpperelementsEnum));
-	_assert_(iomodel->Data(MeshLowerelementsEnum));
+	_assert_(iomodel->Data("md.mesh.upperelements"));
+	_assert_(iomodel->Data("md.mesh.lowerelements"));
 
 	/*id: */
@@ -38,8 +38,8 @@
 
 	/*Build neighbors list*/
-	if (xIsNan<IssmDouble>(iomodel->Data(MeshUpperelementsEnum)[index]) || iomodel->Data(MeshUpperelementsEnum)[index]==-1.) penta_elements_ids[1]=this->id; //upper penta is the same penta
-	else                                    penta_elements_ids[1]=reCast<int,IssmDouble>((iomodel->Data(MeshUpperelementsEnum)[index]));
-	if (xIsNan<IssmDouble>(iomodel->Data(MeshLowerelementsEnum)[index]) || iomodel->Data(MeshLowerelementsEnum)[index]==-1.) penta_elements_ids[0]=this->id; //lower penta is the same penta
-	else                                    penta_elements_ids[0]=reCast<int,IssmDouble>((iomodel->Data(MeshLowerelementsEnum)[index]));
+	if (xIsNan<IssmDouble>(iomodel->Data("md.mesh.upperelements")[index]) || iomodel->Data("md.mesh.upperelements")[index]==-1.) penta_elements_ids[1]=this->id; //upper penta is the same penta
+	else                                    penta_elements_ids[1]=reCast<int,IssmDouble>((iomodel->Data("md.mesh.upperelements")[index]));
+	if (xIsNan<IssmDouble>(iomodel->Data("md.mesh.lowerelements")[index]) || iomodel->Data("md.mesh.lowerelements")[index]==-1.) penta_elements_ids[0]=this->id; //lower penta is the same penta
+	else                                    penta_elements_ids[0]=reCast<int,IssmDouble>((iomodel->Data("md.mesh.lowerelements")[index]));
 	this->InitHookNeighbors(penta_elements_ids);
 
@@ -1403,11 +1403,12 @@
 	IssmDouble  yts;
 	bool    control_analysis;
+	char**  controls = NULL;
 	int     num_control_type,num_responses;
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&yts,ConstantsYtsEnum);
-	iomodel->FindConstant(&control_analysis,InversionIscontrolEnum);
-	if(control_analysis) iomodel->FindConstant(&num_control_type,InversionNumControlParametersEnum);
-	if(control_analysis) iomodel->FindConstant(&num_responses,InversionNumCostFunctionsEnum);
+	iomodel->FindConstant(&yts,"md.constants.yts");
+	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+	if(control_analysis) iomodel->FindConstant(&num_control_type,"md.inversion.num_control_parameters");
+	if(control_analysis) iomodel->FindConstant(&num_responses,"md.inversion.num_cost_functions");
 
 	/*Recover vertices ids needed to initialize inputs*/
@@ -1418,47 +1419,55 @@
 
 	/*Control Inputs*/
-	if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
+	if (control_analysis){
+		iomodel->FindConstant(&controls,NULL,"md.inversion.control_parameters");
 		for(i=0;i<num_control_type;i++){
-			int control = reCast<int>(iomodel->Data(InversionControlParametersEnum)[i]);
+			_assert_(controls[i]);
+			int control = StringToEnumx(controls[i]);
 			switch(control){
-				/*yts conversion*/
 				case BalancethicknessThickeningRateEnum:
-				case VxEnum:
-				case VyEnum:
-					if(iomodel->Data(control)){
-						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(control)[penta_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
-						this->inputs->AddInput(new ControlInput(control,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+					if (iomodel->Data("md.balancethickness.thickening_rate")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[penta_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
-
-				/*No yts conversion*/
-				case ThicknessEnum:
-				case FrictionCoefficientEnum:
-			  case FrictionAsEnum:	
-				case MaterialsRheologyBEnum:
-					if(iomodel->Data(control)){
-						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(control)[penta_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
-						this->inputs->AddInput(new ControlInput(control,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+				case VxEnum:
+					if (iomodel->Data("md.initialization.vx")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[penta_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						this->inputs->AddInput(new ControlInput(VxEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
-
-				/*Special cases (depth averaged quantities)*/
+				case VyEnum:
+					if (iomodel->Data("md.initialization.vy")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[penta_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
+						this->inputs->AddInput(new ControlInput(VyEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+					}
+					break;
+				case FrictionCoefficientEnum:
+					if (iomodel->Data("md.friction.coefficient")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[penta_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+					}
+					break;
 				case MaterialsRheologyBbarEnum:
-					if(iomodel->Data(MaterialsRheologyBEnum)){
-						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[penta_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
+					if(iomodel->Data("md.materials.rheology_B")){
+						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[penta_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
 						this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
 				case DamageDbarEnum:
-					if(iomodel->Data(DamageDEnum)){
-						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data(DamageDEnum)[penta_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
+					if(iomodel->Data("md.damage.D")){
+						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[penta_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];
 						this->inputs->AddInput(new ControlInput(DamageDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -1468,19 +1477,21 @@
 			}
 		}
+		for(i=0;i<num_control_type;i++) xDelete<char>(controls[i]);
+		xDelete<char*>(controls);
 	}
 
 	/*Need to know the type of approximation for this element*/
-	if(iomodel->Data(FlowequationElementEquationEnum)){
-		this->inputs->AddInput(new IntInput(ApproximationEnum,reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[index])));
+	if(iomodel->Data("md.flowequation.element_equation")){
+		this->inputs->AddInput(new IntInput(ApproximationEnum,reCast<int>(iomodel->Data("md.flowequation.element_equation")[index])));
 	}
 
 	/*DatasetInputs*/
-	if (control_analysis && iomodel->Data(InversionCostFunctionsCoefficientsEnum)) {
+	if(control_analysis && iomodel->Data("md.inversion.cost_functions_coefficients")) {
 
 		/*Create inputs and add to DataSetInput*/
 		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
 		for(i=0;i<num_responses;i++){
-			for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(penta_vertex_ids[j]-1)*num_responses+i];
-			datasetinput->AddInput(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),reCast<int>(iomodel->Data(InversionCostFunctionsEnum)[i]));
+			for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.inversion.cost_functions_coefficients")[(penta_vertex_ids[j]-1)*num_responses+i];
+			datasetinput->AddInput(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),reCast<int>(iomodel->Data("md.inversion.cost_functions")[i]));
 		}
 
@@ -2710,6 +2721,6 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&yts,ConstantsYtsEnum);
-	iomodel->FindConstant(&dakota_analysis,QmuIsdakotaEnum);
+	iomodel->FindConstant(&yts,"md.constants.yts");
+	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
 
 	/*Checks if debuging*/
@@ -3064,12 +3075,12 @@
 
 		case StressbalanceAnalysisEnum:
-			_assert_(iomodel->Data(FlowequationElementEquationEnum));
-
-			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==HOFSApproximationEnum){
+			_assert_(iomodel->Data("md.flowequation.element_equation"));
+
+			if(*(iomodel->Data("md.flowequation.element_equation")+index)==HOFSApproximationEnum){
 				/*Create VzHO and VzFS Enums*/
-				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){
-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1];
+				if(iomodel->Data("md.initialization.vz") && iomodel->Data("md.flowequation.borderFS")){
+					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1];
 					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]);
+					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*(1-iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1]);
 					this->inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum));
 				}
@@ -3080,10 +3091,10 @@
 				}
 			}
-			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==SSAFSApproximationEnum){
+			if(*(iomodel->Data("md.flowequation.element_equation")+index)==SSAFSApproximationEnum){
 				/*Create VzSSA and VzFS Enums*/
-				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){
-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1];
+				if(iomodel->Data("md.initialization.vz") && iomodel->Data("md.flowequation.borderFS")){
+					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1];
 					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]);
+					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*(1-iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1]);
 					this->inputs->AddInput(new PentaInput(VzSSAEnum,nodeinputs,P1Enum));
 				}
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 20690)
@@ -367,11 +367,12 @@
 	IssmDouble  yts;
 	bool    control_analysis;
+	char**  controls = NULL;
 	int     num_control_type,num_responses;
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&yts,ConstantsYtsEnum);
-	iomodel->FindConstant(&control_analysis,InversionIscontrolEnum);
-	if(control_analysis) iomodel->FindConstant(&num_control_type,InversionNumControlParametersEnum);
-	if(control_analysis) iomodel->FindConstant(&num_responses,InversionNumCostFunctionsEnum);
+	iomodel->FindConstant(&yts,"md.constants.yts");
+	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+	if(control_analysis) iomodel->FindConstant(&num_control_type,"md.inversion.num_control_parameters");
+	if(control_analysis) iomodel->FindConstant(&num_responses,"md.inversion.num_cost_functions");
 
 	/*Recover vertices ids needed to initialize inputs*/
@@ -382,74 +383,79 @@
 
 	/*Control Inputs*/
-	if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
+	if (control_analysis){
+		iomodel->FindConstant(&controls,NULL,"md.inversion.control_parameters");
 		for(i=0;i<num_control_type;i++){
-			switch(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])){
+			_assert_(controls[i]);
+			int control = StringToEnumx(controls[i]);
+			switch(control){
 				case BalancethicknessThickeningRateEnum:
-					if (iomodel->Data(BalancethicknessThickeningRateEnum)){
-						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(BalancethicknessThickeningRateEnum)[tetra_vertex_ids[j]-1]/yts;
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+					if (iomodel->Data("md.balancethickness.thickening_rate")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[tetra_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
 						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
 				case VxEnum:
-					if (iomodel->Data(VxEnum)){
-						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(VxEnum)[tetra_vertex_ids[j]-1]/yts;
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+					if (iomodel->Data("md.initialization.vx")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[tetra_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
 						this->inputs->AddInput(new ControlInput(VxEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
 				case VyEnum:
-					if (iomodel->Data(VyEnum)){
-						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(VyEnum)[tetra_vertex_ids[j]-1]/yts;
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+					if (iomodel->Data("md.initialization.vy")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[tetra_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;
 						this->inputs->AddInput(new ControlInput(VyEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
 				case FrictionCoefficientEnum:
-					if (iomodel->Data(FrictionCoefficientEnum)){
-						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(FrictionCoefficientEnum)[tetra_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i];
+					if (iomodel->Data("md.friction.coefficient")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[tetra_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
 						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
 				case MaterialsRheologyBbarEnum:
-					if(iomodel->Data(MaterialsRheologyBEnum)){
-						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[tetra_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i];
+					if(iomodel->Data("md.materials.rheology_B")){
+						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[tetra_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
 						this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
 				case DamageDbarEnum:
-					if(iomodel->Data(DamageDEnum)){
-						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data(DamageDEnum)[tetra_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tetra_vertex_ids[j]-1)*num_control_type+i];
+					if(iomodel->Data("md.damage.D")){
+						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[tetra_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];
 						this->inputs->AddInput(new ControlInput(DamageDEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
 				default:
-					_error_("Control " << EnumToStringx(reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i])) << " not implemented yet");
+					_error_("Control " << EnumToStringx(control) << " not implemented yet");
 			}
 		}
+		for(i=0;i<num_control_type;i++) xDelete<char>(controls[i]);
+		xDelete<char*>(controls);
 	}
 
 	/*Need to know the type of approximation for this element*/
-	if(iomodel->Data(FlowequationElementEquationEnum)){
-		this->inputs->AddInput(new IntInput(ApproximationEnum,reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[index])));
+	if(iomodel->Data("md.flowequation.element_equation")){
+		this->inputs->AddInput(new IntInput(ApproximationEnum,reCast<int>(iomodel->Data("md.flowequation.element_equation")[index])));
 	}
 
 	/*DatasetInputs*/
-	if (control_analysis && iomodel->Data(InversionCostFunctionsCoefficientsEnum)) {
+	if (control_analysis && iomodel->Data("md.inversion.cost_functions_coefficients")) {
 
 		/*Create inputs and add to DataSetInput*/
 		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
 		for(i=0;i<num_responses;i++){
-			for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(tetra_vertex_ids[j]-1)*num_responses+i];
-			datasetinput->AddInput(new TetraInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),reCast<int>(iomodel->Data(InversionCostFunctionsEnum)[i]));
+			for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.inversion.cost_functions_coefficients")[(tetra_vertex_ids[j]-1)*num_responses+i];
+			datasetinput->AddInput(new TetraInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),reCast<int>(iomodel->Data("md.inversion.cost_functions")[i]));
 		}
 
@@ -875,7 +881,7 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&yts,ConstantsYtsEnum);
-	iomodel->FindConstant(&dakota_analysis,QmuIsdakotaEnum);
-	iomodel->FindConstant(&isFS,FlowequationIsFSEnum);
+	iomodel->FindConstant(&yts,"md.constants.yts");
+	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
+	iomodel->FindConstant(&isFS,"md.flowequation.isFS");
 
 	/*Checks if debuging*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 20690)
@@ -1823,11 +1823,12 @@
 	bool       control_analysis   = false;
 	int        num_control_type,num_responses;
+	char**     controls = NULL;
 	IssmDouble yts;
 
 	/*Get parameters: */
-	iomodel->FindConstant(&yts,ConstantsYtsEnum); 
-	iomodel->FindConstant(&control_analysis,InversionIscontrolEnum);
-	if(control_analysis) iomodel->FindConstant(&num_control_type,InversionNumControlParametersEnum);
-	if(control_analysis) iomodel->FindConstant(&num_responses,InversionNumCostFunctionsEnum);
+	iomodel->FindConstant(&yts,"md.constants.yts"); 
+	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+	if(control_analysis) iomodel->FindConstant(&num_control_type,"md.inversion.num_control_parameters");
+	if(control_analysis) iomodel->FindConstant(&num_responses,"md.inversion.num_cost_functions");
 
 	/*Recover vertices ids needed to initialize inputs*/
@@ -1837,54 +1838,60 @@
 
 	/*Need to know the type of approximation for this element*/
-	if(iomodel->Data(FlowequationElementEquationEnum)){
-		this->inputs->AddInput(new IntInput(ApproximationEnum,reCast<int>(iomodel->Data(FlowequationElementEquationEnum)[index])));
+	if(iomodel->Data("md.flowequation.element_equation")){
+		this->inputs->AddInput(new IntInput(ApproximationEnum,reCast<int>(iomodel->Data("md.flowequation.element_equation")[index])));
 	}
 
 	/*Control Inputs*/
-	if (control_analysis && iomodel->Data(InversionControlParametersEnum)){
+	if (control_analysis){
+		iomodel->FindConstant(&controls,NULL,"md.inversion.control_parameters");
 		for(i=0;i<num_control_type;i++){
-			int control = reCast<int>(iomodel->Data(InversionControlParametersEnum)[i]);
+			_assert_(controls[i]);
+			int control = StringToEnumx(controls[i]);
 			switch(control){
-				/*yts conversion*/
 				case BalancethicknessThickeningRateEnum:
-				case BalancethicknessApparentMassbalanceEnum:
-				case VxEnum:
-				case VyEnum:
-					if(iomodel->Data(control)){
-						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(control)[tria_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
-						this->inputs->AddInput(new ControlInput(control,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+					if (iomodel->Data("md.balancethickness.thickening_rate")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[tria_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
-
-				/*No yts conversion*/
-				case ThicknessEnum:
-				case BalancethicknessOmegaEnum:
-				case FrictionCoefficientEnum:
-			  case FrictionAsEnum:
-			  case MaterialsRheologyBEnum:
-					if(iomodel->Data(control)){
-						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data(control)[tria_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
-						this->inputs->AddInput(new ControlInput(control,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+				case VxEnum:
+					if (iomodel->Data("md.initialization.vx")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[tria_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						this->inputs->AddInput(new ControlInput(VxEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
-
-				/*Special cases (depth averaged quantities)*/
+				case VyEnum:
+					if (iomodel->Data("md.initialization.vy")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[tria_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
+						this->inputs->AddInput(new ControlInput(VyEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+					}
+					break;
+				case FrictionCoefficientEnum:
+					if (iomodel->Data("md.friction.coefficient")){
+						for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[tria_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+						this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
+					}
+					break;
 				case MaterialsRheologyBbarEnum:
-					if(iomodel->Data(MaterialsRheologyBEnum)){
-						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data(MaterialsRheologyBEnum)[tria_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
+					if(iomodel->Data("md.materials.rheology_B")){
+						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[tria_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
 						this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
 					break;
 				case DamageDbarEnum:
-					if(iomodel->Data(DamageDEnum)){
-						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data(DamageDEnum)[tria_vertex_ids[j]-1];
-						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data(InversionMinParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
-						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data(InversionMaxParametersEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
+					if(iomodel->Data("md.damage.D")){
+						for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[tria_vertex_ids[j]-1];
+						for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
+						for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i];
 						this->inputs->AddInput(new ControlInput(DamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,i+1));
 					}
@@ -1894,14 +1901,16 @@
 			}
 		}
+		for(i=0;i<num_control_type;i++) xDelete<char>(controls[i]);
+		xDelete<char*>(controls);
 	}
 
 	/*DatasetInputs*/
-	if (control_analysis && iomodel->Data(InversionCostFunctionsCoefficientsEnum)){
+	if (control_analysis && iomodel->Data("md.inversion.cost_functions_coefficients")){
 
 		/*Create inputs and add to DataSetInput*/
 		DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);
 		for(i=0;i<num_responses;i++){
-			for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data(InversionCostFunctionsCoefficientsEnum)[(tria_vertex_ids[j]-1)*num_responses+i];
-			datasetinput->AddInput(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),reCast<int>(iomodel->Data(InversionCostFunctionsEnum)[i]));
+			for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data("md.inversion.cost_functions_coefficients")[(tria_vertex_ids[j]-1)*num_responses+i];
+			datasetinput->AddInput(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),reCast<int>(iomodel->Data("md.inversion.cost_functions")[i]));
 		}
 
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 20690)
@@ -101,5 +101,7 @@
 
 	/*Create femmodel from input files, with trace activated: */
+	profiler->Tag(STARTINIT);
 	this->InitFromFiles(rootpath,inputfilename,outputfilename,toolkitsfilename,lockfilename,restartfilename, solution_type,traceon,X);
+	profiler->Tag(FINISHINIT);
 	
 	/*Save communicator in the parameters dataset: */
@@ -438,7 +440,7 @@
 			bool isSIA,isFS;
 			int  fe_FS;
-			iomodel->FindConstant(&fe_FS,FlowequationFeFSEnum);
-			iomodel->FindConstant(&isSIA,FlowequationIsSIAEnum);
-			iomodel->FindConstant(&isFS,FlowequationIsFSEnum);
+			iomodel->FindConstant(&fe_FS,"md.flowequation.fe_FS");
+			iomodel->FindConstant(&isSIA,"md.flowequation.isSIA");
+			iomodel->FindConstant(&isFS,"md.flowequation.isFS");
 			analyses_temp[numanalyses++]=StressbalanceAnalysisEnum;
 			analyses_temp[numanalyses++]=StressbalanceVerticalAnalysisEnum;
@@ -457,6 +459,6 @@
 		case SteadystateSolutionEnum:{
 			bool isSIA,isenthalpy;
-			iomodel->FindConstant(&isSIA,FlowequationIsSIAEnum);
-			iomodel->FindConstant(&isenthalpy,ThermalIsenthalpyEnum);
+			iomodel->FindConstant(&isSIA,"md.flowequation.isSIA");
+			iomodel->FindConstant(&isenthalpy,"md.thermal.isenthalpy");
 			analyses_temp[numanalyses++]=StressbalanceAnalysisEnum;
 			analyses_temp[numanalyses++]=StressbalanceVerticalAnalysisEnum;
@@ -477,5 +479,5 @@
 		case ThermalSolutionEnum:{
 			bool isenthalpy;
-			iomodel->FindConstant(&isenthalpy,ThermalIsenthalpyEnum);
+			iomodel->FindConstant(&isenthalpy,"md.thermal.isenthalpy");
 			if(isenthalpy){
 				analyses_temp[numanalyses++]=EnthalpyAnalysisEnum;
@@ -546,20 +548,20 @@
 		case TransientSolutionEnum:{
 			bool isSIA,isFS,isthermal,isenthalpy,ismasstransport,isgroundingline,isstressbalance,ismovingfront,ishydrology,isdamage,issmb,isslr,isgia;
-			iomodel->FindConstant(&isSIA,FlowequationIsSIAEnum);
-			iomodel->FindConstant(&isFS,FlowequationIsFSEnum);
-			iomodel->FindConstant(&isthermal,TransientIsthermalEnum);
-			iomodel->FindConstant(&isenthalpy,ThermalIsenthalpyEnum);
-			iomodel->FindConstant(&ismovingfront,TransientIsmovingfrontEnum);
-			iomodel->FindConstant(&ismasstransport,TransientIsmasstransportEnum);
-			iomodel->FindConstant(&isstressbalance,TransientIsstressbalanceEnum);
-			iomodel->FindConstant(&isgroundingline,TransientIsgroundinglineEnum);
-			iomodel->FindConstant(&isdamage,TransientIsdamageevolutionEnum);
-			iomodel->FindConstant(&ishydrology,TransientIshydrologyEnum);
-			iomodel->FindConstant(&issmb,TransientIssmbEnum);
-			iomodel->FindConstant(&isslr,TransientIsslrEnum);
-			iomodel->FindConstant(&isgia,TransientIsgiaEnum);
+			iomodel->FindConstant(&isSIA,"md.flowequation.isSIA");
+			iomodel->FindConstant(&isFS,"md.flowequation.isFS");
+			iomodel->FindConstant(&isthermal,"md.transient.isthermal");
+			iomodel->FindConstant(&isenthalpy,"md.thermal.isenthalpy");
+			iomodel->FindConstant(&ismovingfront,"md.transient.ismovingfront");
+			iomodel->FindConstant(&ismasstransport,"md.transient.ismasstransport");
+			iomodel->FindConstant(&isstressbalance,"md.transient.isstressbalance");
+			iomodel->FindConstant(&isgroundingline,"md.transient.isgroundingline");
+			iomodel->FindConstant(&isdamage,"md.transient.isdamageevolution");
+			iomodel->FindConstant(&ishydrology,"md.transient.ishydrology");
+			iomodel->FindConstant(&issmb,"md.transient.issmb");
+			iomodel->FindConstant(&isslr,"md.transient.isslr");
+			iomodel->FindConstant(&isgia,"md.transient.isgia");
 			if(isstressbalance){
 				int  fe_FS;
-				iomodel->FindConstant(&fe_FS,FlowequationFeFSEnum);
+				iomodel->FindConstant(&fe_FS,"md.flowequation.fe_FS");
 				analyses_temp[numanalyses++]=StressbalanceAnalysisEnum;
 				analyses_temp[numanalyses++]=StressbalanceVerticalAnalysisEnum;
@@ -2668,5 +2670,5 @@
 	/*Open output file once for all and add output file descriptor to parameters*/
 	output_fid=open_memstream(&outputbuffer,&outputsize); 
-	if(output_fid==NULL)_error_("FemModel::InitFromBuffers error message: could not initialize output stream");
+	if(output_fid==NULL)_error_("could not initialize output stream");
 	this->parameters->SetParam(output_fid,OutputFilePointerEnum);
 	this->parameters->AddObject(new GenericParam<char**>(&outputbuffer,OutputBufferPointerEnum));
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 20690)
@@ -30,5 +30,4 @@
 IoConstant::IoConstant(){/*{{{*/
 	this->isindependent = false;
-	this->data_enum     = -1;
 	this->name          = NULL;
 	this->constant      = NULL;
@@ -40,30 +39,52 @@
 }
 /*}}}*/
-IoConstant::IoConstant(bool value,int enum_in){/*{{{*/
+IoConstant::IoConstant(bool value,const char* name_in){/*{{{*/
 	this->isindependent = false;
-	this->data_enum     = enum_in;
-	this->name          = NULL;
-	this->constant      = new BoolParam(enum_in,value);
-}
-/*}}}*/
-IoConstant::IoConstant(int value,int enum_in){/*{{{*/
+	this->constant      = new BoolParam(0,value);
+
+	_assert_(name_in);
+	int len=strlen(name_in);
+	this->name=xNew<char>(len+1);
+	memcpy(this->name,name_in,(len+1)*sizeof(char));
+}
+/*}}}*/
+IoConstant::IoConstant(int value,const char* name_in){/*{{{*/
 	this->isindependent = false;
-	this->data_enum     = enum_in;
-	this->name          = NULL;
-	this->constant      = new IntParam(enum_in,value);
-}
-/*}}}*/
-IoConstant::IoConstant(IssmDouble value,int enum_in){/*{{{*/
+	this->constant      = new IntParam(0,value);
+
+	_assert_(name_in);
+	int len=strlen(name_in);
+	this->name=xNew<char>(len+1);
+	memcpy(this->name,name_in,(len+1)*sizeof(char));
+}
+/*}}}*/
+IoConstant::IoConstant(IssmDouble value,const char* name_in){/*{{{*/
 	this->isindependent = false;
-	this->data_enum     = enum_in;
-	this->name          = NULL;
-	this->constant      = new DoubleParam(enum_in,value);
-}
-/*}}}*/
-IoConstant::IoConstant(char* value,int enum_in){/*{{{*/
+	this->constant      = new DoubleParam(0,value);
+
+	_assert_(name_in);
+	int len=strlen(name_in);
+	this->name=xNew<char>(len+1);
+	memcpy(this->name,name_in,(len+1)*sizeof(char));
+}
+/*}}}*/
+IoConstant::IoConstant(char* value,const char* name_in){/*{{{*/
 	this->isindependent = false;
-	this->data_enum     = enum_in;
-	this->name          = NULL;
-	this->constant      = new StringParam(enum_in,value);
+	this->constant      = new StringParam(0,value);
+
+	_assert_(name_in);
+	int len=strlen(name_in);
+	this->name=xNew<char>(len+1);
+	memcpy(this->name,name_in,(len+1)*sizeof(char));
+}
+/*}}}*/
+IoConstant::IoConstant(char** value,int numstrings,const char* name_in){/*{{{*/
+	this->isindependent = false;
+	this->constant      = new StringArrayParam(0,value,numstrings);
+
+	_assert_(name_in);
+	int len=strlen(name_in);
+	this->name=xNew<char>(len+1);
+	memcpy(this->name,name_in,(len+1)*sizeof(char));
 }
 /*}}}*/
@@ -72,5 +93,4 @@
 IoData::IoData(){/*{{{*/
 	this->isindependent = false;
-	this->data_enum     = -1;
 	this->name          = NULL;
 	this->code          = -1;
@@ -86,8 +106,6 @@
 }
 /*}}}*/
-IoData::IoData(IssmDouble* matrix,int code_in,int layout_in,int M_in,int N_in,int enum_in){/*{{{*/
+IoData::IoData(IssmDouble* matrix,int code_in,int layout_in,int M_in,int N_in,const char* name_in){/*{{{*/
 	this->isindependent = false;
-	this->data_enum     = enum_in;
-	this->name          = NULL;
 	this->code          = code_in;
 	this->layout        = layout_in;
@@ -96,4 +114,9 @@
 	this->data          = matrix; /*do not copy*/
 	_assert_(code_in==5 ||  code_in==6 || code_in==7);
+
+	_assert_(name_in);
+	int len=strlen(name_in);
+	this->name=xNew<char>(len+1);
+	memcpy(this->name,name_in,(len+1)*sizeof(char));
 }
 /*}}}*/
@@ -138,5 +161,5 @@
 
 	/*Check that Enums are Synchronized*/
-	this->CheckEnumSync();
+	this->CheckFile();
 
 	/*Keep track of solution*/
@@ -153,6 +176,6 @@
 
 	/*Is this an autodiff run?*/
-	this->FindConstant(&autodiff,AutodiffIsautodiffEnum);
-	this->FindConstant(&iscontrol,InversionIscontrolEnum);
+	this->FindConstant(&autodiff,"md.autodiff.isautodiff");
+	this->FindConstant(&iscontrol,"md.inversion.iscontrol");
 	if(trace){
 		autodiff=true;
@@ -164,5 +187,5 @@
 		 autodiff=false;
 	}
-	this->AddConstant(new IoConstant(autodiff,AutodiffIsautodiffEnum));
+	this->AddConstant(new IoConstant(autodiff,"md.autodiff.isautodiff"));
 
 	/*Initialize permanent data: */
@@ -170,10 +193,10 @@
 	this->my_vertices = NULL;
 
-	FetchData(&this->domaintype,DomainTypeEnum);
-	FetchData(&this->domaindim,DomainDimensionEnum);
-	FetchData(&this->meshelementtype,MeshElementtypeEnum);
-	FetchData(&this->numberofvertices,MeshNumberofverticesEnum);
-	FetchData(&this->numberofelements,MeshNumberofelementsEnum);
-	FetchData(&this->elements,NULL,NULL,MeshElementsEnum);
+	FetchData(&this->domaintype,"md.mesh.domain_type");
+	FetchData(&this->domaindim,"md.mesh.domain_dimension");
+	FetchData(&this->meshelementtype,"md.mesh.elementtype");
+	FetchData(&this->numberofvertices,"md.mesh.numberofvertices");
+	FetchData(&this->numberofelements,"md.mesh.numberofelements");
+	FetchData(&this->elements,NULL,NULL,"md.mesh.elements");
 	this->facescols                       = -1;
 	this->faces                           = NULL;
@@ -203,5 +226,5 @@
 		#if defined(_ISSM_DEBUG_)
 		if(!(*iter2)->isindependent){
-			_printf0_("WARNING: IoData " << EnumToStringx((*iter2)->data_enum) << " has not been freed (DeleteData has not been called)\n");
+			_printf0_("WARNING: IoData \"" << (*iter2)->name << "\" has not been freed (DeleteData has not been called)\n");
 		}
 		#endif
@@ -232,5 +255,5 @@
 
 	for(iter=constants.begin();iter<constants.end();iter++){
-		if((*iter)->data_enum==in_constant->data_enum){
+		if(strcmp((*iter)->name,in_constant->name)==0){
 			delete in_constant;
 			return;
@@ -260,5 +283,5 @@
 
 	for(iter=data.begin();iter<data.end();iter++){
-		if((*iter)->data_enum==in_data->data_enum){
+		if(strcmp((*iter)->name,in_data->name)==0){
 			delete in_data;
 			return;
@@ -280,7 +303,10 @@
 }
 /*}}}*/
-void  IoModel::CheckEnumSync(void){/*{{{*/
-
-	int record_enum,record_length;
+void  IoModel::CheckFile(void){/*{{{*/
+
+	bool        found;
+	int         record_enum,record_length,record_name_size;
+	char       *record_name = NULL;
+	const char *mddot = "md.";
 
 	/*recover my_rank:*/
@@ -296,49 +322,36 @@
 		fseek(this->fid,0,SEEK_SET);
 
-		/*Get first Enum*/
-		if(fread(&record_enum,sizeof(int),1,this->fid)==0){
-			_error_("Marshalled file is empty");
-		}
-		else{
-			if(record_enum!=MaximumNumberOfDefinitionsEnum){
-				_printf0_("\n");
-				_printf0_("=========================================================================\n");
-				_printf0_(" Enums in marshalled file are not compatible with compiled code          \n");
-				_printf0_("                                                                         \n");
-				_printf0_("   * If you are running ISSM on your local machine:                      \n");
-				_printf0_("     make sure that all the code is compiled and installed (make install)\n");
-				_printf0_("   * If you are running ISSM on a remote cluster:                        \n");
-				_printf0_("     make sure that you are using the same version of ISSM on your local \n");
-				_printf0_("     machine and remote cluster (you might need to run svn update)       \n");
-				_printf0_("   * If you are a developer and just added a new Enum:                   \n");
-				_printf0_("     you might need to run ./Synchronize.sh in src/c/shared/Enum         \n");
-				_printf0_("     and recompile                                                       \n");
-				_printf0_("=========================================================================\n");
-				_printf0_("\n");
-				_error_("Enums not consistent (See error message above)");
-			}
-		}
-
-		/*Get last enum*/
-		bool found     = false;
-		int  last_enum = 0;
-
-		/*First set FILE* position to the beginning of the file: */
-		fseek(fid,0,SEEK_SET);
 		for(;;){
-			/*Have we reached the end of file ?*/
-			if(fread(&record_enum,sizeof(int),1,fid)==0){
+			/*Read size of first string name: */
+			if(fread(&record_name_size,sizeof(int),1,fid)==0){
+				/*we have reached the end of the file. break: */
+				xDelete<char>(record_name);
 				break;
 			}
-
-			/*Have we found the last Enum ?*/
-			if(record_enum==MaximumNumberOfDefinitionsEnum+1){
+			if(record_name_size<3 || record_name_size>80){
+				_error_("error while looking in binary file. Found a string of size "<<record_name_size);
+			}
+
+			/*Allocate string of correct size: */
+			record_name=xNew<char>(record_name_size+1);
+			record_name[record_name_size]='\0';
+
+			/*Read record_name: */
+			if(fread(record_name,record_name_size*sizeof(char),1,fid)==0){
+				/*we have reached the end of the file. break: */
+				found=false;
+				xDelete<char>(record_name);
+				break;
+			}
+			//_printf_("   reading "<< record_name<<"...\n");
+			if(strncmp(record_name,mddot,3)!=0){
+				_error_("error while reading binary file: record does not start with \"md.\": "<<record_name);
+			}
+
+			/*Have we found the last string?*/
+			if(strncmp(record_name,"md.EOF",6)==0){
 				found = true;
+				xDelete<char>(record_name);
 				break;
-			}
-
-			/*Check that record_enum is an enum*/
-			if(record_enum>=0 && record_enum<=MaximumNumberOfDefinitionsEnum){
-				if(record_enum>0) last_enum = record_enum;
 			}
 
@@ -346,4 +359,5 @@
 			if(fread(&record_length,sizeof(int),1,fid)!=1) _error_("Could not read record_length");
 			fseek(fid,record_length,SEEK_CUR);
+			xDelete<char>(record_name);
 		}
 		if(!found){
@@ -352,7 +366,5 @@
 			_printf0_(" Marshalled file is corrupted                                            \n");
 			_printf0_("                                                                         \n");
-			_printf0_("   * If you are running an old model, send it to the ISSM developers     \n");
-			_printf0_("     so that a check is added before marshall                            \n");
-			_printf0_("   * Last Enum found: " << EnumToStringx(last_enum)<<"Enum ("<<last_enum<<")\n");
+			_printf0_("   * Last record found is : \n");
 			_printf0_("     the corresponding model field has probably been marshalled          \n");
 			_printf0_("     incorrectly                                                         \n");
@@ -365,5 +377,5 @@
 }
 /*}}}*/
-void  IoModel::FetchIndependentConstant(int* pXcount,IssmPDouble* X,int name){/*{{{*/
+void  IoModel::FetchIndependentConstant(int* pXcount,IssmPDouble* X,const char* constant_name){/*{{{*/
 
 	/*recover my_rank:*/
@@ -382,6 +394,6 @@
 
 	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,NULL,name);
-	if(code!=3) _error_("expecting a IssmDouble for enum " << EnumToStringx(name));
+	fid=this->SetFilePointerToData(&code,NULL,constant_name);
+	if(code!=3) _error_("expecting a IssmDouble for \"" << constant_name<<"\"");
 
 	/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
@@ -400,5 +412,5 @@
 
 	ISSM_MPI_Bcast(&scalar,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 
-	this->AddConstantIndependent(new IoConstant(scalar,name));
+	this->AddConstantIndependent(new IoConstant(scalar,constant_name));
 
 	/*increment offset into X vector, now that we have read 1 value:*/
@@ -407,5 +419,5 @@
 }
 /*}}}*/
-void  IoModel::FetchIndependentData(int* pXcount,IssmPDouble* X,int name){/*{{{*/
+void  IoModel::FetchIndependentData(int* pXcount,IssmPDouble* X,const char* data_name){/*{{{*/
 
 	/*recover my_rank:*/
@@ -425,6 +437,6 @@
 
 	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,&layout,name);
-	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(name));
+	fid=this->SetFilePointerToData(&code,&layout,data_name);
+	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for \"" << data_name<<"\"");
 
 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
@@ -462,8 +474,8 @@
 		xDelete<IssmPDouble>(buffer);
 	}
-	else _error_("cannot declare the independent variable " << EnumToStringx(name) <<  "if it's empty!");
+	else _error_("cannot declare the independent variable \"" << data_name <<  "\" if it's empty!");
 
 	/*Add to data as independent*/
-	this->AddDataIndependent(new IoData(matrix,code,layout,M,N,name));
+	this->AddDataIndependent(new IoData(matrix,code,layout,M,N,data_name));
 
 	/*increment offset into X vector, now that we have read M*N values:*/
@@ -472,5 +484,5 @@
 }
 /*}}}*/
-void  IoModel::FindConstant(bool* pvalue,int constant_enum){/*{{{*/
+void  IoModel::FindConstant(bool* pvalue,const char* constant_name){/*{{{*/
 
 	/*Intermediary*/
@@ -480,5 +492,5 @@
 		IoConstant* ioconstant=*iter;
 
-		if(ioconstant->data_enum==constant_enum){
+		if(strcmp(ioconstant->name,constant_name)==0){
 			ioconstant->constant->GetParameterValue(pvalue);
 			return;
@@ -487,8 +499,8 @@
 
 	for(vector<IoConstant*>::iterator iter=constants.begin();iter<constants.end();iter++) (*iter)->constant->Echo();
-	_error_("Could not find constant \""<<EnumToStringx(constant_enum) <<"\"");
-}
-/*}}}*/
-void  IoModel::FindConstant(int* pvalue,int constant_enum){/*{{{*/
+	_error_("Could not find constant \""<<constant_name<<"\"");
+}
+/*}}}*/
+void  IoModel::FindConstant(int* pvalue,const char* constant_name){/*{{{*/
 
 	/*Intermediary*/
@@ -498,5 +510,5 @@
 		IoConstant* ioconstant=*iter;
 
-		if(ioconstant->data_enum==constant_enum){
+		if(strcmp(ioconstant->name,constant_name)==0){
 			ioconstant->constant->GetParameterValue(pvalue);
 			return;
@@ -504,8 +516,8 @@
 	}
 
-	_error_("Could not find constant \""<<EnumToStringx(constant_enum) <<"\"");
-}
-/*}}}*/
-void  IoModel::FindConstant(IssmDouble* pvalue,int constant_enum){/*{{{*/
+	_error_("Could not find constant \""<<constant_name <<"\"");
+}
+/*}}}*/
+void  IoModel::FindConstant(IssmDouble* pvalue,const char* constant_name){/*{{{*/
 
 	/*Intermediary*/
@@ -515,5 +527,5 @@
 		IoConstant* ioconstant=*iter;
 
-		if(ioconstant->data_enum==constant_enum){
+		if(strcmp(ioconstant->name,constant_name)==0){
 			ioconstant->constant->GetParameterValue(pvalue);
 			return;
@@ -521,8 +533,8 @@
 	}
 
-	_error_("Could not find constant \""<<EnumToStringx(constant_enum) <<"\"");
-}
-/*}}}*/
-void  IoModel::FindConstant(char** pvalue,int constant_enum){/*{{{*/
+	_error_("Could not find constant \""<<constant_name <<"\"");
+}
+/*}}}*/
+void  IoModel::FindConstant(char** pvalue,const char* constant_name){/*{{{*/
 
 	/*Intermediary*/
@@ -532,5 +544,5 @@
 		IoConstant* ioconstant=*iter;
 
-		if(ioconstant->data_enum==constant_enum){
+		if(strcmp(ioconstant->name,constant_name)==0){
 			ioconstant->constant->GetParameterValue(pvalue);
 			return;
@@ -538,5 +550,22 @@
 	}
 
-	_error_("Could not find constant \""<<EnumToStringx(constant_enum) <<"\"");
+	_error_("Could not find constant \""<<constant_name <<"\"");
+}
+/*}}}*/
+void  IoModel::FindConstant(char*** pvalue,int* psize,const char* constant_name){/*{{{*/
+
+	/*Intermediary*/
+	vector<IoConstant*>::iterator iter;
+
+	for(iter=constants.begin();iter<constants.end();iter++){
+		IoConstant* ioconstant=*iter;
+
+		if(strcmp(ioconstant->name,constant_name)==0){
+			ioconstant->constant->GetParameterValue(pvalue,psize);
+			return;
+		}
+	}
+
+	_error_("Could not find constant \""<<constant_name <<"\"");
 }
 /*}}}*/
@@ -592,5 +621,5 @@
 }
 /*}}}*/
-Param* IoModel::CopyConstantObject(int constant_enum){/*{{{*/
+Param* IoModel::CopyConstantObject(const char* constant_name,int param_enum){/*{{{*/
 
 	/*Intermediary*/
@@ -600,14 +629,16 @@
 		IoConstant* ioconstant=*iter;
 
-		if(ioconstant->data_enum==constant_enum){
-			return ioconstant->constant->copy();
-		}
-	}
-
-	_error_("Constant " << EnumToStringx(constant_enum) << " not found in iomodel");
+		if(strcmp(ioconstant->name,constant_name)==0){
+			Param* output = ioconstant->constant->copy();
+			output->SetEnum(param_enum);
+			return output;
+		}
+	}
+
+	_error_("Constant \"" << constant_name << "\" not found in iomodel");
 	return NULL;
 }
 /*}}}*/
-IssmDouble* IoModel::Data(int data_enum){/*{{{*/
+IssmDouble* IoModel::Data(const char* data_name){/*{{{*/
 
 	/*Intermediary*/
@@ -616,5 +647,5 @@
 	for(iter=data.begin();iter<data.end();iter++){
 		IoData* iodata=*iter;
-		if(iodata->data_enum==data_enum) return iodata->data;
+		if(strcmp(iodata->name,data_name)==0) return iodata->data;
 	}
 
@@ -636,18 +667,18 @@
 	int my_rank=IssmComm::GetRank();
 
-	this->FetchData(&autodiff,AutodiffIsautodiffEnum);
-	this->FetchData(&iscontrol,InversionIscontrolEnum);
+	this->FetchData(&autodiff,"md.autodiff.isautodiff");
+	this->FetchData(&iscontrol,"md.inversion.iscontrol");
 
 	if(trace || (autodiff && !iscontrol)){
 		#ifdef _HAVE_ADOLC_
 		/*Retrieve parameters: */
-		this->FetchData(&keep,AutodiffKeepEnum);
+		this->FetchData(&keep,"md.autodiff.keep");
 		int keepTaylors=keep?1:0;
-		this->FetchData(&gcTriggerRatio,AutodiffGcTriggerRatioEnum);
-		this->FetchData(&gcTriggerMaxSize,AutodiffGcTriggerMaxSizeEnum);
-		this->FetchData(&obufsize,AutodiffObufsizeEnum);
-		this->FetchData(&lbufsize,AutodiffLbufsizeEnum);
-		this->FetchData(&cbufsize,AutodiffCbufsizeEnum);
-		this->FetchData(&tbufsize,AutodiffTbufsizeEnum);
+		this->FetchData(&gcTriggerRatio,"md.autodiff.gcTriggerRatio");
+		this->FetchData(&gcTriggerMaxSize,"md.autodiff.gcTriggerMaxSize");
+		this->FetchData(&obufsize,"md.autodiff.obufsize");
+		this->FetchData(&lbufsize,"md.autodiff.lbufsize");
+		this->FetchData(&cbufsize,"md.autodiff.cbufsize");
+		this->FetchData(&tbufsize,"md.autodiff.tbufsize");
 
 		/*Set garbage collection parameters: */
@@ -668,18 +699,18 @@
 	int  Xcount=0;
 
-	int *names = NULL;
+	char** names = NULL;
 	int *types = NULL;
 
 	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
-	this->FetchData(&autodiff,AutodiffIsautodiffEnum);
-	this->FetchData(&iscontrol,InversionIscontrolEnum);
+	this->FetchData(&autodiff,"md.autodiff.isautodiff");
+	this->FetchData(&iscontrol,"md.inversion.iscontrol");
 	
 	if(trace || (autodiff && !iscontrol)){
 
 		#ifdef _HAVE_ADOLC_
-		this->FetchData(&num_independent_objects,AutodiffNumIndependentObjectsEnum);
+		this->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects");
 		if(num_independent_objects){
-			this->FetchData(&names,NULL,NULL,AutodiffIndependentObjectNamesEnum);
-			this->FetchData(&types,NULL,NULL,AutodiffIndependentObjectTypesEnum);
+			this->FindConstant(&names,NULL,"md.autodiff.independent_object_names");
+			this->FetchData(&types,NULL,NULL,"md.autodiff_independent_object_types");
 
 			/*create independent objects, and at the same time, fetch the corresponding independent variables, 
@@ -699,5 +730,6 @@
 				}
 			}
-			xDelete<int>(names);
+			for(int i=0;i<num_independent_objects;i++) xDelete<char>(names[i]);
+			xDelete<char*>(names);
 			xDelete<int>(types);
 		}
@@ -712,16 +744,19 @@
 
 	/*Intermediaries*/
-	va_list ap;
-	int     dataenum;
-	vector<IoData*>::iterator iter;
+	va_list     ap;
+	char       *data_name = NULL;
+	const char *mddot     = "md.";
+	vector<IoData *>::iterator iter;
 
 	/*Go through the entire list of data and delete the corresponding data from the iomodel-data dataset: */
 	va_start(ap,num);
 	for(int i=0;i<num;i++){
-		dataenum=va_arg(ap,int);
+		data_name=va_arg(ap,char*);
+
+		if(strncmp(data_name,mddot,3)!=0) _error_("String provided does not start with \"md.\" ("<<data_name<<")");
 
 		for(iter=data.begin();iter<data.end();iter++){
 			IoData* iodata=*iter;
-			if(iodata->data_enum==dataenum && !iodata->isindependent){
+			if(strcmp(iodata->name,data_name)==0 && !iodata->isindependent){
 				delete *iter;
 				this->data.erase(iter);
@@ -732,5 +767,5 @@
 	va_end(ap);
 } /*}}}*/
-void  IoModel::DeleteData(IssmDouble* vector_in, int dataenum){/*{{{*/
+void  IoModel::DeleteData(IssmDouble* vector_in,const char* data_name){/*{{{*/
 
 	vector<IoData*>::iterator iter;
@@ -742,5 +777,5 @@
 	for(iter=data.begin();iter<data.end();iter++){
 		IoData* iodata=*iter;
-		if(iodata->data_enum==dataenum && iodata->isindependent){
+		if(strcmp(iodata->name,data_name)==0 && iodata->isindependent){
 			return;
 		}
@@ -750,11 +785,10 @@
 	xDelete<IssmDouble>(vector_in);
 } /*}}}*/
-void  IoModel::DeleteData(char*** pstringarray, int numstrings, int dataenum){/*{{{*/
-
-	int i;
+void  IoModel::DeleteData(char*** pstringarray, int numstrings,const char* data_name){/*{{{*/
+
 	char** stringarray=*pstringarray;
 	
-	if (numstrings){
-		for (i=0;i<numstrings;i++){
+	if(numstrings){
+		for(int i=0;i<numstrings;i++){
 			char* string=stringarray[i]; 
 			xDelete<char>(string);
@@ -767,5 +801,7 @@
 
 	/*record descriptions; */
-	int record_enum;
+	const char* mddot = "md.";
+	char* record_name = NULL;
+	int   record_name_size;
 	int record_length;
 	int record_code; //1 to 7 number
@@ -777,5 +813,6 @@
 	IssmDouble   scalar      = 0;
 	char        *string      = NULL;
-	int          string_size;
+	char       **strings     = NULL;
+	int          string_size,numstrings;
 
 	/*recover my_rank:*/
@@ -793,105 +830,155 @@
 		/*Now march through file looking for the correct data identifiers (bool,int,IssmDouble or string): */
 		for(;;){
-			if(fread(&record_enum,sizeof(int),1,this->fid)==0){
-
-				/*Ok, we have reached the end of the file. break: */
+
+			/*Read size of first string name: */
+			if(fread(&record_name_size,sizeof(int),1,fid)==0){
+				/*we have reached the end of the file. break: */
 				record_code=0; //0 means bailout
 				ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm());  /*tell others cpus we are bailing: */
 				break;
 			}
-			else{
-
-				/* Read the record length and the data type code: */
-				if(fread(&record_length,sizeof(int),1,this->fid)!=1) _error_("Cound not read record_length");
-				if(fread(&record_code  ,sizeof(int),1,this->fid)!=1) _error_("Cound not read record_code");
-
-				/*Tell other cpus what we are doing: */
-				ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm());  /*tell other cpus what we are going to do: */
-
-				/*Tell other cpus the name of the data, then branch according to the data type: */
-				ISSM_MPI_Bcast(&record_enum,1,ISSM_MPI_INT,0,IssmComm::GetComm());  
-				ISSM_MPI_Bcast(&record_length,1,ISSM_MPI_INT,0,IssmComm::GetComm());  
-
-				switch(record_code){
-					case 1: 
-						/*Read the boolean and broadcast it to other cpus:*/
-						if(fread(&booleanint,sizeof(int),1,this->fid)!=1) _error_("could not read boolean ");
-						ISSM_MPI_Bcast(&booleanint,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
-
-						/*create BoolParam: */
-						if(record_enum!=MaximumNumberOfDefinitionsEnum && record_enum!=MaximumNumberOfDefinitionsEnum+1)
-						 this->AddConstant(new IoConstant((bool)booleanint,record_enum)); //cast to boolean
-
-						break;
-					case 2:
-						/*Read the integer and broadcast it to other cpus:*/
-						if(fread(&integer,sizeof(int),1,this->fid)!=1) _error_("could not read integer ");
-						ISSM_MPI_Bcast(&integer,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
-
-						/*create IntParam: */
-						this->AddConstant(new IoConstant(integer,record_enum));
-
-						break;
-					case 3:
-						  {
-							/*IssmDouble, check whether it is already there (from "declare independents")*/
-							bool exists = false;
-							vector<IoConstant*>::iterator iter;
-							for(iter=constants.begin();iter<constants.end();iter++){
-								IoConstant* ioconstant=*iter;
-								if(ioconstant->data_enum==record_enum){
-									exists = true;
-									break;
-								}
+			if(record_name_size<3 || record_name_size>80){
+				_error_("error while looking in binary file. Found a string of size "<<record_name_size);
+			}
+
+			/*Allocate string of correct size: */
+			record_name=xNew<char>(record_name_size+1);
+			record_name[record_name_size]='\0';
+
+			/*Read record_name: */
+			if(fread(record_name,record_name_size*sizeof(char),1,fid)==0){
+				_error_("Could not read record name");
+			}
+			if(strncmp(record_name,mddot,3)!=0){
+				_error_("error while reading binary file: record does not start with \"md.\": "<<record_name);
+			}
+			//_printf_("reading "<<record_name<<"...\n");
+
+			/* Read the record length and the data type code: */
+			if(fread(&record_length,sizeof(int),1,this->fid)!=1) _error_("Cound not read record_length");
+			if(fread(&record_code  ,sizeof(int),1,this->fid)!=1) _error_("Cound not read record_code");
+
+			/*Tell other cpus what we are doing: */
+			ISSM_MPI_Bcast(&record_code,1,ISSM_MPI_INT,0,IssmComm::GetComm());  /*tell other cpus what we are going to do: */
+
+			/*Tell other cpus the name of the data, then branch according to the data type: */
+			ISSM_MPI_Bcast(&record_name_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+			ISSM_MPI_Bcast(record_name,record_name_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+			ISSM_MPI_Bcast(&record_length,1,ISSM_MPI_INT,0,IssmComm::GetComm());  
+
+			switch(record_code){
+				case 1: 
+					/*Read the boolean and broadcast it to other cpus:*/
+					if(fread(&booleanint,sizeof(int),1,this->fid)!=1) _error_("could not read boolean ");
+					ISSM_MPI_Bcast(&booleanint,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+
+					/*create BoolParam: */
+					this->AddConstant(new IoConstant((bool)booleanint,record_name)); //cast to boolean
+
+					break;
+				case 2:
+					/*Read the integer and broadcast it to other cpus:*/
+					if(fread(&integer,sizeof(int),1,this->fid)!=1) _error_("could not read integer ");
+					ISSM_MPI_Bcast(&integer,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+
+					/*create IntParam: */
+					this->AddConstant(new IoConstant(integer,record_name));
+
+					break;
+				case 3:
+					  {
+						/*IssmDouble, check whether it is already there (from "declare independents")*/
+						bool exists = false;
+						vector<IoConstant*>::iterator iter;
+						for(iter=constants.begin();iter<constants.end();iter++){
+							IoConstant* ioconstant=*iter;
+							if(strcmp(ioconstant->name,record_name)==0){
+								exists = true;
+								break;
 							}
-							if(!exists){
-								if(fread(&pscalar,sizeof(IssmPDouble),1,this->fid)!=1) _error_("could not read scalar ");
-								ISSM_MPI_Bcast(&pscalar,1,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
-								scalar=pscalar;
-
-								/*create DoubleParam: */
-								this->AddConstant(new IoConstant(scalar,record_enum));
+						}
+						if(!exists){
+							if(fread(&pscalar,sizeof(IssmPDouble),1,this->fid)!=1) _error_("could not read scalar ");
+							ISSM_MPI_Bcast(&pscalar,1,ISSM_MPI_PDOUBLE,0,IssmComm::GetComm()); 
+							scalar=pscalar;
+
+							/*create DoubleParam: */
+							this->AddConstant(new IoConstant(scalar,record_name));
+						}
+					  }
+					break;
+				case 4: 
+					/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+					if(fread(&string_size,sizeof(int),1,this->fid)!=1) _error_("could not read length of string ");
+					ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+
+					if(string_size){
+						string=xNew<char>(string_size+1);
+						string[string_size]='\0';
+
+						/*Read string, then broadcast: */
+						if(fread(string,string_size*sizeof(char),1,this->fid)!=1)_error_(" could not read string ");
+						ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+					}
+					else{
+						string=xNew<char>(1);
+						string[0]='\0';
+					}
+
+					/*Add string to parameters: */
+					this->AddConstant(new IoConstant(string,record_name));
+
+					/*Free string*/
+					xDelete<char>(string);
+					break;
+				case 5: 
+				case 6: 
+				case 7: 
+				case 8: 
+					/*We are not interested in this record, too memory intensive. Skip it: */
+					/*skip: */
+					fseek(fid,-sizeof(int),SEEK_CUR); //backtrak 1 integer
+					fseek(fid,record_length,SEEK_CUR);
+					break;
+				case 9: 
+					/*String Array*/
+					if(fread(&numstrings,sizeof(int),1,fid)!=1) _error_("could not read length of string array");
+					ISSM_MPI_Bcast(&numstrings,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+					/*Now allocate string array: */
+					if(numstrings){
+						strings=xNew<char*>(numstrings);
+						for(int i=0;i<numstrings;i++)strings[i]=NULL;
+
+						/*Go through strings, and read: */
+						for(int i=0;i<numstrings;i++){
+
+							if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+							ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+							if(string_size){
+								string=xNew<char>((string_size+1));
+								string[string_size]='\0';
+								if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+								ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
 							}
-						  }
-						break;
-					case 4: 
-						/*We have to read a string from disk. First read the dimensions of the string, then the string: */
-						if(fread(&string_size,sizeof(int),1,this->fid)!=1) _error_("could not read length of string ");
-						ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
-
-						if(string_size){
-							string=xNew<char>(string_size+1);
-							string[string_size]='\0';
-
-							/*Read string, then broadcast: */
-							if(fread(string,string_size*sizeof(char),1,this->fid)!=1)_error_(" could not read string ");
-							ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+							else{
+								string=xNew<char>(1);
+								string[0]='\0';
+							}
+							strings[i]=string;
 						}
-						else{
-							string=xNew<char>(1);
-							string[0]='\0';
-						}
-
-						/*Add string to parameters: */
-						this->AddConstant(new IoConstant(string,record_enum));
-
-						/*Free string*/
-						xDelete<char>(string);
-						break;
-					case 5: 
-					case 6: 
-					case 7: 
-					case 8: 
-					case 9: 
-							/*We are not interested in this record, too memory intensive. Skip it: */
-							/*skip: */
-							fseek(fid,-sizeof(int),SEEK_CUR); //backtrak 1 integer
-							fseek(fid,record_length,SEEK_CUR);
-							break;
-					default: 
-						_error_("unknown record type:" << record_code); 
-						break;
-				}
-			}
+					}
+
+					/*Add strings to parameters: */
+					this->AddConstant(new IoConstant(strings,numstrings,record_name));
+
+					/*Free string*/
+					for(int i=0;i<numstrings;i++) xDelete<char>(strings[i]);
+					xDelete<char*>(strings);
+					break;
+				default: 
+					_error_("unknown record type:" << record_code); 
+					break;
+			}
+			xDelete<char>(record_name);
 		}
 	} //}}}
@@ -903,5 +990,8 @@
 			}
 			else{
-				ISSM_MPI_Bcast(&record_enum,1,ISSM_MPI_INT,0,IssmComm::GetComm());   //get from cpu 0 name of the data
+				ISSM_MPI_Bcast(&record_name_size,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+				_assert_(record_name_size);
+				record_name=xNew<char>((record_name_size+1)); record_name[record_name_size]='\0';
+				ISSM_MPI_Bcast(record_name,record_name_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
 				ISSM_MPI_Bcast(&record_length,1,ISSM_MPI_INT,0,IssmComm::GetComm());  
 				switch(record_code){
@@ -911,6 +1001,5 @@
 
 					/*create BoolParam: */
-					if(record_enum!=MaximumNumberOfDefinitionsEnum && record_enum!=MaximumNumberOfDefinitionsEnum+1)
-					 this->AddConstant(new IoConstant((bool)booleanint,record_enum)); //cast to a boolean
+					this->AddConstant(new IoConstant((bool)booleanint,record_name)); //cast to a boolean
 					break;
 
@@ -920,6 +1009,5 @@
 
 					/*create IntParam: */
-					this->AddConstant(new IoConstant(integer,record_enum));
-
+					this->AddConstant(new IoConstant(integer,record_name));
 					break;
 				case 3:
@@ -931,5 +1019,5 @@
 						for(iter=constants.begin();iter<constants.end();iter++){
 							IoConstant* ioconstant=*iter;
-							if(ioconstant->data_enum==record_enum){
+							if(strcmp(ioconstant->name,record_name)==0){
 								exists = true;
 								break;
@@ -940,5 +1028,5 @@
 							scalar=pscalar;
 							/*create DoubleParam: */
-							this->AddConstant(new IoConstant(scalar,record_enum));
+							this->AddConstant(new IoConstant(scalar,record_name));
 						}
 					  }
@@ -958,5 +1046,5 @@
 					}
 					/*Add string to parameters: */
-					this->AddConstant(new IoConstant(string,record_enum));
+					this->AddConstant(new IoConstant(string,record_name));
 
 					/*Free string*/
@@ -968,6 +1056,35 @@
 				case 7: break; //do nothing. not interested in this type of data, which is memory intensive.
 				case 8: break; //do nothing. not interested in this type of data, which is memory intensive.
-				case 9: break; //do nothing. not interested in this type of data, which is memory intensive.
-
+				case 9:
+					ISSM_MPI_Bcast(&numstrings,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+					/*Now allocate string array: */
+					if(numstrings){
+						strings=xNew<char*>(numstrings);
+						for(int i=0;i<numstrings;i++)strings[i]=NULL;
+
+						/*Go through strings, and read: */
+						for(int i=0;i<numstrings;i++){
+
+							ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
+							if(string_size){
+								string=xNew<char>((string_size+1));
+								string[string_size]='\0';
+								ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
+							}
+							else{
+								string=xNew<char>(1);
+								string[0]='\0';
+							}
+							strings[i]=string;
+						}
+					}
+
+					/*Add strings to parameters: */
+					this->AddConstant(new IoConstant(strings,numstrings,record_name));
+
+					/*Free string*/
+					for(int i=0;i<numstrings;i++) xDelete<char>(strings[i]);
+					xDelete<char*>(strings);
+					break;
 				default: 
 					_error_("unknown record type:" << record_code); 
@@ -980,5 +1097,5 @@
 }
 /*}}}*/
-void  IoModel::FetchData(bool* pboolean,int data_enum){/*{{{*/
+void  IoModel::FetchData(bool* pboolean,const char* data_name){/*{{{*/
 
 	/*output: */
@@ -990,7 +1107,7 @@
 
 	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,NULL,data_enum);
-
-	if(code!=1)_error_("expecting a boolean for enum " << EnumToStringx(data_enum));
+	fid=this->SetFilePointerToData(&code,NULL,data_name);
+
+	if(code!=1)_error_("expecting a boolean for \"" << data_name<<"\"");
 
 	/*We have to read a boolean from disk. */
@@ -1006,5 +1123,5 @@
 }
 /*}}}*/
-void  IoModel::FetchData(int* pinteger,int data_enum){/*{{{*/
+void  IoModel::FetchData(int* pinteger,const char* data_name){/*{{{*/
 
 	/*output: */
@@ -1016,7 +1133,7 @@
 
 	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,NULL,data_enum);
-
-	if(code!=2)_error_("expecting an integer for enum " << EnumToStringx(data_enum));
+	fid=this->SetFilePointerToData(&code,NULL,data_name);
+
+	if(code!=2)_error_("expecting an integer for \"" << data_name<<"\"");
 
 	/*We have to read a integer from disk. First read the dimensions of the integer, then the integer: */
@@ -1031,5 +1148,5 @@
 }
 /*}}}*/
-void  IoModel::FetchData(IssmDouble* pscalar,int data_enum){/*{{{*/
+void  IoModel::FetchData(IssmDouble* pscalar,const char* data_name){/*{{{*/
 
 	/*output: */
@@ -1041,7 +1158,7 @@
 
 	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,NULL,data_enum);
-
-	if(code!=3)_error_("expecting a IssmDouble for enum " << EnumToStringx(data_enum));
+	fid=this->SetFilePointerToData(&code,NULL,data_name);
+
+	if(code!=3)_error_("expecting a IssmDouble for \""<<data_name<<"\"");
 
 	/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
@@ -1056,5 +1173,5 @@
 }
 /*}}}*/
-void  IoModel::FetchData(char** pstring,int data_enum){/*{{{*/
+void  IoModel::FetchData(char** pstring,const char* data_name){/*{{{*/
 
 	/*output: */
@@ -1067,7 +1184,7 @@
 
 	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,NULL,data_enum);
-
-	if(code!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
+	fid=this->SetFilePointerToData(&code,NULL,data_name);
+
+	if(code!=4)_error_("expecting a string for \""<<data_name<<"\"");
 
 	/*Now fetch: */
@@ -1100,5 +1217,5 @@
 }
 /*}}}*/
-void  IoModel::FetchData(int** pmatrix,int* pM,int* pN,int data_enum){/*{{{*/
+void  IoModel::FetchData(int** pmatrix,int* pM,int* pN,const char* data_name){/*{{{*/
 	int i,j;
 
@@ -1113,7 +1230,7 @@
 
 	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,NULL,data_enum);
-
-	if(code!=5 && code!=6 && code!=7)_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum)<<" (Code is "<<code<<")");
+	fid=this->SetFilePointerToData(&code,NULL,data_name);
+
+	if(code!=5 && code!=6 && code!=7)_error_("expecting a IssmDouble, integer or boolean matrix for \""<<data_name<<"\""<<" (Code is "<<code<<")");
 
 	/*Now fetch: */
@@ -1166,5 +1283,5 @@
 }
 /*}}}*/
-void  IoModel::FetchData(IssmDouble** pmatrix,int* pM,int* pN,int data_enum){/*{{{*/
+void  IoModel::FetchData(IssmDouble** pmatrix,int* pM,int* pN,const char* data_name){/*{{{*/
 
 	/*First, look if has already been loaded (might be an independent variable)*/
@@ -1172,5 +1289,5 @@
 	for(iter=data.begin();iter<data.end();iter++){
 		IoData* iodata=*iter;
-		if(iodata->data_enum==data_enum){
+		if(strcmp(iodata->name,data_name)==0){
 			*pmatrix=iodata->data;
 			if(pM) *pM=iodata->M;
@@ -1189,6 +1306,6 @@
 
 	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,NULL,data_enum);
-	if(code!=5 && code!=6 && code!=7)_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum)<<" (Code is "<<code<<")");
+	fid=this->SetFilePointerToData(&code,NULL,data_name);
+	if(code!=5 && code!=6 && code!=7)_error_("expecting a IssmDouble, integer or boolean matrix for \""<<data_name<<"\""<<" (Code is "<<code<<")");
 
 	/*Now fetch: */
@@ -1227,68 +1344,5 @@
 }
 /*}}}*/
-void  IoModel::FetchData(char*** pstrings,int* pnumstrings,int data_enum){/*{{{*/
-
-	int i;
-
-	/*output: */
-	int   numstrings=0;
-	char** strings=NULL;
-
-	/*intermediary: */
-	char* string=NULL;
-	int   string_size;
-	int   code;
-
-	/*recover my_rank:*/
-	int my_rank=IssmComm::GetRank();
-
-	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,NULL,data_enum);
-
-	if(code!=9)_error_("expecting a string array for enum " << EnumToStringx(data_enum));
-
-	/*We have to read a bunch of strings from disk. First read the number of strings, and allocate: */
-	if(my_rank==0){  
-		if(fread(&numstrings,sizeof(int),1,fid)!=1) _error_("could not read length of string array");
-	}
-	ISSM_MPI_Bcast(&numstrings,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
-
-	/*Now allocate string array: */
-	if(numstrings){
-		strings=xNew<char*>(numstrings);
-		for(i=0;i<numstrings;i++)strings[i]=NULL;
-
-		/*Go through strings, and read: */
-		for(i=0;i<numstrings;i++){
-
-			if(my_rank==0){  
-				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
-			}
-			ISSM_MPI_Bcast(&string_size,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
-			if(string_size){
-				string=xNew<char>((string_size+1));
-				string[string_size]='\0';
-
-				/*Read string on node 0, then broadcast: */
-				if(my_rank==0){  
-					if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
-				}
-				ISSM_MPI_Bcast(string,string_size,ISSM_MPI_CHAR,0,IssmComm::GetComm()); 
-			}
-			else{
-				string=xNew<char>(1);
-				string[0]='\0';
-			}
-
-			strings[i]=string;
-		}
-	}
-
-	/*Assign output pointers: */
-	*pstrings=strings;
-	*pnumstrings=numstrings;
-}
-/*}}}*/
-void  IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){/*{{{*/
+void  IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,const char* data_name){/*{{{*/
 
 	int i;
@@ -1308,6 +1362,6 @@
 
 	/*Set file pointer to beginning of the data: */
-	fid=this->SetFilePointerToData(&code,NULL,data_enum);
-	if(code!=8)_error_("expecting a IssmDouble mat array for enum " << EnumToStringx(data_enum));
+	fid=this->SetFilePointerToData(&code,NULL,data_name);
+	if(code!=8)_error_("expecting a IssmDouble mat array for \""<<data_name<<"\"");
 
 	/*Now fetch: */
@@ -1374,44 +1428,46 @@
 void  IoModel::FetchData(Option** poption,int index){/*{{{*/
 
+	_error_("not implemented yet");
+
 	/*output: */
-	int     code;
-	char   *name        = NULL;
-
-	/*First get option name*/
-	this->FetchData(&name,index);
-
-	/*Get option value*/
-	fid=this->SetFilePointerToData(&code,NULL,index+1);
-	switch(code){
-		case 3: {//IssmDouble
-					GenericOption<IssmDouble>* option;
-					IssmDouble value;
-					FetchData(&value,index+1);
-					option = new GenericOption<IssmDouble>();
-					option->value = value;
-					option->name  = name;
-					option->numel = 1;
-					option->ndims = 1;
-					option->size  = NULL;
-					/*Assign output pointers: */
-					*poption=option;
-					break;
-				}
-		case 4: {//char
-					GenericOption<char*>* option;
-					char* value = NULL;
-					FetchData(&value,index+1);
-					option = new GenericOption<char*>();
-					option->value = value;
-					option->name  = name;
-					option->numel = 1;
-					option->ndims = 1;
-					option->size  = NULL;
-					*poption=option;
-					break;
-				}
-		default:
-			  _error_("Option of format " << code << " not supported yet");
-	}
+	//int     code;
+	//char   *name        = NULL;
+
+	///*First get option name*/
+	//this->FetchData(&name,index);
+
+	///*Get option value*/
+	//fid=this->SetFilePointerToData(&code,NULL,index+1);
+	//switch(code){
+	//	case 3: {//IssmDouble
+	//				GenericOption<IssmDouble>* option;
+	//				IssmDouble value;
+	//				FetchData(&value,index+1);
+	//				option = new GenericOption<IssmDouble>();
+	//				option->value = value;
+	//				option->name  = name;
+	//				option->numel = 1;
+	//				option->ndims = 1;
+	//				option->size  = NULL;
+	//				/*Assign output pointers: */
+	//				*poption=option;
+	//				break;
+	//			}
+	//	case 4: {//char
+	//				GenericOption<char*>* option;
+	//				char* value = NULL;
+	//				FetchData(&value,index+1);
+	//				option = new GenericOption<char*>();
+	//				option->value = value;
+	//				option->name  = name;
+	//				option->numel = 1;
+	//				option->ndims = 1;
+	//				option->size  = NULL;
+	//				*poption=option;
+	//				break;
+	//			}
+	//	default:
+	//		  _error_("Option of format " << code << " not supported yet");
+	//}
 
 }
@@ -1420,11 +1476,13 @@
 
 	va_list     ap;
-	int         dataenum,code,layout;
+	int         code,layout;
 	IssmDouble *matrix   = NULL;
+	char*       data_name;
 	int         M,N;
 	bool        exists;
+	const char *mddot     = "md.";
 	vector<IoData*>::iterator iter;
 
-	/*Go through the entire list of enums and fetch the corresponding data. Add it to the iomodel->data dataset. Everything
+	/*Go through the entire list of names and fetch the corresponding data. Add it to the iomodel->data dataset. Everything
 	 *we fetch is a IssmDouble* : */
 
@@ -1432,10 +1490,12 @@
 	for(int i=0; i<num; i++){
 
-		dataenum=va_arg(ap, int);
+		data_name=va_arg(ap,char*);
+		if(strncmp(data_name,mddot,3)!=0) _error_("String provided does not start with \"md.\" ("<<data_name<<")");
+
 		exists = false;
 
 		for(iter=data.begin();iter<data.end();iter++){
 			IoData* iodata=*iter;
-			if(iodata->data_enum==dataenum){
+			if(strcmp(iodata->name,data_name)==0){
 				/*Already there, no need to fetch it*/
 				_assert_(iodata->isindependent);
@@ -1451,7 +1511,7 @@
 		else{
 			/*Add to this->data: */
-			this->SetFilePointerToData(&code,&layout,dataenum);
-			this->FetchData(&matrix,&M,&N,dataenum);
-			this->AddData(new IoData(matrix,code,layout,M,N,dataenum));
+			this->SetFilePointerToData(&code,&layout,data_name);
+			this->FetchData(&matrix,&M,&N,data_name);
+			this->AddData(new IoData(matrix,code,layout,M,N,data_name));
 		}
 	}
@@ -1459,5 +1519,5 @@
 }
 /*}}}*/
-void  IoModel::FetchMultipleData(char*** pstrings,int* pnumstrings,int data_enum){/*{{{*/
+void  IoModel::FetchMultipleData(char*** pstrings,int* pnumstrings,const char* data_name){/*{{{*/
 
 	int  num_instances;
@@ -1478,5 +1538,5 @@
 
 	/*Get file pointers to beginning of the data (multiple instances of it): */
-	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
+	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_name);
 
 	if(num_instances){
@@ -1487,5 +1547,5 @@
 			if(my_rank==0){
 				/*check we are indeed finding a string, not something else: */
-				if(codes[i]!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
+				if(codes[i]!=4)_error_("expecting a string for \""<<data_name<<"\"");
 		
 				/*We have to read a string from disk. First read the dimensions of the string, then the string: */
@@ -1523,5 +1583,5 @@
 }
 /*}}}*/
-void  IoModel::FetchMultipleData(int** pvector, int* pnum_instances,int data_enum){/*{{{*/
+void  IoModel::FetchMultipleData(int** pvector, int* pnum_instances,const char* data_name){/*{{{*/
 
 	int     num_instances;
@@ -1540,5 +1600,5 @@
 	
 	/*Get file pointers to beginning of the data (multiple instances of it): */
-	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
+	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_name);
 
 	if(num_instances){
@@ -1552,5 +1612,5 @@
 				code=codes[i];
 
-				if(code!=2)_error_("expecting an integer for enum " << EnumToStringx(data_enum));
+				if(code!=2)_error_("expecting an integer for \""<<data_name<<"\"");
 				
 				/*We have to read a integer from disk. First read the dimensions of the integer, then the integer: */
@@ -1576,5 +1636,5 @@
 }
 /*}}}*/
-void  IoModel::FetchMultipleData(IssmDouble** pvector, int* pnum_instances,int data_enum){/*{{{*/
+void  IoModel::FetchMultipleData(IssmDouble** pvector, int* pnum_instances,const char* data_name){/*{{{*/
 
 	int     num_instances;
@@ -1593,5 +1653,5 @@
 	
 	/*Get file pointers to beginning of the data (multiple instances of it): */
-	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
+	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_name);
 
 	if(num_instances){
@@ -1605,5 +1665,5 @@
 				code=codes[i];
 
-				if(code!=3)_error_("expecting a double for enum " << EnumToStringx(data_enum));
+				if(code!=3)_error_("expecting a double for \""<<data_name<<"\"");
 				
 				/*We have to read a double from disk: */
@@ -1629,5 +1689,5 @@
 }
 /*}}}*/
-void  IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){/*{{{*/
+void  IoModel::FetchMultipleData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,const char* data_name){/*{{{*/
 
 	int     num_instances;
@@ -1650,5 +1710,5 @@
 	
 	/*Get file pointers to beginning of the data (multiple instances of it): */
-	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
+	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_name);
 
 	if(num_instances){
@@ -1664,5 +1724,5 @@
 				code=codes[i];
 
-				if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+				if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for \""<<data_name<<"\"");
 
 				/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
@@ -1732,5 +1792,5 @@
 }
 /*}}}*/
-void  IoModel::FetchMultipleData(int*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){/*{{{*/
+void  IoModel::FetchMultipleData(int*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,const char* data_name){/*{{{*/
 
 	int     num_instances;
@@ -1754,5 +1814,5 @@
 	
 	/*Get file pointers to beginning of the data (multiple instances of it): */
-	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_enum);
+	file_positions=this->SetFilePointersToData(&codes,NULL,&num_instances,data_name);
 
 	if(num_instances){
@@ -1768,5 +1828,5 @@
 				code=codes[i];
 
-				if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+				if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for \""<<data_name<<"\"");
 
 				/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
@@ -1837,5 +1897,5 @@
 }
 /*}}}*/
-void  IoModel::FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value){/*{{{*/
+void  IoModel::FetchDataToInput(Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value){/*{{{*/
 
 	/*First, look whether it is not already loaded in this->data*/
@@ -1843,9 +1903,9 @@
 	for(iter=data.begin();iter<data.end();iter++){
 		IoData* iodata=*iter;
-		if(iodata->data_enum==vector_enum){
+		if(strcmp(iodata->name,vector_name)==0){
 			_assert_(iodata->code==7);
 			for(int i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(iodata->data,this,iodata->M,iodata->N,iodata->layout,vector_enum,iodata->code);//we need i to index into elements.
+				element->InputCreate(iodata->data,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.
 			}
 			return;
@@ -1858,16 +1918,16 @@
 	int         M,N;
 
-	/*First of, find the record for the enum, and get code  of data type: */
-	this->SetFilePointerToData(&code, &vector_layout,vector_enum);
+	/*First of, find the record for the name, and get code  of data type: */
+	this->SetFilePointerToData(&code, &vector_layout,vector_name);
 
 	/*Defaulting only supported for double arrays*/
-	if(code!=7) _error_(EnumToStringx(vector_enum)<<" is not a double array");
-
-	this->FetchData(&doublearray,&M,&N,vector_enum);
+	if(code!=7) _error_(vector_name<<" is not a double array");
+
+	this->FetchData(&doublearray,&M,&N,vector_name);
 
 	for(int i=0;i<elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-		if(!doublearray) element->AddInput(vector_enum,&default_value,P0Enum); 
-		else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+		if(!doublearray) element->AddInput(input_enum,&default_value,P0Enum); 
+		else             element->InputCreate(doublearray,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
 	}
 
@@ -1876,5 +1936,5 @@
 }
 /*}}}*/
-void  IoModel::FetchDataToInput(Elements* elements,int vector_enum){/*{{{*/
+void  IoModel::FetchDataToInput(Elements* elements,const char* vector_name,int input_enum){/*{{{*/
 
 	/*First, look whether it is not already loaded in this->data*/
@@ -1882,8 +1942,8 @@
 	for(iter=data.begin();iter<data.end();iter++){
 		IoData* iodata=*iter;
-		if(iodata->data_enum==vector_enum){
+		if(strcmp(iodata->name,vector_name)==0){
 			for(int i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(iodata->data,this,iodata->M,iodata->N,iodata->layout,vector_enum,iodata->code);//we need i to index into elements.
+				element->InputCreate(iodata->data,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.
 			}
 			return;
@@ -1903,55 +1963,55 @@
 	int         M,N;
 
-	/*First of, find the record for the enum, and get code  of data type: */
-	this->SetFilePointerToData(&code, &vector_layout,vector_enum);
+	/*First of, find the record for the name, and get code  of data type: */
+	this->SetFilePointerToData(&code, &vector_layout,vector_name);
 
 	switch(code){
 		case 1: //boolean constant
-			this->FetchData(&boolean,vector_enum);
+			this->FetchData(&boolean,vector_name);
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputUpdateFromConstant(boolean,vector_enum);
+				element->InputUpdateFromConstant(boolean,input_enum);
 			}
 			break;
 		case 2: //integer constant
-			this->FetchData(&integer,vector_enum);
+			this->FetchData(&integer,vector_name);
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputUpdateFromConstant(integer,vector_enum);
+				element->InputUpdateFromConstant(integer,input_enum);
 			}
 			break;
 		case 3: //IssmDouble constant
-			this->FetchData(&scalar,vector_enum);
+			this->FetchData(&scalar,vector_name);
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputUpdateFromConstant(scalar,vector_enum);
+				element->InputUpdateFromConstant(scalar,input_enum);
 			}
 			break; 
 		case 5: //boolean vector
-			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
-			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in binary file");
+			this->FetchData(&doublearray,&M,&N,vector_name); //we still have a doublearray, because it might include times in transient mode
+			if(!doublearray) _error_("\""<<vector_name<<"\" not found in binary file");
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+				element->InputCreate(doublearray,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
 			}
 			break;
 		case 6: //int vector
-			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
-			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in binary file");
+			this->FetchData(&doublearray,&M,&N,vector_name); //we still have a doublearray, because it might include times in transient mode
+			if(!doublearray) _error_("\""<<vector_name<<"\" not found in binary file");
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+				element->InputCreate(doublearray,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
 			}
 			break;
 		case 7: //IssmDouble vector
-			this->FetchData(&doublearray,&M,&N,vector_enum);
-			if(!doublearray) _error_(EnumToStringx(vector_enum)<<" not found in binary file");
+			this->FetchData(&doublearray,&M,&N,vector_name);
+			if(!doublearray) _error_("\""<<vector_name<<"\" not found in binary file");
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+				element->InputCreate(doublearray,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
 			}
 			break;
 		default:
-			_error_("data code " << code << " not supported yet!");
+			_error_("data code " << code << " not supported yet (detected while processing \""<<vector_name<<"\")");
 			break;
 	}
@@ -1978,5 +2038,5 @@
 		/*Now march through file looking for the correct data identifier: */
 		for(;;){
-			/*Read enum for this size of first string name: */
+			/*Read name for this size of first string name: */
 			if(fread(&index,sizeof(int),1,fid)==0){
 				/*Ok, we have reached the end of the file. break: */
@@ -1997,10 +2057,12 @@
 }
 /*}}}*/
-FILE* IoModel::SetFilePointerToData(int* pcode,int* pvector_type, int data_enum){/*{{{*/
+FILE* IoModel::SetFilePointerToData(int* pcode,int* pvector_type,const char* data_name){/*{{{*/
 
 	int my_rank;
 
-	int found         = 0;
-	int record_enum;
+	int found  = 0;
+	const char* mddot = "md.";
+	char* record_name = NULL;
+	int   record_name_size;
 	int record_length;
 	int record_code;       //1 to 7 number
@@ -2009,4 +2071,5 @@
 	/*recover my_rank:*/
 	my_rank=IssmComm::GetRank();
+	_assert_(strncmp(data_name,mddot,3)==0);
 
 	/*Go find in the binary file, the position of the data we want to fetch: */
@@ -2018,13 +2081,31 @@
 		/*Now march through file looking for the correct data identifier: */
 		for(;;){
-			/*Read enum for this size of first string name: */
-			if(fread(&record_enum,sizeof(int),1,fid)==0){
-				/*Ok, we have reached the end of the file. break: */
+			/*Read size of first string name: */
+			if(fread(&record_name_size,sizeof(int),1,fid)==0){
+				/*we have reached the end of the file. break: */
+				xDelete<char>(record_name);
+				break;
+			}
+			if(record_name_size<3 || record_name_size>80){
+				_error_("error while looking in binary file. Found a string of size "<<record_name_size);
+			}
+
+			/*Allocate string of correct size: */
+			record_name=xNew<char>(record_name_size+1);
+			record_name[record_name_size]='\0';
+
+			/*Read record_name: */
+			if(fread(record_name,record_name_size*sizeof(char),1,fid)==0){
+				/*we have reached the end of the file. break: */
 				found=0;
+				xDelete<char>(record_name);
 				break;
 			}
+			if(strncmp(record_name,mddot,3)!=0){
+				_error_("error while reading binary file: record does not start with \"md.\": "<<record_name);
+			}
 
 			/*Is this the record sought for? : */
-			if (data_enum==record_enum){
+			if(strcmp(record_name,data_name)==0){
 				/*Ok, we have found the correct string. Pass the record length, and read data type code: */
 				fseek(fid,sizeof(int),SEEK_CUR);
@@ -2036,4 +2117,5 @@
 				}
 				found=1;
+				xDelete<char>(record_name);
 				break;
 			}
@@ -2043,9 +2125,10 @@
 				/*skip: */
 				fseek(fid,record_length,SEEK_CUR);
+				xDelete<char>(record_name);
 			}
 		}
 	}
 	ISSM_MPI_Bcast(&found,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 
-	if(!found)_error_("could not find data with name " << EnumToStringx(data_enum) << " in binary file");
+	if(!found)_error_("could not find data with name \"" << data_name << "\" in binary file");
 
 	/*Broadcast code and vector type: */
@@ -2060,8 +2143,10 @@
 }
 /*}}}*/
-fpos_t* IoModel::SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, int data_enum){/*{{{*/
+fpos_t* IoModel::SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances,const char* data_name){/*{{{*/
 
 	int     found          = 0;
-	int     record_enum;
+	const char* mddot = "md.";
+	char* record_name = NULL;
+	int   record_name_size;
 	int     record_length;
 	int     record_code;           //1 to 7 number
@@ -2075,4 +2160,5 @@
 	/*recover my_rank:*/
 	int my_rank=IssmComm::GetRank();
+	_assert_(strncmp(data_name,mddot,3)==0);
 
 	/*Go find in the binary file, the data we want to fetch and count the number of 
@@ -2085,16 +2171,33 @@
 		/*Now march through file looking for the correct data identifier: */
 		for(;;){
-			/*Read enum for this size of first string name: */
-			if(fread(&record_enum,sizeof(int),1,fid)==0){
-				/*Ok, we have reached the end of the file. break: */
+			/*Read size of first string name: */
+			if(fread(&record_name_size,sizeof(int),1,fid)==0){
+				/*we have reached the end of the file. break: */
+				xDelete<char>(record_name);
 				break;
 			}
+			if(record_name_size<3 || record_name_size>80){
+				_error_("error while looking in binary file. Found a string of size "<<record_name_size);
+			}
+
+			/*Allocate string of correct size: */
+			record_name=xNew<char>(record_name_size+1);
+			record_name[record_name_size]='\0';
+
+			/*Read record_name: */
+			if(fread(record_name,record_name_size*sizeof(char),1,fid)==0){
+				break;
+			}
+			if(strncmp(record_name,mddot,3)!=0){
+				_error_("error while reading binary file: record does not start with \"md.\": "<<record_name);
+			}
 
 			/*Is this the record sought for? : */
-			if (data_enum==record_enum) num_instances++;
+			if(strcmp(record_name,data_name)==0) num_instances++;
 
 			/*Read the record length, and use it to skip the record: */
 			if(fread(&record_length,sizeof(int),1,fid)!=1) _error_("Could not read record_length");
 			fseek(fid,record_length,SEEK_CUR);
+			xDelete<char>(record_name);
 		}
 
@@ -2112,12 +2215,29 @@
 
 		for(;;){
-			/*Read enum for this size of first string name: */
-			if(fread(&record_enum,sizeof(int),1,fid)==0){
-				/*Ok, we have reached the end of the file. break: */
+			/*Read size of first string name: */
+			if(fread(&record_name_size,sizeof(int),1,fid)==0){
+				/*we have reached the end of the file. break: */
 				break;
 			}
+			if(record_name_size<3 || record_name_size>80){
+				_error_("error while looking in binary file. Found a string of size "<<record_name_size);
+			}
+
+			/*Allocate string of correct size: */
+			record_name=xNew<char>(record_name_size+1);
+			record_name[record_name_size]='\0';
+
+			/*Read record_name: */
+			if(fread(record_name,record_name_size*sizeof(char),1,fid)==0){
+				/*we have reached the end of the file. break: */
+				xDelete<char>(record_name);
+				break;
+			}
+			if(strncmp(record_name,mddot,3)!=0){
+				_error_("error while reading binary file: record does not start with \"md.\": "<<record_name);
+			}
 
 			/*Is this the record sought for? : */
-			if (data_enum==record_enum){
+			if(strcmp(record_name,data_name)==0){
 				/*Ok, we have found the correct string. Pass the record length, and read data type code: */
 				fseek(fid,sizeof(int),SEEK_CUR);
@@ -2145,4 +2265,5 @@
 			/*skip: */
 			fseek(fid,record_length,SEEK_CUR);
+			xDelete<char>(record_name);
 		}
 	}
Index: /issm/trunk-jpl/src/c/classes/IoModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 20690)
@@ -19,5 +19,4 @@
 	public:
 		bool   isindependent;
-		int    data_enum;
 		char*  name;
 		Param* constant; 
@@ -25,8 +24,9 @@
 		~IoConstant();
 		IoConstant();
-		IoConstant(bool value,int enum_in);
-		IoConstant(int value,int enum_in);
-		IoConstant(IssmDouble value,int enum_in);
-		IoConstant(char* value,int enum_in);
+		IoConstant(bool value,const char* name_in);
+		IoConstant(int value,const char* name_in);
+		IoConstant(IssmDouble value,const char* name_in);
+		IoConstant(char* value,const char* name_in);
+		IoConstant(char** value,int numstrings,const char* name_in);
 };
 
@@ -34,5 +34,4 @@
 	public:
 		bool        isindependent;
-		int         data_enum;
 		char*       name;
 		int         M,N;
@@ -43,5 +42,5 @@
 		~IoData();
 		IoData();
-		IoData(IssmDouble* matrix,int code,int layout_in,int M,int N,int enum_in);
+		IoData(IssmDouble* matrix,int code,int layout_in,int M,int N,const char* name_in);
 };
 
@@ -99,44 +98,44 @@
 		void        AddData(IoData* data_in);
 		void        AddDataIndependent(IoData* data_in);
-		void        FindConstant(bool* pvalue,int constant_enum);
-		void        FindConstant(int* pvalue,int constant_enum);
-		void        FindConstant(IssmDouble* pvalue,int constant_enum);
-		void        FindConstant(char **pvalue,int constant_enum);
-		void        FetchIndependentConstant(int* pXcount,IssmPDouble* X,int name);
-		void        FetchIndependentData(int* pXcount,IssmPDouble* X,int name);
+		void        FindConstant(bool* pvalue,const char* constant_name);
+		void        FindConstant(int* pvalue,const char* constant_name);
+		void        FindConstant(IssmDouble* pvalue,const char* constant_name);
+		void        FindConstant(char **pvalue,const char* constant_name);
+		void        FindConstant(char ***pvalue,int* psize,const char* constant_name);
+		void        FetchIndependentConstant(int* pXcount,IssmPDouble* X,const char* name);
+		void        FetchIndependentData(int* pXcount,IssmPDouble* X,const char* name);
 		int         NumIndependents();
 		void        FillIndependents(IssmDouble* xp);
 
 		/*Input/Output*/
-		void        CheckEnumSync(void);
-		Param      *CopyConstantObject(int constant_enum);
-		IssmDouble *Data(int dataenum);
+		void        CheckFile(void);
+		Param      *CopyConstantObject(const char* constant_name,int param_enum);
+		IssmDouble *Data(const char* data_name);
 		void        DeleteData(int num,...);
-		void        DeleteData(IssmDouble* vector, int dataenum);
-		void        DeleteData(char*** pstringarray, int numstrings, int dataenum);
+		void        DeleteData(IssmDouble* vector,const char* data_name);
+		void        DeleteData(char*** pstringarray, int numstrings,const char* data_name);
 		void        FetchConstants(void);
-		void        FetchData(bool* pboolean,int data_enum);
-		void        FetchData(int* pinteger,int data_enum);
-		void        FetchData(IssmDouble* pscalar,int data_enum);
-		void        FetchData(char** pstring,int data_enum);
-		void        FetchData(int** pmatrix,int* pM,int* pN,int data_enum);
-		void        FetchData(IssmDouble**  pscalarmatrix,int* pM,int* pN,int data_enum);
-		void        FetchData(char***   pstringarray,int* pnumstrings,int data_enum);
-		void        FetchData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
-		void        FetchMultipleData(char***   pstringarray,int* pnumstrings,int data_enum);
-		void        FetchMultipleData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
-		void        FetchMultipleData(int*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum);
-		void        FetchMultipleData(int** pvector, int* pnum_instances,int data_enum);
-		void        FetchMultipleData(IssmDouble** pvector, int* pnum_instances,int data_enum);
-		void        FetchData(Option **poption,int data_enum);
+		void        FetchData(bool* pboolean,const char* data_name);
+		void        FetchData(int* pinteger,const char* data_name);
+		void        FetchData(IssmDouble* pscalar,const char* data_name);
+		void        FetchData(char** pstring,const char* data_name);
+		void        FetchData(int** pmatrix,int* pM,int* pN,const char* data_name);
+		void        FetchData(IssmDouble**  pscalarmatrix,int* pM,int* pN,const char* data_name);
+		void        FetchData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,const char* data_name);
+		void        FetchMultipleData(char***   pstringarray,int* pnumstrings,const char* data_name);
+		void        FetchMultipleData(IssmDouble*** pmatrixarray,int** pmdims,int** pndims, int* pnumrecords,const char* data_name);
+		void        FetchMultipleData(int*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,const char* data_name);
+		void        FetchMultipleData(int** pvector, int* pnum_instances,const char* data_name);
+		void        FetchMultipleData(IssmDouble** pvector, int* pnum_instances,const char* data_name);
+		void        FetchData(Option **poption,int index);
 		void        FetchData(int num,...);
-		void        FetchDataToInput(Elements* elements,int vector_enum);
-		void        FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value);
+		void        FetchDataToInput(Elements* elements,const char* vector_name,int input_enum);
+		void        FetchDataToInput(Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value);
 		void        LastIndex(int *pindex);
-		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
-		fpos_t*     SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, int data_enum);
+		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, const char* data_name);
+		fpos_t*     SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, const char* data_name);
 		void        DeclareIndependents(bool trace,IssmPDouble* X);
 		void        StartTrace(bool trace);
-		void        FetchIndependent(int dependent_enum);
+		void        FetchIndependent(const char* dependent_name);
 };
 
Index: /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 20690)
@@ -46,12 +46,12 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&penalty_lock,StressbalanceRiftPenaltyLockEnum);
+	iomodel->FindConstant(&penalty_lock,"md.stressbalance.rift_penalty_lock");
 
 	/*Ok, retrieve all the data needed to add a penalty between the two nodes: */
-	el1=reCast<int,IssmDouble>(*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+2));
-	el2=reCast<int,IssmDouble>(*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+3)) ;
-
-	node1=reCast<int,IssmDouble>(*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+0));
-	node2=reCast<int,IssmDouble>(*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+1));
+	el1=reCast<int,IssmDouble>(*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+2));
+	el2=reCast<int,IssmDouble>(*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+3)) ;
+
+	node1=reCast<int,IssmDouble>(*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+0));
+	node2=reCast<int,IssmDouble>(*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+1));
 
 	/*id: */
@@ -78,16 +78,16 @@
 	this->penalty_lock=penalty_lock;
 	this->material_converged=0;
-	this->normal[0]=*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+4);
-	this->normal[1]=*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+5);
-	this->length=*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+6);
-	this->fraction=*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+9);
-	this->state=reCast<int,IssmDouble>(*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+11));
+	this->normal[0]=*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+4);
+	this->normal[1]=*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+5);
+	this->length=*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+6);
+	this->fraction=*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+9);
+	this->state=reCast<int,IssmDouble>(*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+11));
 
 	//intialize properties
 	this->type=SegmentRiftfrontEnum;
-	this->fill = reCast<int,IssmDouble>(*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+7));
-	this->friction=*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+8);
-	this->fractionincrement=*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+10);
-	this->shelf=reCast<bool,IssmDouble>(iomodel->Data(MaskGroundediceLevelsetEnum)[node1-1]<0.);
+	this->fill = reCast<int,IssmDouble>(*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+7));
+	this->friction=*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+8);
+	this->fractionincrement=*(iomodel->Data("md.rifts.riftstruct")+RIFTINFOSIZE*i+10);
+	this->shelf=reCast<bool,IssmDouble>(iomodel->Data("md.mask.groundedice_levelset")[node1-1]<0.);
 
 	//parameters and hooked fields: we still can't point to them, they may not even exist. Configure will handle this.
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 20690)
@@ -49,5 +49,5 @@
 	 /*Other perporties*/
    int    materialtype;
-   iomodel->FindConstant(&materialtype,MaterialsEnum);
+   iomodel->FindConstant(&materialtype,"md.materials.type");
    if(materialtype==MatdamageiceEnum) this->isdamaged = true;
    else if(materialtype==MaticeEnum) this->isdamaged = false;
Index: /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 20690)
@@ -19,61 +19,61 @@
 Matpar::Matpar(int matpar_mid, IoModel* iomodel){/*{{{*/
 
-	rho_ice=0;
-	rho_water=0;
-	rho_freshwater=0;
-	mu_water=0;
-	heatcapacity=0;
-	thermalconductivity=0;
-	temperateiceconductivity=0;
-	latentheat=0;
-	beta=0;
-	meltingpoint=0;
-	referencetemperature=0;
-	mixed_layer_capacity=0;
-	thermal_exchange_velocity=0;
-	g=0;
-	omega=0;
-	desfac=0;
-	rlaps=0;
-	rlapslgm=0;
-	dpermil=0;
-
-	albedo_snow=0;
-	albedo_ice=0;
-
-	sediment_compressibility=0;
-	sediment_porosity=0;
-	sediment_thickness=0;
-	water_compressibility=0;
-
-	epl_compressibility=0;
-	epl_porosity=0;
-	epl_init_thickness=0;
-	epl_colapse_thickness=0;
-	epl_max_thickness=0;
-	epl_conductivity=0;
-
-	lithosphere_shear_modulus=0;
-	lithosphere_density=0;
-	mantle_shear_modulus=0;
-	mantle_density=0;
+	rho_ice                   = 0;
+	rho_water                 = 0;
+	rho_freshwater            = 0;
+	mu_water                  = 0;
+	heatcapacity              = 0;
+	thermalconductivity       = 0;
+	temperateiceconductivity  = 0;
+	latentheat                = 0;
+	beta                      = 0;
+	meltingpoint              = 0;
+	referencetemperature      = 0;
+	mixed_layer_capacity      = 0;
+	thermal_exchange_velocity = 0;
+	g                         = 0;
+	omega                     = 0;
+	desfac                    = 0;
+	rlaps                     = 0;
+	rlapslgm                  = 0;
+	dpermil                   = 0;
+
+	albedo_snow               = 0;
+	albedo_ice                = 0;
+
+	sediment_compressibility  = 0;
+	sediment_porosity         = 0;
+	sediment_thickness        = 0;
+	water_compressibility     = 0;
+
+	epl_compressibility       = 0;
+	epl_porosity              = 0;
+	epl_init_thickness        = 0;
+	epl_colapse_thickness     = 0;
+	epl_max_thickness         = 0;
+	epl_conductivity          = 0;
+
+	lithosphere_shear_modulus = 0;
+	lithosphere_density       = 0;
+	mantle_shear_modulus      = 0;
+	mantle_density            = 0;
 	
-	earth_density=0;
-
-	poisson=0;
-	young_modulus=0;
-	ridging_exponent=0;
-	cohesion=0;
-	internal_friction_coef=0;
-	compression_coef=0;
-	traction_coef=0;
-	time_relaxation_stress=0;
-	time_relaxation_damage=0;
+	earth_density             = 0;
+
+	poisson                   = 0;
+	young_modulus             = 0;
+	ridging_exponent          = 0;
+	cohesion                  = 0;
+	internal_friction_coef    = 0;
+	compression_coef          = 0;
+	traction_coef             = 0;
+	time_relaxation_stress    = 0;
+	time_relaxation_damage    = 0;
 
 	bool isefficientlayer;
 	int  hydrology_model,smb_model,materials_type;
-	iomodel->FindConstant(&hydrology_model,HydrologyModelEnum);
-	iomodel->FindConstant(&smb_model,SmbEnum);
-	iomodel->FindConstant(&materials_type,MaterialsEnum);
+	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
+	iomodel->FindConstant(&smb_model,"md.smb.model");
+	iomodel->FindConstant(&materials_type,"md.materials.type");
 
 	this->mid = matpar_mid;
@@ -83,18 +83,18 @@
 		case MatdamageiceEnum:
 		case MatestarEnum:
-			iomodel->FindConstant(&this->rho_ice,MaterialsRhoIceEnum);
-			iomodel->FindConstant(&this->rho_water,MaterialsRhoSeawaterEnum);
-			iomodel->FindConstant(&this->rho_freshwater,MaterialsRhoFreshwaterEnum);
-			iomodel->FindConstant(&this->mu_water,MaterialsMuWaterEnum);
-			iomodel->FindConstant(&this->heatcapacity,MaterialsHeatcapacityEnum);
-			iomodel->FindConstant(&this->thermalconductivity,MaterialsThermalconductivityEnum);
-			iomodel->FindConstant(&this->temperateiceconductivity,MaterialsTemperateiceconductivityEnum);
-			iomodel->FindConstant(&this->latentheat,MaterialsLatentheatEnum);
-			iomodel->FindConstant(&this->beta,MaterialsBetaEnum);
-			iomodel->FindConstant(&this->meltingpoint,MaterialsMeltingpointEnum);
-			iomodel->FindConstant(&this->referencetemperature,ConstantsReferencetemperatureEnum);
-			iomodel->FindConstant(&this->mixed_layer_capacity,MaterialsMixedLayerCapacityEnum);
-			iomodel->FindConstant(&this->thermal_exchange_velocity,MaterialsThermalExchangeVelocityEnum);
-			iomodel->FindConstant(&this->g,ConstantsGEnum);
+			iomodel->FindConstant(&this->rho_ice,"md.materials.rho_ice");
+			iomodel->FindConstant(&this->rho_water,"md.materials.rho_water");
+			iomodel->FindConstant(&this->rho_freshwater,"md.materials.rho_freshwater");
+			iomodel->FindConstant(&this->mu_water,"md.materials.mu_water");
+			iomodel->FindConstant(&this->heatcapacity,"md.materials.heatcapacity");
+			iomodel->FindConstant(&this->thermalconductivity,"md.materials.thermalconductivity");
+			iomodel->FindConstant(&this->temperateiceconductivity,"md.materials.temperateiceconductivity");
+			iomodel->FindConstant(&this->latentheat,"md.materials.latentheat");
+			iomodel->FindConstant(&this->beta,"md.materials.beta");
+			iomodel->FindConstant(&this->meltingpoint,"md.materials.meltingpoint");
+			iomodel->FindConstant(&this->referencetemperature,"md.constants.referencetemperature");
+			iomodel->FindConstant(&this->mixed_layer_capacity,"md.materials.mixed_layer_capacity");
+			iomodel->FindConstant(&this->thermal_exchange_velocity,"md.materials.thermal_exchange_velocity");
+			iomodel->FindConstant(&this->g,"md.constants.g");
 
 			switch(smb_model){
@@ -103,17 +103,17 @@
 					break;
 				case SMBgembEnum:
-					iomodel->FindConstant(&this->albedo_ice,SmbAIceEnum);
-					iomodel->FindConstant(&this->albedo_snow,SmbASnowEnum);
+					iomodel->FindConstant(&this->albedo_ice,"md.smb.aIce");
+					iomodel->FindConstant(&this->albedo_snow,"md.smb.aSnow");
 					break;
 				case SMBpddEnum:
-					iomodel->FindConstant(&this->desfac,SmbDesfacEnum);
-					iomodel->FindConstant(&this->rlaps,SmbRlapsEnum);
-					iomodel->FindConstant(&this->rlapslgm,SmbRlapslgmEnum);
+					iomodel->FindConstant(&this->desfac,"md.smb.desfac");
+					iomodel->FindConstant(&this->rlaps,"md.smb.rlaps");
+					iomodel->FindConstant(&this->rlapslgm,"md.smb.rlapslgm");
 					break;
 				case SMBd18opddEnum:
-					iomodel->FindConstant(&this->desfac,SmbDesfacEnum);
-					iomodel->FindConstant(&this->rlaps,SmbRlapsEnum);
-					iomodel->FindConstant(&this->rlapslgm,SmbRlapslgmEnum);
-					iomodel->FindConstant(&this->dpermil,SmbDpermilEnum);					
+					iomodel->FindConstant(&this->desfac,"md.smb.desfac");
+					iomodel->FindConstant(&this->rlaps,"md.smb.rlaps");
+					iomodel->FindConstant(&this->rlapslgm,"md.smb.rlapslgm");
+					iomodel->FindConstant(&this->dpermil,"md.smb.dpermil");					
 				case SMBgradientsEnum:
 					break;
@@ -133,17 +133,17 @@
 			}
 			if(hydrology_model==HydrologydcEnum){
-				iomodel->FindConstant(&this->sediment_compressibility,HydrologydcSedimentCompressibilityEnum);
-				iomodel->FindConstant(&this->sediment_porosity,HydrologydcSedimentPorosityEnum);
-				iomodel->FindConstant(&this->sediment_thickness,HydrologydcSedimentThicknessEnum);
-				iomodel->FindConstant(&this->water_compressibility,HydrologydcWaterCompressibilityEnum);
-				iomodel->FindConstant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+				iomodel->FindConstant(&this->sediment_compressibility,"md.hydrology.sediment_compressibility");
+				iomodel->FindConstant(&this->sediment_porosity,"md.hydrology.sediment_porosity");
+				iomodel->FindConstant(&this->sediment_thickness,"md.hydrology.sediment_thickness");
+				iomodel->FindConstant(&this->water_compressibility,"md.hydrology.water_compressibility");
+				iomodel->FindConstant(&isefficientlayer,"md.hydrology.isefficientlayer");
 
 				if(isefficientlayer){
-					iomodel->FindConstant(&this->epl_compressibility,HydrologydcEplCompressibilityEnum);
-					iomodel->FindConstant(&this->epl_porosity,HydrologydcEplPorosityEnum);
-					iomodel->FindConstant(&this->epl_init_thickness,HydrologydcEplInitialThicknessEnum);
-					iomodel->FindConstant(&this->epl_colapse_thickness,HydrologydcEplColapseThicknessEnum);
-					iomodel->FindConstant(&this->epl_max_thickness,HydrologydcEplMaxThicknessEnum);
-					iomodel->FindConstant(&this->epl_conductivity,HydrologydcEplConductivityEnum);
+					iomodel->FindConstant(&this->epl_compressibility,"md.hydrology.epl_compressibility");
+					iomodel->FindConstant(&this->epl_porosity,"md.hydrology.epl_porosity");
+					iomodel->FindConstant(&this->epl_init_thickness,"md.hydrology.epl_initial_thickness");
+					iomodel->FindConstant(&this->epl_colapse_thickness,"md.hydrology.epl_colapse_thickness");
+					iomodel->FindConstant(&this->epl_max_thickness,"md.hydrology.epl_max_thickness");
+					iomodel->FindConstant(&this->epl_conductivity,"md.hydrology.epl_conductivity");
 				}
 			}
@@ -159,11 +159,11 @@
 
 			/*gia: */
-			iomodel->FindConstant(&this->lithosphere_shear_modulus,MaterialsLithosphereShearModulusEnum);
-			iomodel->FindConstant(&this->lithosphere_density,MaterialsLithosphereDensityEnum);
-			iomodel->FindConstant(&this->mantle_shear_modulus,MaterialsMantleShearModulusEnum);
-			iomodel->FindConstant(&this->mantle_density,MaterialsMantleDensityEnum);
+			iomodel->FindConstant(&this->lithosphere_shear_modulus,"md.materials.lithosphere_shear_modulus");
+			iomodel->FindConstant(&this->lithosphere_density,"md.materials.lithosphere_density");
+			iomodel->FindConstant(&this->mantle_shear_modulus,"md.materials.mantle_shear_modulus");
+			iomodel->FindConstant(&this->mantle_density,"md.materials.mantle_density");
 
 			/*slr:*/
-			iomodel->FindConstant(&this->earth_density,MaterialsEarthDensityEnum);
+			iomodel->FindConstant(&this->earth_density,"md.materials.earth_density");
 
 			break;
Index: /issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 20690)
@@ -55,25 +55,25 @@
 
 		/*Coordinate system provided, convert to coord_system matrix*/
-		_assert_(iomodel->Data(StressbalanceReferentialEnum)); 
-		XZvectorsToCoordinateSystem(&this->coord_system[0][0],&iomodel->Data(StressbalanceReferentialEnum)[io_index*6]);
+		_assert_(iomodel->Data("md.stressbalance.referential")); 
+		XZvectorsToCoordinateSystem(&this->coord_system[0][0],&iomodel->Data("md.stressbalance.referential")[io_index*6]);
 		_assert_(sqrt( coord_system[0][0]*coord_system[0][0] + coord_system[1][0]*coord_system[1][0]) >1.e-4);
 
 		if(iomodel->domaintype!=Domain2DhorizontalEnum & iomodel->domaintype!=Domain3DsurfaceEnum){
 			/*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
-			_assert_(iomodel->Data(MeshVertexonbaseEnum)); 
-			_assert_(iomodel->Data(FlowequationVertexEquationEnum));
-			if(in_approximation==SSAApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbaseEnum)[io_index])){
+			_assert_(iomodel->Data("md.mesh.vertexonbase")); 
+			_assert_(iomodel->Data("md.flowequation.vertex_equation"));
+			if(in_approximation==SSAApproximationEnum && !reCast<int>(iomodel->Data("md.mesh.vertexonbase")[io_index])){
 				this->HardDeactivate();
 			}
-			if(in_approximation==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbaseEnum)[io_index])){
+			if(in_approximation==L1L2ApproximationEnum && !reCast<int>(iomodel->Data("md.mesh.vertexonbase")[io_index])){
 				this->HardDeactivate();
 			}
-			if(in_approximation==SSAHOApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
-				if(!reCast<int>(iomodel->Data(MeshVertexonbaseEnum)[io_index])){
+			if(in_approximation==SSAHOApproximationEnum && reCast<int>(iomodel->Data("md.flowequation.borderSSA")[io_index])){
+				if(!reCast<int>(iomodel->Data("md.mesh.vertexonbase")[io_index])){
 					this->HardDeactivate();
 				}
 			}
-			if(in_approximation==SSAFSApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
-				if(!reCast<int>(iomodel->Data(MeshVertexonbaseEnum)[io_index])){
+			if(in_approximation==SSAFSApproximationEnum && reCast<int>(iomodel->Data("md.flowequation.borderSSA")[io_index])){
+				if(!reCast<int>(iomodel->Data("md.mesh.vertexonbase")[io_index])){
 					for(k=0;k<=1;k++) this->FreezeDof(k);
 				}
@@ -99,6 +99,6 @@
 		if(iomodel->domaintype!=Domain2DhorizontalEnum & iomodel->domaintype!=Domain3DsurfaceEnum & iomodel->domaintype!=Domain3DsurfaceEnum){
 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
-			_assert_(iomodel->Data(MeshVertexonbaseEnum));
-			if(!(reCast<bool>(iomodel->Data(MeshVertexonbaseEnum)[io_index]))){
+			_assert_(iomodel->Data("md.mesh.vertexonbase"));
+			if(!(reCast<bool>(iomodel->Data("md.mesh.vertexonbase")[io_index]))){
 				this->HardDeactivate();
 			}
@@ -110,6 +110,6 @@
 		if(iomodel->domaintype!=Domain2DhorizontalEnum){
 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
-			_assert_(iomodel->Data(MeshVertexonsurfaceEnum));
-			if(!(reCast<bool>(iomodel->Data(MeshVertexonsurfaceEnum)[io_index]))){
+			_assert_(iomodel->Data("md.mesh.vertexonsurface"));
+			if(!(reCast<bool>(iomodel->Data("md.mesh.vertexonsurface")[io_index]))){
 				this->HardDeactivate();
 			}
Index: /issm/trunk-jpl/src/c/classes/Params/BoolParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/BoolParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/BoolParam.h	(revision 20690)
@@ -69,4 +69,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/DataSetParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/DataSetParam.h	(revision 20690)
@@ -71,4 +71,5 @@
 		void  SetValue(DataSet* dataset){_error_("DataSet param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a DataSet yet");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("DataSet param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.h	(revision 20690)
@@ -72,4 +72,5 @@
 		void  SetValue(FILE* fid){_error_("Bool param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array);
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.h	(revision 20690)
@@ -71,4 +71,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 		/*DoubleMatParam specific routines:{{{*/
Index: /issm/trunk-jpl/src/c/classes/Params/DoubleParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/DoubleParam.h	(revision 20690)
@@ -70,4 +70,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.h	(revision 20690)
@@ -70,4 +70,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 		/*DoubleVecParam specific routines:{{{*/
Index: /issm/trunk-jpl/src/c/classes/Params/FileParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/FileParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/FileParam.h	(revision 20690)
@@ -69,4 +69,5 @@
 		void  SetValue(FILE* fid){_error_("File param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("File param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/GenericParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 20690)
@@ -94,4 +94,5 @@
                 void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a FILE");}
                 void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold an array of matrices");}
+					 void  SetEnum(int enum_in){this->myEnumVal = enum_in;};
 
                 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Params/IntMatParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/IntMatParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/IntMatParam.h	(revision 20690)
@@ -71,4 +71,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/IntParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/IntParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/IntParam.h	(revision 20690)
@@ -70,4 +70,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/IntVecParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/IntVecParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/IntVecParam.h	(revision 20690)
@@ -71,4 +71,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/MatrixParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/MatrixParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/MatrixParam.h	(revision 20690)
@@ -70,4 +70,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/Param.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/Param.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/Param.h	(revision 20690)
@@ -59,4 +59,5 @@
 		virtual void  SetValue(FILE* fid)=0;
 		virtual void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array)=0;
+		virtual void  SetEnum(int enum_in)=0;
 };
 #endif
Index: /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.cpp	(revision 20690)
@@ -135,5 +135,5 @@
 
 	/*Assign output pointers:*/
-	*pM=M;
+	if(pM) *pM=M;
 	*pstringarray=outstrings;
 }
Index: /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.h	(revision 20690)
@@ -70,4 +70,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/StringParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/StringParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/StringParam.h	(revision 20690)
@@ -70,4 +70,5 @@
 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/TransientParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/TransientParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/TransientParam.h	(revision 20690)
@@ -72,4 +72,5 @@
 		void  SetValue(FILE* fid){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Params/VectorParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/VectorParam.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Params/VectorParam.h	(revision 20690)
@@ -70,4 +70,5 @@
 		void  SetValue(FILE* fid){_error_("Vector of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a FILE");}
 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+		void  SetEnum(int enum_in){this->enum_type = enum_in;};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Vertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 20690)
@@ -26,19 +26,19 @@
 	this->pid          = UNDEF;
 
-	_assert_(iomodel->Data(MeshXEnum) && iomodel->Data(MeshYEnum) && iomodel->Data(MeshZEnum));
-	this->x            = iomodel->Data(MeshXEnum)[i];
-	this->y            = iomodel->Data(MeshYEnum)[i];
-	this->z            = iomodel->Data(MeshZEnum)[i];
+	_assert_(iomodel->Data("md.mesh.x") && iomodel->Data("md.mesh.y") && iomodel->Data("md.mesh.z"));
+	this->x            = iomodel->Data("md.mesh.x")[i];
+	this->y            = iomodel->Data("md.mesh.y")[i];
+	this->z            = iomodel->Data("md.mesh.z")[i];
 	this->domaintype     = iomodel->domaintype;
 
 	switch(iomodel->domaintype){
 		case Domain3DEnum:
-			_assert_(iomodel->Data(BaseEnum) && iomodel->Data(ThicknessEnum));
-			this->sigma = (iomodel->Data(MeshZEnum)[i]-iomodel->Data(BaseEnum)[i])/(iomodel->Data(ThicknessEnum)[i]);
+			_assert_(iomodel->Data("md.geometry.base") && iomodel->Data("md.geometry.thickness"));
+			this->sigma = (iomodel->Data("md.mesh.z")[i]-iomodel->Data("md.geometry.base")[i])/(iomodel->Data("md.geometry.thickness")[i]);
 			break;
 		case Domain3DsurfaceEnum:
-			this->latitute     = iomodel->Data(MeshLatEnum)[i];
-			this->longitude    = iomodel->Data(MeshLongEnum)[i];
-			this->R            = iomodel->Data(MeshREnum)[i];
+			this->latitute     = iomodel->Data("md.mesh.lat")[i];
+			this->longitude    = iomodel->Data("md.mesh.long")[i];
+			this->R            = iomodel->Data("md.mesh.r")[i];
 			break;
 		case Domain2DhorizontalEnum:
@@ -46,6 +46,6 @@
 			break;
 		case Domain2DverticalEnum:
-			_assert_(iomodel->Data(BaseEnum) && iomodel->Data(ThicknessEnum));
-			this->sigma = (iomodel->Data(MeshYEnum)[i]-iomodel->Data(BaseEnum)[i])/(iomodel->Data(ThicknessEnum)[i]);
+			_assert_(iomodel->Data("md.geometry.base") && iomodel->Data("md.geometry.thickness"));
+			this->sigma = (iomodel->Data("md.mesh.y")[i]-iomodel->Data("md.geometry.base")[i])/(iomodel->Data("md.geometry.thickness")[i]);
 			break;
 	}
Index: /issm/trunk-jpl/src/c/main/kriging.cpp
===================================================================
--- /issm/trunk-jpl/src/c/main/kriging.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/main/kriging.cpp	(revision 20690)
@@ -144,10 +144,10 @@
 	IoModel* iomodel = new IoModel();
 	iomodel->fid=fid;
-	iomodel->CheckEnumSync();
-	iomodel->FetchData(&x,&M,&N,0);        nobs=M*N;
-	iomodel->FetchData(&y,&M,&N,1);        _assert_(M*N==nobs);
-	iomodel->FetchData(&data,&M,&N,2);     _assert_(M*N==nobs);
-	iomodel->FetchData(&x_interp,&M,&N,3); ninterp=M*N;
-	iomodel->FetchData(&y_interp,&M,&N,4); _assert_(M*N==ninterp);
+	iomodel->CheckFile();
+	iomodel->FetchData(&x,&M,&N,"md.0");        nobs=M*N;
+	iomodel->FetchData(&y,&M,&N,"md.1");        _assert_(M*N==nobs);
+	iomodel->FetchData(&data,&M,&N,"md.2");     _assert_(M*N==nobs);
+	iomodel->FetchData(&x_interp,&M,&N,"md.3"); ninterp=M*N;
+	iomodel->FetchData(&y_interp,&M,&N,"md.4"); _assert_(M*N==ninterp);
 
 	/*Read options*/
Index: /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 20690)
@@ -8,5 +8,5 @@
 #include "../ModelProcessorx/ModelProcessorx.h"
 
-void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof){
+void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,const char* spc_name,int analysis_type,int finite_element,int dof){
 
 	/*intermediary: */
@@ -16,10 +16,10 @@
 
 	/*First of, find the record for the enum, and get code  of data type: */
-	iomodel->SetFilePointerToData(&code, &vector_layout,vector_enum);
-	if(code!=7)_error_("expecting a IssmDouble vector for constraints with enum " << EnumToStringx(vector_enum));
-	if(vector_layout!=1)_error_("expecting a nodal vector for constraints with enum " << EnumToStringx(vector_enum));
+	iomodel->SetFilePointerToData(&code, &vector_layout,spc_name);
+	if(code!=7)_error_("expecting a IssmDouble vector for constraints " << spc_name);
+	if(vector_layout!=1)_error_("expecting a nodal vector for constraints " << spc_name);
 
 	/*Fetch vector:*/
-	iomodel->FetchData(&spcdata,&M,&N,vector_enum);
+	iomodel->FetchData(&spcdata,&M,&N,spc_name);
 
 	/*Call IoModelToConstraintsx*/
@@ -29,5 +29,5 @@
 	xDelete<IssmDouble>(spcdata);
 }
-void IoModelToDynamicConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof){
+void IoModelToDynamicConstraintsx(Constraints* constraints,IoModel* iomodel,const char* spc_name,int analysis_type,int finite_element,int dof){
 
 	/*intermediary: */
@@ -37,10 +37,10 @@
 
 	/*First of, find the record for the enum, and get code  of data type: */
-	iomodel->SetFilePointerToData(&code, &vector_layout,vector_enum);
-	if(code!=7)_error_("expecting a IssmDouble vector for constraints with enum " << EnumToStringx(vector_enum));
-	if(vector_layout!=1)_error_("expecting a nodal vector for constraints with enum " << EnumToStringx(vector_enum));
+	iomodel->SetFilePointerToData(&code, &vector_layout,spc_name);
+	if(code!=7)_error_("expecting a IssmDouble vector for constraints " << spc_name);
+	if(vector_layout!=1)_error_("expecting a nodal vector for constraints " << spc_name);
 
 	/*Fetch vector:*/
-	iomodel->FetchData(&spcdata,&M,&N,vector_enum);
+	iomodel->FetchData(&spcdata,&M,&N,spc_name);
 
 	/*Call IoModelToConstraintsx*/
Index: /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.h	(revision 20690)
@@ -8,7 +8,7 @@
 
 /* local prototypes: */
-void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof=0);
+void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,const char* spc_name,int analysis_type,int finite_element,int dof=0);
 void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,IssmDouble* spcdata,int M,int N,int analysis_type,int finite_element,int dof=0);
-void IoModelToDynamicConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type,int finite_element,int dof=0);
+void IoModelToDynamicConstraintsx(Constraints* constraints,IoModel* iomodel,const char* spc_name,int analysis_type,int finite_element,int dof=0);
 void IoModelToDynamicConstraintsx(Constraints* constraints,IoModel* iomodel,IssmDouble* spcdata,int M,int N,int analysis_type,int finite_element,int dof=0);
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 20690)
@@ -11,5 +11,5 @@
 
 	int         i;
-	bool        autodiff_analysis;
+	bool        isautodiff;
 	int         num_dependent_objects;
 	int         num_dep=0;
@@ -28,5 +28,5 @@
 
 	/*retrieve some parameters: */
-	iomodel->FindConstant(&autodiff_analysis,AutodiffIsautodiffEnum);
+	iomodel->FindConstant(&isautodiff,"md.autodiff.isautodiff");
 
 	#ifdef _HAVE_ADOLC_
@@ -72,27 +72,27 @@
 		/*}}}*/
 
-	if(autodiff_analysis){
+	if(isautodiff){
 		/*Copy some parameters from IoModel to parameters dataset: {{{*/
-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffKeepEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffObufsizeEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffCbufsizeEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffLbufsizeEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffTbufsizeEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffGcTriggerRatioEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffGcTriggerMaxSizeEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.keep",AutodiffKeepEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.obuffsize",AutodiffObufsizeEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.cbuffsize",AutodiffCbufsizeEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.lbuffsize",AutodiffLbufsizeEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.tbuffsize",AutodiffTbufsizeEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.gcTriggerRatio",AutodiffGcTriggerRatioEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.gcTriggerMaxSize",AutodiffGcTriggerMaxSizeEnum));
 		/*}}}*/
 		/*retrieve driver: {{{*/
-		iomodel->FindConstant(&autodiff_driver,AutodiffDriverEnum);
-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffDriverEnum));
+		iomodel->FindConstant(&autodiff_driver,"md.autodiff.driver");
+		parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.driver",AutodiffDriverEnum));
 
 		if(strcmp(autodiff_driver,"fos_forward")==0){
-			parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosForwardIndexEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.fos_forward_index",AutodiffFosForwardIndexEnum));
 		}
 		else if(strcmp(autodiff_driver,"fos_reverse")==0){
-			parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosReverseIndexEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.fos_reverse_index",AutodiffFosReverseIndexEnum));
 		}
 		else if(strcmp(autodiff_driver,"fov_forward")==0){
 			/*Retrieve list of indices: */
-			iomodel->FetchData(&indices,&num_indices,&dummy,AutodiffFovForwardIndicesEnum);
+			iomodel->FetchData(&indices,&num_indices,&dummy,"md.autodiff.fov_forward_indices");
 			parameters->AddObject(new IntMatParam(AutodiffFovForwardIndicesEnum,indices,num_indices,1));
 			xDelete<int>(indices);
@@ -101,12 +101,12 @@
 		/*}}}*/
 		/*Deal with dependents first: {{{*/
-		iomodel->FindConstant(&num_dependent_objects,AutodiffNumDependentObjectsEnum);
+		iomodel->FindConstant(&num_dependent_objects,"md.autodiff.num_dependent_objects");
 		dependent_objects=new DataSet();
 		num_dep=0;
 
 		if(num_dependent_objects){
-			iomodel->FetchData(&names,&dummy,AutodiffDependentObjectNamesEnum);
-			iomodel->FetchData(&types,&dummy,&dummy,AutodiffDependentObjectTypesEnum);
-			iomodel->FetchData(&indices,&dummy,&dummy,AutodiffDependentObjectIndicesEnum);
+			iomodel->FindConstant(&names,&dummy,"md.autodiff.dependent_object_names");
+			iomodel->FetchData(&types,&dummy,&dummy,"md.autodiff.dependent_object_types");
+			iomodel->FetchData(&indices,&dummy,&dummy,"md.autodiff.dependent_object_indices");
 
 			for(i=0;i<num_dependent_objects;i++){
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 20690)
@@ -15,20 +15,20 @@
 	int         num_controls;
 	int         num_costfunc;
-	int        *control_type     = NULL;
-	int        *maxiter          = NULL;
-	int        *cm_responses     = NULL;
-	IssmDouble *cm_jump          = NULL;
-	IssmDouble *optscal          = NULL;
+	char**      controls      = NULL;
+	int        *maxiter       = NULL;
+	int        *cm_responses  = NULL;
+	IssmDouble *cm_jump       = NULL;
+	IssmDouble *optscal       = NULL;
 	IssmDouble *control_scaling_factors = NULL;
 
 	/*retrieve some parameters: */
-	iomodel->FindConstant(&control_analysis,InversionIscontrolEnum);
-	iomodel->FindConstant(&inversiontype,InversionTypeEnum);
+	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+	iomodel->FindConstant(&inversiontype,"md.inversion.type");
 
 	if(control_analysis){
 
 		/*How many controls and how many responses?*/
-		parameters->AddObject(iomodel->CopyConstantObject(InversionNumControlParametersEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(InversionNumCostFunctionsEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_control_parameters",InversionNumControlParametersEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_cost_functions",InversionNumCostFunctionsEnum));
 
 		/*What solution type?*/
@@ -40,19 +40,28 @@
 		}
 
-		/*Now, recover fit, optscal and maxiter as vectors: */
-		iomodel->FetchData(&control_type,NULL,&num_controls,InversionControlParametersEnum);
-		iomodel->FetchData(&cm_responses,NULL,&num_costfunc,InversionCostFunctionsEnum);
-		parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_controls));
+		/*recover controls and convert to Enums*/
+		iomodel->FindConstant(&controls,&num_controls,"md.inversion.control_parameters");
+		if(num_controls<1) _error_("no controls found");
+		int* control_enums=xNew<int>(num_controls);
+		for(int i=0;i<num_controls;i++){
+			control_enums[i]=StringToEnumx(controls[i]);
+			xDelete<char>(controls[i]);
+		}
+		xDelete<char*>(controls);
+		parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_enums,num_controls));
+
+		iomodel->FetchData(&cm_responses,NULL,&num_costfunc,"md.inversion.cost_functions");
 		parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_costfunc));
+		xDelete<int>(control_enums);
 
 		/*Inversion type specifics*/
 		switch(inversiontype){
 			case 0:/*Brent Search*/
-				parameters->AddObject(iomodel->CopyConstantObject(InversionIncompleteAdjointEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionNstepsEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionCostFunctionThresholdEnum));
-				iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum);
-				iomodel->FetchData(&optscal,NULL,NULL,InversionGradientScalingEnum);
-				iomodel->FetchData(&maxiter,NULL,NULL,InversionMaxiterPerStepEnum);
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.incomplete_adjoint",InversionIncompleteAdjointEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.nsteps",InversionNstepsEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.cost_function_threshold",InversionCostFunctionThresholdEnum));
+				iomodel->FetchData(&cm_jump,&nsteps,NULL,"md.inversion.step_threshold");
+				iomodel->FetchData(&optscal,NULL,NULL,"md.inversion.gradient_scaling");
+				iomodel->FetchData(&maxiter,NULL,NULL,"md.inversion.maxiter_per_step");
 				parameters->AddObject(new DoubleMatParam(InversionGradientScalingEnum,optscal,nsteps,num_controls));
 				parameters->AddObject(new DoubleVecParam(InversionStepThresholdEnum,cm_jump,nsteps));
@@ -60,34 +69,34 @@
 				break;
 			case 1:/*TAO*/
-				parameters->AddObject(iomodel->CopyConstantObject(InversionIncompleteAdjointEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionFatolEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionFrtolEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionGatolEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionGrtolEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionGttolEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionMaxstepsEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionMaxiterEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionAlgorithmEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.incomplete_adjoint",InversionIncompleteAdjointEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.fatol",InversionFatolEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.frtol",InversionFrtolEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.gatol",InversionGatolEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.grtol",InversionGrtolEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.gttol",InversionGttolEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.maxsteps",InversionMaxstepsEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.maxiter",InversionMaxiterEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.algorithm",InversionAlgorithmEnum));
 				break;
 			case 2:/*M1QN3*/
-				parameters->AddObject(iomodel->CopyConstantObject(InversionIncompleteAdjointEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionDxminEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionGttolEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionMaxstepsEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionMaxiterEnum));
-				iomodel->FetchData(&control_scaling_factors,NULL,NULL,InversionControlScalingFactorsEnum);
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.incomplete_adjoint",InversionIncompleteAdjointEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.dxmin",InversionDxminEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.gttol",InversionGttolEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.maxsteps",InversionMaxstepsEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.maxiter",InversionMaxiterEnum));
+				iomodel->FetchData(&control_scaling_factors,NULL,NULL,"md.inversion.control_scaling_factors");
 				parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_controls));
 				break;
 			case 3:/*Validation*/
-				parameters->AddObject(iomodel->CopyConstantObject(InversionIncompleteAdjointEnum));
-				iomodel->FetchData(&control_scaling_factors,NULL,NULL,InversionControlScalingFactorsEnum);
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.incomplete_adjoint",InversionIncompleteAdjointEnum));
+				iomodel->FetchData(&control_scaling_factors,NULL,NULL,"md.inversion.control_scaling_factors");
 				parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_controls));
 				break;
 			case 4:/*M1QN3 AD*/
-				parameters->AddObject(iomodel->CopyConstantObject(InversionDxminEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionGttolEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionMaxstepsEnum));
-				parameters->AddObject(iomodel->CopyConstantObject(InversionMaxiterEnum));
-				iomodel->FetchData(&control_scaling_factors,NULL,NULL,InversionControlScalingFactorsEnum);
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.dxmin",InversionDxminEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.gttol",InversionGttolEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.maxsteps",InversionMaxstepsEnum));
+				parameters->AddObject(iomodel->CopyConstantObject("md.inversion.maxiter",InversionMaxiterEnum));
+				iomodel->FetchData(&control_scaling_factors,NULL,NULL,"md.inversion.control_scaling_factors");
 				parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_controls));
 				break;
@@ -97,10 +106,10 @@
 		}
 
-		xDelete<int>(control_type);
+		xDelete<int>(control_enums);
 		xDelete<int>(cm_responses);
 		xDelete<int>(maxiter);
 		xDelete<IssmDouble>(control_scaling_factors);
-		iomodel->DeleteData(cm_jump,InversionStepThresholdEnum);
-		iomodel->DeleteData(optscal,InversionGradientScalingEnum);
+		iomodel->DeleteData(cm_jump,"md.inversion.step_threshold");
+		iomodel->DeleteData(optscal,"md.inversion.gradient_scaling");
 	}
 }
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 20690)
@@ -15,24 +15,34 @@
 	Element  *element = NULL;
 	Material *material = NULL;
-	int       num_control_type,num_cost_functions;
+	int       num_controls,num_cost_functions;
+	int*      control_enums = NULL;
+	char**    controls;
 	bool      control_analysis;
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&control_analysis,InversionIscontrolEnum);
-	if(control_analysis) iomodel->FindConstant(&num_control_type,InversionNumControlParametersEnum);
+	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+	if(control_analysis) iomodel->FindConstant(&num_controls,"md.inversion.num_control_parameters");
 
 	/*Now, return if no control*/
 	if(!control_analysis) return;
 
-	iomodel->FetchData(5,InversionControlParametersEnum,InversionCostFunctionsEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+	/*Process controls and convert from string to enums*/
+	iomodel->FindConstant(&controls,&num_controls,"md.inversion.control_parameters");
+	if(num_controls<1) _error_("no controls found");
+	control_enums=xNew<int>(num_controls);
+	for(int i=0;i<num_controls;i++){
+		control_enums[i]=StringToEnumx(controls[i]);
+	}
+
+	iomodel->FetchData(4,"md.inversion.cost_functions","md.inversion.cost_functions_coefficients","md.inversion.min_parameters","md.inversion.max_parameters");
 
 	/*Fetch Observations */
-	iomodel->FindConstant(&num_cost_functions,InversionNumCostFunctionsEnum);
-	iomodel->FindConstant(&domaintype,DomainTypeEnum);
+	iomodel->FindConstant(&num_cost_functions,"md.inversion.num_cost_functions");
+	iomodel->FindConstant(&domaintype,"md.mesh.domain_type");
 	for(int i=0;i<num_cost_functions;i++){
-		cost_function= reCast<int,IssmDouble>(iomodel->Data(InversionCostFunctionsEnum)[i]);
-		//iomodel->FetchDataToInput(elements,InversionThicknessObsEnum);
-		if(     cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(elements,InversionThicknessObsEnum);
-		else if(cost_function==SurfaceAbsMisfitEnum)   iomodel->FetchDataToInput(elements,InversionSurfaceObsEnum);
+		cost_function= reCast<int,IssmDouble>(iomodel->Data("md.inversion.cost_functions")[i]);
+		//iomodel->FetchDataToInput(elements,"md.inversion.thickness_obs",InversionThicknessObsEnum);
+		if(     cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(elements,"md.inversion.thickness_obs",InversionThicknessObsEnum);
+		else if(cost_function==SurfaceAbsMisfitEnum)   iomodel->FetchDataToInput(elements,"md.inversion.surface_obs",InversionSurfaceObsEnum);
 		else if(cost_function==SurfaceAbsVelMisfitEnum
 			  || cost_function==SurfaceRelVelMisfitEnum
@@ -40,28 +50,25 @@
 			  || cost_function==SurfaceLogVxVyMisfitEnum
 			  || cost_function==SurfaceAverageVelMisfitEnum){
-			iomodel->FetchDataToInput(elements,InversionVxObsEnum);
-			if (domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(elements,InversionVyObsEnum); 
+			iomodel->FetchDataToInput(elements,"md.inversion.vx_obs",InversionVxObsEnum);
+			if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(elements,"md.inversion.vy_obs",InversionVyObsEnum); 
 		}
 	}
 
-	for(int i=0;i<num_control_type;i++){
-		control = reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i]);
+	for(int i=0;i<num_controls;i++){
+		control = control_enums[i];
 		switch(control){
 			/*List of supported controls*/
-		  case BalancethicknessThickeningRateEnum: 
-			case VxEnum:
-			case VyEnum:
-			case ThicknessEnum:
-		  case FrictionCoefficientEnum:
-		  case FrictionAsEnum:
-		  case BalancethicknessApparentMassbalanceEnum:
-			case BalancethicknessOmegaEnum:
-			case MaterialsRheologyBEnum: 
-				iomodel->FetchData(1,control); 
-				break;
-
+			case BalancethicknessThickeningRateEnum:      iomodel->FetchData(1,"md.balancethickness.thickening_rate"); break;
+			case VxEnum:                                  iomodel->FetchData(1,"md.initialization.vx"); break;
+			case VyEnum:                                  iomodel->FetchData(1,"md.initialization.vy"); break;
+			case ThicknessEnum:                           iomodel->FetchData(1,"md.geometry.thickness"); break;
+			case FrictionCoefficientEnum:                 iomodel->FetchData(1,"md.friction.coefficient"); break;
+			case FrictionAsEnum:                          iomodel->FetchData(1,"md.friction.As"); break;
+			case BalancethicknessApparentMassbalanceEnum: iomodel->FetchData(1,"md.balancethickness.apparent_massbalance"); break;
+			case BalancethicknessOmegaEnum:               iomodel->FetchData(1,"md.balancethickness.omega"); break;
+			case MaterialsRheologyBEnum:                  iomodel->FetchData(1,"md.materials.rheology_B"); break;
 			/*Special cases*/
-			case MaterialsRheologyBbarEnum: iomodel->FetchData(1,MaterialsRheologyBEnum); break;
-			case DamageDbarEnum:            iomodel->FetchData(1,DamageDEnum);            break;
+			case MaterialsRheologyBbarEnum: iomodel->FetchData(1,"md.materials.rheology_B"); break;
+			case DamageDbarEnum:            iomodel->FetchData(1,"md.damage.D");            break;
 			default:
 				_error_("Control " << EnumToStringx(control) << " not implemented yet");
@@ -80,13 +87,28 @@
 
 	/*Free data: */
-	for(int i=0;i<num_control_type;i++){
-		control = reCast<int,IssmDouble>(iomodel->Data(InversionControlParametersEnum)[i]);
-		switch(control){
-			case MaterialsRheologyBbarEnum: iomodel->DeleteData(1,MaterialsRheologyBEnum); break;
-			case DamageDbarEnum:            iomodel->DeleteData(1,DamageDEnum);            break;
-			default:                        iomodel->DeleteData(1,control); 
+	for(int i=0;i<num_controls;i++){
+		switch(control_enums[i]){
+			/*List of supported controls*/
+			case BalancethicknessThickeningRateEnum:      iomodel->DeleteData(1,"md.balancethickness.thickening_rate"); break;
+			case VxEnum:                                  iomodel->DeleteData(1,"md.initialization.vx"); break;
+			case VyEnum:                                  iomodel->DeleteData(1,"md.initialization.vy"); break;
+			case ThicknessEnum:                           iomodel->DeleteData(1,"md.geometry.thickness"); break;
+			case FrictionCoefficientEnum:                 iomodel->DeleteData(1,"md.friction.coefficient"); break;
+			case FrictionAsEnum:                          iomodel->DeleteData(1,"md.friction.As"); break;
+			case BalancethicknessApparentMassbalanceEnum: iomodel->DeleteData(1,"md.balancethickness.apparent_massbalance"); break;
+			case BalancethicknessOmegaEnum:               iomodel->DeleteData(1,"md.balancethickness.omega"); break;
+			case MaterialsRheologyBEnum:                  iomodel->DeleteData(1,"md.materials.rheology_B"); break;
+			/*Special cases*/
+			case MaterialsRheologyBbarEnum: iomodel->DeleteData(1,"md.materials.rheology_B"); break;
+			case DamageDbarEnum:            iomodel->DeleteData(1,"md.damage.D");            break;
+			default:
+				_error_("Control " << EnumToStringx(control_enums[i]) << " not implemented yet");
 		}
 	}
-	iomodel->DeleteData(5,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionCostFunctionsEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+	iomodel->DeleteData(4,"md.inversion.cost_functions","md.inversion.cost_functions_coefficients","md.inversion.min_parameters","md.inversion.max_parameters");
+	xDelete<int>(control_enums);
+	for(int i=0;i<num_controls;i++) xDelete<char>(controls[i]);
+	xDelete<char*>(controls);
+
 
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 20690)
@@ -17,7 +17,7 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&control_analysis,InversionIscontrolEnum);
-	iomodel->FindConstant(&dakota_analysis,QmuIsdakotaEnum);
-	iomodel->FindConstant(&materials_type,MaterialsEnum);
+	iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");
+	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
+	iomodel->FindConstant(&materials_type,"md.materials.type");
 
 	/*Did we already create the elements? : */
@@ -25,5 +25,5 @@
 
 	/*Create elements*/
-	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+	if(control_analysis)iomodel->FetchData(2,"md.inversion.min_parameters","md.inversion.max_parameters");
 	switch(iomodel->meshelementtype){
 		case TriaEnum:
@@ -38,5 +38,5 @@
 			break;
 		case PentaEnum:
-			iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+			iomodel->FetchData(2,"md.mesh.upperelements","md.mesh.lowerelements");
 			for(i=0;i<iomodel->numberofelements;i++){
 				if(iomodel->my_elements[i]) elements->AddObject(new Penta(i+1,i,i,iomodel,nummodels));
@@ -50,6 +50,6 @@
 	switch(materials_type){
 		case MaticeEnum:
-			iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
-			iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+			iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
 			switch(iomodel->domaindim){
@@ -64,7 +64,7 @@
 			break;
 		case MatdamageiceEnum:
-			iomodel->FetchDataToInput(elements,MaterialsRheologyBEnum);
-			iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
-			iomodel->FetchDataToInput(elements,DamageDEnum);
+			iomodel->FetchDataToInput(elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+			iomodel->FetchDataToInput(elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(elements,"md.damage.D",DamageDEnum);
 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
 			switch(iomodel->domaindim){
@@ -80,7 +80,7 @@
 			break;
 		case MatestarEnum:
-			iomodel->FetchDataToInput(elements,MaterialsRheologyKoEnum);
-			iomodel->FetchDataToInput(elements,MaterialsRheologyEcEnum);
-			iomodel->FetchDataToInput(elements,MaterialsRheologyEsEnum);
+			iomodel->FetchDataToInput(elements,"md.materials.rheology_ko",MaterialsRheologyKoEnum);
+			iomodel->FetchDataToInput(elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
+			iomodel->FetchDataToInput(elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
 			for(i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matestar(i+1,i,iomodel));
 			switch(iomodel->domaindim){
@@ -101,7 +101,6 @@
 
 	/*Free data: */
-	iomodel->DeleteData(8,MeshUpperelementsEnum,MeshLowerelementsEnum,
-				MaterialsRheologyBEnum,MaterialsRheologyNEnum,DamageDEnum,InversionControlParametersEnum,InversionMinParametersEnum,
-				InversionMaxParametersEnum);
+	iomodel->DeleteData(7,"md.mesh.upperelements","md.mesh.lowerelements","md.material.rheology_B",
+				"md.material.rheology_n","md.damage.D","md.inversion.min_parameters","md.inversion.max_parameters");
 
 	/*Add new constant material property to materials, at the end: */
@@ -111,6 +110,6 @@
 
 	/*Fetch data:*/
-	iomodel->FetchData(6,MeshXEnum,MeshYEnum,MeshZEnum,BaseEnum,ThicknessEnum,MaskIceLevelsetEnum);
-	if (iomodel->domaintype == Domain3DsurfaceEnum) iomodel->FetchData(3,MeshLatEnum,MeshLongEnum,MeshREnum);
+	iomodel->FetchData(6,"md.mesh.x","md.mesh.y","md.mesh.z","md.geometry.base","md.geometry.thickness","md.mask.ice_levelset");
+	if (iomodel->domaintype == Domain3DsurfaceEnum) iomodel->FetchData(3,"md.mesh.lat","md.mesh.long","md.mesh.r");
 	
 	CreateNumberNodeToElementConnectivity(iomodel);
@@ -121,5 +120,5 @@
 
 	/*Free data: */
-	iomodel->DeleteData(6,MeshXEnum,MeshYEnum,MeshZEnum,BaseEnum,ThicknessEnum,MaskIceLevelsetEnum);
-	if (iomodel->domaintype == Domain3DsurfaceEnum) iomodel->DeleteData(3,MeshLatEnum,MeshLongEnum,MeshREnum);
+	iomodel->DeleteData(6,"md.mesh.x","md.mesh.y","md.mesh.z","md.geometry.base","md.geometry.thickness","md.mask.ice_levelset");
+	if (iomodel->domaintype == Domain3DsurfaceEnum) iomodel->DeleteData(3,"md.mesh.lat","md.mesh.long","md.mesh.r");
 }
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 20690)
@@ -19,24 +19,21 @@
 	output_definitions=new DataSet();
 	
-	iomodel->FetchData(&output_definition_enums,&num_output_definitions,NULL,OutputdefinitionListEnum);
+	iomodel->FetchData(&output_definition_enums,&num_output_definitions,NULL,"md.outputdefinition.list");
 	if(num_output_definitions){
 		for (i=0;i<num_output_definitions;i++){
-
 			if (output_definition_enums[i]==MassfluxatgateEnum){
-
 				/*Deal with mass flux gates:{{{ */
-				
+
 				/*massfluxatgate variables: */
 				int          temp,numgates;
-				char       **gatenames               = NULL;
-				int        *gatedefinitionenums      = NULL;
-				IssmDouble **gatesegments            = NULL;
-				int         *gatesegments_M          = NULL;
-
+				char       **gatenames           = NULL;
+				int         *gatedefinitionenums = NULL;
+				IssmDouble **gatesegments        = NULL;
+				int         *gatesegments_M      = NULL;
 
 				/*Fetch segments and names: */
-				iomodel->FetchMultipleData(&gatenames,&numgates,MassfluxatgateNameEnum);
-				iomodel->FetchMultipleData(&gatedefinitionenums,&temp,MassfluxatgateDefinitionenumEnum); _assert_(temp==numgates);
-				iomodel->FetchMultipleData(&gatesegments,&gatesegments_M,NULL,&temp,MassfluxatgateSegmentsEnum);_assert_(temp==numgates); 
+				iomodel->FetchMultipleData(&gatenames,&numgates,                     "md.massfluxatgate.name");
+				iomodel->FetchMultipleData(&gatedefinitionenums,&temp,               "md.massfluxatgate.definitionenum"); _assert_(temp==numgates);
+				iomodel->FetchMultipleData(&gatesegments,&gatesegments_M,NULL,&temp, "md.massfluxatgate.segments");       _assert_(temp==numgates);
 
 				for(j=0;j<numgates;j++){
@@ -74,13 +71,13 @@
 
 				/*Fetch name, model_enum, observation, observation_enum, etc ... (see src/m/classes/misfit.m): */
-				iomodel->FetchMultipleData(&misfit_name_s,&nummisfits,MisfitNameEnum);
-				iomodel->FetchMultipleData(&misfit_definitionenums_s,&nummisfits,MisfitDefinitionenumEnum);
-				iomodel->FetchMultipleData(&misfit_model_enum_s,&nummisfits,MisfitModelEnumEnum);
-				iomodel->FetchMultipleData(&misfit_observation_s,&misfit_observation_M_s,&misfit_observation_N_s,&nummisfits,MisfitObservationEnum);
-				iomodel->FetchMultipleData(&misfit_observation_enum_s,&nummisfits,MisfitObservationEnumEnum);
-				iomodel->FetchMultipleData(&misfit_timeinterpolation_s,&nummisfits,MisfitTimeinterpolationEnum);
-				iomodel->FetchMultipleData(&misfit_local_s,&nummisfits,MisfitLocalEnum);
-				iomodel->FetchMultipleData(&misfit_weights_s,&misfit_weights_M_s,&misfit_weights_N_s,&nummisfits,MisfitWeightsEnum);
-				iomodel->FetchMultipleData(&misfit_weights_enum_s,&nummisfits,MisfitWeightsEnumEnum);
+				iomodel->FetchMultipleData(&misfit_name_s,&nummisfits,                                                        "md.misfit.name");
+				iomodel->FetchMultipleData(&misfit_definitionenums_s,&nummisfits,                                             "md.misfit.definitionenum");
+				iomodel->FetchMultipleData(&misfit_model_enum_s,&nummisfits,                                                  "md.misfit.model_enum");
+				iomodel->FetchMultipleData(&misfit_observation_s,&misfit_observation_M_s,&misfit_observation_N_s,&nummisfits, "md.misfit.observation");
+				iomodel->FetchMultipleData(&misfit_observation_enum_s,&nummisfits,                                            "md.misfit.observation_enum");
+				iomodel->FetchMultipleData(&misfit_timeinterpolation_s,&nummisfits,                                           "md.misfit.timeinterpolation");
+				iomodel->FetchMultipleData(&misfit_local_s,&nummisfits,                                                       "md.misfit.local");
+				iomodel->FetchMultipleData(&misfit_weights_s,&misfit_weights_M_s,&misfit_weights_N_s,&nummisfits,             "md.misfit.weights");
+				iomodel->FetchMultipleData(&misfit_weights_enum_s,&nummisfits,                                                "md.misfit.weights_enum");
 
 				for(j=0;j<nummisfits;j++){
@@ -134,8 +131,8 @@
 
 				/*Fetch name, model_enum, etc ... (see src/m/classes/nodalvalue.m): */
-				iomodel->FetchMultipleData(&nodalvalue_name_s,&numnodalvalues,NodalvalueNameEnum);
-				iomodel->FetchMultipleData(&nodalvalue_definitionenums_s,&numnodalvalues,NodalvalueDefinitionenumEnum);
-				iomodel->FetchMultipleData(&nodalvalue_model_enum_s,&numnodalvalues,NodalvalueModelEnumEnum);
-				iomodel->FetchMultipleData(&nodalvalue_node_s,&numnodalvalues,NodalvalueNodeEnum);
+				iomodel->FetchMultipleData(&nodalvalue_name_s,&numnodalvalues,            "md.nodalvalue.name");
+				iomodel->FetchMultipleData(&nodalvalue_definitionenums_s,&numnodalvalues, "md.nodalvalue.definitionenum");
+				iomodel->FetchMultipleData(&nodalvalue_model_enum_s,&numnodalvalues,      "md.nodalvalue.model_enum");
+				iomodel->FetchMultipleData(&nodalvalue_node_s,&numnodalvalues,            "md.nodalvalue.node");
 
 				for(j=0;j<numnodalvalues;j++){
@@ -169,7 +166,7 @@
 
 				/*Fetch name and levelset, etc ... (see src/m/classes/masscon.m): */
-				iomodel->FetchMultipleData(&masscon_name_s,&nummasscons,MassconNameEnum);
-				iomodel->FetchMultipleData(&masscon_definitionenum_s,&nummasscons,MassconDefinitionenumEnum);
-				iomodel->FetchMultipleData(&masscon_levelset_s,&masscon_levelset_M_s,&masscon_levelset_N_s,&nummasscons,MassconLevelsetEnum);
+				iomodel->FetchMultipleData(&masscon_name_s,&nummasscons,                                                "md.masscon.name");
+				iomodel->FetchMultipleData(&masscon_definitionenum_s,&nummasscons,                                      "md.masscon.definitionenum");
+				iomodel->FetchMultipleData(&masscon_levelset_s,&masscon_levelset_M_s,&masscon_levelset_N_s,&nummasscons,"md.masscon.levelset");
 				for(j=0;j<nummasscons;j++){
 
@@ -207,10 +204,10 @@
 
 				/*Fetch names and multiplicators, etc ... (see src/m/classes/masscon_axpby.m): */
-				iomodel->FetchMultipleData(&masscon_name_s,&num,MassconaxpbyNameEnum);
-				iomodel->FetchMultipleData(&masscon_definitionenum_s,&num,MassconaxpbyDefinitionenumEnum);
-				iomodel->FetchMultipleData(&masscon_namex_s,&num,MassconaxpbyNamexEnum);
-				iomodel->FetchMultipleData(&masscon_namey_s,&num,MassconaxpbyNameyEnum);
-				iomodel->FetchMultipleData(&masscon_alpha_s,&num,MassconaxpbyAlphaEnum);
-				iomodel->FetchMultipleData(&masscon_beta_s,&num,MassconaxpbyBetaEnum);
+				iomodel->FetchMultipleData(&masscon_name_s,&num,          "md.massconaxpby.name");
+				iomodel->FetchMultipleData(&masscon_definitionenum_s,&num,"md.massconaxpby.definitionenum");
+				iomodel->FetchMultipleData(&masscon_namex_s,&num,         "md.massconaxpby.namex");
+				iomodel->FetchMultipleData(&masscon_namey_s,&num,         "md.massconaxpby.namey");
+				iomodel->FetchMultipleData(&masscon_alpha_s,&num,         "md.massconaxpby.alpha");
+				iomodel->FetchMultipleData(&masscon_beta_s,&num,          "md.massconaxpby.beta");
 				for(j=0;j<num;j++){
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 20690)
@@ -41,63 +41,63 @@
 
 	/*Copy some constants from iomodel */
-	parameters->AddObject(iomodel->CopyConstantObject(DomainTypeEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(DomainDimensionEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SettingsRecordingFrequencyEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(ConstantsYtsEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingStartTimeEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingFinalTimeEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeAdaptEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingCflCoefficientEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingInterpForcingsEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SettingsLowmemEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(DebugProfilingEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(MeshAverageVertexConnectivityEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SettingsWaitonlockEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofelementsEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(MeshNumberofverticesEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SettingsResultsOnNodesEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(SettingsIoGatherEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(AutodiffIsautodiffEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(QmuIsdakotaEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(InversionIscontrolEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(InversionTypeEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(CalvingLawEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.domain_type",DomainTypeEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.domain_dimension",DomainDimensionEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.settings.output_frequency",SettingsOutputFrequencyEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.settings.recording_frequency",SettingsRecordingFrequencyEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.constants.yts",ConstantsYtsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.start_time",TimesteppingStartTimeEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.final_time",TimesteppingFinalTimeEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_adapt",TimesteppingTimeAdaptEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.time_step",TimesteppingTimeStepEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.cfl_coefficient",TimesteppingCflCoefficientEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.timestepping.interp_forcings",TimesteppingInterpForcingsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.settings.lowmem",SettingsLowmemEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.debug.profiling",DebugProfilingEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.average_vertex_connectivity",MeshAverageVertexConnectivityEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.settings.waitonlock",SettingsWaitonlockEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.numberofelements",MeshNumberofelementsEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.mesh.numberofvertices",MeshNumberofverticesEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.settings.results_on_nodes",SettingsResultsOnNodesEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.settings.io_gather",SettingsIoGatherEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.isautodiff",AutodiffIsautodiffEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.qmu.isdakota",QmuIsdakotaEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.inversion.iscontrol",InversionIscontrolEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.inversion.type",InversionTypeEnum));
+	parameters->AddObject(iomodel->CopyConstantObject("md.calving.law",CalvingLawEnum));
 	{/*This is specific to ice...*/
-		parameters->AddObject(iomodel->CopyConstantObject(MeshElementtypeEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(SteadystateReltolEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(SteadystateMaxiterEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(ConstantsReferencetemperatureEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMigrationEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIsstressbalanceEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIsmasstransportEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIssmbEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIsthermalEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIsgroundinglineEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIsgiaEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIsdamageevolutionEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIshydrologyEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIsmovingfrontEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIsslrEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(TransientIscouplerEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(MaterialsRheologyLawEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(GiaCrossSectionShapeEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.mesh.elementtype",MeshElementtypeEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.steadystate.reltol",SteadystateReltolEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.steadystate.maxiter",SteadystateMaxiterEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.constants.referencetemperature",ConstantsReferencetemperatureEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.groundingline.migration",GroundinglineMigrationEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isstressbalance",TransientIsstressbalanceEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.ismasstransport",TransientIsmasstransportEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.issmb",TransientIssmbEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isthermal",TransientIsthermalEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isgroundingline",TransientIsgroundinglineEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isgia",TransientIsgiaEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isdamageevolution",TransientIsdamageevolutionEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.ishydrology",TransientIshydrologyEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.ismovingfront",TransientIsmovingfrontEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.isslr",TransientIsslrEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.transient.iscoupler",TransientIscouplerEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.materials.rheology_law",MaterialsRheologyLawEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.gia.cross_section_shape",GiaCrossSectionShapeEnum));
 
 		/*For stress balance only*/
-		parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRiftPenaltyThresholdEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(StressbalanceMaxiterEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(StressbalanceRestolEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(StressbalanceReltolEnum));
-		parameters->AddObject(iomodel->CopyConstantObject(StressbalanceAbstolEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.flowequation.isFS",FlowequationIsFSEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.rift_penalty_threshold",StressbalanceRiftPenaltyThresholdEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.maxiter",StressbalanceMaxiterEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.restol",StressbalanceRestolEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.reltol",StressbalanceReltolEnum));
+		parameters->AddObject(iomodel->CopyConstantObject("md.stressbalance.abstol",StressbalanceAbstolEnum));
 		if(iomodel->domaintype==Domain3DEnum)
-		 parameters->AddObject(iomodel->CopyConstantObject(MeshNumberoflayersEnum));
+		 parameters->AddObject(iomodel->CopyConstantObject("md.mesh.numberoflayers",MeshNumberoflayersEnum));
 	}
 
 	
 	/*Basal forcing parameters*/
-	parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsEnum));
-	iomodel->FindConstant(&basalforcing_model,BasalforcingsEnum);
+	parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.model",BasalforcingsEnum));
+	iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model");
 	switch(basalforcing_model){
 		case FloatingMeltRateEnum:
@@ -105,26 +105,26 @@
 			break;
 		case LinearFloatingMeltRateEnum:
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsDeepwaterMeltingRateEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsDeepwaterElevationEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsUpperwaterElevationEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum));
 			break;
 		case MismipFloatingMeltRateEnum:
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsMeltrateFactorEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsThresholdThicknessEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsUpperdepthMeltEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.meltrate_factor",BasalforcingsMeltrateFactorEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.threshold_thickness",BasalforcingsThresholdThicknessEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.upperdepth_melt",BasalforcingsUpperdepthMeltEnum));
 			break;
 		case MantlePlumeGeothermalFluxEnum:
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsMantleconductivityEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsNusseltEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsDtbgEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsPlumeradiusEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsTopplumedepthEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsBottomplumedepthEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsPlumexEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsPlumeyEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsCrustthicknessEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsUppercrustthicknessEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsUppercrustheatEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(BasalforcingsLowercrustheatEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.mantleconductivity",BasalforcingsMantleconductivityEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.nusselt",BasalforcingsNusseltEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.dtbg",BasalforcingsDtbgEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.plumeradius",BasalforcingsPlumeradiusEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.topplumedepth",BasalforcingsTopplumedepthEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.bottomplumedepth",BasalforcingsBottomplumedepthEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.plumex",BasalforcingsPlumexEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.plumey",BasalforcingsPlumeyEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.crustthickness",BasalforcingsCrustthicknessEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.uppercrustthickness",BasalforcingsUppercrustthicknessEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.uppercrustheat",BasalforcingsUppercrustheatEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.lowercrustheat",BasalforcingsLowercrustheatEnum));
 			break;
 		default:
@@ -135,5 +135,5 @@
 	parameters->AddObject(new IntParam(SolutionTypeEnum,solution_type));
 
-	iomodel->FindConstant(&time,TimesteppingStartTimeEnum);
+	iomodel->FindConstant(&time,"md.timestepping.start_time");
 	parameters->AddObject(new DoubleParam(TimeEnum,time));  
 	parameters->AddObject(new IntParam(StepEnum,0));  
@@ -143,25 +143,25 @@
 
 	/*Requested outputs */
-	iomodel->FetchData(&requestedoutputs,&numoutputs,TransientRequestedOutputsEnum);
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.transient.requested_outputs");
 	parameters->AddObject(new IntParam(TransientNumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new StringArrayParam(TransientRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,TransientRequestedOutputsEnum);
-
-	iomodel->FetchData(&requestedoutputs,&numoutputs,SteadystateRequestedOutputsEnum);
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.transient.requested_outputs");
+
+	iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.steadystate.requested_outputs");
 	parameters->AddObject(new IntParam(SteadystateNumRequestedOutputsEnum,numoutputs));
 	if(numoutputs)parameters->AddObject(new StringArrayParam(SteadystateRequestedOutputsEnum,requestedoutputs,numoutputs));
-	iomodel->DeleteData(&requestedoutputs,numoutputs,SteadystateRequestedOutputsEnum);
-
-	iomodel->FindConstant(&materialtype,MaterialsEnum);
+	iomodel->DeleteData(&requestedoutputs,numoutputs,"md.steadystate.requested_outputs");
+
+	iomodel->FindConstant(&materialtype,"md.materials.type");
 	if(materialtype==MatdamageiceEnum){
-		iomodel->FetchData(&requestedoutputs,&numoutputs,DamageEvolutionRequestedOutputsEnum);
+		iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.damage.requested_outputs");
 		parameters->AddObject(new IntParam(DamageEvolutionNumRequestedOutputsEnum,numoutputs));
 		if(numoutputs)parameters->AddObject(new StringArrayParam(DamageEvolutionRequestedOutputsEnum,requestedoutputs,numoutputs));
-		iomodel->DeleteData(&requestedoutputs,numoutputs,DamageEvolutionRequestedOutputsEnum);
+		iomodel->DeleteData(&requestedoutputs,numoutputs,"md.damage.requested_outputs");
 	}
 
 	/*Deal with mass flux segments: {{{*/
-	iomodel->FetchData(&qmu_mass_flux_present,QmuMassFluxSegmentsPresentEnum);
-	iomodel->FetchData(&autodiff_mass_flux_present,AutodiffMassFluxSegmentsPresentEnum);
+	iomodel->FetchData(&qmu_mass_flux_present,"md.qmu.mass_flux_segments_present");
+	iomodel->FetchData(&autodiff_mass_flux_present,"md.autodiff.mass_flux_segments_present");
 
 	if(qmu_mass_flux_present || autodiff_mass_flux_present)mass_flux_present=true;
@@ -172,5 +172,5 @@
 
 		/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
-		iomodel->FetchData(&array,&mdims_array,&ndims_array,&mass_flux_num_profiles,MassFluxSegmentsEnum);
+		iomodel->FetchData(&array,&mdims_array,&ndims_array,&mass_flux_num_profiles,"md.qmu.mass_flux_segments");
 		if(mass_flux_num_profiles==0)_error_("mass_flux_num_profiles is 0, when MassFlux computations were requested!");
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 20690)
@@ -36,10 +36,10 @@
 
 	/*recover parameters: */
-	iomodel->FindConstant(&dakota_analysis,QmuIsdakotaEnum);
+	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
 
 	if(dakota_analysis){
 
-		iomodel->FindConstant(&name,MiscellaneousNameEnum);
-		iomodel->FindConstant(&numberofresponses,QmuNumberofresponsesEnum);
+		iomodel->FindConstant(&name,"md.miscellaneous.name");
+		iomodel->FindConstant(&numberofresponses,"md.qmu.numberofresponses");
 
 		/*name of qmu input, error and output files*/
@@ -57,5 +57,5 @@
 
 		/*Fetch variable descriptors*/
-		iomodel->FetchData(&variabledescriptors,&numvariabledescriptors,QmuVariabledescriptorsEnum);
+		iomodel->FetchData(&variabledescriptors,&numvariabledescriptors,"md.qmu.variabledescriptors");
 
 		/*Ok, we have all the variable descriptors. Build a parameter with it: */
@@ -63,5 +63,5 @@
 
 		/*Fetch response descriptors*/
-		iomodel->FetchData(&responsedescriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
+		iomodel->FetchData(&responsedescriptors,&numresponsedescriptors,"md.qmu.responsedescriptors");
 
 		/*Ok, we have all the response descriptors. Build a parameter with it: */
@@ -71,6 +71,6 @@
 		/*Deal with partitioning*/
 		/*partition vertices in iomodel->qmu_npart parts, unless a partition is already present: */
-		parameters->AddObject(iomodel->CopyConstantObject(QmuNumberofpartitionsEnum));
-		iomodel->FetchData(&dpart,NULL,NULL,QmuPartitionEnum);
+		parameters->AddObject(iomodel->CopyConstantObject("md.qmu.numberofpartitions",QmuNumberofpartitionsEnum));
+		iomodel->FetchData(&dpart,NULL,NULL,"md.qmu.partition");
 		if(!dpart){
 			/*Partition elements and vertices and nodes: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp	(revision 20690)
@@ -13,8 +13,6 @@
 	/*recover parameters: */
 	bool dakota_analysis;
-	iomodel->FindConstant(&dakota_analysis,QmuIsdakotaEnum);
+	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
 
-	if(dakota_analysis){
-		iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum,0.);
-	}
+	if(dakota_analysis) iomodel->FetchDataToInput(elements,"md.geometry.hydrostatic_ratio",0.);
 }
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 20690)
@@ -44,5 +44,5 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&numrifts,RiftsNumriftsEnum);
+	iomodel->FindConstant(&numrifts,"md.rifts.numrifts");
 
 	/*First, check that partitioning has not yet been carryed out. Just check whether my_elements pointers is not already assigned a value: */
@@ -66,8 +66,8 @@
 		case PentaEnum:
 			elements_width=6;
-			iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
-			iomodel->FindConstant(&numberofelements2d,MeshNumberofelements2dEnum);
-			iomodel->FindConstant(&numberofvertices2d,MeshNumberofvertices2dEnum);
-			iomodel->FindConstant(&numlayers,MeshNumberoflayersEnum);
+			iomodel->FetchData(&elements2d,NULL,NULL,"md.mesh.elements2d");
+			iomodel->FindConstant(&numberofelements2d,"md.mesh.numberofelements2d");
+			iomodel->FindConstant(&numberofvertices2d,"md.mesh.numberofvertices2d");
+			iomodel->FindConstant(&numlayers,"md.mesh.numberoflayers");
 			break;
 		default:
@@ -82,5 +82,5 @@
 	/*Deal with rifts, they have to be included into one partition only, not several: */
 	if(numrifts){
-		iomodel->FetchData(&riftinfo,&numrifts,NULL,RiftsRiftstructEnum);
+		iomodel->FetchData(&riftinfo,&numrifts,NULL,"md.rifts.riftstruct");
 		for(i=0;i<numrifts;i++){
 			el1=reCast<int>(*(riftinfo+RIFTINFOSIZE*i+2))-1; //matlab indexing to c indexing
@@ -88,5 +88,5 @@
 			epart[el2]=epart[el1]; //ensures that this pair of elements will be in the same partition, as well as the corresponding vertices;
 		}
-		iomodel->DeleteData(riftinfo,RiftsRiftstructEnum);
+		iomodel->DeleteData(riftinfo,"md.rifts.riftstruct");
 	}
 
@@ -114,5 +114,5 @@
 	 * penpair has 2 nodes that are poointing toward 2 vertices.
 	 * The 2 vertices must be in the same cpu as the penpair*/
-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,StressbalanceVertexPairingEnum);
+	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,"md.stressbalance.vertex_pairing");
 	for(i=0;i<numvertex_pairing;i++){
 		if(my_vertices[vertex_pairing[2*i+0]-1] && !my_vertices[vertex_pairing[2*i+1]-1]){
@@ -121,5 +121,5 @@
 	}
 	xDelete<int>(vertex_pairing);
-	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,MasstransportVertexPairingEnum);
+	iomodel->FetchData(&vertex_pairing,&numvertex_pairing,NULL,"md.masstransport.vertex_pairing");
 	for(i=0;i<numvertex_pairing;i++){
 		if(my_vertices[vertex_pairing[2*i+0]-1] && !my_vertices[vertex_pairing[2*i+1]-1]){
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 20690)
@@ -27,5 +27,5 @@
 
 	/*Fetch parameters: */
-	iomodel->FindConstant(&verbose,VerboseEnum);
+	iomodel->FindConstant(&verbose,"md.verbose");
 	SetVerbosityLevel(verbose);
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 20690)
@@ -15,5 +15,5 @@
 
 	if(isgroundingline){
-		iomodel->FetchDataToInput(elements,BedEnum);
+		iomodel->FetchDataToInput(elements,"md.geometry.bed",BedEnum);
 	}
 }
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 20689)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 20690)
@@ -203,5 +203,5 @@
     /* Get constants */
     femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
-    /*iomodel->FindConstant(&yts,ConstantsYtsEnum);*/
+    /*iomodel->FindConstant(&yts,"md.constants.yts");*/
     /*this->parameters->FindParam(&yts,ConstantsYtsEnum);*/
     /*Mathieu original*/
Index: /issm/trunk-jpl/src/m/classes/SMBcomponents.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBcomponents.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBcomponents.m	(revision 20690)
@@ -76,12 +76,12 @@
 			fielddisplay(self,'requested_outputs','additional outputs requested');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',SmbEnum(),'data',SMBcomponentsEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','runoff','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.smb.model','data',SMBcomponentsEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','runoff','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
 			
 			%process requested outputs
@@ -92,5 +92,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBcomponents.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBcomponents.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBcomponents.py	(revision 20690)
@@ -77,12 +77,12 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'enum',SmbEnum(),'data',SMBcomponentsEnum(),'format','Integer');
-		WriteData(fid,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','smb','fieldname','runoff','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'name','md.smb.model','data',SMBcomponentsEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','runoff','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
 		
 		#process requested outputs
@@ -92,5 +92,5 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray')
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/SMBd18opdd.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBd18opdd.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBd18opdd.m	(revision 20690)
@@ -102,25 +102,25 @@
 			% PositiveDegreeDay (Tria.cpp) used in that case
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',SmbEnum(),'data',SMBd18opddEnum(),'format','Integer');
+			WriteData(fid,prefix,'name','md.smb.model','data',SMBd18opddEnum(),'format','Integer');
 
-			WriteData(fid,'object',self,'class','smb','fieldname','ismungsm','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','isd18opd','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','desfac','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','smb','fieldname','rlaps','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','rlapslgm','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isd18opd','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlaps','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlapslgm','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2);
 
 			if self.isd18opd
-				WriteData(fid,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2);
-				WriteData(fid,'object',self,'class','smb','fieldname','dpermil','format','Double');
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','dpermil','format','Double');
 			end
 			
@@ -132,5 +132,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBd18opdd.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBd18opdd.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBd18opdd.py	(revision 20690)
@@ -106,25 +106,25 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'enum',SmbEnum(),'data',SMBd18opddEnum(),'format','Integer')
+		WriteData(fid,prefix,'name','md.smb.model','data',SMBd18opddEnum(),'format','Integer')
 
-		WriteData(fid,'object',self,'class','smb','fieldname','ismungsm','format','Boolean')
-		WriteData(fid,'object',self,'class','smb','fieldname','isd18opd','format','Boolean')
-		WriteData(fid,'object',self,'class','smb','fieldname','desfac','format','Double')
-		WriteData(fid,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
-		WriteData(fid,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
-		WriteData(fid,'object',self,'class','smb','fieldname','rlaps','format','Double')
-		WriteData(fid,'object',self,'class','smb','fieldname','rlapslgm','format','Double')
-		WriteData(fid,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2)
-		WriteData(fid,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isd18opd','format','Boolean')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlaps','format','Double')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlapslgm','format','Double')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2)
 
 		if self.isd18opd:
-			WriteData(fid,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2)
-			WriteData(fid,'object',self,'class','smb','fieldname','dpermil','format','Double')
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','dpermil','format','Double')
 			
 		#process requested outputs
@@ -134,5 +134,5 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray')
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/SMBforcing.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBforcing.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBforcing.js	(revision 20690)
@@ -22,6 +22,6 @@
 		this.initialize = function(md) {// {{{
 
-			if (isNaN(self.mass_balance)){
-				self.mass_balance=NewArrayFill(md.mesh.numberofvertices,0);
+			if (isNaN(this.mass_balance)){
+				this.mass_balance=NewArrayFill(md.mesh.numberofvertices,0);
 				console.log('      no smb.mass_balance specified: values set as zero');
 			}
@@ -43,6 +43,6 @@
 			var yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',SmbEnum(),'data',SMBforcingEnum(),'format','Integer');
-			WriteData(fid,'object',this,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.smb.model','data',SMBforcingEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',this,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
 			
 			//process requested outputs
@@ -55,5 +55,5 @@
 				}
 			}
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum(),'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
 
 		}//}}}
Index: /issm/trunk-jpl/src/m/classes/SMBforcing.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBforcing.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBforcing.m	(revision 20690)
@@ -63,10 +63,10 @@
 			fielddisplay(self,'requested_outputs','additional outputs requested');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',SmbEnum(),'data',SMBforcingEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.smb.model','data',SMBforcingEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
 			
 			%process requested outputs
@@ -77,5 +77,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBforcing.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBforcing.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBforcing.py	(revision 20690)
@@ -51,10 +51,10 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'enum',SmbEnum(),'data',SMBforcingEnum(),'format','Integer');
-		WriteData(fid,'object',self,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'name','md.smb.model','data',SMBforcingEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
 		
 		#process requested outputs
@@ -64,5 +64,5 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray')
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/SMBgemb.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 20690)
@@ -256,52 +256,52 @@
 			
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.25*24.0*3600.0;
 
-			WriteData(fid,'enum',SmbEnum(),'data',SMBgembEnum(),'format','Integer');
-			
-			WriteData(fid,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','isalbedo','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','isshortwave','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','isthermal','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','isaccumulation','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','ismelt','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','isdensification','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','isturbulentflux','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean');
-			
-			WriteData(fid,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','V','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','dswrf','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','dlwrf','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','P','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','eAir','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','pAir','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
-			
-			WriteData(fid,'object',self,'class','smb','fieldname','Tmean','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','C','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','Tz','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','Vz','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','zTop','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','dzTop','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','dzMin','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','zY','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','zMax','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','smb','fieldname','zMin','format','DoubleMat','mattype',2);
-		
-			WriteData(fid,'object',self,'class','smb','fieldname','aIdx','format','Integer');
-			WriteData(fid,'object',self,'class','smb','fieldname','swIdx','format','Integer');
-			WriteData(fid,'object',self,'class','smb','fieldname','denIdx','format','Integer');
-			WriteData(fid,'object',self,'class','smb','fieldname','InitDensityScaling','format','Double');
-
-			WriteData(fid,'object',self,'class','smb','fieldname','outputFreq','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','aSnow','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','aIce','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','cldFrac','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','t0wet','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','t0dry','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','K','format','Double');
+			WriteData(fid,prefix,'name','md.smb.model','data',SMBgembEnum(),'format','Integer');
+			
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isalbedo','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isshortwave','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isthermal','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isaccumulation','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismelt','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdensification','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isturbulentflux','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean');
+			
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','V','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','dswrf','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','dlwrf','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','P','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','eAir','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','pAir','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
+			
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tmean','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','C','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tz','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','Vz','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','zTop','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','dzTop','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','dzMin','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','zY','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','zMax','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','zMin','format','DoubleMat','mattype',2);
+		
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','aIdx','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','swIdx','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','denIdx','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','InitDensityScaling','format','Double');
+
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','outputFreq','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','aSnow','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','aIce','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','cldFrac','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0wet','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0dry','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','K','format','Double');
 
 			%figure out dt from forcings: 
@@ -309,5 +309,5 @@
 			dtime=diff(time,1);
 			dt=min(dtime);
-			WriteData(fid,'data',dt,'enum',SmbDtEnum,'format','Double','scale',yts);
+			WriteData(fid,prefix,'data',dt,'name','md.smb.dt','format','Double','scale',yts);
 			
 			%process requested outputs
@@ -318,5 +318,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/SMBgradients.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgradients.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBgradients.m	(revision 20690)
@@ -60,13 +60,13 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',SmbEnum(),'data',SMBgradientsEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','smb','fieldname','href','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','b_pos','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','b_neg','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.smb.model','data',SMBgradientsEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','href','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','b_pos','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','b_neg','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
 			
 			%process requested outputs
@@ -77,5 +77,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBgradients.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgradients.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBgradients.py	(revision 20690)
@@ -57,13 +57,13 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'enum',SmbEnum(),'data',SMBgradientsEnum(),'format','Integer');
-		WriteData(fid,'object',self,'class','smb','fieldname','href','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','smb','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','smb','fieldname','b_pos','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','smb','fieldname','b_neg','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'name','md.smb.model','data',SMBgradientsEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','href','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','b_pos','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','b_neg','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
 		
 		#process requested outputs
@@ -73,5 +73,5 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray')
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/SMBhenning.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBhenning.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBhenning.m	(revision 20690)
@@ -48,10 +48,10 @@
 			fielddisplay(self,'requested_outputs','additional outputs requested');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',SmbEnum(),'data',SMBhenningEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','smb','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.smb.model','data',SMBhenningEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
 			
 			%process requested outputs
@@ -62,5 +62,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.m	(revision 20690)
@@ -87,13 +87,13 @@
 			fielddisplay(self,'requested_outputs','additional outputs requested');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',SmbEnum(),'data',SMBmeltcomponentsEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','melt','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','smb','fieldname','refreeze','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.smb.model','data',SMBmeltcomponentsEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','melt','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','refreeze','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
 			
 			%process requested outputs
@@ -104,5 +104,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBmeltcomponents.py	(revision 20690)
@@ -88,13 +88,13 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'enum',SmbEnum(),'data',SMBmeltcomponentsEnum(),'format','Integer');
-		WriteData(fid,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','smb','fieldname','melt','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','smb','fieldname','refreeze','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'name','md.smb.model','data',SMBmeltcomponentsEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','melt','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','refreeze','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
 		
 		#process requested outputs
@@ -104,5 +104,5 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray')
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/SMBpdd.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBpdd.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBpdd.m	(revision 20690)
@@ -141,39 +141,39 @@
 			fielddisplay(self,'requested_outputs','additional outputs requested');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',SmbEnum(),'data',SMBpddEnum(),'format','Integer');
+			WriteData(fid,prefix,'name','md.smb.model','data',SMBpddEnum(),'format','Integer');
 
-			WriteData(fid,'object',self,'class','smb','fieldname','isdelta18o','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','ismungsm','format','Boolean');
-			WriteData(fid,'object',self,'class','smb','fieldname','desfac','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','smb','fieldname','rlaps','format','Double');
-			WriteData(fid,'object',self,'class','smb','fieldname','rlapslgm','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdelta18o','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlaps','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlapslgm','format','Double');
 
 			if(self.isdelta18o==0 & self.ismungsm==0)
-				%WriteData(fid,'object',self,'class','smb','fieldname','monthlytemperatures','format','DoubleMat','mattype',1);
-				WriteData(fid,'object',self,'class','smb','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','precipitation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+				%WriteData(fid,prefix,'object',self,'class','smb','fieldname','monthlytemperatures','format','DoubleMat','mattype',1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
 			elseif self.isdelta18o
-				WriteData(fid,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','temperatures_lgm','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','precipitations_lgm','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','delta18o_surface','format','DoubleMat','mattype',1,'timeserieslength',2);
-				WriteData(fid,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2);
-				WriteData(fid,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2);
-				WriteData(fid,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_lgm','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_lgm','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','delta18o_surface','format','DoubleMat','mattype',1,'timeserieslength',2);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2);
 			elseif self.ismungsm
-				WriteData(fid,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','temperatures_lgm','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','precipitations_lgm','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'class','smb','fieldname','Pfac','format','DoubleMat','mattype',1,'timeserieslength',2);
-				WriteData(fid,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2);
-				WriteData(fid,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_lgm','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_lgm','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','Pfac','format','DoubleMat','mattype',1,'timeserieslength',2);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2);
+				WriteData(fid,prefix,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2);
 			end
 			
@@ -185,5 +185,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBpdd.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBpdd.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/SMBpdd.py	(revision 20690)
@@ -149,38 +149,38 @@
 		return md
 	#}}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'enum',SmbEnum(),'data',SMBpddEnum(),'format','Integer')
+		WriteData(fid,prefix,'name','md.smb.model','data',SMBpddEnum(),'format','Integer')
 
-		WriteData(fid,'object',self,'class','smb','fieldname','isdelta18o','format','Boolean')
-		WriteData(fid,'object',self,'class','smb','fieldname','ismungsm','format','Boolean')
-		WriteData(fid,'object',self,'class','smb','fieldname','desfac','format','Double')
-		WriteData(fid,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
-		WriteData(fid,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
-		WriteData(fid,'object',self,'class','smb','fieldname','rlaps','format','Double')
-		WriteData(fid,'object',self,'class','smb','fieldname','rlapslgm','format','Double')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','isdelta18o','format','Boolean')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','ismungsm','format','Boolean')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','desfac','format','Double')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0p','format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','s0t','format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlaps','format','Double')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','rlapslgm','format','Double')
 
 		if (self.isdelta18o==0 and self.ismungsm==0):
-			WriteData(fid,'object',self,'class','smb','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','precipitation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
 		elif self.isdelta18o:
-			WriteData(fid,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','temperatures_lgm','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','precipitations_lgm','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','delta18o_surface','format','DoubleMat','mattype',1,'timeserieslength',2)
-			WriteData(fid,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2)
-			WriteData(fid,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2)
-			WriteData(fid,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2)			
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_lgm','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_lgm','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','delta18o_surface','format','DoubleMat','mattype',1,'timeserieslength',2)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','delta18o','format','DoubleMat','mattype',1,'timeserieslength',2)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2)			
 		elif self.ismungsm:
-			WriteData(fid,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','temperatures_lgm','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','precipitations_lgm','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'class','smb','fieldname','Pfac','format','DoubleMat','mattype',1,'timeserieslength',2)
-			WriteData(fid,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2)
-			WriteData(fid,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_presentday','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','temperatures_lgm','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_presentday','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','precipitations_lgm','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','Pfac','format','DoubleMat','mattype',1,'timeserieslength',2)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','Tdiff','format','DoubleMat','mattype',1,'timeserieslength',2)
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','sealev','format','DoubleMat','mattype',1,'timeserieslength',2)
 			
 		#process requested outputs
@@ -190,5 +190,5 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray')
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/adinversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/adinversion.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/adinversion.m	(revision 20690)
@@ -125,22 +125,22 @@
 			disp('   503: ThicknessAbsGradient');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
-			WriteData(fid,'enum',InversionTypeEnum(),'data',4,'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
+			WriteData(fid,prefix,'name','md.inversion.type','data',4,'format','Integer');
 			if ~self.iscontrol, return; end
-			WriteData(fid,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
-			WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',self,'class','inversion','fieldname','dxmin','format','Double');
-			WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double');
-			WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
 			if(numel(self.thickness_obs)==md.mesh.numberofelements),
 				mattype=2;
@@ -148,15 +148,11 @@
 				mattype=1;
 			end
-			WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
-			WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
 
 			%process control parameters
 			num_control_parameters=numel(self.control_parameters);
-			data=zeros(1,num_control_parameters);
-			for i=1:num_control_parameters,
-				data(i)=StringToEnum(self.control_parameters{i});
-			end
-			WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
+			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
 
 			%process cost functions
@@ -186,6 +182,6 @@
 			pos=find(self.cost_functions==1009); data(pos)=Outputdefinition8Enum();
 			pos=find(self.cost_functions==1010); data(pos)=Outputdefinition10Enum();
-			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/adinversion.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/adinversion.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/adinversion.py	(revision 20690)
@@ -142,19 +142,19 @@
 		yts=365.0*24.0*3600.0;
 
-		WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
-		WriteData(fid,'enum',InversionTypeEnum(),'data',4,'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
+		WriteData(fid,prefix,'name','md.inversion.type','data',4,'format','Integer');
 		if not self.iscontrol:
 			return
-		WriteData(fid,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
-		WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
-		WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
-		WriteData(fid,'object',self,'class','inversion','fieldname','dxmin','format','Double');
-		WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double');
-		WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
-		WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
-		WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
-		WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-		WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-		WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double');
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
 		if(numel(self.thickness_obs)==md.mesh.numberofelements):
 			mattype=2;
@@ -162,13 +162,11 @@
 			mattype=1;
 		
-		WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
-		WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
 
 		#process control parameters
 		num_control_parameters = numpy.numel(self.control_parameters);
-		data = numpy.array([StringToEnum(self.control_parameter[0]) for control_parameter in self.control_parameters]).reshape(1,-1)
-
-		WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3);
-		WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
+		WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
 
 		#process cost functions
@@ -198,5 +196,5 @@
 		data[numpy.nonzero(self.cost_functions==1009)]=Outputdefinition8Enum();
 		data[numpy.nonzero(self.cost_functions==1010)]=Outputdefinition10Enum();
-		WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
-		WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
+		WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','DoubleMat','mattype',3);
+		WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
 		
Index: /issm/trunk-jpl/src/m/classes/autodiff.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/autodiff.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/autodiff.js	(revision 20690)
@@ -62,25 +62,25 @@
 		this.marshall=function(md,fid) { //{{{
 
-			WriteData(fid,'object',this,'fieldname','isautodiff','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','driver','format','String');
+			WriteData(fid,prefix,'object',this,'fieldname','isautodiff','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','driver','format','String');
 
 			//early return
 			if (!this.isautodiff){
-				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
-				WriteData(fid,'data',false,'enum',AutodiffKeepEnum(),'format','Boolean');
+				WriteData(fid,prefix,'data',false,'name','md.autodiff.mass_flux_segments_present','format','Boolean');
+				WriteData(fid,prefix,'data',false,'name','md.autodiff.keep','format','Boolean');
 				return;
 			}
 
 			//buffer sizes {{{
-			WriteData(fid,'object',this,'fieldname','obufsize','format','Double');
-			WriteData(fid,'object',this,'fieldname','lbufsize','format','Double');
-			WriteData(fid,'object',this,'fieldname','cbufsize','format','Double');
-			WriteData(fid,'object',this,'fieldname','tbufsize','format','Double');
-			WriteData(fid,'object',this,'fieldname','gcTriggerRatio','format','Double');
-			WriteData(fid,'object',this,'fieldname','gcTriggerMaxSize','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','obufsize','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','lbufsize','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','cbufsize','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','tbufsize','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','gcTriggerRatio','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','gcTriggerMaxSize','format','Double');
 			//}}}
 			//process dependent variables {{{
 			num_dependent_objects=this.dependents.length;
-			WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',num_dependent_objects,'name','md.autodiff.num_dependent_objects','format','Integer');
 
 			if(num_dependent_objects){
@@ -96,12 +96,12 @@
 					indices[i]=dep.index;
 				}
-				WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','StringArray');
-				WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3);
-				WriteData(fid,'data',indices,'enum',AutodiffDependentObjectIndicesEnum(),'format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',names,'name','md.autodiff.dependent_object_names','format','StringArray');
+				WriteData(fid,prefix,'data',types,'name','md.autodiff.dependent_object_types','format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',indices,'name','md.autodiff.dependent_object_indices','format','IntMat','mattype',3);
 			}
 			//}}}
 			//process independent variables {{{
 			num_independent_objects=this.independents.length;
-			WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',num_independent_objects,'name','md.autodiff.num_independent_objects','format','Integer');
 
 			if(num_independent_objects){
@@ -115,6 +115,6 @@
 					types[i]=indep.typetoscalar();
 				}
-				WriteData(fid,'data',names,'enum',AutodiffIndependentObjectNamesEnum(),'format','IntMat','mattype',3);
-				WriteData(fid,'data',types,'enum',AutodiffIndependentObjectTypesEnum(),'format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',types,'name','md.autodiff.independent_object_types','format','IntMat','mattype',3);
 			}
 			//}}}
@@ -135,5 +135,5 @@
 				}
 				index=index-1; //get c-index numbering going
-				WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer');
+				WriteData(fid,prefix,'data',index,'name','md.autodiff.fos_forward_index','format','Integer');
 			}
 			//}}}
@@ -154,5 +154,5 @@
 				}
 				index=index-1; //get c-index numbering going
-				WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer');
+				WriteData(fid,prefix,'data',index,'name','md.autodiff.fos_reverse_index','format','Integer');
 			}
 			//}}}
@@ -173,5 +173,5 @@
 				}
 				indices=indices-1; //get c-indices numbering going
-				WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',indices,'name','md.autodiff.fov_forward_indices','format','IntMat','mattype',3);
 			}
 			//}}}
@@ -185,9 +185,9 @@
 			}
 			if (mass_flux_segments.length){
-				WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
+				WriteData(fid,prefix,'data',mass_flux_segments,'name','md.autodiff.mass_flux_segments','format','MatArray');
 				flag=true;
 			}
 			else flag=false;
-			WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
+			WriteData(fid,prefix,'data',flag,'name','md.autodiff.mass_flux_segments_present','format','Boolean');
 			//}}}
 			//deal with trace keep on: {{{
@@ -206,5 +206,5 @@
 				else keep=false;
 			}
-			WriteData(fid,'data',keep,'enum',AutodiffKeepEnum(),'format','Boolean');
+			WriteData(fid,prefix,'data',keep,'name','md.autodiff.keep','format','Boolean');
 			//}}}
 		}//}}}
Index: /issm/trunk-jpl/src/m/classes/autodiff.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 20690)
@@ -76,27 +76,27 @@
 			fielddisplay(self,'gcTriggerMaxSize','free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-
-			WriteData(fid,'object',self,'fieldname','isautodiff','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','driver','format','String');
+		function marshall(self,prefix,md,fid) % {{{
+
+			WriteData(fid,prefix,'object',self,'fieldname','isautodiff','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','driver','format','String');
 
 			%early return
 			if ~self.isautodiff,
-				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
-				WriteData(fid,'data',false,'enum',AutodiffKeepEnum(),'format','Boolean');
+				WriteData(fid,prefix,'data',false,'name','md.autodiff.mass_flux_segments_present','format','Boolean');
+				WriteData(fid,prefix,'data',false,'name','md.autodiff.keep','format','Boolean');
 				return;
 			end
 
 			%buffer sizes {{{
-			WriteData(fid,'object',self,'fieldname','obufsize','format','Double');
-			WriteData(fid,'object',self,'fieldname','lbufsize','format','Double');
-			WriteData(fid,'object',self,'fieldname','cbufsize','format','Double');
-			WriteData(fid,'object',self,'fieldname','tbufsize','format','Double');
-			WriteData(fid,'object',self,'fieldname','gcTriggerRatio','format','Double');
-			WriteData(fid,'object',self,'fieldname','gcTriggerMaxSize','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','obufsize','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','lbufsize','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','cbufsize','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','tbufsize','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','gcTriggerRatio','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','gcTriggerMaxSize','format','Double');
 			%}}}
 			%process dependent variables {{{
 			num_dependent_objects=numel(self.dependents);
-			WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',num_dependent_objects,'naem','md.autodiff.num_dependent_objects','format','Integer');
 
 			if(num_dependent_objects),
@@ -112,12 +112,12 @@
 					indices(i)=dep.index;
 				end
-				WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','StringArray');
-				WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3);
-				WriteData(fid,'data',indices,'enum',AutodiffDependentObjectIndicesEnum(),'format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',names,'name','md.autodiff.dependent_object_names','format','StringArray');
+				WriteData(fid,prefix,'data',types,'name','md.autodiff.dependent_object_types','format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',indices,'name','md.autodiff.dependent_object_indicies','format','IntMat','mattype',3);
 			end
 			%}}}
 			%process independent variables {{{
 			num_independent_objects=numel(self.independents);
-			WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',num_independent_objects,'name','md.autodiff.num_independent_objects','format','Integer');
 
 			if(num_independent_objects),
@@ -131,6 +131,6 @@
 					types(i)=indep.typetoscalar();
 				end
-				WriteData(fid,'data',names,'enum',AutodiffIndependentObjectNamesEnum(),'format','IntMat','mattype',3);
-				WriteData(fid,'data',types,'enum',AutodiffIndependentObjectTypesEnum(),'format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',types,'name','md.autodiff.independent_object_types','format','IntMat','mattype',3);
 			end
 			%}}}
@@ -153,5 +153,5 @@
 				end
 				index=index-1; %get c-index numbering going
-				WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer');
+				WriteData(fid,prefix,'data',index,'name','md.autodiff.fos_forward_index','format','Integer');
 			end
 			%}}}
@@ -174,5 +174,5 @@
 				end
 				index=index-1; %get c-index numbering going
-				WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer');
+				WriteData(fid,prefix,'data',index,'name','md.autodiff.fos_reverse_index','format','Integer');
 			end
 			%}}}
@@ -195,5 +195,5 @@
 				end
 				indices=indices-1; %get c-indices numbering going
-				WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',indices,'name','md.autodiff.fov_forward_indices','format','IntMat','mattype',3);
 			end
 			%}}}
@@ -207,10 +207,10 @@
 			end
 			if ~isempty(mass_flux_segments), 
-				WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
+				WriteData(fid,prefix,'data',mass_flux_segments,'name','md.autodiff.mass_flux_segments','format','MatArray');
 				flag=true;
 			else
 				flag=false;
 			end
-			WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
+			WriteData(fid,prefix,'data',flag,'name','md.autodiff.mass_flux_segments_present','format','Boolean');
 			%}}}
 			%deal with trace keep on: {{{
@@ -233,5 +233,5 @@
 				end
 			end
-			WriteData(fid,'data',keep,'enum',AutodiffKeepEnum(),'format','Boolean');
+			WriteData(fid,prefix,'data',keep,'name','md.autodiff.keep','format','Boolean');
 			%}}}
 
Index: /issm/trunk-jpl/src/m/classes/autodiff.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/autodiff.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/autodiff.py	(revision 20690)
@@ -81,25 +81,25 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','isautodiff','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','driver','format','String')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','isautodiff','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','driver','format','String')
 
 		#early return
 		if not self.isautodiff:
-			WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
-			WriteData(fid,'data',False,'enum',AutodiffKeepEnum(),'format','Boolean')
+			WriteData(fid,prefix,'data',False,'name','md.autodiff.mass_flux_segments_present','format','Boolean')
+			WriteData(fid,prefix,'data',False,'name','md.autodiff.keep','format','Boolean')
 			return
 			
 		#buffer sizes {{{
-		WriteData(fid,'object',self,'fieldname','obufsize','format','Double');
-		WriteData(fid,'object',self,'fieldname','lbufsize','format','Double');
-		WriteData(fid,'object',self,'fieldname','cbufsize','format','Double');
-		WriteData(fid,'object',self,'fieldname','tbufsize','format','Double');
-		WriteData(fid,'object',self,'fieldname','gcTriggerRatio','format','Double');
-		WriteData(fid,'object',self,'fieldname','gcTriggerMaxSize','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','obufsize','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','lbufsize','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','cbufsize','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','tbufsize','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','gcTriggerRatio','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','gcTriggerMaxSize','format','Double');
 		#}}}
 		#process dependent variables {{{
 		num_dependent_objects=len(self.dependents)
-		WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer')
+		WriteData(fid,prefix,'data',num_dependent_objects,'name','md.autodiff.num_dependent_objects','format','Integer')
 
 		if num_dependent_objects:
@@ -113,11 +113,11 @@
 				indices[i]=dep.index
 
-			WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','StringArray')
-			WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3)
-			WriteData(fid,'data',indices,'enum',AutodiffDependentObjectIndicesEnum(),'format','IntMat','mattype',3)
+			WriteData(fid,prefix,'data',names,'name','md.autodiff.dependent_object_names','format','StringArray')
+			WriteData(fid,prefix,'data',types,'name','md.autodiff.dependent_object_types','format','IntMat','mattype',3)
+			WriteData(fid,prefix,'data',indices,'name','md.autodiff.dependent_object_indices','format','IntMat','mattype',3)
 		#}}}
 		#process independent variables {{{
 		num_independent_objects=len(self.independents)
-		WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer')
+		WriteData(fid,prefix,'data',num_independent_objects,'name','md.autodiff.num_independent_objects','format','Integer')
 
 		if num_independent_objects:
@@ -129,6 +129,6 @@
 				types[i]=indep.typetoscalar()
 
-			WriteData(fid,'data',names,'enum',AutodiffIndependentObjectNamesEnum(),'format','IntMat','mattype',3)
-			WriteData(fid,'data',types,'enum',AutodiffIndependentObjectTypesEnum(),'format','IntMat','mattype',3)
+			WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','IntMat','mattype',3)
+			WriteData(fid,prefix,'data',types,'name','md.autodiff.independent_object_types','format','IntMat','mattype',3)
 		#}}}
 		#if driver is fos_forward, build index:  {{{
@@ -147,5 +147,5 @@
 
 			index-=1    #get c-index numbering going
-			WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer')
+			WriteData(fid,prefix,'data',index,'name','md.autodiff.fos_forward_index','format','Integer')
 		#}}}
 		#if driver is fos_reverse, build index:  {{{
@@ -164,5 +164,5 @@
 
 			index-=1    #get c-index numbering going
-			WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer')
+			WriteData(fid,prefix,'data',index,'name','md.autodiff.fos_reverse_index','format','Integer')
 		#}}}
 		#if driver is fov_forward, build indices:  {{{
@@ -181,5 +181,5 @@
 
 			indices-=1    #get c-indices numbering going
-			WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3)
+			WriteData(fid,prefix,'data',indices,'name','md.autodiff.fov_forward_indices','format','IntMat','mattype',3)
 		#}}}
 		#deal with mass fluxes:  {{{
@@ -187,9 +187,9 @@
 
 		if mass_flux_segments:
-			WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray')
+			WriteData(fid,prefix,'data',mass_flux_segments,'name','md.autodiff.mass_flux_segments','format','MatArray')
 			flag=True
 		else:
 			flag=False
-		WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
+		WriteData(fid,prefix,'data',flag,'name','md.autodiff.mass_flux_segments_present','format','Boolean')
 		#}}}
 		#deal with trace keep on: {{{
@@ -210,5 +210,5 @@
 			else:
 				keep=False
-		WriteData(fid,'data',keep,'enum',AutodiffKeepEnum(),'format','Boolean')
+		WriteData(fid,prefix,'data',keep,'name','md.autodiff.keep','format','Boolean')
 		#}}}
 
Index: /issm/trunk-jpl/src/m/classes/balancethickness.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/balancethickness.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/balancethickness.js	(revision 20690)
@@ -37,8 +37,8 @@
 			var yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'object',this,'fieldname','spcthickness','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1/yts);
-			WriteData(fid,'object',this,'fieldname','stabilization','format','Integer');
-			WriteData(fid,'object',this,'fieldname','omega','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','spcthickness','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1/yts);
+			WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','omega','format','DoubleMat','mattype',1);
 
 		}//}}}
Index: /issm/trunk-jpl/src/m/classes/balancethickness.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/balancethickness.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/balancethickness.m	(revision 20690)
@@ -45,13 +45,13 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'fieldname','stabilization','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer');
 
-			WriteData(fid,'object',self,'fieldname','omega','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','omega','format','DoubleMat','mattype',1);
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/balancethickness.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/balancethickness.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/balancethickness.py	(revision 20690)
@@ -48,10 +48,10 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts)
-		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/basalforcings.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/basalforcings.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/basalforcings.js	(revision 20690)
@@ -58,8 +58,8 @@
 			var yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',BasalforcingsEnum(),'data',FloatingMeltRateEnum(),'format','Integer');
-			WriteData(fid,'object',this,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',this,'fieldname','floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',this,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.basalforcings.model','data',FloatingMeltRateEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',this,'fieldname','floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',this,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/basalforcings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/basalforcings.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/basalforcings.m	(revision 20690)
@@ -64,12 +64,12 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',BasalforcingsEnum(),'data',FloatingMeltRateEnum(),'format','Integer');
-			WriteData(fid,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'fieldname','floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.basalforcings.model','data',FloatingMeltRateEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'fieldname','floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/basalforcings.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/basalforcings.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/basalforcings.py	(revision 20690)
@@ -69,11 +69,11 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'enum',BasalforcingsEnum(),'data',FloatingMeltRateEnum(),'format','Integer');
-		WriteData(fid,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'fieldname','floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'name','md.basalforcings.model','data',FloatingMeltRateEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/calving.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/calving.js	(revision 20690)
@@ -28,7 +28,7 @@
 		this.marshall=function(md,fid) { //{{{
 			var yts=365.0*24.0*3600.0;
-			WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer');
-			WriteData(fid,'object',this,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
-			WriteData(fid,'object',this,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
+			WriteData(fid,prefix,'name','md.calving.law','data',DefaultCalvingEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/calving.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/calving.m	(revision 20690)
@@ -47,9 +47,9 @@
 			fielddisplay(self,'meltingrate','melting rate at given location [m/a]');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 			yts=365.0*24.0*3600.0;
-			WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer');
-			WriteData(fid,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
-			WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
+			WriteData(fid,prefix,'name','md.calving.law','data',DefaultCalvingEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/calving.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/calving.py	(revision 20690)
@@ -50,10 +50,10 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.*24.*3600.
 
-		WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer');
-		WriteData(fid,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
-		WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
+		WriteData(fid,prefix,'name','md.calving.law','data',DefaultCalvingEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/calvingdev.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calvingdev.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/calvingdev.m	(revision 20690)
@@ -50,9 +50,9 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 			yts=365.0*24.0*3600.0;
-			WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingDevEnum(),'format','Integer');
-			WriteData(fid,'enum',CalvingdevCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1);
-			WriteData(fid,'class','calving','object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts);
+			WriteData(fid,prefix,'name','md.calving.law','data',CalvingDevEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','coeff','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/calvinglevermann.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calvinglevermann.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/calvinglevermann.m	(revision 20690)
@@ -50,9 +50,9 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 			yts=365.0*24.0*3600.0;
-			WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer');
-			WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
+			WriteData(fid,prefix,'name','md.calving.law','data',CalvingLevermannEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','coeff','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/calvinglevermann.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/calvinglevermann.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/calvinglevermann.py	(revision 20690)
@@ -49,8 +49,8 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 		yts=365.*24.*3600.
-		WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer');
-		WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
+		WriteData(fid,prefix,'name','md.calving.law','data',CalvingLevermannEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','coeff','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/constants.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/constants.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/constants.js	(revision 20690)
@@ -42,7 +42,7 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','g','format','Double');
-			WriteData(fid,'object',this,'fieldname','yts','format','Double');
-			WriteData(fid,'object',this,'fieldname','referencetemperature','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','g','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','yts','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','referencetemperature','format','Double');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/constants.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/constants.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/constants.m	(revision 20690)
@@ -52,8 +52,8 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','g','format','Double');
-			WriteData(fid,'object',self,'fieldname','yts','format','Double');
-			WriteData(fid,'object',self,'fieldname','referencetemperature','format','Double');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','g','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','yts','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','referencetemperature','format','Double');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/constants.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/constants.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/constants.py	(revision 20690)
@@ -51,7 +51,7 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','g','format','Double')
-		WriteData(fid,'object',self,'fieldname','yts','format','Double')
-		WriteData(fid,'object',self,'fieldname','referencetemperature','format','Double')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','g','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','yts','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','referencetemperature','format','Double')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/damage.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/damage.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/damage.js	(revision 20690)
@@ -70,5 +70,5 @@
 			if (this.isdamage){
 				checkfield(md,'fieldname','damage.law','numel',[1],'values',[0,1,2]);
-				checkfield(md,'fieldname','damage.D','>=',0,'<=',self.max_damage,'size',[md.mesh.numberofvertices ,1]);
+				checkfield(md,'fieldname','damage.D','>=',0,'<=',this.max_damage,'size',[md.mesh.numberofvertices ,1]);
 				checkfield(md,'fieldname','damage.spcdamage','Inf',1,'timeseries',1);
 				checkfield(md,'fieldname','damage.max_damage','<',1,'>=',0);
@@ -94,22 +94,22 @@
 		this.marshall=function(md,fid) { //{{{
 		
-			WriteData(fid,'object',this,'fieldname','isdamage','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isdamage','format','Boolean');
 			if (this.isdamage){
-				WriteData(fid,'object',this,'fieldname','law','format','Integer');
-				WriteData(fid,'object',this,'fieldname','D','format','DoubleMat','mattype',1);
-				WriteData(fid,'object',this,'fieldname','spcdamage','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',this,'fieldname','max_damage','format','Double');
+				WriteData(fid,prefix,'object',this,'fieldname','law','format','Integer');
+				WriteData(fid,prefix,'object',this,'fieldname','D','format','DoubleMat','mattype',1);
+				WriteData(fid,prefix,'object',this,'fieldname','spcdamage','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',this,'fieldname','max_damage','format','Double');
 
-				WriteData(fid,'object',this,'fieldname','stabilization','format','Integer');
-				WriteData(fid,'object',this,'fieldname','maxiter','format','Integer');
-				WriteData(fid,'enum',DamageElementinterpEnum(),'data',StringToEnum(this.elementinterp),'format','Integer');
-				WriteData(fid,'object',this,'fieldname','stress_threshold','format','Double');
-				WriteData(fid,'object',this,'fieldname','kappa','format','Double');
-				WriteData(fid,'object',this,'fieldname','c1','format','Double');
-				WriteData(fid,'object',this,'fieldname','c2','format','Double');
-				WriteData(fid,'object',this,'fieldname','c3','format','Double');
-				WriteData(fid,'object',this,'fieldname','c4','format','Double');
-				WriteData(fid,'object',this,'fieldname','healing','format','Double');
-				WriteData(fid,'object',this,'fieldname','equiv_stress','format','Integer');
+				WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+				WriteData(fid,prefix,'object',this,'fieldname','maxiter','format','Integer');
+				WriteData(fid,prefix,'name','md.damage.elementinterp','data',StringToEnum(this.elementinterp),'format','Integer');
+				WriteData(fid,prefix,'object',this,'fieldname','stress_threshold','format','Double');
+				WriteData(fid,prefix,'object',this,'fieldname','kappa','format','Double');
+				WriteData(fid,prefix,'object',this,'fieldname','c1','format','Double');
+				WriteData(fid,prefix,'object',this,'fieldname','c2','format','Double');
+				WriteData(fid,prefix,'object',this,'fieldname','c3','format','Double');
+				WriteData(fid,prefix,'object',this,'fieldname','c4','format','Double');
+				WriteData(fid,prefix,'object',this,'fieldname','healing','format','Double');
+				WriteData(fid,prefix,'object',this,'fieldname','equiv_stress','format','Integer');
 			}
 
@@ -123,5 +123,5 @@
 			}
 			if (this.isdamage){
-				WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum(),'format','StringArray');
+				WriteData(fid,prefix,'data',outputs,'name','md.damage.requested_outputs','format','StringArray');
 			}
 
Index: /issm/trunk-jpl/src/m/classes/damage.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/damage.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/damage.m	(revision 20690)
@@ -143,24 +143,24 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 		
-			WriteData(fid,'object',self,'fieldname','isdamage','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isdamage','format','Boolean');
 			if self.isdamage,
-				WriteData(fid,'object',self,'fieldname','law','format','Integer');
-				WriteData(fid,'object',self,'fieldname','D','format','DoubleMat','mattype',1);
-				WriteData(fid,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-				WriteData(fid,'object',self,'fieldname','max_damage','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','law','format','Integer');
+				WriteData(fid,prefix,'object',self,'fieldname','D','format','DoubleMat','mattype',1);
+				WriteData(fid,prefix,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'object',self,'fieldname','max_damage','format','Double');
 
-				WriteData(fid,'object',self,'fieldname','stabilization','format','Integer');
-				WriteData(fid,'object',self,'fieldname','maxiter','format','Integer');
-				WriteData(fid,'enum',DamageElementinterpEnum(),'data',StringToEnum(self.elementinterp),'format','Integer');
-				WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double');
-				WriteData(fid,'object',self,'fieldname','kappa','format','Double');
-				WriteData(fid,'object',self,'fieldname','c1','format','Double');
-				WriteData(fid,'object',self,'fieldname','c2','format','Double');
-				WriteData(fid,'object',self,'fieldname','c3','format','Double');
-				WriteData(fid,'object',self,'fieldname','c4','format','Double');
-				WriteData(fid,'object',self,'fieldname','healing','format','Double');
-				WriteData(fid,'object',self,'fieldname','equiv_stress','format','Integer');
+				WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer');
+				WriteData(fid,prefix,'object',self,'fieldname','maxiter','format','Integer');
+				WriteData(fid,prefix,'name','md.damage.elementinterp','data',StringToEnum(self.elementinterp),'format','Integer');
+				WriteData(fid,prefix,'object',self,'fieldname','stress_threshold','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','kappa','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','c1','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','c2','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','c3','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','c4','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','healing','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','equiv_stress','format','Integer');
 			end
 
@@ -173,5 +173,5 @@
 			end
 			if self.isdamage,
-				WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum,'format','StringArray');
+				WriteData(fid,prefix,'data',outputs,'name','md.damage.requested_outputs','format','StringArray');
 			end
 
Index: /issm/trunk-jpl/src/m/classes/damage.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/damage.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/damage.py	(revision 20690)
@@ -145,23 +145,23 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
-		WriteData(fid,'object',self,'fieldname','isdamage','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isdamage','format','Boolean')
 		if self.isdamage:
-			WriteData(fid,'object',self,'fieldname','D','format','DoubleMat','mattype',1)
-			WriteData(fid,'object',self,'fieldname','law','format','Integer')
-			WriteData(fid,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'fieldname','max_damage','format','Double')
-			WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
-			WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
-			WriteData(fid,'enum',DamageElementinterpEnum(),'data',StringToEnum(self.elementinterp)[0],'format','Integer')
-			WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double')
-			WriteData(fid,'object',self,'fieldname','kappa','format','Double')
-			WriteData(fid,'object',self,'fieldname','c1','format','Double')
-			WriteData(fid,'object',self,'fieldname','c2','format','Double')
-			WriteData(fid,'object',self,'fieldname','c3','format','Double')
-			WriteData(fid,'object',self,'fieldname','c4','format','Double')
-			WriteData(fid,'object',self,'fieldname','healing','format','Double')
-			WriteData(fid,'object',self,'fieldname','equiv_stress','format','Integer')
+			WriteData(fid,prefix,'object',self,'fieldname','D','format','DoubleMat','mattype',1)
+			WriteData(fid,prefix,'object',self,'fieldname','law','format','Integer')
+			WriteData(fid,prefix,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'fieldname','max_damage','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer')
+			WriteData(fid,prefix,'object',self,'fieldname','maxiter','format','Integer')
+			WriteData(fid,prefix,'name','md.damage.elementinterp','data',StringToEnum(self.elementinterp)[0],'format','Integer')
+			WriteData(fid,prefix,'object',self,'fieldname','stress_threshold','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','kappa','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','c1','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','c2','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','c3','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','c4','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','healing','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','equiv_stress','format','Integer')
 			
 		#process requested outputs
@@ -171,4 +171,4 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.damage.requested_outputs','format','StringArray')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/debug.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/debug.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/debug.js	(revision 20690)
@@ -21,5 +21,5 @@
 	}// }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','profiling','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','profiling','format','Boolean');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/debug.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/debug.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/debug.m	(revision 20690)
@@ -30,6 +30,6 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','profiling','format','Boolean');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','profiling','format','Boolean');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/debug.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/debug.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/debug.py	(revision 20690)
@@ -30,5 +30,5 @@
 		return self
 	#}}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','profiling','format','Boolean')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','profiling','format','Boolean')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/flowequation.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/flowequation.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/flowequation.js	(revision 20690)
@@ -91,20 +91,21 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','isSIA','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isSSA','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isL1L2','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isHO','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isFS','format','Boolean');
-			WriteData(fid,'enum',FlowequationFeSSAEnum(),'data',StringToEnum(this.fe_SSA),'format','Integer');
-			WriteData(fid,'enum',FlowequationFeHOEnum() ,'data',StringToEnum(this.fe_HO) ,'format','Integer');
-			WriteData(fid,'enum',FlowequationFeFSEnum() ,'data',StringToEnum(this.fe_FS) ,'format','Integer');
-			WriteData(fid,'enum',AugmentedLagrangianREnum(),'data',this.augmented_lagrangian_r ,'format','Double');
-			WriteData(fid,'enum',AugmentedLagrangianRhopEnum(),'data',this.augmented_lagrangian_rhop ,'format','Double');
-			WriteData(fid,'enum',AugmentedLagrangianRlambdaEnum(),'data',this.augmented_lagrangian_rlambda ,'format','Double');
-			WriteData(fid,'enum',AugmentedLagrangianRholambdaEnum(),'data',this.augmented_lagrangian_rholambda ,'format','Double');
-			WriteData(fid,'enum',AugmentedLagrangianThetaEnum() ,'data',this.XTH_theta ,'format','Double');
-			WriteData(fid,'object',this,'fieldname','borderSSA','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'fieldname','borderHO','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'fieldname','borderFS','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','isSIA','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isSSA','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isL1L2','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isHO','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isFS','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','fe_SSA','data',StringToEnum(this.fe_SSA),'format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','fe_HO','data',StringToEnum(this.fe_HO) ,'format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','fe_FS','data',StringToEnum(this.fe_FS) ,'format','Integer');
+
+			WriteData(fid,prefix,'object',this,'fieldname','augmented_lagrangian_r','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','augmented_lagrangian_rhop','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','augmented_lagrangian_rlambda','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','augmented_lagrangian_rholambda','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','XTH_theta','data',this.XTH_theta ,'format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','borderSSA','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','borderHO','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','borderFS','format','DoubleMat','mattype',1);
 
 			//convert approximations to enums
@@ -133,5 +134,5 @@
 				if(data[i]==8) data[i]=ssafsap;
 			}
-			WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'data',data,'name','md.flowequation.vertex_equation','format','DoubleMat','mattype',1);
 
 			data=this.element_equation;
@@ -147,5 +148,5 @@
 				if(data[i]==8) data[i]=hofsaap;
 			}
-			WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'data',data,'name','md.flowequation.element_equation','format','DoubleMat','mattype',2);
 
 		}//}}}
Index: /issm/trunk-jpl/src/m/classes/flowequation.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/flowequation.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/flowequation.m	(revision 20690)
@@ -154,21 +154,21 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','isSIA','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isSSA','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isL1L2','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isHO','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isFS','format','Boolean');
-			WriteData(fid,'enum',FlowequationFeSSAEnum(),'data',StringToEnum(self.fe_SSA),'format','Integer');
-			WriteData(fid,'enum',FlowequationFeHOEnum() ,'data',StringToEnum(self.fe_HO) ,'format','Integer');
-			WriteData(fid,'enum',FlowequationFeFSEnum() ,'data',StringToEnum(self.fe_FS) ,'format','Integer');
-			WriteData(fid,'enum',AugmentedLagrangianREnum(),'data',self.augmented_lagrangian_r ,'format','Double');
-			WriteData(fid,'enum',AugmentedLagrangianRhopEnum(),'data',self.augmented_lagrangian_rhop ,'format','Double');
-			WriteData(fid,'enum',AugmentedLagrangianRlambdaEnum(),'data',self.augmented_lagrangian_rlambda ,'format','Double');
-			WriteData(fid,'enum',AugmentedLagrangianRholambdaEnum(),'data',self.augmented_lagrangian_rholambda ,'format','Double');
-			WriteData(fid,'enum',AugmentedLagrangianThetaEnum() ,'data',self.XTH_theta ,'format','Double');
-			WriteData(fid,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','borderFS','format','DoubleMat','mattype',1);
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','isSIA','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isSSA','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isL1L2','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isHO','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isFS','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','fe_SSA','data',StringToEnum(self.fe_SSA),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','fe_HO' ,'data',StringToEnum(self.fe_HO) ,'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','fe_FS' ,'data',StringToEnum(self.fe_FS) ,'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','augmented_lagrangian_r','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','augmented_lagrangian_rhop','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','augmented_lagrangian_rlambda','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','augmented_lagrangian_rholambda','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','XTH_theta','data',self.XTH_theta ,'format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','borderFS','format','DoubleMat','mattype',1);
 			%convert approximations to enums
 			data=self.vertex_equation;
@@ -183,5 +183,5 @@
 			pos=find(data==7); data(pos,end)=HOFSApproximationEnum();
 			pos=find(data==8); data(pos,end)=SSAFSApproximationEnum();
-			WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'data',data,'name','md.flowequation.vertex_equation','format','DoubleMat','mattype',1);
 			data=self.element_equation;
 			pos=find(data==0); data(pos,end)=NoneApproximationEnum();
@@ -195,5 +195,5 @@
 			pos=find(data==7); data(pos,end)=SSAFSApproximationEnum();
 			pos=find(data==8); data(pos,end)=HOFSApproximationEnum();
-			WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'data',data,'name','md.flowequation.element_equation','format','DoubleMat','mattype',2);
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/flowequation.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/flowequation.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/flowequation.py	(revision 20690)
@@ -120,21 +120,21 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','isSIA','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isSSA','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isL1L2','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isHO','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isFS','format','Boolean')
-		WriteData(fid,'enum',FlowequationFeSSAEnum(),'data',StringToEnum(self.fe_SSA)[0],'format','Integer')
-		WriteData(fid,'enum',FlowequationFeHOEnum() ,'data',StringToEnum(self.fe_HO)[0] ,'format','Integer')
-		WriteData(fid,'enum',FlowequationFeFSEnum() ,'data',StringToEnum(self.fe_FS)[0] ,'format','Integer')
-		WriteData(fid,'enum',AugmentedLagrangianREnum(),'data',self.augmented_lagrangian_r ,'format','Double')
-		WriteData(fid,'enum',AugmentedLagrangianRhopEnum(),'data',self.augmented_lagrangian_rhop ,'format','Double')
-		WriteData(fid,'enum',AugmentedLagrangianRlambdaEnum(),'data',self.augmented_lagrangian_rlambda ,'format','Double')
-		WriteData(fid,'enum',AugmentedLagrangianRholambdaEnum(),'data',self.augmented_lagrangian_rholambda ,'format','Double')
-		WriteData(fid,'enum',AugmentedLagrangianThetaEnum() ,'data',self.XTH_theta ,'format','Double')
-		WriteData(fid,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','borderFS','format','DoubleMat','mattype',1)
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','isSIA','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isSSA','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isL1L2','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isHO','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isFS','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','fe_SSA','data',StringToEnum(self.fe_SSA)[0],'format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','fe_HO','data',StringToEnum(self.fe_HO)[0] ,'format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','fe_FS','data',StringToEnum(self.fe_FS)[0] ,'format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','augmented_lagrangian_r','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','augmented_lagrangian_rhop','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','augmented_lagrangian_rlambda','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','augmented_lagrangian_rholambda','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','XTH_theta','data',self.XTH_theta ,'format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','borderFS','format','DoubleMat','mattype',1)
 		#convert approximations to enums
 		data=copy.deepcopy(self.vertex_equation); 
@@ -150,5 +150,5 @@
 			data[numpy.nonzero(data==7)]=HOFSApproximationEnum()
 			data[numpy.nonzero(data==8)]=SSAFSApproximationEnum()
-		WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'data',data,'name','md.flowequation.vertex_equation','format','DoubleMat','mattype',1)
 		data=copy.deepcopy(self.element_equation)
 		if isinstance(data, (list, tuple, numpy.ndarray)):
@@ -162,4 +162,4 @@
 			data[numpy.nonzero(data==7)]=SSAFSApproximationEnum()
 			data[numpy.nonzero(data==8)]=HOFSApproximationEnum()
-		WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'data',data,'name','md.flowequation.element_equation','format','DoubleMat','mattype',2)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/friction.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/friction.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/friction.js	(revision 20690)
@@ -32,9 +32,9 @@
 			var yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',FrictionLawEnum(),'data',1,'format','Integer');
-			WriteData(fid,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			//WriteData(fid,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'fieldname','p','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',this,'fieldname','q','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'name','md.friction.law','data',1,'format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			//WriteData(fid,prefix,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','p','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',this,'fieldname','q','format','DoubleMat','mattype',2);
 			
 
Index: /issm/trunk-jpl/src/m/classes/friction.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/friction.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/friction.m	(revision 20690)
@@ -43,12 +43,11 @@
 			fielddisplay(self,'q','q exponent');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',FrictionLawEnum,'data',1,'format','Integer');
-			WriteData(fid,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			%WriteData(fid,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','p','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'fieldname','q','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'name','md.friction.law','data',1,'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','p','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2);
 			
 
Index: /issm/trunk-jpl/src/m/classes/friction.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/friction.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/friction.py	(revision 20690)
@@ -51,8 +51,8 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'enum',FrictionLawEnum(),'data',1,'format','Integer')
-		WriteData(fid,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','p','format','DoubleMat','mattype',2)
-		WriteData(fid,'object',self,'fieldname','q','format','DoubleMat','mattype',2)
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'name','md.friction.law','data',1,'format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','p','format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/frictioncoulomb.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictioncoulomb.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/frictioncoulomb.m	(revision 20690)
@@ -45,11 +45,11 @@
 			fielddisplay(self,'q','q exponent');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
-			WriteData(fid,'enum',FrictionLawEnum,'data',7,'format','Integer');
-			WriteData(fid,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'enum',FrictionCoefficientEnum());
-			WriteData(fid,'object',self,'fieldname','coefficientcoulomb','format','DoubleMat','mattype',1,'enum',FrictionCoefficientcoulombEnum());
-			WriteData(fid,'object',self,'fieldname','p','format','DoubleMat','mattype',2,'enum',FrictionPEnum());
-			WriteData(fid,'object',self,'fieldname','q','format','DoubleMat','mattype',2,'enum',FrictionQEnum());
+			WriteData(fid,prefix,'name','md.friction.law','data',7,'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','coefficientcoulomb','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','p','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2);
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/frictioncoulomb.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictioncoulomb.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/frictioncoulomb.py	(revision 20690)
@@ -55,9 +55,9 @@
 	return md
     # }}}
-    def marshall(self,md,fid):    # {{{
-	WriteData(fid,'enum',FrictionLawEnum(),'data',1,'format','Integer')
-	WriteData(fid,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'enum',FrictionCoefficientEnum())
-	WriteData(fid,'object',self,'fieldname','coefficientcoulomb','format','DoubleMat','mattype',1,'enum',FrictionCoefficientcoulombEnum())
-	WriteData(fid,'object',self,'fieldname','p','format','DoubleMat','mattype',2,'enum',FrictionPEnum())
-	WriteData(fid,'object',self,'fieldname','q','format','DoubleMat','mattype',2,'enum',FrictionQEnum())
+    def marshall(self,prefix,md,fid):    # {{{
+	WriteData(fid,prefix,'name','md.friction.law','data',1,'format','Integer')
+	WriteData(fid,prefix,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+	WriteData(fid,prefix,'object',self,'fieldname','coefficientcoulomb','format','DoubleMat','mattype',1)
+	WriteData(fid,prefix,'object',self,'fieldname','p','format','DoubleMat','mattype',2)
+	WriteData(fid,prefix,'object',self,'fieldname','q','format','DoubleMat','mattype',2)
     # }}}
Index: /issm/trunk-jpl/src/m/classes/frictionhydro.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictionhydro.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/frictionhydro.m	(revision 20690)
@@ -52,12 +52,12 @@
 			fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'enum',FrictionLawEnum,'data',3,'format','Integer');
-			WriteData(fid,'class','friction','object',self,'fieldname','Coupling','format','Integer');
-			WriteData(fid,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
-			WriteData(fid,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',2);
-			WriteData(fid,'class','friction','object',self,'fieldname','As','format','DoubleMat','mattype',2);
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.friction.law','data',3,'format','Integer');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','Coupling','format','Integer');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','As','format','DoubleMat','mattype',2);
 			if self.Coupling==0,
-				WriteData(fid,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+				WriteData(fid,prefix,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 			end
 	  end % }}}
Index: /issm/trunk-jpl/src/m/classes/frictionsommers.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictionsommers.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/frictionsommers.m	(revision 20690)
@@ -35,9 +35,9 @@
 			fielddisplay(self,'coefficient','friction coefficient [SI]');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',FrictionLawEnum,'data',8,'format','Integer');
-			WriteData(fid,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.friction.law','data',8,'format','Integer');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/frictiontemp.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictiontemp.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/frictiontemp.m	(revision 20690)
@@ -54,11 +54,11 @@
 			fielddisplay(self,'q','q exponent');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
-			WriteData(fid,'enum',FrictionLawEnum,'data',4,'format','Integer');
-			WriteData(fid,'class','friction','object',self,'fieldname','gamma','format','Double');
-			WriteData(fid,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'class','friction','object',self,'fieldname','p','format','DoubleMat','mattype',2);
-			WriteData(fid,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'name','md.friction.law','data',4,'format','Integer');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','gamma','format','Double');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','p','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/frictionwaterlayer.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictionwaterlayer.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/frictionwaterlayer.m	(revision 20690)
@@ -52,12 +52,12 @@
 			fielddisplay(self,'water_layer','water thickness at the base of the ice (m)');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
-			WriteData(fid,'enum',FrictionLawEnum,'data',5,'format','Integer');
-			WriteData(fid,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'class','friction','object',self,'fieldname','f','format','Double');
-			WriteData(fid,'class','friction','object',self,'fieldname','p','format','DoubleMat','mattype',2);
-			WriteData(fid,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
-			WriteData(fid,'class','friction','object',self,'fieldname','water_layer','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'name','md.friction.law','data',5,'format','Integer');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','f','format','Double');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','p','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','water_layer','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/frictionweertman.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictionweertman.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/frictionweertman.m	(revision 20690)
@@ -42,10 +42,10 @@
 			fielddisplay(self,'m','m exponent');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',FrictionLawEnum,'data',2,'format','Integer');
-			WriteData(fid,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'name','md.friction.law','data',2,'format','Integer');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2);
 			
 
Index: /issm/trunk-jpl/src/m/classes/frictionweertman.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictionweertman.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/frictionweertman.py	(revision 20690)
@@ -42,7 +42,7 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'enum',FrictionLawEnum(),'data',2,'format','Integer')
-		WriteData(fid,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',1)
-		WriteData(fid,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2)
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'name','md.friction.law','data',2,'format','Integer')
+		WriteData(fid,prefix,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/frictionweertmantemp.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/frictionweertmantemp.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/frictionweertmantemp.m	(revision 20690)
@@ -37,11 +37,11 @@
 			fielddisplay(self,'m','m exponent');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',FrictionLawEnum,'data',6,'format','Integer');
-			WriteData(fid,'class','friction','object',self,'fieldname','gamma','format','Double');
-			WriteData(fid,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'name','md.friction.law','data',6,'format','Integer');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','gamma','format','Double');
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2);
 			
 
Index: /issm/trunk-jpl/src/m/classes/geometry.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/geometry.js	(revision 20690)
@@ -40,9 +40,9 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'data',this.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum());
-			WriteData(fid,'data',this.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum(),'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'data',this.base,'format','DoubleMat','mattype',1,'enum',BaseEnum());
-			WriteData(fid,'data',this.bed,'format','DoubleMat','mattype',1,'enum',BedEnum());
-			WriteData(fid,'object',this,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','surface','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','thickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',this,'fieldname','base','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','bed','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1);
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/geometry.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/geometry.m	(revision 20690)
@@ -76,10 +76,10 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'data',self.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum());
-			WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum(),'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'data',self.base,'format','DoubleMat','mattype',1,'enum',BaseEnum());
-			WriteData(fid,'data',self.bed,'format','DoubleMat','mattype',1,'enum',BedEnum());
-			WriteData(fid,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1);
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','surface','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','thickness','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','base','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','bed','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1);
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/geometry.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/geometry.py	(revision 20690)
@@ -59,9 +59,9 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'data',self.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum())
-		WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum(),'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'data',self.base,'format','DoubleMat','mattype',1,'enum',BaseEnum())
-		WriteData(fid,'data',self.bed,'format','DoubleMat','mattype',1,'enum',BedEnum())
-		WriteData(fid,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1)
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','surface','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','thickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','base','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','bed','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/gia.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/gia.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/gia.js	(revision 20690)
@@ -45,7 +45,7 @@
 	} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',Math.pow(10,3)); //from km to m
-			WriteData(fid,'object',this,'fieldname','cross_section_shape','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',Math.pow(10,3)); //from km to m
+			WriteData(fid,prefix,'object',this,'fieldname','cross_section_shape','format','Integer');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/gia.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/gia.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/gia.m	(revision 20690)
@@ -57,8 +57,8 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',10^3); %from km to m
-			WriteData(fid,'object',self,'fieldname','cross_section_shape','format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',10^3); %from km to m
+			WriteData(fid,prefix,'object',self,'fieldname','cross_section_shape','format','Integer');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/gia.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/gia.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/gia.py	(revision 20690)
@@ -57,8 +57,8 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
-		WriteData(fid,'object',self,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);
-		WriteData(fid,'object',self,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',10.**3.);
-		WriteData(fid,'object',self,'fieldname','cross_section_shape','format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'object',self,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',10.**3.);
+		WriteData(fid,prefix,'object',self,'fieldname','cross_section_shape','format','Integer');
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/groundingline.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/groundingline.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/groundingline.js	(revision 20690)
@@ -41,5 +41,5 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'data',StringToEnum(this.migration),'enum',GroundinglineMigrationEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',StringToEnum(this.migration),'name','md.groundingline.migration','format','Integer');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/groundingline.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/groundingline.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/groundingline.m	(revision 20690)
@@ -47,6 +47,6 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'data',StringToEnum(self.migration),'enum',GroundinglineMigrationEnum(),'format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'data',StringToEnum(self.migration),'name','md.groundingline.migration','format','Integer');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/groundingline.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/groundingline.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/groundingline.py	(revision 20690)
@@ -50,5 +50,5 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'data',StringToEnum(self.migration)[0],'enum',GroundinglineMigrationEnum(),'format','Integer')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'data',StringToEnum(self.migration)[0],'name','md.groundingline.migration','format','Integer')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/hydrologydc.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologydc.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/hydrologydc.m	(revision 20690)
@@ -187,40 +187,40 @@
 		end 
 		% }}}
-		% {{{ function marshall(self,md,fid) 
-		function marshall(self,md,fid) 
-			WriteData(fid,'enum',HydrologyModelEnum(),'data',HydrologydcEnum(),'format','Integer');
-			WriteData(fid,'object',self,'fieldname','water_compressibility','format','Double');
-			WriteData(fid,'object',self,'fieldname','isefficientlayer','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double');
-			WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer');
-			WriteData(fid,'object',self,'fieldname','rel_tol','format','Double');
-			WriteData(fid,'object',self,'fieldname','max_iter','format','Integer');
-			WriteData(fid,'object',self,'fieldname','sedimentlimit_flag','format','Integer');
-			WriteData(fid,'object',self,'fieldname','transfer_flag','format','Integer');
+		% {{{ function marshall(self,prefix,md,fid) 
+		function marshall(self,prefix,md,fid) 
+			WriteData(fid,prefix,'name','md.hydrology.model','data',HydrologydcEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','water_compressibility','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','isefficientlayer','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','rel_tol','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer');
 			if self.sedimentlimit_flag==1,
-				WriteData(fid,'object',self,'fieldname','sedimentlimit','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit','format','Double');
 			end
 			if self.transfer_flag==1,
-				WriteData(fid,'object',self,'fieldname','leakage_factor','format','Double');
-			end
-			WriteData(fid,'object',self,'fieldname','basal_moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-
-			WriteData(fid,'object',self,'fieldname','spcsediment_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'fieldname','sediment_compressibility','format','Double');			
-			WriteData(fid,'object',self,'fieldname','sediment_porosity','format','Double');			
-			WriteData(fid,'object',self,'fieldname','sediment_thickness','format','Double');
-			WriteData(fid,'object',self,'fieldname','sediment_transmitivity','format','DoubleMat','mattype',1');		
+				WriteData(fid,prefix,'object',self,'fieldname','leakage_factor','format','Double');
+			end
+			WriteData(fid,prefix,'object',self,'fieldname','basal_moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+
+			WriteData(fid,prefix,'object',self,'fieldname','spcsediment_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','sediment_compressibility','format','Double');			
+			WriteData(fid,prefix,'object',self,'fieldname','sediment_porosity','format','Double');			
+			WriteData(fid,prefix,'object',self,'fieldname','sediment_thickness','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','sediment_transmitivity','format','DoubleMat','mattype',1');		
 
 			if self.isefficientlayer==1,	
-				WriteData(fid,'object',self,'fieldname','spcepl_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);	
-				WriteData(fid,'object',self,'fieldname','mask_eplactive_node','format','DoubleMat','mattype',1);
-				WriteData(fid,'object',self,'fieldname','epl_compressibility','format','Double');			
-				WriteData(fid,'object',self,'fieldname','epl_porosity','format','Double');			
-				WriteData(fid,'object',self,'fieldname','epl_initial_thickness','format','Double');
-				WriteData(fid,'object',self,'fieldname','epl_colapse_thickness','format','Double');
-				WriteData(fid,'object',self,'fieldname','epl_thick_comp','format','Integer');
-				WriteData(fid,'object',self,'fieldname','epl_max_thickness','format','Double');
-				WriteData(fid,'object',self,'fieldname','epl_conductivity','format','Double');
-				WriteData(fid,'object',self,'fieldname','eplflip_lock','format','Integer');
+				WriteData(fid,prefix,'object',self,'fieldname','spcepl_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);	
+				WriteData(fid,prefix,'object',self,'fieldname','mask_eplactive_node','format','DoubleMat','mattype',1);
+				WriteData(fid,prefix,'object',self,'fieldname','epl_compressibility','format','Double');			
+				WriteData(fid,prefix,'object',self,'fieldname','epl_porosity','format','Double');			
+				WriteData(fid,prefix,'object',self,'fieldname','epl_initial_thickness','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','epl_colapse_thickness','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','epl_thick_comp','format','Integer');
+				WriteData(fid,prefix,'object',self,'fieldname','epl_max_thickness','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','epl_conductivity','format','Double');
+				WriteData(fid,prefix,'object',self,'fieldname','eplflip_lock','format','Integer');
 			end
 		end 
Index: /issm/trunk-jpl/src/m/classes/hydrologydc.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologydc.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/hydrologydc.py	(revision 20690)
@@ -183,37 +183,37 @@
 			md = checkfield(md,'fieldname','hydrology.epl_conductivity','numel',[1],'>',0.)
 	# }}}
-	def marshall(self,md,fid): #{{{ 
-		WriteData(fid,'enum',HydrologyModelEnum(),'data',HydrologydcEnum(),'format','Integer')
-		WriteData(fid,'object',self,'fieldname','water_compressibility','format','Double')
-		WriteData(fid,'object',self,'fieldname','isefficientlayer','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
-		WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer')
-		WriteData(fid,'object',self,'fieldname','rel_tol','format','Double')
-		WriteData(fid,'object',self,'fieldname','max_iter','format','Integer')
-		WriteData(fid,'object',self,'fieldname','sedimentlimit_flag','format','Integer')
-		WriteData(fid,'object',self,'fieldname','transfer_flag','format','Integer')
+	def marshall(self,prefix,md,fid): #{{{ 
+		WriteData(fid,prefix,'name','md.hydrology.model','data',HydrologydcEnum(),'format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','water_compressibility','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','isefficientlayer','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','rel_tol','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer')
 		if self.sedimentlimit_flag==1:
-			WriteData(fid,'object',self,'fieldname','sedimentlimit','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit','format','Double')
 
 		if self.transfer_flag==1:
-			WriteData(fid,'object',self,'fieldname','leakage_factor','format','Double')
-
-		WriteData(fid,'object',self,'fieldname','basal_moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'fieldname','spcsediment_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'fieldname','sediment_compressibility','format','Double')
-		WriteData(fid,'object',self,'fieldname','sediment_porosity','format','Double')			
-		WriteData(fid,'object',self,'fieldname','sediment_thickness','format','Double')
-		WriteData(fid,'object',self,'fieldname','sediment_transmitivity','format','DoubleMat','mattype',1)		
+			WriteData(fid,prefix,'object',self,'fieldname','leakage_factor','format','Double')
+
+		WriteData(fid,prefix,'object',self,'fieldname','basal_moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','spcsediment_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','sediment_compressibility','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','sediment_porosity','format','Double')			
+		WriteData(fid,prefix,'object',self,'fieldname','sediment_thickness','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','sediment_transmitivity','format','DoubleMat','mattype',1)		
 
 		if self.isefficientlayer==1:	
-			WriteData(fid,'object',self,'fieldname','spcepl_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)	
-			WriteData(fid,'object',self,'fieldname','mask_eplactive_node','format','DoubleMat','mattype',1)
-			WriteData(fid,'object',self,'fieldname','epl_compressibility','format','Double')			
-			WriteData(fid,'object',self,'fieldname','epl_porosity','format','Double')			
-			WriteData(fid,'object',self,'fieldname','epl_max_thickness','format','Double')
-			WriteData(fid,'object',self,'fieldname','epl_initial_thickness','format','Double')			
-			WriteData(fid,'object',self,'fieldname','epl_colapse_thickness','format','Double')
-			WriteData(fid,'object',self,'fieldname','epl_thick_comp','format','Integer')			
-			WriteData(fid,'object',self,'fieldname','epl_conductivity','format','Double')
-			WriteData(fid,'object',self,'fieldname','eplflip_lock','format','Integer')
-	# }}}
+			WriteData(fid,prefix,'object',self,'fieldname','spcepl_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)	
+			WriteData(fid,prefix,'object',self,'fieldname','mask_eplactive_node','format','DoubleMat','mattype',1)
+			WriteData(fid,prefix,'object',self,'fieldname','epl_compressibility','format','Double')			
+			WriteData(fid,prefix,'object',self,'fieldname','epl_porosity','format','Double')			
+			WriteData(fid,prefix,'object',self,'fieldname','epl_max_thickness','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','epl_initial_thickness','format','Double')			
+			WriteData(fid,prefix,'object',self,'fieldname','epl_colapse_thickness','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','epl_thick_comp','format','Integer')			
+			WriteData(fid,prefix,'object',self,'fieldname','epl_conductivity','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','eplflip_lock','format','Integer')
+	# }}}
Index: /issm/trunk-jpl/src/m/classes/hydrologyshreve.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologyshreve.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/hydrologyshreve.js	(revision 20690)
@@ -9,5 +9,5 @@
 
 		//Type of stabilization to use 0:nothing 1:artificial_diffusivity
-		self.stabilization=1;
+		this.stabilization=1;
 
 	}// }}}
@@ -37,7 +37,7 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'enum',HydrologyModelEnum(),'data',HydrologyshreveEnum(),'format','Integer');
-			WriteData(fid,'object',this,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',this,'fieldname','stabilization','format','Double');
+			WriteData(fid,prefix,'name','md.hydrology.model','data',HydrologyshreveEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Double');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/hydrologyshreve.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologyshreve.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/hydrologyshreve.m	(revision 20690)
@@ -43,8 +43,8 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'enum',HydrologyModelEnum(),'data',HydrologyshreveEnum(),'format','Integer');
-			WriteData(fid,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'fieldname','stabilization','format','Double');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.hydrology.model','data',HydrologyshreveEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Double');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/hydrologyshreve.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologyshreve.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/hydrologyshreve.py	(revision 20690)
@@ -48,7 +48,7 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'enum',HydrologyModelEnum(),'data',HydrologyshreveEnum(),'format','Integer');
-		WriteData(fid,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'fieldname','stabilization','format','Double')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'name','md.hydrology.model','data',HydrologyshreveEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Double')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/hydrologysommers.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologysommers.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/hydrologysommers.m	(revision 20690)
@@ -60,18 +60,18 @@
 			fielddisplay(self,'spchead','water head constraints (NaN means no constraint) (m)');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',HydrologyModelEnum(),'data',HydrologysommersEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','hydrology','fieldname','head','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','hydrology','fieldname','gap_height','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','hydrology','fieldname','bump_spacing','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','hydrology','fieldname','bump_height','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','hydrology','fieldname','englacial_input','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','hydrology','fieldname','moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','hydrology','fieldname','reynolds','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','hydrology','fieldname','neumannflux','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
-			WriteData(fid,'object',self,'class','hydrology','fieldname','spchead','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'name','md.hydrology.model','data',HydrologysommersEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','head','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','gap_height','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','bump_spacing','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','bump_height','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','englacial_input','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','reynolds','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','neumannflux','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1);
+			WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','spchead','format','DoubleMat','mattype',1);
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/initialization.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/initialization.js	(revision 20690)
@@ -85,14 +85,14 @@
 			var yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'data',this.vx,'format','DoubleMat','mattype',1,'enum',VxEnum(),'scale',1./yts);
-			WriteData(fid,'data',this.vy,'format','DoubleMat','mattype',1,'enum',VyEnum(),'scale',1./yts);
-			WriteData(fid,'data',this.vz,'format','DoubleMat','mattype',1,'enum',VzEnum(),'scale',1./yts);
-			WriteData(fid,'data',this.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum());
-			WriteData(fid,'data',this.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum());
-			WriteData(fid,'data',this.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum());
-			WriteData(fid,'data',this.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum());
-			WriteData(fid,'data',this.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum());
-			WriteData(fid,'data',this.epl_thickness,'format','DoubleMat','mattype',1,'enum',HydrologydcEplThicknessEnum());
-			WriteData(fid,'data',this.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum());
+			WriteData(fid,prefix,'object',this,'fieldname','vx','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','vy','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','vz','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','pressure','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','temperature','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','waterfraction','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','sediment_head','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','epl_head','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','epl_thickness','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','watercolumn','format','DoubleMat','mattype',1);
 
 			if (md.thermal.isenthalpy){
@@ -105,5 +105,5 @@
 					enthalpy[i] = md.materials.heatcapacity*(tpmp[i] - md.constants.referencetemperature) + md.materials.latentheat*md.initialization.waterfraction[i];
 				}
-				WriteData(fid,'data',enthalpy,'format','DoubleMat','mattype',1,'enum',EnthalpyEnum());
+				WriteData(fid,prefix,'data',enthalpy,'format','DoubleMat','mattype',1,'name','md.initialization.enthalpy');
 			}
 		}//}}}
Index: /issm/trunk-jpl/src/m/classes/initialization.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/initialization.m	(revision 20690)
@@ -112,18 +112,18 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'data',self.vx,'format','DoubleMat','mattype',1,'enum',VxEnum,'scale',1./yts);
-			WriteData(fid,'data',self.vy,'format','DoubleMat','mattype',1,'enum',VyEnum,'scale',1./yts);
-			WriteData(fid,'data',self.vz,'format','DoubleMat','mattype',1,'enum',VzEnum,'scale',1./yts);
-			WriteData(fid,'data',self.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum);
-			WriteData(fid,'data',self.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum);
-			WriteData(fid,'data',self.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum);
-			WriteData(fid,'data',self.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum);
-			WriteData(fid,'data',self.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum);
-			WriteData(fid,'data',self.epl_thickness,'format','DoubleMat','mattype',1,'enum',HydrologydcEplThicknessEnum);
-			WriteData(fid,'data',self.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum);
+			WriteData(fid,prefix,'object',self,'fieldname','vx','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'fieldname','vy','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'fieldname','vz','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'fieldname','pressure','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','temperature','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','waterfraction','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','sediment_head','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','epl_head','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','epl_thickness','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','watercolumn','format','DoubleMat','mattype',1);
 
 			if md.thermal.isenthalpy,
@@ -132,5 +132,5 @@
 				enthalpy      = md.materials.heatcapacity*(md.initialization.temperature-md.constants.referencetemperature);
 				enthalpy(pos) = md.materials.heatcapacity*(tpmp(pos) - md.constants.referencetemperature) + md.materials.latentheat*md.initialization.waterfraction(pos);
-				WriteData(fid,'data',enthalpy,'format','DoubleMat','mattype',1,'enum',EnthalpyEnum());
+				WriteData(fid,prefix,'data',enthalpy,'format','DoubleMat','mattype',1,'name','md.initialization.enthalpy');
 			end
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/initialization.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/initialization.py	(revision 20690)
@@ -107,18 +107,18 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'data',self.vx,'format','DoubleMat','mattype',1,'enum',VxEnum(),'scale',1./yts)
-		WriteData(fid,'data',self.vy,'format','DoubleMat','mattype',1,'enum',VyEnum(),'scale',1./yts)
-		WriteData(fid,'data',self.vz,'format','DoubleMat','mattype',1,'enum',VzEnum(),'scale',1./yts)
-		WriteData(fid,'data',self.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum())
-		WriteData(fid,'data',self.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum())
-		WriteData(fid,'data',self.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum())
-		WriteData(fid,'data',self.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum())
-		WriteData(fid,'data',self.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum())
-		WriteData(fid,'data',self.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum())
-		WriteData(fid,'data',self.epl_thickness,'format','DoubleMat','mattype',1,'enum',HydrologydcEplThicknessEnum())
+		WriteData(fid,prefix,'object',self,'fieldname','vx','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'fieldname','vy','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'fieldname','vz','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'fieldname','pressure','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','temperature','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','waterfraction','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','watercolumn','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','sediment_head','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','epl_head','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','epl_thickness','format','DoubleMat','mattype',1)
 
 		
@@ -128,5 +128,5 @@
 			enthalpy      = md.materials.heatcapacity*(md.initialization.temperature-md.constants.referencetemperature);
 			enthalpy[pos] = md.materials.heatcapacity*tpmp[pos].reshape(-1,1) - md.constants.referencetemperature + md.materials.latentheat*md.initialization.waterfraction[pos].reshape(-1,1)
-			WriteData(fid,'data',enthalpy,'format','DoubleMat','mattype',1,'enum',EnthalpyEnum());
+			WriteData(fid,prefix,'data',enthalpy,'format','DoubleMat','mattype',1,'name','md.initialization.enthalpy');
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/inversion.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/inversion.js	(revision 20690)
@@ -120,39 +120,34 @@
 			var yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',InversionTypeEnum(),'data',0,'format','Integer');
-			WriteData(fid,'object',this,'fieldname','iscontrol','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','incomplete_adjoint','format','Boolean');
+			WriteData(fid,prefix,'name','md.inversion.type','data',0,'format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','iscontrol','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','incomplete_adjoint','format','Boolean');
 			if (!this.iscontrol) return;
-			WriteData(fid,'object',this,'fieldname','nsteps','format','Integer');
-			WriteData(fid,'object',this,'fieldname','maxiter_per_step','format','IntMat','mattype',3);
-			WriteData(fid,'object',this,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'fieldname','gradient_scaling','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',this,'fieldname','cost_function_threshold','format','Double');
-			WriteData(fid,'object',this,'fieldname','min_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',this,'fieldname','max_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',this,'fieldname','step_threshold','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',this,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',this,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',this,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','nsteps','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','maxiter_per_step','format','IntMat','mattype',3);
+			WriteData(fid,prefix,'object',this,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','gradient_scaling','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',this,'fieldname','cost_function_threshold','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','min_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',this,'fieldname','max_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',this,'fieldname','step_threshold','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',this,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
 			if(this.thickness_obs.length==md.mesh.numberofelements) mattype=2;
 			else mattype=1;
-			WriteData(fid,'object',this,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
-			WriteData(fid,'object',this,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
-
+			WriteData(fid,prefix,'object',this,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+			WriteData(fid,prefix,'object',this,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
 
 			//process control parameters
 			num_control_parameters=this.control_parameters.length;
-			data=NewArrayFill(num_control_parameters,0);
-			for (var i=0;i<num_control_parameters;i++){
-				data[i]=StringToEnum(this.control_parameters[i]);
-			}
-			WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','control_parameters','format','StringArray');
+			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
 
 			//process cost functions
 			num_cost_functions=this.cost_functions[0].length;
 			data=marshallcostfunctions(this.cost_functions);
-			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/inversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/inversion.m	(revision 20690)
@@ -148,23 +148,23 @@
 			disp('   503: ThicknessAbsGradient');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',InversionTypeEnum(),'data',0,'format','Integer');
-			WriteData(fid,'object',self,'fieldname','iscontrol','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','incomplete_adjoint','format','Boolean');
+			WriteData(fid,prefix,'name','md.inversion.type','data',0,'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','iscontrol','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','incomplete_adjoint','format','Boolean');
 			if ~self.iscontrol, return; end
-			WriteData(fid,'object',self,'fieldname','nsteps','format','Integer');
-			WriteData(fid,'object',self,'fieldname','maxiter_per_step','format','IntMat','mattype',3);
-			WriteData(fid,'object',self,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','gradient_scaling','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'fieldname','cost_function_threshold','format','Double');
-			WriteData(fid,'object',self,'fieldname','min_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'fieldname','max_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'fieldname','step_threshold','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'fieldname','nsteps','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','maxiter_per_step','format','IntMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','gradient_scaling','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'fieldname','cost_function_threshold','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','min_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'fieldname','max_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'fieldname','step_threshold','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
 			if(numel(self.thickness_obs)==md.mesh.numberofelements),
 				mattype=2;
@@ -172,22 +172,16 @@
 				mattype=1;
 			end
-			WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
-			WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
-
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
 
 			%process control parameters
-			num_control_parameters=numel(self.control_parameters);
-			data=zeros(1,num_control_parameters);
-			for i=1:num_control_parameters,
-				data(i)=StringToEnum(self.control_parameters{i});
-			end
-			WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
+			WriteData(fid,prefix,'data',numel(self.control_parameters),'name','md.inversion.num_control_parameters','format','Integer');
 
 			%process cost functions
 			num_cost_functions=size(self.cost_functions,2);
 			data=marshallcostfunctions(self.cost_functions);
-			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/inversion.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/inversion.py	(revision 20690)
@@ -158,37 +158,36 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'enum',InversionTypeEnum(),'data',0,'format','Integer')
-		WriteData(fid,'object',self,'fieldname','iscontrol','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','incomplete_adjoint','format','Boolean')
+		WriteData(fid,prefix,'name','md.inversion.type','data',0,'format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','iscontrol','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','incomplete_adjoint','format','Boolean')
 		if not self.iscontrol:
 			return
-		WriteData(fid,'object',self,'fieldname','nsteps','format','Integer')
-		WriteData(fid,'object',self,'fieldname','maxiter_per_step','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','gradient_scaling','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'fieldname','cost_function_threshold','format','Double')
-		WriteData(fid,'object',self,'fieldname','min_parameters','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'fieldname','max_parameters','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'fieldname','step_threshold','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts)
-		WriteData(fid,'object',self,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts)
-		WriteData(fid,'object',self,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts)
-		WriteData(fid,'object',self,'fieldname','thickness_obs','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','surface_obs','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','nsteps','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','maxiter_per_step','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','gradient_scaling','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'fieldname','cost_function_threshold','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','min_parameters','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'fieldname','max_parameters','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'fieldname','step_threshold','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'fieldname','thickness_obs','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','surface_obs','format','DoubleMat','mattype',1)
 
 		#process control parameters
 		num_control_parameters=len(self.control_parameters)
-		data=numpy.array([StringToEnum(control_parameter)[0] for control_parameter in self.control_parameters]).reshape(1,-1)
-		WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3)
-		WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray')
+		WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer')
 
 		#process cost functions
 		num_cost_functions=numpy.size(self.cost_functions)
 		data=marshallcostfunctions(self.cost_functions)
-		WriteData(fid,'data',numpy.array(data).reshape(1,-1),'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
-		WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer')
+		WriteData(fid,prefix,'data',numpy.array(data).reshape(1,-1),'name','md.inversion.cost_functions','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/inversionvalidation.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversionvalidation.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/inversionvalidation.m	(revision 20690)
@@ -110,19 +110,19 @@
 			disp('   503: ThicknessAbsGradient');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
-			WriteData(fid,'enum',InversionTypeEnum(),'data',3,'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
+			WriteData(fid,prefix,'name','md.inversion.type','data',3,'format','Integer');
 			if ~self.iscontrol, return; end
-			WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');
-			WriteData(fid,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
 			if(numel(self.thickness_obs)==md.mesh.numberofelements),
 				mattype=2; 
@@ -130,21 +130,17 @@
 				mattype=1;
 			end
-			WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
-			WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
 
 			%process control parameters
 			num_control_parameters=numel(self.control_parameters);
-			data=zeros(1,num_control_parameters);
-			for i=1:num_control_parameters,
-				data(i)=StringToEnum(self.control_parameters{i});
-			end
-			WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
+			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
 
 			%process cost functions
 			num_cost_functions=size(self.cost_functions,2);
 			data=marshallcostfunctions(self.cost_functions);
-			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/levelset.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/levelset.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/levelset.js	(revision 20690)
@@ -31,10 +31,10 @@
 		checkfield(md,'fieldname','levelset.stabilization','values',[0,1,2]);
 	} //}}}
-		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'class','levelset','fieldname','stabilization','format','Integer');
-			WriteData(fid,'enum',SpclevelsetEnum(),'data',this.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',this,'class','levelset','fieldname','reinit_frequency','format','Integer');
+	this.marshall=function(md,fid) { //{{{
+		WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+		WriteData(fid,prefix,'object',this,'fieldname','.spclevelset','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+		WriteData(fid,prefix,'object',this,'fieldname','reinit_frequency','format','Integer');
 
-		}//}}}
+	}//}}}
 		this.fix=function() { //{{{
 			this.spclevelset=NullFix(this.spclevelset,NaN);
Index: /issm/trunk-jpl/src/m/classes/levelset.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/levelset.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/levelset.m	(revision 20690)
@@ -53,8 +53,8 @@
 			fielddisplay(self,'reinit_frequency','Amount of time steps after which the levelset function in re-initialized');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'class','levelset','fieldname','stabilization','format','Integer');
-			WriteData(fid,'enum',SpclevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','levelset','fieldname','reinit_frequency','format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','spclevelset','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','reinit_frequency','format','Integer');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/levelset.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/levelset.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/levelset.py	(revision 20690)
@@ -55,8 +55,8 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
-		WriteData(fid,'object',self,'class','levelset','fieldname','stabilization','format','Integer');
-		WriteData(fid,'enum',SpclevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-		WriteData(fid,'object',self,'class','levelset','fieldname','reinit_frequency','format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','spclevelset','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+		WriteData(fid,prefix,'object',self,'fieldname','reinit_frequency','format','Integer');
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/linearbasalforcings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/linearbasalforcings.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/linearbasalforcings.m	(revision 20690)
@@ -71,5 +71,5 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
@@ -79,11 +79,11 @@
 			pos=find(md.geometry.base>md.basalforcings.deepwater_elevation & md.geometry.base<md.basalforcings.upperwater_elevation);
 			floatingice_melting_rate(pos)=md.basalforcings.deepwater_melting_rate*(md.geometry.base(pos)-md.basalforcings.upperwater_elevation)/(md.basalforcings.deepwater_elevation-md.basalforcings.upperwater_elevation);
-			WriteData(fid,'enum',BasalforcingsEnum(),'data',LinearFloatingMeltRateEnum(),'format','Integer');
-			WriteData(fid,'data',floatingice_melting_rate,'format','DoubleMat','enum',BasalforcingsFloatingiceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','enum',BasalforcingsGroundediceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'fieldname','geothermalflux','enum',BasalforcingsGeothermalfluxEnum(),'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'fieldname','deepwater_melting_rate','format','Double','enum',BasalforcingsDeepwaterMeltingRateEnum(),'scale',1./yts)
-			WriteData(fid,'object',self,'fieldname','deepwater_elevation','format','Double','enum',BasalforcingsDeepwaterElevationEnum())
-			WriteData(fid,'object',self,'fieldname','upperwater_elevation','format','Double','enum',BasalforcingsUpperwaterElevationEnum())
+			WriteData(fid,prefix,'name','md.basalforcings.model','data',LinearFloatingMeltRateEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',floatingice_melting_rate,'format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','format','Double','name','md.basalforcings.deepwater_melting_rate','scale',1./yts)
+			WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','format','Double','name','md.basalforcings.deepwater_elevation')
+			WriteData(fid,prefix,'object',self,'fieldname','upperwater_elevation','format','Double','name','md.basalforcings.upperwater_elevation')
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/linearbasalforcings.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/linearbasalforcings.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/linearbasalforcings.py	(revision 20690)
@@ -89,5 +89,5 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
@@ -99,10 +99,10 @@
 		floatingice_melting_rate[pos]=md.basalforcings.deepwater_melting_rate*(md.geometry.base[pos]-md.basalforcings.upperwater_elevation)/(md.basalforcings.deepwater_elevation-md.basalforcings.upperwater_elevation)
 
-		WriteData(fid,'enum',BasalforcingsEnum(),'data',LinearFloatingMeltRateEnum(),'format','Integer');
-		WriteData(fid,'object',self,'fieldname','groundedice_melting_rate','enum',BasalforcingsGroundediceMeltingRateEnum(),'format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'data',floatingice_melting_rate,'enum',BasalforcingsFloatingiceMeltingRateEnum(),'format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'fieldname','geothermalflux','enum',BasalforcingsGeothermalfluxEnum(),'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'fieldname','deepwater_melting_rate','enum',BasalforcingsDeepwaterMeltingRateEnum(),'format','Double','scale',1./yts)
-		WriteData(fid,'object',self,'fieldname','deepwater_elevation','enum',BasalforcingsDeepwaterElevationEnum(),'format','Double')
-		WriteData(fid,'object',self,'fieldname','upperwater_elevation','enum',BasalforcingsUpperwaterElevationEnum(),'format','Double')
+		WriteData(fid,prefix,'name','md.basalforcings.model','data',LinearFloatingMeltRateEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','name','md.basalforcings.groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'data',floatingice_melting_rate,'name','md.basalforcings.floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','name','md.basalforcings.deepwater_melting_rate','format','Double','scale',1./yts)
+		WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','name','md.basalforcings.deepwater_elevation','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','upperwater_elevation','name','md.basalforcings.upperwater_elevation','format','Double')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/m1qn3inversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/m1qn3inversion.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/m1qn3inversion.m	(revision 20690)
@@ -136,23 +136,23 @@
 			disp('   503: ThicknessAbsGradient');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
-			WriteData(fid,'enum',InversionTypeEnum(),'data',2,'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
+			WriteData(fid,prefix,'name','md.inversion.type','data',2,'format','Integer');
 			if ~self.iscontrol, return; end
-			WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');
-			WriteData(fid,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
-			WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',self,'class','inversion','fieldname','dxmin','format','Double');
-			WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double');
-			WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
 			if(numel(self.thickness_obs)==md.mesh.numberofelements),
 				mattype=2;
@@ -160,21 +160,17 @@
 				mattype=1;
 			end
-			WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
-			WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);
 
 			%process control parameters
 			num_control_parameters=numel(self.control_parameters);
-			data=zeros(1,num_control_parameters);
-			for i=1:num_control_parameters,
-				data(i)=StringToEnum(self.control_parameters{i});
-			end
-			WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
+			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
 
 			%process cost functions
 			num_cost_functions=size(self.cost_functions,2);
 			data=marshallcostfunctions(self.cost_functions);
-			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/m1qn3inversion.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/m1qn3inversion.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/m1qn3inversion.py	(revision 20690)
@@ -163,36 +163,35 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean')
-		WriteData(fid,'enum',InversionTypeEnum(),'data',2,'format','Integer')
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean')
+		WriteData(fid,prefix,'name','md.inversion.type','data',2,'format','Integer')
 		if not self.iscontrol:
 			return
-		WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean')
-		WriteData(fid,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer')
-		WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer')
-		WriteData(fid,'object',self,'class','inversion','fieldname','dxmin','format','Double')
-		WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double')
-		WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts)
-		WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts)
-		WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts)
-		WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean')
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','dxmin','format','Double')
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double')
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+		WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1)
 
 		#process control parameters
 		num_control_parameters=len(self.control_parameters)
-		data=numpy.array([StringToEnum(control_parameter)[0] for control_parameter in self.control_parameters]).reshape(1,-1)
-		WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3)
-		WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray')
+		WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer')
 
 		#process cost functions
 		num_cost_functions=numpy.size(self.cost_functions)
 		data=marshallcostfunctions(self.cost_functions)
-		WriteData(fid,'data',numpy.array(data).reshape(1,-1),'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
-		WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer')
+		WriteData(fid,prefix,'data',numpy.array(data).reshape(1,-1),'name','md.inversion.cost_functions','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/mask.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/mask.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mask.js	(revision 20690)
@@ -52,6 +52,6 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'fieldname','ice_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','ice_levelset','format','DoubleMat','mattype',1);
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/mask.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mask.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mask.m	(revision 20690)
@@ -59,7 +59,7 @@
 			fielddisplay(self,'ice_levelset','presence of ice if < 0, icefront position if = 0, no ice if > 0');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1,'NaN',1);
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1,'NaN',1);
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/mask.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/mask.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mask.py	(revision 20690)
@@ -51,6 +51,6 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1)
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/maskpsl.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/maskpsl.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/maskpsl.js	(revision 20690)
@@ -59,8 +59,8 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'class','mask','fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mask','fieldname','ice_levelset','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mask','fieldname','ocean_levelset','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mask','fieldname','land_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'class','mask','fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'class','mask','fieldname','ice_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'class','mask','fieldname','ocean_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'class','mask','fieldname','land_levelset','format','DoubleMat','mattype',1);
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/maskpsl.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/maskpsl.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/maskpsl.m	(revision 20690)
@@ -67,9 +67,9 @@
 			fielddisplay(self,'land_levelset','is the vertex on the land ? yes if = 1, no if = 0');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'class','mask','fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mask','fieldname','ice_levelset','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mask','fieldname','ocean_levelset','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mask','fieldname','land_levelset','format','DoubleMat','mattype',1);
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'class','mask','fieldname','groundedice_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mask','fieldname','ice_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mask','fieldname','ocean_levelset','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mask','fieldname','land_levelset','format','DoubleMat','mattype',1);
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/maskpsl.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/maskpsl.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/maskpsl.py	(revision 20690)
@@ -79,9 +79,9 @@
 		return self
 	# }}}
-	def marshall(self,md,fid): # {{{
-		WriteData(fid,'object',self,'class','mask','fieldname','groundedice_levelset','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mask','fieldname','ice_levelset','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mask','fieldname','ocean_levelset','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mask','fieldname','land_levelset','format','DoubleMat','mattype',1)
+	def marshall(self,prefix,md,fid): # {{{
+		WriteData(fid,prefix,'object',self,'class','mask','fieldname','groundedice_levelset','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','mask','fieldname','ice_levelset','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','mask','fieldname','ocean_levelset','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','mask','fieldname','land_levelset','format','DoubleMat','mattype',1)
 	# }}}
 	def savemodeljs(self,fid,modelname): # {{{
Index: /issm/trunk-jpl/src/m/classes/masscon.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/masscon.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/masscon.m	(revision 20690)
@@ -55,9 +55,9 @@
 
 		end % }}}
-		function md = marshall(self,md,fid) % {{{
+		function md = marshall(self,prefix,md,fid) % {{{
 
-		WriteData(fid,'object',self,'fieldname','name','format','String');
-		WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer');
-		WriteData(fid,'object',self,'fieldname','levelset','format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'object',self,'fieldname','name','format','String');
+		WriteData(fid,prefix,'object',self,'fieldname','definitionenum','format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','levelset','format','DoubleMat','mattype',1);
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/massconaxpby.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/massconaxpby.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/massconaxpby.m	(revision 20690)
@@ -69,12 +69,12 @@
 
 		end % }}}
-		function md = marshall(self,md,fid) % {{{
+		function md = marshall(self,prefix,md,fid) % {{{
 
-		WriteData(fid,'object',self,'fieldname','name','format','String');
-		WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer');
-		WriteData(fid,'object',self,'fieldname','namex','format','String');
-		WriteData(fid,'object',self,'fieldname','namey','format','String');
-		WriteData(fid,'object',self,'fieldname','alpha','format','Double');
-		WriteData(fid,'object',self,'fieldname','beta','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','name','format','String');
+		WriteData(fid,prefix,'object',self,'fieldname','definitionenum','format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','namex','format','String');
+		WriteData(fid,prefix,'object',self,'fieldname','namey','format','String');
+		WriteData(fid,prefix,'object',self,'fieldname','alpha','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','beta','format','Double');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/massfluxatgate.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/massfluxatgate.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/massfluxatgate.m	(revision 20690)
@@ -55,5 +55,5 @@
 			
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 		%before marshalling, we need to create the segments out of the profilename: 
@@ -61,7 +61,7 @@
 
 		%ok, marshall name and segments: 
-		WriteData(fid,'object',self,'fieldname','name','format','String');
-		WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer');
-		WriteData(fid,'object',self,'fieldname','segments','format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'data',self.name,'name','md.massfluxatgate.name','format','String');
+		WriteData(fid,prefix,'data',self.definitionenum,'name','md.massfluxatgate.definitionenum','format','Integer');
+		WriteData(fid,prefix,'data',self.segments,'name','md.massfluxatgate.segments','format','DoubleMat','mattype',1);
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/massfluxatgate.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/massfluxatgate.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/massfluxatgate.py	(revision 20690)
@@ -59,5 +59,5 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 		
 		#before marshalling, we need to create the segments out of the profilename: 
@@ -65,7 +65,7 @@
 
 		#ok, marshall name and segments: 
-		WriteData(fid,'object',self,'fieldname','name','format','String')
-		WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer')
-		WriteData(fid,'object',self,'fieldname','segments','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'data',self.name,'name','md.massfluxatgate.name','format','String');
+		WriteData(fid,prefix,'data',self.definitionenum,'name','md.massfluxatgate.definitionenum','format','Integer');
+		WriteData(fid,prefix,'data',self.segments,'name','md.massfluxatgate.segments','format','DoubleMat','mattype',1);
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/masstransport.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/masstransport.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/masstransport.js	(revision 20690)
@@ -58,11 +58,11 @@
 			var yts=365.*24.*3600.;
 
-			WriteData(fid,'object',this,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',this,'fieldname','isfreesurface','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','min_thickness','format','Double');
-			WriteData(fid,'data',StringToEnum(this.hydrostatic_adjustment),'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum());
-			WriteData(fid,'object',this,'fieldname','stabilization','format','Integer');
-			WriteData(fid,'object',this,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',this,'fieldname','penalty_factor','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',this,'fieldname','isfreesurface','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','min_thickness','format','Double');
+			WriteData(fid,prefix,'data',StringToEnum(this.hydrostatic_adjustment),'format','Integer','name','md.masstransport.hydrostatic_adjustment');
+			WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',this,'fieldname','penalty_factor','format','Double');
 
 			//process requested outputs
@@ -75,5 +75,5 @@
 				}
 			}
-			WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum(),'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.masstransport.requested_outputs','format','StringArray');
 		}//}}}
 		this.defaultoutputs = function(md) { //{{{
Index: /issm/trunk-jpl/src/m/classes/masstransport.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/masstransport.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/masstransport.m	(revision 20690)
@@ -111,15 +111,15 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.*24.*3600.;
 
-			WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'fieldname','isfreesurface','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','min_thickness','format','Double');
-			WriteData(fid,'data',StringToEnum(self.hydrostatic_adjustment),'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum());
-			WriteData(fid,'object',self,'fieldname','stabilization','format','Integer');
-			WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','isfreesurface','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','min_thickness','format','Double');
+			WriteData(fid,prefix,'data',StringToEnum(self.hydrostatic_adjustment),'format','Integer','name','md.masstransport.hydrostatic_adjustment');
+			WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double');
 			
 			%process requested outputs
@@ -130,5 +130,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.masstransport.requested_outputs','format','StringArray');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/masstransport.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/masstransport.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/masstransport.py	(revision 20690)
@@ -81,15 +81,15 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.*24.*3600.
 
-		WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'fieldname','isfreesurface','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','min_thickness','format','Double')
-		WriteData(fid,'data',StringToEnum(self.hydrostatic_adjustment)[0],'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum())
-		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
-		WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','isfreesurface','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','min_thickness','format','Double')
+		WriteData(fid,prefix,'data',StringToEnum(self.hydrostatic_adjustment)[0],'format','Integer','name','md.masstransport.hydrostatic_adjustment')
+		WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double')
 
 		#process requested outputs
@@ -99,4 +99,4 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.masstransport.requested_outputs','format','StringArray')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/matdamageice.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/matdamageice.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/matdamageice.m	(revision 20690)
@@ -152,27 +152,27 @@
 			fielddisplay(self,'earth_density','Mantle density [kg/m^-3]');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'enum',MaterialsEnum(),'data',MatdamageiceEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
-			WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.materials.type','data',MatdamageiceEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'data',StringToEnum(self.rheology_law),'name','md.materials.rheology_law','format','Integer');
 
-			WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
-			WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
-			WriteData(fid,'object',self,'class','materials','fieldname','earth_density','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/matdamageice.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/matdamageice.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/matdamageice.py	(revision 20690)
@@ -144,27 +144,27 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'enum',MaterialsEnum(),'data',MatdamageiceEnum(),'format','Integer');
-		WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
-		WriteData(fid,'data',StringToEnum(self.rheology_law)[0],'enum',MaterialsRheologyLawEnum(),'format','Integer')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'name','md.materials.type','data',MatdamageiceEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'data',StringToEnum(self.rheology_law)[0],'name','md.materials.rheology_law','format','Integer')
 
-		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10.**3.);
-		WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-		WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10.**3.);
-		WriteData(fid,'object',self,'class','materials','fieldname','earth_density','format','Double');
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10.**3.);
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10.**3.);
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/matestar.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/matestar.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/matestar.m	(revision 20690)
@@ -155,28 +155,28 @@
 			fielddisplay(self,'earth_density','Mantle density [kg/m^-3]');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'enum',MaterialsEnum(),'data',MatestarEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','rheology_ko','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','materials','fieldname','rheology_Ec','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','materials','fieldname','rheology_Es','format','DoubleMat','mattype',1);
-			WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
-
-			WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
-			WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
-			WriteData(fid,'object',self,'class','materials','fieldname','earth_density','format','Double');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.materials.type','data',MatestarEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_ko','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_Ec','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_Es','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'data',StringToEnum(self.rheology_law),'name','md.materials.rheology_law','format','Integer');
+
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/matice.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/matice.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/matice.js	(revision 20690)
@@ -109,25 +109,25 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'enum',MaterialsEnum(),'data',MaticeEnum(),'format','Integer');
-			WriteData(fid,'object',this,'class','materials','fieldname','rho_ice','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','rho_freshwater','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','mu_water','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','heatcapacity','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','latentheat','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','thermalconductivity','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','temperateiceconductivity','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','meltingpoint','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','beta','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','mixed_layer_capacity','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',this,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
-			WriteData(fid,'data',StringToEnum(this.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
-			WriteData(fid,'object',this,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
-			WriteData(fid,'object',this,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-			WriteData(fid,'object',this,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
-			WriteData(fid,'object',this,'class','materials','fieldname','earth_density','format','Double');
+			WriteData(fid,prefix,'name','md.materials.type','data',MaticeEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_ice','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_water','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rho_freshwater','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mu_water','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','heatcapacity','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','latentheat','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','thermalconductivity','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','temperateiceconductivity','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','meltingpoint','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','beta','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mixed_layer_capacity','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'data',StringToEnum(this.rheology_law),'name','md.materials.rheology_law','format','Integer');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
+			WriteData(fid,prefix,'object',this,'class','materials','fieldname','earth_density','format','Double');
 
 		}//}}}
Index: /issm/trunk-jpl/src/m/classes/matice.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/matice.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/matice.m	(revision 20690)
@@ -151,27 +151,27 @@
 			fielddisplay(self,'earth_density','Mantle density [kg/m^-3]');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'enum',MaterialsEnum(),'data',MaticeEnum(),'format','Integer');
-			WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
-			WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');
-
-			WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
-			WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-			WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
-			WriteData(fid,'object',self,'class','materials','fieldname','earth_density','format','Double');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.materials.type','data',MaticeEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'data',StringToEnum(self.rheology_law),'name','md.materials.rheology_law','format','Integer');
+
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
+			WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/matice.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/matice.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/matice.py	(revision 20690)
@@ -145,28 +145,28 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'enum',MaterialsEnum(),'data',MaticeEnum(),'format','Integer');
-		WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
-		WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
-		WriteData(fid,'data',StringToEnum(self.rheology_law)[0],'enum',MaterialsRheologyLawEnum(),'format','Integer')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'name','md.materials.type','data',MaticeEnum(),'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_ice','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_water','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rho_freshwater','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mu_water','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','heatcapacity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','latentheat','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermalconductivity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','meltingpoint','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','beta','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'data',StringToEnum(self.rheology_law)[0],'name','md.materials.rheology_law','format','Integer')
 
-		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
-		WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10.**3.);
-		WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
-		WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10.**3.);
-		WriteData(fid,'object',self,'class','materials','fieldname','earth_density','format','Double');
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10.**3.);
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double');
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10.**3.);
+		WriteData(fid,prefix,'object',self,'class','materials','fieldname','earth_density','format','Double');
 
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/mesh2d.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh2d.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh2d.js	(revision 20690)
@@ -80,16 +80,16 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum('Domain' + this.domaintype()),'format','Integer');
-			WriteData(fid,'enum',DomainDimensionEnum(),'data',this.dimension(),'format','Integer');
-			WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(this.elementtype()),'format','Integer');
-			WriteData(fid,'object',this,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
-			WriteData(fid,'enum',MeshZEnum(),'data',NewArrayFill(this.numberofvertices,0),'format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',this,'class','mesh','fieldname','numberofelements','format','Integer');
-			WriteData(fid,'object',this,'class','mesh','fieldname','numberofvertices','format','Integer');
-			WriteData(fid,'object',this,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
-			WriteData(fid,'object',this,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum('Domain' + this.domaintype()),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',this.dimension(),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(this.elementtype()),'format','Integer');
+			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'name','md.mesh.z','data',NewArrayFill(this.numberofvertices,0),'format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','numberofelements','format','Integer');
+			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','numberofvertices','format','Integer');
+			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/mesh2d.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh2d.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh2d.m	(revision 20690)
@@ -127,17 +127,17 @@
 			fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype(self)]),'format','Integer');
-			WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension(self),'format','Integer');
-			WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype(self)),'format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
-			WriteData(fid,'enum',MeshZEnum(),'data',zeros(self.numberofvertices,1),'format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum(['Domain' domaintype(self)]),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',dimension(self),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(elementtype(self)),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'name','md.mesh.z','data',zeros(self.numberofvertices,1),'format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
 		end % }}}
 		function t = domaintype(self) % {{{
Index: /issm/trunk-jpl/src/m/classes/mesh2d.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh2d.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh2d.py	(revision 20690)
@@ -107,14 +107,14 @@
 		return "Tria"
 	#}}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum("Domain"+self.domaintype())[0],'format','Integer');
-		WriteData(fid,'enum',DomainDimensionEnum(),'data',self.dimension(),'format','Integer');
-		WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(self.elementtype())[0],'format','Integer');
-		WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1)
-		WriteData(fid,'enum',MeshZEnum(),'data',numpy.zeros(self.numberofvertices),'format','DoubleMat','mattype',1);
-		WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2)
-		WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum("Domain"+self.domaintype())[0],'format','Integer');
+		WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',self.dimension(),'format','Integer');
+		WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(self.elementtype())[0],'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'name','md.mesh.z','data',numpy.zeros(self.numberofvertices),'format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/mesh2dvertical.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh2dvertical.m	(revision 20690)
@@ -125,17 +125,17 @@
 			fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype(self)]),'format','Integer');
-			WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension(self),'format','Integer');
-			WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype(self)),'format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
-			WriteData(fid,'enum',MeshZEnum(),'data',zeros(self.numberofvertices,1),'format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum(['Domain' domaintype(self)]),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',dimension(self),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(elementtype(self)),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'name','md.mesh.z','data',zeros(self.numberofvertices,1),'format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
 		end % }}}
 		function t = domaintype(self) % {{{
Index: /issm/trunk-jpl/src/m/classes/mesh3dprisms.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh3dprisms.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh3dprisms.m	(revision 20690)
@@ -149,23 +149,23 @@
 			fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype(self)]),'format','Integer');
-			WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension(self),'format','Integer');
-			WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype(self)),'format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberoflayers','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum(['Domain' domaintype(self)]),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',dimension(self),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(elementtype(self)),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberoflayers','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer');
 		end % }}}
 		function type = domaintype(self) % {{{
Index: /issm/trunk-jpl/src/m/classes/mesh3dprisms.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh3dprisms.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh3dprisms.py	(revision 20690)
@@ -131,22 +131,22 @@
 		return "Penta"
 	#}}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum("Domain"+self.domaintype())[0],'format','Integer');
-		WriteData(fid,'enum',DomainDimensionEnum(),'data',self.dimension(),'format','Integer');
-		WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(self.elementtype())[0],'format','Integer');
-		WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','z','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2)
-		WriteData(fid,'object',self,'class','mesh','fieldname','numberoflayers','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2)
-		WriteData(fid,'object',self,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2)
-		WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum("Domain"+self.domaintype())[0],'format','Integer');
+		WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',self.dimension(),'format','Integer');
+		WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(self.elementtype())[0],'format','Integer');
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','z','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberoflayers','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/mesh3dsurface.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh3dsurface.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh3dsurface.js	(revision 20690)
@@ -78,19 +78,19 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum('Domain' + this.domaintype()),'format','Integer');
-			WriteData(fid,'enum',DomainDimensionEnum(),'data',this.dimension(),'format','Integer');
-			WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(this.elementtype()),'format','Integer');
-			WriteData(fid,'object',this,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','lat','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','long','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','r','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',this,'class','mesh','fieldname','numberofelements','format','Integer');
-			WriteData(fid,'object',this,'class','mesh','fieldname','numberofvertices','format','Integer');
-			WriteData(fid,'object',this,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
-			WriteData(fid,'object',this,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','mesh','fieldname','segments','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum('Domain' + this.domaintype()),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',this.dimension(),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(this.elementtype()),'format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','x','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','y','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','z','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','lat','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','long','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','r','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','elements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',this,'fieldname','numberofelements','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','numberofvertices','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','average_vertex_connectivity','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','vertexonboundary','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','segments','format','DoubleMat','mattype',3);
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/mesh3dsurface.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh3dsurface.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh3dsurface.m	(revision 20690)
@@ -131,19 +131,19 @@
 		end % }}}
 		function marshall(obj,md,fid) % {{{
-			WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype(obj)]),'format','Integer');
-			WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension(obj),'format','Integer');
-			WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype(obj)),'format','Integer');
-			WriteData(fid,'object',obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',obj,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',obj,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);
-			WriteData(fid,'enum',MeshLatEnum(),'data',obj.lat,'format','DoubleMat','mattype',1);
-			WriteData(fid,'enum',MeshLongEnum(),'data',obj.long,'format','DoubleMat','mattype',1);
-			WriteData(fid,'object',obj,'class','mesh','fieldname','r','format','DoubleMat','mattype',1);
-			WriteData(fid,'enum',MeshZEnum(),'data',zeros(obj.numberofvertices,1),'format','DoubleMat','mattype',1);
-			WriteData(fid,'object',obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofelements','format','Integer');
-			WriteData(fid,'object',obj,'class','mesh','fieldname','numberofvertices','format','Integer');
-			WriteData(fid,'object',obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
-			WriteData(fid,'object',obj,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum(['Domain' domaintype(obj)]),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',dimension(obj),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(elementtype(obj)),'format','Integer');
+			WriteData(fid,prefix,'object',obj,'fieldname','x','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',obj,'fieldname','y','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',obj,'fieldname','z','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',obj,'fieldname','lat','data',obj.lat,'format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',obj,'fieldname','long','data',obj.long,'format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',obj,'fieldname','r','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'name','md.mesh.z','data',zeros(obj.numberofvertices,1),'format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',obj,'fieldname','elements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',obj,'fieldname','numberofelements','format','Integer');
+			WriteData(fid,prefix,'object',obj,'fieldname','numberofvertices','format','Integer');
+			WriteData(fid,prefix,'object',obj,'fieldname','average_vertex_connectivity','format','Integer');
+			WriteData(fid,prefix,'object',obj,'fieldname','vertexonboundary','format','DoubleMat','mattype',1);
 		end % }}}
 		function t = domaintype(obj) % {{{
Index: /issm/trunk-jpl/src/m/classes/mesh3dsurface.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh3dsurface.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh3dsurface.py	(revision 20690)
@@ -130,20 +130,20 @@
 		return md
 	# }}}
-	def marshall(self,md,fid): # {{{
-		WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum('Domain' + self.domaintype())[0],'format','Integer')
-		WriteData(fid,'enum',DomainDimensionEnum(),'data',self.dimension(),'format','Integer')
-		WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(self.elementtype())[0],'format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','z','format','DoubleMat','mattype',1)
-		WriteData(fid,'enum',MeshLatEnum(),'data',md.mesh.lat,'format','DoubleMat','mattype',1)
-		WriteData(fid,'enum',MeshLongEnum(),'data',md.mesh.long,'format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','r','format','DoubleMat','mattype',1)
-		WriteData(fid,'enum',MeshZEnum(),'data',zeros(md.mesh.numberofvertices),'format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2)
-		WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer')
-		WriteData(fid,'object',self,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1)
+	def marshall(self,prefix,md,fid): # {{{
+		WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum('Domain' + self.domaintype())[0],'format','Integer')
+		WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',self.dimension(),'format','Integer')
+		WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(self.elementtype())[0],'format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','x','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','y','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','z','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','lat','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','long','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','r','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'name','md.mesh.z','data',zeros(md.mesh.numberofvertices),'format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','elements','format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'object',self,'fieldname','numberofelements','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','numberofvertices','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','average_vertex_connectivity','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','vertexonboundary','format','DoubleMat','mattype',1)
 	# }}}
 	def domaintype(self): # {{{
Index: /issm/trunk-jpl/src/m/classes/mesh3dtetras.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh3dtetras.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mesh3dtetras.m	(revision 20690)
@@ -149,23 +149,23 @@
 			fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype(self)]),'format','Integer');
-			WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension(self),'format','Integer');
-			WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype(self)),'format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberoflayers','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);
-			WriteData(fid,'object',self,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer');
-			WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'name','md.mesh.domain_type','data',StringToEnum(['Domain' domaintype(self)]),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.domain_dimension','data',dimension(self),'format','Integer');
+			WriteData(fid,prefix,'name','md.mesh.elementtype','data',StringToEnum(elementtype(self)),'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberoflayers','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer');
 		end % }}}
 		function t = domaintype(self) % {{{
Index: /issm/trunk-jpl/src/m/classes/miscellaneous.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/miscellaneous.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/miscellaneous.js	(revision 20690)
@@ -25,5 +25,5 @@
 		}// }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','name','format','String');
+			WriteData(fid,prefix,'object',this,'fieldname','name','format','String');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/miscellaneous.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/miscellaneous.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/miscellaneous.m	(revision 20690)
@@ -35,6 +35,6 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','name','format','String');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','name','format','String');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/miscellaneous.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/miscellaneous.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/miscellaneous.py	(revision 20690)
@@ -37,5 +37,5 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    #  {{{
-		WriteData(fid,'object',self,'fieldname','name','format','String')
+	def marshall(self,prefix,md,fid):    #  {{{
+		WriteData(fid,prefix,'object',self,'fieldname','name','format','String');
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/misfit.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/misfit.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/misfit.m	(revision 20690)
@@ -84,15 +84,15 @@
 
 		end % }}}
-		function md = marshall(self,md,fid) % {{{
+		function md = marshall(self,prefix,md,fid) % {{{
 
-		WriteData(fid,'object',self,'fieldname','name','format','String');
-		WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer');
-		WriteData(fid,'object',self,'fieldname','model_enum','format','Integer');
-		WriteData(fid,'object',self,'fieldname','observation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-		WriteData(fid,'object',self,'fieldname','observation_enum','format','Integer');
-		WriteData(fid,'object',self,'fieldname','local','format','Integer');
-		WriteData(fid,'object',self,'fieldname','timeinterpolation','format','String');
-		WriteData(fid,'object',self,'fieldname','weights','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-		WriteData(fid,'object',self,'fieldname','weights_enum','format','Integer');
+		WriteData(fid,prefix,'data',self.name,'name','md.misfit.name','format','String');
+		WriteData(fid,prefix,'data',self.definitionenum,'name','md.misfit.definitionenum','format','Integer');
+		WriteData(fid,prefix,'data',self.model_enum,'name','md.misfit.model_enum','format','Integer');
+		WriteData(fid,prefix,'data',self.observation,'name','md.misfit.observation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+		WriteData(fid,prefix,'data',self.observation_enum,'name','md.misfit.observation_enum','format','Integer');
+		WriteData(fid,prefix,'data',self.local,'name','md.misfit.local','format','Integer');
+		WriteData(fid,prefix,'data',self.timeinterpolation,'name','md.misfit.timeinterpolation','format','String');
+		WriteData(fid,prefix,'data',self.weights,'name','md.misfit.weights','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+		WriteData(fid,prefix,'data',self.weights_enum,'name','md.misfit.weights_enum','format','Integer');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/mismipbasalforcings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mismipbasalforcings.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mismipbasalforcings.m	(revision 20690)
@@ -78,5 +78,5 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.2422*24.0*3600.0;
@@ -85,11 +85,11 @@
 			floatingice_melting_rate=md.basalforcings.meltrate_factor*tanh((md.geometry.base-md.geometry.bed)./md.basalforcings.threshold_thickness).*max(md.basalforcings.upperdepth_melt-md.geometry.base,0);
 
-			WriteData(fid,'enum',BasalforcingsEnum(),'data',MismipFloatingMeltRateEnum(),'format','Integer');
-			WriteData(fid,'data',floatingice_melting_rate,'format','DoubleMat','enum',BasalforcingsFloatingiceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','enum',BasalforcingsGroundediceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'fieldname','geothermalflux','enum',BasalforcingsGeothermalfluxEnum(),'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'fieldname','meltrate_factor','format','Double','enum',BasalforcingsMeltrateFactorEnum(),'scale',1./yts)
-			WriteData(fid,'object',self,'fieldname','threshold_thickness','format','Double','enum',BasalforcingsThresholdThicknessEnum())
-			WriteData(fid,'object',self,'fieldname','upperdepth_melt','format','Double','enum',BasalforcingsUpperdepthMeltEnum())
+			WriteData(fid,prefix,'name','md.basalforcings.model','data',MismipFloatingMeltRateEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',floatingice_melting_rate,'format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','meltrate_factor','format','Double','scale',1./yts)
+			WriteData(fid,prefix,'object',self,'fieldname','threshold_thickness','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','upperdepth_melt','format','Double')
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/mismipbasalforcings.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/mismipbasalforcings.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/mismipbasalforcings.py	(revision 20690)
@@ -78,5 +78,5 @@
 	return md
     # }}}
-    def marshall(self,md,fid):    # {{{
+    def marshall(self,prefix,md,fid):    # {{{
 
         yts=md.constants.yts
@@ -87,11 +87,11 @@
         floatingice_melting_rate = md.basalforcings.meltrate_factor*numpy.tanh((md.geometry.base-md.geometry.bed)/md.basalforcings.threshold_thickness)*numpy.amax(md.basalforcings.upperdepth_melt-md.geometry.base,0)
 
-	WriteData(fid,'enum',BasalforcingsEnum(),'data',MismipFloatingMeltRateEnum(),'format','Integer')
-	WriteData(fid,'data',floatingice_melting_rate,'format','DoubleMat','enum',BasalforcingsFloatingiceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-	WriteData(fid,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','enum',BasalforcingsGroundediceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-	WriteData(fid,'object',self,'fieldname','geothermalflux','enum',BasalforcingsGeothermalfluxEnum(),'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-	WriteData(fid,'object',self,'fieldname','meltrate_factor','format','Double','enum',BasalforcingsMeltrateFactorEnum(),'scale',1./yts)
-	WriteData(fid,'object',self,'fieldname','threshold_thickness','format','Double','enum',BasalforcingsThresholdThicknessEnum())
-	WriteData(fid,'object',self,'fieldname','upperdepth_melt','format','Double','enum',BasalforcingsUpperdepthMeltEnum())
+	WriteData(fid,prefix,'name','md.basalforcings.model','data',MismipFloatingMeltRateEnum(),'format','Integer')
+	WriteData(fid,prefix,'data',floatingice_melting_rate,'format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+	WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+	WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+	WriteData(fid,prefix,'object',self,'fieldname','meltrate_factor','format','Double','scale',1./yts)
+	WriteData(fid,prefix,'object',self,'fieldname','threshold_thickness','format','Double')
+	WriteData(fid,prefix,'object',self,'fieldname','upperdepth_melt','format','Double')
 
     # }}}
Index: /issm/trunk-jpl/src/m/classes/nodalvalue.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/nodalvalue.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/nodalvalue.m	(revision 20690)
@@ -55,10 +55,10 @@
 
 		end % }}}
-		function md = marshall(self,md,fid) % {{{
+		function md = marshall(self,prefix,md,fid) % {{{
 
-		WriteData(fid,'object',self,'fieldname','name','format','String');
-		WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer');
-		WriteData(fid,'object',self,'fieldname','model_enum','format','Integer');
-		WriteData(fid,'object',self,'fieldname','node','format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','name','format','String');
+		WriteData(fid,prefix,'object',self,'fieldname','definitionenum','format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','model_enum','format','Integer');
+		WriteData(fid,prefix,'object',self,'fieldname','node','format','Integer');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/outputdefinition.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/outputdefinition.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/outputdefinition.js	(revision 20690)
@@ -31,5 +31,5 @@
 		var enums=NewArrayFill(this.definitions.length,0);
 		for (var i=0;i<this.definitions.length;i++){
-			this.definitions[i].marshall(md,fid);
+			this.definitions[i].marshall(md,fid,prefix);
 			classdefinition=this.definitions[i].classname();
 			classdefinition=classdefinition.charAt(0).tuUpperCase() + classdefinition.slice(1); //so it matches our enums definitions.
@@ -38,5 +38,5 @@
 		enums=ArrayUnique(enums);
 		if (enums.length==0){ enums=NaN; }
-		WriteData(fid,'data',enums,'enum',OutputdefinitionListEnum(),'format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'data',enums,'name','md.outputdefinition.list','format','DoubleMat','mattype',1);
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/outputdefinition.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/outputdefinition.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/outputdefinition.m	(revision 20690)
@@ -36,9 +36,9 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 		enums=zeros(length(self.definitions),1);
 		for i=1:length(self.definitions),
-			self.definitions{i}.marshall(md,fid);
+			self.definitions{i}.marshall(prefix,md,fid);
 			classdefinition=class(self.definitions{i});
 			classdefinition(1)=upper(classdefinition(1)); %so it matches our enums definitions.
@@ -47,5 +47,5 @@
 		enums=unique(enums);
 		
-		WriteData(fid,'data',enums,'enum',OutputdefinitionListEnum(),'format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'data',enums,'name','md.outputdefinition.list','format','DoubleMat','mattype',1);
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/outputdefinition.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/outputdefinition.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/outputdefinition.py	(revision 20690)
@@ -34,10 +34,10 @@
 
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 		
 		enums=npy.zeros(len(self.definitions),)
 		
 		for i in range(len(self.definitions)):
-			self.definitions[i].marshall(md,fid);
+			self.definitions[i].marshall(prefix,md,fid);
 			classdefinition=self.definitions[i].__class__.__name__
 			classdefinition=classdefinition[0].upper()+classdefinition[1:]
@@ -46,4 +46,4 @@
 		enums=npy.unique(enums);
 		
-		WriteData(fid,'data',enums,'enum',OutputdefinitionListEnum(),'format','DoubleMat','mattype',1);
+		WriteData(fid,prefix,'data',enums,'name','md.outputdefinition.list','format','DoubleMat','mattype',1);
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/pairoptions.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/pairoptions.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/pairoptions.m	(revision 20690)
@@ -286,4 +286,5 @@
 		function marshall(self,fid,firstindex)% {{{
 
+			error('needs to be revised with new marhsall format...');
 			for i=1:size(self.list,1),
 				name  = self.list{i,1};
@@ -291,11 +292,11 @@
 
 				%Write option name
-				WriteData(fid,'enum',(firstindex-1)+2*i-1,'data',name,'format','String');
+				WriteData(fid,prefix,'enum',(firstindex-1)+2*i-1,'data',name,'format','String');
 
 				%Write option value
 				if (isnumeric(value) & numel(value)==1),
-					WriteData(fid,'enum',(firstindex-1)+2*i,'data',value,'format','Double');
+					WriteData(fid,prefix,'enum',(firstindex-1)+2*i,'data',value,'format','Double');
 				elseif ischar(value),
-					WriteData(fid,'enum',(firstindex-1)+2*i,'data',value,'format','String');
+					WriteData(fid,prefix,'enum',(firstindex-1)+2*i,'data',value,'format','String');
 				else
 					error(['Cannot marshall option ' name ': format not supported yet']);
Index: /issm/trunk-jpl/src/m/classes/pairoptions.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/pairoptions.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/pairoptions.py	(revision 20690)
@@ -159,11 +159,11 @@
 
 			#Write option name
-			WriteData(fid,'enum',(firstindex-1)+2*i+1,'data',name,'format','String')
+			WriteData(fid,prefix,'enum',(firstindex-1)+2*i+1,'data',name,'format','String')
 
 			#Write option value
 			if   isinstance(value,(str,unicode)):
-				WriteData(fid,'enum',(firstindex-1)+2*i+2,'data',value,'format','String')
+				WriteData(fid,prefix,'enum',(firstindex-1)+2*i+2,'data',value,'format','String')
 			elif isinstance(value,(bool,int,long,float)):
-				WriteData(fid,'enum',(firstindex-1)+2*i+2,'data',value,'format','Double')
+				WriteData(fid,prefix,'enum',(firstindex-1)+2*i+2,'data',value,'format','Double')
 			else:
 				raise TypeError("Cannot marshall option '%s': format not supported yet." % name)
Index: /issm/trunk-jpl/src/m/classes/plumebasalforcings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/plumebasalforcings.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/plumebasalforcings.m	(revision 20690)
@@ -109,23 +109,23 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.2422*24.0*3600.0;
 
-			WriteData(fid,'enum',BasalforcingsEnum(),'data',MantlePlumeGeothermalFluxEnum(),'format','Integer');
-			WriteData(fid,'object',self,'fieldname','floatingice_melting_rate','format','DoubleMat','enum',BasalforcingsFloatingiceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','enum',BasalforcingsGroundediceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-			WriteData(fid,'object',self,'fieldname','mantleconductivity','format','Double','enum',BasalforcingsMantleconductivityEnum())
-			WriteData(fid,'object',self,'fieldname','nusselt','format','Double','enum',BasalforcingsNusseltEnum())
-			WriteData(fid,'object',self,'fieldname','dtbg','format','Double','enum',BasalforcingsDtbgEnum())
-			WriteData(fid,'object',self,'fieldname','plumeradius','format','Double','enum',BasalforcingsPlumeradiusEnum())
-			WriteData(fid,'object',self,'fieldname','topplumedepth','format','Double','enum',BasalforcingsTopplumedepthEnum())
-			WriteData(fid,'object',self,'fieldname','bottomplumedepth','format','Double','enum',BasalforcingsBottomplumedepthEnum())
-			WriteData(fid,'object',self,'fieldname','plumex','format','Double','enum',BasalforcingsPlumexEnum())
-			WriteData(fid,'object',self,'fieldname','plumey','format','Double','enum',BasalforcingsPlumeyEnum())
-			WriteData(fid,'object',self,'fieldname','crustthickness','format','Double','enum',BasalforcingsCrustthicknessEnum())
-			WriteData(fid,'object',self,'fieldname','uppercrustthickness','format','Double','enum',BasalforcingsUppercrustthicknessEnum())
-			WriteData(fid,'object',self,'fieldname','uppercrustheat','format','Double','enum',BasalforcingsUppercrustheatEnum())
-			WriteData(fid,'object',self,'fieldname','lowercrustheat','format','Double','enum',BasalforcingsLowercrustheatEnum())
+			WriteData(fid,prefix,'name','md.basalforcings.model','data',MantlePlumeGeothermalFluxEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','floatingice_melting_rate','format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+			WriteData(fid,prefix,'object',self,'fieldname','mantleconductivity','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','nusselt','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','dtbg','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','plumeradius','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','topplumedepth','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','bottomplumedepth','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','plumex','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','plumey','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','crustthickness','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','uppercrustthickness','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','uppercrustheat','format','Double')
+			WriteData(fid,prefix,'object',self,'fieldname','lowercrustheat','format','Double')
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/qmu.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/qmu.js	(revision 20690)
@@ -101,20 +101,20 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','isdakota','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isdakota','format','Boolean');
 			if (!this.isdakota){
-				WriteData(fid,'data',0,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
+				WriteData(fid,prefix,'data',0,'name','md.qmu.mass_flux_segments_present','format','Boolean');
 			}
 			else{
-				WriteData(fid,'object',this,'fieldname','partition','format','DoubleMat','mattype',2);
-				WriteData(fid,'object',this,'fieldname','numberofpartitions','format','Integer');
-				WriteData(fid,'object',this,'fieldname','numberofresponses','format','Integer');
-				WriteData(fid,'object',this,'fieldname','variabledescriptors','format','StringArray');
-				WriteData(fid,'object',this,'fieldname','responsedescriptors','format','StringArray');
+				WriteData(fid,prefix,'object',this,'fieldname','partition','format','DoubleMat','mattype',2);
+				WriteData(fid,prefix,'object',this,'fieldname','numberofpartitions','format','Integer');
+				WriteData(fid,prefix,'object',this,'fieldname','numberofresponses','format','Integer');
+				WriteData(fid,prefix,'object',this,'fieldname','variabledescriptors','format','StringArray');
+				WriteData(fid,prefix,'object',this,'fieldname','responsedescriptors','format','StringArray');
 				if (this.mass_flux_segments.length){
-					WriteData(fid,'data',this.mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
+					WriteData(fid,prefix,'data',this.mass_flux_segments,'name','md.qmu.mass_flux_segments','format','MatArray');
 					flag=true; 
 				}
 				else flag=false; 
-				WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
+				WriteData(fid,prefix,'data',flag,'name','md.qmu.mass_flux_segments_present','format','Boolean');
 			}
 		}//}}}
Index: /issm/trunk-jpl/src/m/classes/qmu.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/qmu.m	(revision 20690)
@@ -161,22 +161,22 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','isdakota','format','Boolean');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','isdakota','format','Boolean');
 			if ~self.isdakota, 
-				WriteData(fid,'data',false,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
+				WriteData(fid,prefix,'data',false,'name','md.qmu.mass_flux_segments_present','format','Boolean');
 				return; 
 			end
-			WriteData(fid,'object',self,'fieldname','partition','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'fieldname','numberofpartitions','format','Integer');
-			WriteData(fid,'object',self,'fieldname','numberofresponses','format','Integer');
-			WriteData(fid,'object',self,'fieldname','variabledescriptors','format','StringArray');
-			WriteData(fid,'object',self,'fieldname','responsedescriptors','format','StringArray');
+			WriteData(fid,prefix,'object',self,'fieldname','partition','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'fieldname','numberofpartitions','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','numberofresponses','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','variabledescriptors','format','StringArray');
+			WriteData(fid,prefix,'object',self,'fieldname','responsedescriptors','format','StringArray');
 			if ~isempty(self.mass_flux_segments), 
-				WriteData(fid,'data',self.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
+				WriteData(fid,prefix,'data',self.mass_flux_segments,'name','md.qmu.mass_flux_segments','format','MatArray');
 				flag=true; 
 			else 
 				flag=false; 
 			end
-			WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
+			WriteData(fid,prefix,'data',flag,'name','md.qmu.mass_flux_segments_present','format','Boolean');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/qmu.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/qmu.py	(revision 20690)
@@ -139,19 +139,19 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','isdakota','format','Boolean')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','isdakota','format','Boolean')
 		if not self.isdakota:
-			WriteData(fid,'data',False,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
+			WriteData(fid,prefix,'data',False,'name','md.qmu.mass_flux_segments_present','format','Boolean');
 			return
-		WriteData(fid,'object',self,'fieldname','partition','format','DoubleMat','mattype',2)
-		WriteData(fid,'object',self,'fieldname','numberofpartitions','format','Integer')
-		WriteData(fid,'object',self,'fieldname','numberofresponses','format','Integer')
-		WriteData(fid,'object',self,'fieldname','variabledescriptors','format','StringArray')
-		WriteData(fid,'object',self,'fieldname','responsedescriptors','format','StringArray')
+		WriteData(fid,prefix,'object',self,'fieldname','partition','format','DoubleMat','mattype',2)
+		WriteData(fid,prefix,'object',self,'fieldname','numberofpartitions','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','numberofresponses','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','variabledescriptors','format','StringArray')
+		WriteData(fid,prefix,'object',self,'fieldname','responsedescriptors','format','StringArray')
 		if not self.mass_flux_segments:
-			WriteData(fid,'data',self.mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
+			WriteData(fid,prefix,'data',self.mass_flux_segments,'name','md.qmu.mass_flux_segments','format','MatArray');
 			flag=True; 
 		else:
 			flag=False; 
-		WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
+		WriteData(fid,prefix,'data',flag,'name','md.qmu.mass_flux_segments_present','format','Boolean');
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/results.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/results.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/results.py	(revision 20690)
@@ -49,5 +49,5 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 		pass
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/rifts.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/rifts.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/rifts.js	(revision 20690)
@@ -76,6 +76,6 @@
 				}
 			}
-			WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer');
-			WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'data',numrifts,'name','md.rifts.numrifts','format','Integer');
+			WriteData(fid,prefix,'data',data,'name','md.rifts.riftstruct','format','DoubleMat','mattype',3);
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/rifts.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/rifts.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/rifts.m	(revision 20690)
@@ -54,5 +54,5 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			%Process rift info
@@ -81,6 +81,6 @@
 			end
 
-			WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer');
-			WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'data',numrifts,'name','md.rifts.numrifts','format','Integer');
+			WriteData(fid,prefix,'data',data,    'name','md.rifts.riftstruct','format','DoubleMat','mattype',3);
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/rifts.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/rifts.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/rifts.py	(revision 20690)
@@ -55,5 +55,5 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		#Process rift info
@@ -80,5 +80,5 @@
 			count+=numpairsforthisrift
 
-		WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer')
-		WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'data',numrifts,'name','md.rifts.numrifts','format','Integer')
+		WriteData(fid,prefix,'data',data,'name','md.rifts.riftstruct','format','DoubleMat','mattype',3)
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/settings.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/settings.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/settings.js	(revision 20690)
@@ -60,11 +60,11 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','results_on_nodes','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','io_gather','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','lowmem','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','output_frequency','format','Integer');
-			WriteData(fid,'object',this,'fieldname','recording_frequency','format','Integer');
-			if (this.waitonlock>0) WriteData(fid,'enum',SettingsWaitonlockEnum(),'data',true,'format','Boolean');
-			else WriteData(fid,'enum',SettingsWaitonlockEnum(),'data',false,'format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','results_on_nodes','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','io_gather','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','lowmem','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','output_frequency','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','recording_frequency','format','Integer');
+			if (this.waitonlock>0) WriteData(fid,prefix,'name','md.settings.waitonlock','data',true,'format','Boolean');
+			else WriteData(fid,prefix,'name','md.settings.waitonlock','data',false,'format','Boolean');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/settings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/settings.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/settings.m	(revision 20690)
@@ -17,5 +17,4 @@
 		upload_port         = 0;
 		upload_filename     = '';
-
 	end
 	methods
@@ -78,15 +77,11 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','results_on_nodes','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','io_gather','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','lowmem','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','output_frequency','format','Integer');
-			WriteData(fid,'object',self,'fieldname','recording_frequency','format','Integer');
-			if self.waitonlock>0,
-				WriteData(fid,'enum',SettingsWaitonlockEnum(),'data',true,'format','Boolean');
-			else
-				WriteData(fid,'enum',SettingsWaitonlockEnum(),'data',false,'format','Boolean');
-			end
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','results_on_nodes','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','io_gather','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','lowmem','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','output_frequency','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','recording_frequency','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','waitonlock','data',self.waitonlock>0,'format','Boolean');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/settings.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/settings.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/settings.py	(revision 20690)
@@ -68,13 +68,13 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','results_on_nodes','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','io_gather','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','lowmem','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','output_frequency','format','Integer')
-		WriteData(fid,'object',self,'fieldname','recording_frequency','format','Integer')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','results_on_nodes','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','io_gather','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','lowmem','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','output_frequency','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','recording_frequency','format','Integer')
 		if self.waitonlock>0:
-			WriteData(fid,'enum',SettingsWaitonlockEnum(),'data',True,'format','Boolean');
+			WriteData(fid,prefix,'name','md.settings.waitonlock','data',True,'format','Boolean');
 		else:
-			WriteData(fid,'enum',SettingsWaitonlockEnum(),'data',False,'format','Boolean');
+			WriteData(fid,prefix,'name','md.settings.waitonlock','data',False,'format','Boolean');
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/slr.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/slr.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/slr.js	(revision 20690)
@@ -21,6 +21,6 @@
 		
 		//tidal love numbers: 
-		self.tide_love_h=0.6149; //degree 2
-		self.tide_love_k=0.3055; //degree 2
+		this.tide_love_h=0.6149; //degree 2
+		this.tide_love_k=0.3055; //degree 2
 
 		//numerical discretization accuracy
@@ -85,18 +85,18 @@
 			this.marshall=function(md,fid) { //{{{
 
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','deltathickness','format','DoubleMat','mattype',1);
-			WriteData(fid,'data',this.sealevel,'mattype',1,'format','DoubleMat','enum',SealevelEnum(),'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','reltol','format','Double');
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','abstol','format','Double');
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','love_h','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','love_k','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','tide_love_h','format','Double');
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','tide_love_k','format','Double');
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','rigid','format','Boolean');
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','elastic','format','Boolean');
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','rotation','format','Boolean');
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','degacc','format','Double');
-			WriteData(fid,'object',this,'class','sealevelrise','fieldname','transitions','format','MatArray');
+			WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','sealevel','mattype',1,'format','DoubleMat','timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','reltol','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','abstol','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','love_h','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','love_k','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','tide_love_h','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','tide_love_k','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','rigid','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','rotation','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
 			
 			//process requested outputs
@@ -109,5 +109,5 @@
 				}
 			}
-			WriteData(fid,'data',outputs,'enum',SealevelriseRequestedOutputsEnum(),'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.slr.requested_outputs','format','StringArray');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/slr.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/slr.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/slr.m	(revision 20690)
@@ -113,20 +113,19 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','deltathickness','format','DoubleMat','mattype',2);
-			%WriteData(fid,'object',self,'class','sealevelrise','fieldname','deltathickness','format','DoubleMat','mattype',1);
-			WriteData(fid,'data',self.sealevel,'mattype',1,'format','DoubleMat','enum',SealevelEnum(),'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','reltol','format','Double');
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','abstol','format','Double');
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','love_h','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','love_k','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','tide_love_k','format','Double');
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','tide_love_h','format','Double');
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','rigid','format','Boolean');
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','elastic','format','Boolean');
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','rotation','format','Boolean');
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','degacc','format','Double');
-			WriteData(fid,'object',self,'class','sealevelrise','fieldname','transitions','format','MatArray');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'fieldname','sealevel','mattype',1,'format','DoubleMat','timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','reltol','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','abstol','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','love_h','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','love_k','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','tide_love_k','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','tide_love_h','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','rigid','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','rotation','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray');
 			
 			%process requested outputs
@@ -137,5 +136,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SealevelriseRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.slr.requested_outputs','format','StringArray');
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/slr.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/slr.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/slr.py	(revision 20690)
@@ -112,19 +112,19 @@
 		return ['Sealevel']
 	# }}}
-	def marshall(self,md,fid): # {{{
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','deltathickness','format','DoubleMat','mattype',1)
-		WriteData(fid,'data',self.sealevel,'mattype',1,'format','DoubleMat','enum',SealevelEnum(),'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','reltol','format','Double')
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','abstol','format','Double')
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','maxiter','format','Integer')
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','love_h','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','love_k','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','tide_love_h','format','Double');
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','tide_love_k','format','Double');
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','rigid','format','Boolean')
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','elastic','format','Boolean')
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','rotation','format','Boolean')
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','degacc','format','Double')
-		WriteData(fid,'object',self,'class','sealevelrise','fieldname','transitions','format','MatArray')
+	def marshall(self,prefix,md,fid): # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','sealevel','mattype',1,'format','DoubleMat','timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','reltol','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','abstol','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','maxiter','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','love_h','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','love_k','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'fieldname','tide_love_h','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','tide_love_k','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','rigid','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','rotation','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray')
 	
 		#process requested outputs
@@ -134,4 +134,4 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',SealevelriseRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.slr.requested_outputs','format','StringArray')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/snowpack.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/snowpack.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/snowpack.m	(revision 20690)
@@ -451,28 +451,25 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'object',self,'class','snowpack','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','snowpack','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','snowpack','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','snowpack','fieldname','restol','format','Double');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','reltol','format','Double');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','abstol','format','Double');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','isnewton','format','Integer');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','FSreconditioning','format','Double');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','viscosity_overshoot','format','Double');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','shelf_dampening','format','Integer');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','snowpack','fieldname','penalty_factor','format','Double');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','rift_penalty_lock','format','Integer');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','rift_penalty_threshold','format','Integer');
-			WriteData(fid,'object',self,'class','snowpack','fieldname','referential','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','snowpack','fieldname','requested_outputs','format','StringArray');
-			WriteData(fid,'data',self.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
-			WriteData(fid,'data',self.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
-			WriteData(fid,'data',self.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','restol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','reltol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','abstol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','isnewton','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','FSreconditioning','format','Double');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','viscosity_overshoot','format','Double');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','shelf_dampening','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','penalty_factor','format','Double');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','rift_penalty_lock','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','rift_penalty_threshold','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','referential','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','snowpack','fieldname','requested_outputs','format','StringArray');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/spheremesh.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/spheremesh.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/spheremesh.m	(revision 20690)
@@ -79,17 +79,17 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','x','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','y','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','z','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','r','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','theta','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','phi','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'fieldname','elements','format','DoubleMat','mattype',2);
-			WriteData(fid,'object',self,'fieldname','numberoflayers','format','Integer');
-			WriteData(fid,'object',self,'fieldname','numberofelements','format','Integer');
-			WriteData(fid,'object',self,'fieldname','numberofvertices','format','Integer');
-			WriteData(fid,'object',self,'fieldname','elementconnectivity','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'fieldname','average_vertex_connectivity','format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','x','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','y','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','z','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','r','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','theta','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','phi','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'fieldname','elements','format','DoubleMat','mattype',2);
+			WriteData(fid,prefix,'object',self,'fieldname','numberoflayers','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','numberofelements','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','numberofvertices','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','elementconnectivity','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'fieldname','average_vertex_connectivity','format','Integer');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/steadystate.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/steadystate.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/steadystate.js	(revision 20690)
@@ -47,6 +47,6 @@
 	} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','reltol','format','Double');
-			WriteData(fid,'object',this,'fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','reltol','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','maxiter','format','Integer');
 
 			//process requested outputs
@@ -59,5 +59,5 @@
 				}
 			}
-			WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum(),'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.steadystate.requested_outputs','format','StringArray');
 		}//}}}
 		this.defaultoutputs = function(md) { //{{{
Index: /issm/trunk-jpl/src/m/classes/steadystate.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/steadystate.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/steadystate.m	(revision 20690)
@@ -56,7 +56,7 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','reltol','format','Double');
-			WriteData(fid,'object',self,'fieldname','maxiter','format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','reltol','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','maxiter','format','Integer');
 
 			%process requested outputs
@@ -67,5 +67,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.steadystate.requested_outputs','format','StringArray');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/steadystate.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/steadystate.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/steadystate.py	(revision 20690)
@@ -62,7 +62,7 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','reltol','format','Double')
-		WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','reltol','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','maxiter','format','Integer')
 
 		#process requested outputs
@@ -72,4 +72,4 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.steadystate.requested_outputs','format','StringArray')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/stressbalance.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/stressbalance.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/stressbalance.js	(revision 20690)
@@ -138,23 +138,23 @@
 		this.marshall=function(md,fid) { //{{{
 
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
 
 			var yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','restol','format','Double');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','reltol','format','Double');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts);
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','isnewton','format','Integer');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','FSreconditioning','format','Double');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','viscosity_overshoot','format','Double');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','shelf_dampening','format','Integer');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','penalty_factor','format','Double');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer');
-			WriteData(fid,'object',this,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','restol','format','Double');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','reltol','format','Double');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts);
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','isnewton','format','Integer');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','FSreconditioning','format','Double');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','viscosity_overshoot','format','Double');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','shelf_dampening','format','Integer');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','penalty_factor','format','Double');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer');
+			WriteData(fid,prefix,'object',this,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1);
 
 			var lx=NewArrayFill(this.loadingforce.length,0); for(var i=0;i<lx.length;i++)lx[i]=this.loadingforce[i][0];
@@ -162,7 +162,7 @@
 			var lz=NewArrayFill(this.loadingforce.length,0); for(var i=0;i<lx.length;i++)lz[i]=this.loadingforce[i][2];
 
-			WriteData(fid,'data',lx,'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum());
-			WriteData(fid,'data',ly,'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum());
-			WriteData(fid,'data',lz,'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum());
+			WriteData(fid,prefix,'data',lx,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcex');
+			WriteData(fid,prefix,'data',ly,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcey');
+			WriteData(fid,prefix,'data',lz,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcez');
 
 			//process requested outputs
@@ -175,5 +175,5 @@
 				}
 			}
-			WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum(),'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.stressbalance.requested_outputs','format','StringArray');
 		}//}}}
 		this.defaultoutputs = function(md){ // {{{
Index: /issm/trunk-jpl/src/m/classes/stressbalance.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/stressbalance.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/stressbalance.m	(revision 20690)
@@ -1,3 +1,3 @@
-%STRESSBALANC Eclass definition
+%STRESSBALANCE class definition
 %
 %   Usage:
@@ -173,30 +173,30 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+		function marshall(self,prefix,md,fid) % {{{
+
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3);
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','restol','format','Double');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','reltol','format','Double');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts);
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','viscosity_overshoot','format','Double');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','shelf_dampening','format','Integer');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','penalty_factor','format','Double');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer');
-			WriteData(fid,'object',self,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','restol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','reltol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','viscosity_overshoot','format','Double');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','shelf_dampening','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','penalty_factor','format','Double');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1);
 
 			if size(self.loadingforce,2)==3,
-				WriteData(fid,'data',self.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
-				WriteData(fid,'data',self.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
-				WriteData(fid,'data',self.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
+				WriteData(fid,prefix,'data',self.loadingforce(:,1),'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcex');
+				WriteData(fid,prefix,'data',self.loadingforce(:,2),'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcey');
+				WriteData(fid,prefix,'data',self.loadingforce(:,3),'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcez');
 			end
 
@@ -208,5 +208,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.stressbalance.requested_outputs','format','StringArray');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/stressbalance.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/stressbalance.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/stressbalance.py	(revision 20690)
@@ -174,24 +174,24 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
 		yts=365.0*24.0*3600.0
 
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','restol','format','Double')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','reltol','format','Double')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts)
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','viscosity_overshoot','format','Double')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','maxiter','format','Integer')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','shelf_dampening','format','Integer')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3)
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','penalty_factor','format','Double')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer')
-		WriteData(fid,'object',self,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1)
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','restol','format','Double')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','reltol','format','Double')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts)
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','viscosity_overshoot','format','Double')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','maxiter','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','shelf_dampening','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','penalty_factor','format','Double')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer')
+		WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1)
 		
 		if isinstance(self.loadingforce, (list, tuple, numpy.ndarray)):
@@ -202,7 +202,7 @@
 			lx=float('NaN'); ly=float('NaN'); lz=float('NaN');
 
-		WriteData(fid,'data',lx,'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum())
-		WriteData(fid,'data',ly,'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum())
-		WriteData(fid,'data',lz,'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum())
+		WriteData(fid,prefix,'data',lx,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcex')
+		WriteData(fid,prefix,'data',ly,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcey')
+		WriteData(fid,prefix,'data',lz,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcez')
 
 		#process requested outputs
@@ -212,4 +212,4 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.stressbalance.requested_outputs','format','StringArray')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/taoinversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/taoinversion.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/taoinversion.m	(revision 20690)
@@ -159,43 +159,39 @@
 			disp('   503: ThicknessAbsGradient');
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
-			WriteData(fid,'enum',InversionTypeEnum(),'data',1,'format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean');
+			WriteData(fid,prefix,'name','md.inversion.type','data',1,'format','Integer');
 			if ~self.iscontrol, return; end
-			WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');
-			WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
-			WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',self,'class','inversion','fieldname','fatol','format','Double');
-			WriteData(fid,'object',self,'class','inversion','fieldname','frtol','format','Double');
-			WriteData(fid,'object',self,'class','inversion','fieldname','gatol','format','Double');
-			WriteData(fid,'object',self,'class','inversion','fieldname','grtol','format','Double');
-			WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double');
-			WriteData(fid,'object',self,'class','inversion','fieldname','algorithm','format','String');
-			WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
-			WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','fatol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','frtol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gatol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','grtol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','algorithm','format','String');
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',1);
 
 			%process control parameters
 			num_control_parameters=numel(self.control_parameters);
-			data=zeros(1,num_control_parameters);
-			for i=1:num_control_parameters,
-				data(i)=StringToEnum(self.control_parameters{i});
-			end
-			WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray');
+			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer');
 
 			%process cost functions
 			num_cost_functions=size(self.cost_functions,2);
 			data=marshallcostfunctions(self.cost_functions);
-			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
-			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer');
 		end % }}}
 	end
Index: /issm/trunk-jpl/src/m/classes/taoinversion.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/taoinversion.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/taoinversion.py	(revision 20690)
@@ -166,35 +166,34 @@
 
 			yts=365.0*24.0*3600.0;
-			WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean')
-			WriteData(fid,'enum',InversionTypeEnum(),'data',1,'format','Integer')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean')
+			WriteData(fid,prefix,'name','md.inversion.type','data',1,'format','Integer')
 			if not self.iscontrol:
 				return
-			WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean')
-			WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer')
-			WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer')
-			WriteData(fid,'object',self,'class','inversion','fieldname','fatol','format','Double')
-			WriteData(fid,'object',self,'class','inversion','fieldname','frtol','format','Double')
-			WriteData(fid,'object',self,'class','inversion','fieldname','gatol','format','Double')
-			WriteData(fid,'object',self,'class','inversion','fieldname','grtol','format','Double')
-			WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double')
-			WriteData(fid,'object',self,'class','inversion','fieldname','algorithm','format','String')
-			WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
-			WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3)
-			WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3)
-			WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts)
-			WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts)
-			WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts)
-			WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1)
-			WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',1)
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxsteps','format','Integer')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','maxiter','format','Integer')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','fatol','format','Double')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','frtol','format','Double')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gatol','format','Double')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','grtol','format','Double')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','gttol','format','Double')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','algorithm','format','String')
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3)
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3)
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts)
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1)
+			WriteData(fid,prefix,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',1)
 
 			#process control parameters
 			num_control_parameters = numpy.numel(self.control_parameters)
-			data = numpy.array([StringToEnum(self.control_parameter[0]) for control_parameter in self.control_parameters]).reshape(1,-1)
-			WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3)
-			WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer')
+			WriteData(fid,prefix,'object',self,'fieldname','control_parameters','format','StringArray')
+			WriteData(fid,prefix,'data',num_control_parameters,'name','md.inversion.num_control_parameters','format','Integer')
 
 			#process cost functions
 			num_cost_functions = numpy.size(self.cost_functions,2)
 			data= marshallcostfunctions(self.cost_functions)
-			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
-			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer')
+			WriteData(fid,prefix,'data',data,'name','md.inversion.cost_functions','format','DoubleMat','mattype',3)
+			WriteData(fid,prefix,'data',num_cost_functions,'name','md.inversion.num_cost_functions','format','Integer')
Index: /issm/trunk-jpl/src/m/classes/thermal.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/thermal.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/thermal.js	(revision 20690)
@@ -85,13 +85,13 @@
 	} // }}} 
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','spctemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',this,'fieldname','penalty_threshold','format','Integer');
-			WriteData(fid,'object',this,'fieldname','stabilization','format','Integer');
-			WriteData(fid,'object',this,'fieldname','reltol','format','Double');
-			WriteData(fid,'object',this,'fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',this,'fieldname','penalty_lock','format','Integer');
-			WriteData(fid,'object',this,'fieldname','penalty_factor','format','Double');
-			WriteData(fid,'object',this,'fieldname','isenthalpy','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isdynamicbasalspc','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','spctemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',this,'fieldname','penalty_threshold','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','stabilization','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','reltol','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','penalty_lock','format','Integer');
+			WriteData(fid,prefix,'object',this,'fieldname','penalty_factor','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','isenthalpy','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isdynamicbasalspc','format','Boolean');
 
 			//process requested outputs
@@ -104,5 +104,5 @@
 				}
 			}
-			WriteData(fid,'data',outputs,'enum',ThermalRequestedOutputsEnum(),'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.thermal.requested_outputs','format','StringArray');
         	}//}}}
 		this.defaultoutputs = function(md) { //{{{
Index: /issm/trunk-jpl/src/m/classes/thermal.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/thermal.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/thermal.m	(revision 20690)
@@ -113,14 +113,14 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','spctemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
-			WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer');
-			WriteData(fid,'object',self,'fieldname','stabilization','format','Integer');
-			WriteData(fid,'object',self,'fieldname','reltol','format','Double');
-			WriteData(fid,'object',self,'fieldname','maxiter','format','Integer');
-			WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer');
-			WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double');
-			WriteData(fid,'object',self,'fieldname','isenthalpy','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isdynamicbasalspc','format','Boolean');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','spctemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
+			WriteData(fid,prefix,'object',self,'fieldname','penalty_threshold','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','reltol','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','maxiter','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer');
+			WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','isenthalpy','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isdynamicbasalspc','format','Boolean');
 
 			%process requested outputs
@@ -131,5 +131,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',ThermalRequestedOutputsEnum(),'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.thermal.requested_outputs','format','StringArray');
         	end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/thermal.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/thermal.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/thermal.py	(revision 20690)
@@ -110,14 +110,14 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','spctemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
-		WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer')
-		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
-		WriteData(fid,'object',self,'fieldname','reltol','format','Double');
-		WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
-		WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer')
-		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
-		WriteData(fid,'object',self,'fieldname','isenthalpy','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isdynamicbasalspc','format','Boolean');
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','spctemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
+		WriteData(fid,prefix,'object',self,'fieldname','penalty_threshold','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','stabilization','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','reltol','format','Double');
+		WriteData(fid,prefix,'object',self,'fieldname','maxiter','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer')
+		WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','isenthalpy','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isdynamicbasalspc','format','Boolean');
 
 		#process requested outputs
@@ -127,4 +127,4 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',ThermalRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.thermal.requested_outputs','format','StringArray')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/timestepping.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/timestepping.js	(revision 20690)
@@ -54,10 +54,10 @@
 			scale = 365.0*24.0*3600.0;
 			
-			WriteData(fid,'object',this,'fieldname','start_time','format','Double','scale',scale);
-			WriteData(fid,'object',this,'fieldname','final_time','format','Double','scale',scale);
-			WriteData(fid,'object',this,'fieldname','time_step','format','Double','scale',scale);
-			WriteData(fid,'object',this,'fieldname','time_adapt','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','cfl_coefficient','format','Double');
-			WriteData(fid,'object',this,'fieldname','interp_forcings','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','start_time','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',this,'fieldname','final_time','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',this,'fieldname','time_step','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',this,'fieldname','time_adapt','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','cfl_coefficient','format','Double');
+			WriteData(fid,prefix,'object',this,'fieldname','interp_forcings','format','Boolean');
 
 		}//}}}
Index: /issm/trunk-jpl/src/m/classes/timestepping.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 20690)
@@ -61,13 +61,13 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
+		function marshall(self,prefix,md,fid) % {{{
 
 			scale = 365.0*24.0*3600.0;
-			WriteData(fid,'object',self,'fieldname','start_time','format','Double','scale',scale);
-			WriteData(fid,'object',self,'fieldname','final_time','format','Double','scale',scale);
-			WriteData(fid,'object',self,'fieldname','time_step','format','Double','scale',scale);
-			WriteData(fid,'object',self,'fieldname','time_adapt','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','cfl_coefficient','format','Double');
-			WriteData(fid,'object',self,'fieldname','interp_forcings','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','start_time','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',scale);
+			WriteData(fid,prefix,'object',self,'fieldname','time_adapt','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','cfl_coefficient','format','Double');
+			WriteData(fid,prefix,'object',self,'fieldname','interp_forcings','format','Boolean');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/timestepping.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/timestepping.py	(revision 20690)
@@ -64,13 +64,13 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
+	def marshall(self,prefix,md,fid):    # {{{
 
                 yts=md.constants.yts
 
-		WriteData(fid,'object',self,'fieldname','start_time','format','Double','scale',yts)
-		WriteData(fid,'object',self,'fieldname','final_time','format','Double','scale',yts)
-		WriteData(fid,'object',self,'fieldname','time_step','format','Double','scale',yts)
-		WriteData(fid,'object',self,'fieldname','time_adapt','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','cfl_coefficient','format','Double')
-		WriteData(fid,'object',self,'fieldname','interp_forcings','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','start_time','format','Double','scale',yts)
+		WriteData(fid,prefix,'object',self,'fieldname','final_time','format','Double','scale',yts)
+		WriteData(fid,prefix,'object',self,'fieldname','time_step','format','Double','scale',yts)
+		WriteData(fid,prefix,'object',self,'fieldname','time_adapt','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','cfl_coefficient','format','Double')
+		WriteData(fid,prefix,'object',self,'fieldname','interp_forcings','format','Boolean')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/trans.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/trans.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/trans.js	(revision 20690)
@@ -66,15 +66,15 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'object',this,'fieldname','issmb','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','ismasstransport','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isstressbalance','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isthermal','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isgroundingline','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isgia','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isdamageevolution','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','ishydrology','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','ismovingfront','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','isslr','format','Boolean');
-			WriteData(fid,'object',this,'fieldname','iscoupler','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','issmb','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','ismasstransport','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isstressbalance','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isthermal','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isgroundingline','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isgia','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isdamageevolution','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','ishydrology','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','ismovingfront','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','isslr','format','Boolean');
+			WriteData(fid,prefix,'object',this,'fieldname','iscoupler','format','Boolean');
 
 			//process requested outputs
@@ -87,5 +87,5 @@
 				}
 			}			
-			WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum(),'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.transient.requested_outputs','format','StringArray');
 		}//}}}
 		this.defaultoutputs = function(md) { //{{{
Index: /issm/trunk-jpl/src/m/classes/transient.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/transient.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/transient.m	(revision 20690)
@@ -107,16 +107,16 @@
 
 		end % }}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'object',self,'fieldname','issmb','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','ismasstransport','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isstressbalance','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isthermal','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isgroundingline','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isgia','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isdamageevolution','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','ishydrology','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','ismovingfront','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','isslr','format','Boolean');
-			WriteData(fid,'object',self,'fieldname','iscoupler','format','Boolean');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'object',self,'fieldname','issmb','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','ismasstransport','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isstressbalance','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isthermal','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isgroundingline','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isgia','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isdamageevolution','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','ishydrology','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','ismovingfront','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','isslr','format','Boolean');
+			WriteData(fid,prefix,'object',self,'fieldname','iscoupler','format','Boolean');
 
 			%process requested outputs
@@ -127,5 +127,5 @@
 				outputs      = [outputs defaultoutputs(self,md)]; %add defaults
 			end
-			WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,prefix,'data',outputs,'name','md.transient.requested_outputs','format','StringArray');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/transient.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/transient.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/transient.py	(revision 20690)
@@ -113,16 +113,16 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','issmb','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','ismasstransport','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isstressbalance','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isthermal','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isgroundingline','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isgia','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isdamageevolution','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','ishydrology','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','ismovingfront','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isslr','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','iscoupler','format','Boolean')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'object',self,'fieldname','issmb','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','ismasstransport','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isstressbalance','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isthermal','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isgroundingline','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isgia','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isdamageevolution','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','ishydrology','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','ismovingfront','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','isslr','format','Boolean')
+		WriteData(fid,prefix,'object',self,'fieldname','iscoupler','format','Boolean')
 
 		#process requested outputs
@@ -132,4 +132,4 @@
 			outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
 			outputs    =outputscopy
-		WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum(),'format','StringArray')
+		WriteData(fid,prefix,'data',outputs,'name','md.transient.requested_outputs','format','StringArray')
 	# }}}
Index: /issm/trunk-jpl/src/m/classes/verbose.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/verbose.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/verbose.js	(revision 20690)
@@ -44,5 +44,5 @@
 		} // }}}
 		this.marshall=function(md,fid) { //{{{
-			WriteData(fid,'data',this.VerboseToBinary(),'enum',VerboseEnum(),'format','Integer');
+			WriteData(fid,prefix,'data',this.VerboseToBinary(),'name','md.verbose','format','Integer');
 		}//}}}
 		this.VerboseToBinary = function () { //{{{
Index: /issm/trunk-jpl/src/m/classes/verbose.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/verbose.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/verbose.m	(revision 20690)
@@ -132,6 +132,6 @@
 		end
 		%}}}
-		function marshall(self,md,fid) % {{{
-			WriteData(fid,'data',VerboseToBinary(self),'enum',VerboseEnum(),'format','Integer');
+		function marshall(self,prefix,md,fid) % {{{
+			WriteData(fid,prefix,'data',VerboseToBinary(self),'name','md.verbose','format','Integer');
 		end % }}}
 		function savemodeljs(self,fid,modelname) % {{{
Index: /issm/trunk-jpl/src/m/classes/verbose.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/verbose.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/classes/verbose.py	(revision 20690)
@@ -134,5 +134,5 @@
 		return md
 	# }}}
-	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'data',self.VerboseToBinary(),'enum',VerboseEnum(),'format','Integer')
+	def marshall(self,prefix,md,fid):    # {{{
+		WriteData(fid,prefix,'data',self.VerboseToBinary(),'name','md.verbose','format','Integer')
 	# }}}
Index: /issm/trunk-jpl/src/m/solve/WriteData.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/WriteData.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/solve/WriteData.js	(revision 20690)
@@ -1,3 +1,3 @@
-function WriteData(fid){
+function WriteData(fid,prefix){
 //WRITEDATA - write model field into binary buffer 
 //
@@ -17,17 +17,16 @@
 		obj       = options.getfieldvalue('object');
 		fieldname = options.getfieldvalue('fieldname');
-		if (options.exist('enum')){
-			enumm = options.getfieldvalue('enum');
+		name      = options.getfieldvalue('name',[prefix+'.'+fieldname ]);
+		if (options.exist('data')){
+			data = options.getfieldvalue('data');
 		}
 		else{
-			classname = options.getfieldvalue('class',obj.classname());
-			enumm = BuildEnum(classname  + '_' + fieldname);
-		}
-		dataini  = obj[fieldname];
+			dataini  = obj[fieldname];
+		}
 	}
 	else{
 		//No processing required
 		dataini = options.getfieldvalue('data');
-		enumm = options.getfieldvalue('enum');
+		namem = options.getfieldvalue('name');
 	}
 	if (IsArray(dataini)){
@@ -73,6 +72,7 @@
 	}
 
-	//Step 1: write the enum to identify this record uniquely
-	fid.fwrite(enumm,'int'); 
+	//Step 1: write the name to identify this record uniquely
+	fid.fwrite(name.length,'int'); 
+	fid.fwrite(name,'char'); 
 
 	//Step 2: write the data itself.
@@ -278,24 +278,4 @@
 }
 
-function BuildEnum(string){ // {{{
-	//BUILDENUM - build enum out of string
-	//
-	//   Usage:
-	//      enumm=BuildEnum(string)
-
-	var index;
-	while( string.indexOf('_') !=-1){
-		index=string.indexOf('_');
-		string=string.slice(0,index)+string[index+1].toUpperCase() + string.slice(index+2);
-	}
-
-	//take first letter of string and make it uppercase: 
-	string = string.charAt(0).toUpperCase() + string.slice(1);
-
-	//Get Enum
-	enumm=StringToEnum(string); 
-
-	return enumm;
-} // }}}
 function FormatToCode(format){ // {{{
 	//This routine takes the format string, and hardcodes it into an integer, which 
Index: /issm/trunk-jpl/src/m/solve/WriteData.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/WriteData.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/solve/WriteData.m	(revision 20690)
@@ -1,3 +1,3 @@
-function WriteData(fid,varargin)
+function WriteData(fid,prefix,varargin)
 %WRITEDATA - write model field in binary file
 %
@@ -10,18 +10,16 @@
 %Get data properties
 if exist(options,'object');
-	%This is a object field, construct enum and data
 	obj       = getfieldvalue(options,'object');
 	fieldname = getfieldvalue(options,'fieldname');
 	classname = getfieldvalue(options,'class',class(obj));
-	if exist(options,'enum'),
-		enum = getfieldvalue(options,'enum');
+	name      = getfieldvalue(options,'name',[prefix '.' fieldname ]);
+	if exist(options,'data'),
+		data = getfieldvalue(options,'data');
 	else
-		enum = BuildEnum([classname '_' fieldname]);
-	end
-	data      = obj.(fieldname);
+		data = obj.(fieldname);
+	end
 else
-	%No processing required
 	data = getfieldvalue(options,'data');
-	enum = getfieldvalue(options,'enum');
+	name = getfieldvalue(options,'name');
 end
 format  = getfieldvalue(options,'format');
@@ -48,6 +46,7 @@
 end
 
-%Step 1: write the enum to identify this record uniquely
-fwrite(fid,enum,'int'); 
+%Step 1: write the name to identify this record uniquely
+fwrite(fid,numel(name),'int'); 
+fwrite(fid,name,'char'); 
 
 %Step 2: write the data itself.
@@ -237,24 +236,4 @@
 end
 
-function enum=BuildEnum(string) % {{{
-%BUILDENUM - build enum out of string
-%
-%   Usage:
-%      enum=BuildEnum(string)
-
-	if findstr(string,'_'),
-		indices=findstr(string,'_');
-		for i=1:length(indices),
-			string(indices(i)+1)=upper(string(indices(i)+1));
-		end
-		string(indices)=[];
-	end
-
-	%take first letter of string and make it uppercase: 
-	string(1)=upper(string(1));
-
-	%Get Enum
-	enum=StringToEnum(string); 
-end % }}}
 function code=FormatToCode(format) % {{{
 %This routine takes the format string, and hardcodes it into an integer, which 
Index: /issm/trunk-jpl/src/m/solve/WriteData.py
===================================================================
--- /issm/trunk-jpl/src/m/solve/WriteData.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/solve/WriteData.py	(revision 20690)
@@ -7,5 +7,5 @@
 from EnumToString import EnumToString
 
-def WriteData(fid,*args):
+def WriteData(fid,prefix,*args):
 	"""
 	WRITEDATA - write model field in binary file
@@ -24,13 +24,13 @@
 		fieldname = options.getfieldvalue('fieldname')
 		classname = options.getfieldvalue('class',str(type(obj)).rsplit('.')[-1].split("'")[0])
-		if options.exist('enum'):
-			enum = options.getfieldvalue('enum')
+		name      = options.getfieldvalue('name',prefix+'.'+fieldname);
+		if options.exist('data'):
+			data = options.getfieldvalue('data')
 		else:
-			enum = BuildEnum(classname+'_'+fieldname)
-		data      = getattr(obj,fieldname)
+			data      = getattr(obj,fieldname)
 	else:
 		#No processing required
 		data = options.getfieldvalue('data')
-		enum = options.getfieldvalue('enum')
+		name = options.getfieldvalue('name')
 	format  = options.getfieldvalue('format')
 	mattype = options.getfieldvalue('mattype',0)    #only required for matrices
@@ -59,5 +59,6 @@
 
 	#Step 1: write the enum to identify this record uniquely
-	fid.write(struct.pack('i',enum)) 
+	fid.write(struct.pack('i',len(name)))
+	fid.write(struct.pack('%ds' % len(name),name)) 
 
 	#Step 2: write the data itself.
@@ -288,27 +289,4 @@
 		raise TypeError('WriteData error message: data type: %d not supported yet! (%s)' % (format,EnumToString(enum)[0]))
 	# }}}
-
-def BuildEnum(string): # {{{
-	"""
-	BUILDENUM - build enum out of string
- 
-    Usage:
-       enum=BuildEnum(string)
-	"""
-
-	if '_' in string:
-		substrs=string.split('_')
-		string=''
-		for substr in substrs:
-			string+=substr[0].upper()+substr[1:]
-	else:
-		#take first letter of string and make it uppercase: 
-		string=string[0].upper()+string[1:]
-
-	#Get Enum
-	enum=StringToEnum(string)[0]
-
-	return enum
-# }}}
 
 def FormatToCode(format): # {{{
@@ -342,3 +320,2 @@
 	return code
 # }}}
-
Index: /issm/trunk-jpl/src/m/solve/marshall.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/marshall.js	(revision 20689)
+++ /issm/trunk-jpl/src/m/solve/marshall.js	(revision 20690)
@@ -15,7 +15,4 @@
 	var fid=new fileptr('mode','w');
 
-	//First, write MaximumNumberOfEnum to make sure that the Enums are synchronized
-	WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum(),'data',true,'format','Boolean');
-
 	//Go through all model fields: check that it is a class and call checkconsistency
 	for (field in md){
@@ -30,9 +27,9 @@
 
 		//Marshall current object
-		md[field].marshall(md,fid);
+		md[field].marshall(['md.'+field],md,fid);
 	}
 
-	//Last, write MaximumNumberOfEnum+1 to make sure that the binary file is not corrupt
-	WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum()+1,'data',true,'format','Boolean');
+	//Last, write "md.EOF" to make sure that the binary file is not corrupt
+	WriteData(fid,'XXX','name','md.EOF','data',true,'format','Boolean');
 	return fid;
 }
Index: /issm/trunk-jpl/src/m/solve/marshall.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/marshall.m	(revision 20689)
+++ /issm/trunk-jpl/src/m/solve/marshall.m	(revision 20690)
@@ -18,7 +18,4 @@
 end
 
-%First, write MaximumNumberOfEnum to make sure that the Enums are synchronized
-WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum(),'data',true,'format','Boolean');
-
 %Go through all model fields: check that it is a class and call checkconsistency
 fields=properties('model');
@@ -38,9 +35,9 @@
 	%Marshall current object
 	%disp(['marshalling ' field '...']);
-	marshall(md.(field),md,fid);
+	marshall(md.(field),['md.' field],md,fid);
 end
 
-%Last, write MaximumNumberOfEnum+1 to make sure that the binary file is not corrupt
-WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum()+1,'data',true,'format','Boolean');
+%Last, write "md.EOF" to make sure that the binary file is not corrupt
+WriteData(fid,'XXX','name','md.EOF','data',true,'format','Boolean');
 
 %close file
Index: /issm/trunk-jpl/src/m/solve/marshall.py
===================================================================
--- /issm/trunk-jpl/src/m/solve/marshall.py	(revision 20689)
+++ /issm/trunk-jpl/src/m/solve/marshall.py	(revision 20690)
@@ -21,7 +21,4 @@
 		raise IOError("marshall error message: could not open '%s.bin' file for binary writing." % md.miscellaneous.name)
 
-	#First, write MaximumNumberOfEnum to make sure that the Enums are synchronized
-	WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum(),'data',True,'format','Boolean')
-
 	#Go through all model fields: check that it is a class and call checkconsistency
 	fields=vars(md)
@@ -40,8 +37,8 @@
 		#Marshall current object
 		#print "marshalling %s ..." % field
-		exec("md.%s.marshall(md,fid)" % field)
+		exec("md.%s.marshall('md.%s',md,fid)" %(field,field))
 
-	#Last, write MaximumNumberOfEnum+1 to make sure that the binary file is not corrupt
-	WriteData(fid,'enum',MaximumNumberOfDefinitionsEnum()+1,'data',True,'format','Boolean');
+	#Last, write "md.EOF" to make sure that the binary file is not corrupt
+	WriteData(fid,'XXX','name','md.EOF','data',True,'format','Boolean');
 
 	#close file
