Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 20887)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 20888)
@@ -99,4 +99,5 @@
 					./shared/io/Print/PrintfFunction.cpp\
 					./shared/io/Comm/IssmComm.cpp\
+					./shared/io/Marshalling/IoCodeConversions.cpp \
 					./shared/LatLong/Ll2xyx.cpp\
 					./shared/LatLong/Xy2llx.cpp\
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 20887)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 20888)
@@ -88,30 +88,8 @@
 				sscanf(variabledescriptors[i],"scaled_%s",tag);
 
-				/*Convert tag to field name*/
-				char* fieldname = NULL;
+				/*Get field name and input enum from tag*/
+				char* fieldname  = NULL;
 				int   param_enum = -1;
-				if(strcmp(tag,"Thickness")==0){
-					const char* field = "md.geometry.thickness";
-					param_enum        = ThicknessEnum;
-					fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
-				}
-				else if(strcmp(tag,"MaterialsRheologyB")==0){
-					const char* field = "md.materials.rheology_B";
-					param_enum        = MaterialsRheologyBEnum;
-					fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
-				}
-				else if(strcmp(tag,"SmbMassBalance")==0){
-					const char* field = "md.smb.mass_balance";
-					param_enum        = SmbMassBalanceEnum;
-					fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
-				}
-				else if(strcmp(tag,"FrictionCoefficient")==0){
-					const char* field = "md.friction.coefficient";
-					param_enum        = FrictionCoefficientEnum;
-					fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
-				}
-				else{
-					_error_("Tag \""<<tag<<"\" not supported yet");
-				}
+				FieldAndEnumFromCode(&param_enum,&fieldname,tag);
 
 				/*Recover data: */
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 20888)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 20888)
@@ -0,0 +1,43 @@
+#include <math.h>
+#include <float.h>
+#include <cstring>
+
+#include "../../Enum/EnumDefinitions.h"
+#include "../../MemOps/MemOps.h"
+#include "../../Exceptions/exceptions.h"
+
+void FieldAndEnumFromCode(int* out_enum,char** pfield,const char* string_in){
+
+	/*output*/
+	char* fieldname = NULL;
+	int   param_enum = -1;
+
+	if(strcmp(string_in,"Thickness")==0){
+		const char* field = "md.geometry.thickness";
+		param_enum        = ThicknessEnum;
+		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+	}
+	else if(strcmp(string_in,"MaterialsRheologyB")==0){
+		const char* field = "md.materials.rheology_B";
+		param_enum        = MaterialsRheologyBEnum;
+		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+	}
+	else if(strcmp(string_in,"SmbMassBalance")==0){
+		const char* field = "md.smb.mass_balance";
+		param_enum        = SmbMassBalanceEnum;
+		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+	}
+	else if(strcmp(string_in,"FrictionCoefficient")==0){
+		const char* field = "md.friction.coefficient";
+		param_enum        = FrictionCoefficientEnum;
+		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
+	}
+	else{
+		_error_("Field \""<<string_in<<"\" not supported yet");
+	}
+
+	/*Assign output pointers*/
+	*out_enum = param_enum;
+	*pfield   = fieldname;
+	return;
+}
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h	(revision 20888)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.h	(revision 20888)
@@ -0,0 +1,6 @@
+#ifndef _IOCODECONVERSION_H_
+#define _IOCODECONVERSION_H_
+
+void FieldAndEnumFromCode(int* out_enum,char** pfield,const char* string_in);
+
+#endif	
Index: /issm/trunk-jpl/src/c/shared/io/io.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/io.h	(revision 20887)
+++ /issm/trunk-jpl/src/c/shared/io/io.h	(revision 20888)
@@ -16,4 +16,5 @@
 #include "./Print/Print.h"
 #include "./Marshalling/Marshalling.h"
+#include "./Marshalling/IoCodeConversions.h"
 
 #endif	/* _IO_H_ */
