Index: /issm/trunk-jpl/src/m/classes/SMBforcing.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBforcing.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/SMBforcing.js	(revision 21065)
@@ -34,8 +34,8 @@
     this.checkconsistency = function(md,solution,analyses) { //{{{
 
-        if(ArrayAnyEqual(ArrayIsMember(MasstransportAnalysisEnum(),analyses),1)){
+        if(ArrayAnyEqual(ArrayIsMember('MasstransportAnalysis',analyses),1)){
             checkfield(md,'fieldname','smb.mass_balance','timeseries',1,'NaN',1,'Inf',1);
         }
-        if(ArrayAnyEqual(ArrayIsMember(BalancethicknessAnalysisEnum(),analyses),1)){
+        if(ArrayAnyEqual(ArrayIsMember('BalancethicknessAnalysis',analyses),1)){
             checkfield(md,'fieldname','smb.mass_balance','size',[md.mesh.numberofvertices,1],'NaN',1,'Inf',1);
         }
Index: /issm/trunk-jpl/src/m/classes/autodiff.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/autodiff.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/autodiff.js	(revision 21065)
@@ -112,8 +112,8 @@
 					indep=this.independents[i];
 
-					names[i]=StringToEnum(indep.name);
+					names[i]=indep.name;
 					types[i]=indep.typetoscalar();
 				}
-				WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','IntMat','mattype',3);
+				WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','StringArray');
 				WriteData(fid,prefix,'data',types,'name','md.autodiff.independent_object_types','format','IntMat','mattype',3);
 			}
Index: /issm/trunk-jpl/src/m/classes/balancethickness.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/balancethickness.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/balancethickness.js	(revision 21065)
@@ -26,5 +26,5 @@
 		this.checkconsistency = function(md,solution,analyses){ // {{{
 			//Early return
-			if (solution!=BalancethicknessSolutionEnum())return;
+			if (solution!='BalancethicknessSolution')return;
 
 			checkfield(md,'fieldname','balancethickness.spcthickness');
Index: /issm/trunk-jpl/src/m/classes/basalforcings.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/basalforcings.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/basalforcings.js	(revision 21065)
@@ -41,6 +41,6 @@
 		this.checkconsistency = function(md,solution,analyses) { //{{{
 
-			if(ArrayAnyEqual(ArrayIsMember(MasstransportAnalysisEnum(),analyses),1)){
-				if (!(solution==TransientSolutionEnum() & md.trans.ismasstransport==0)){
+			if(ArrayAnyEqual(ArrayIsMember('MasstransportAnalysis',analyses),1)){
+				if (!(solution=='TransientSolution' & md.trans.ismasstransport==0)){
 					checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
 					checkfield(md,'fieldname','basalforcings.floatingice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
@@ -48,10 +48,10 @@
 			}
 
-			if(ArrayAnyEqual(ArrayIsMember(BalancethicknessAnalysisEnum(),analyses),1)){
+			if(ArrayAnyEqual(ArrayIsMember('BalancethicknessAnalysis',analyses),1)){
 				checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
 				checkfield(md,'fieldname','basalforcings.floatingice_melting_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
 			}
-			if(ArrayAnyEqual(ArrayIsMember(ThermalAnalysisEnum(),analyses),1)){
-				if (!(solution==TransientSolutionEnum() & md.trans.isthermal==0)){
+			if(ArrayAnyEqual(ArrayIsMember('ThermalAnalysis',analyses),1)){
+				if (!(solution=='TransientSolution' & md.trans.isthermal==0)){
 					checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
 					checkfield(md,'fieldname','basalforcings.floatingice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
Index: /issm/trunk-jpl/src/m/classes/calving.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/calving.js	(revision 21065)
@@ -26,5 +26,5 @@
 	this.checkconsistency = function(md,solution,analyses) { // {{{
 		//Early return
-		if (solution!=TransientSolutionEnum() | md.trans.ismovingfront==0) return;
+		if (solution!='TransientSolution' | md.trans.ismovingfront==0) return;
 
 		checkfield(md,'fieldname','calving.calvingrate(1:md.mesh.numberofvertices,:)','>=',0,'timeseries',1,'NaN',1,'Inf',1);
Index: /issm/trunk-jpl/src/m/classes/clusters/generic.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 21065)
@@ -43,5 +43,5 @@
 			fid=fopen(modelname+'.queue','w');
 			fprintf(fid,'#!%s\n',cluster.shell);
-			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,executable,EnumToString(solution),cluster.executionpath+'/'+dirname,modelname,modelname,modelname);					
+			fprintf(fid,'mpiexec -np %i %s/%s %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,executable,solution,cluster.executionpath+'/'+dirname,modelname,modelname,modelname);					
 			fclose(fid);
 	} //}}}
Index: /issm/trunk-jpl/src/m/classes/damage.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/damage.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/damage.js	(revision 21065)
@@ -92,5 +92,5 @@
 			}
 			else if (this.law!=0){
-				if (solution==DamageEvolutionSolutionEnum()){
+				if (solution=='DamageEvolutionSolution'){
 					throw Error('Invalid evolution law (md.damage.law) for a damage solution');
 				}
Index: /issm/trunk-jpl/src/m/classes/flaim.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/flaim.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/flaim.js	(revision 21065)
@@ -37,5 +37,5 @@
 
 		//Early return
-		if (solution!=FlaimSolutionEnum()) return;
+		if (solution!='FlaimSolution') return;
 
 		checkfield(md,'fieldname','flaim.tracks','file',1);
Index: /issm/trunk-jpl/src/m/classes/flowequation.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/flowequation.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/flowequation.js	(revision 21065)
@@ -49,6 +49,6 @@
 
 			//Early return
-			if ( ((!ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1)) & (!ArrayAnyEqual(ArrayIsMember(StressbalanceSIAAnalysisEnum(),analyses),1))) | 
-					(solution==TransientSolutionEnum() & md.trans.isstressbalance==0)
+			if ( ((!ArrayAnyEqual(ArrayIsMember('StressbalanceAnalysis',analyses),1)) & (!ArrayAnyEqual(ArrayIsMember('StressbalanceSIAAnalysis',analyses),1))) | 
+					(solution=='TransientSolution' & md.trans.isstressbalance==0)
 			   ) return ;
 
@@ -90,5 +90,5 @@
 				md = checkmessage(md,['no element types set for this model']);
 			}
-			if(ArrayAnyEqual(ArrayIsMember(StressbalanceSIAAnalysisEnum(), analyses),1)){
+			if(ArrayAnyEqual(ArrayIsMember('StressbalanceSIAAnalysis', analyses),1)){
 				if (ArrayAnyEqual(this.element_equation,1)){
 					if(this.vertex_equation & ArrayAnyBelowStrict(md.mask.groundedice_levelset)){
@@ -117,5 +117,5 @@
 			WriteData(fid,prefix,'object',this,'fieldname','borderFS','format','DoubleMat','mattype',1);
 
-			//convert approximations to enums
+			//convert approximations to integers 
 			WriteData(fid,prefix,'data',this.vertex_equation,'name','md.flowequation.vertex_equation','format','DoubleMat','mattype',1);
 			WriteData(fid,prefix,'data',this.element_equation,'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 21064)
+++ /issm/trunk-jpl/src/m/classes/friction.js	(revision 21065)
@@ -27,5 +27,5 @@
 
 			//Early return
-			if ((!ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1)) & (!ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1))){
+			if ((!ArrayAnyEqual(ArrayIsMember('StressbalanceAnalysis',analyses),1)) & (!ArrayAnyEqual(ArrayIsMember('StressbalanceAnalysis',analyses),1))){
 				return; 
 			}
Index: /issm/trunk-jpl/src/m/classes/geometry.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/geometry.js	(revision 21065)
@@ -29,5 +29,5 @@
 		this.checkconsistency = function(md,solution,analyses) { //{{{
 
-			if ((solution==TransientSolutionEnum() & md.trans.isgia) | (solution==GiaSolutionEnum())){
+			if ((solution=='TransientSolution' & md.trans.isgia) | (solution=='GiaSolution')){
 				checkfield(md,'fieldname','geometry.thickness','timeseries',1,'NaN',1,'Inf',1,'>=',0);
 			}
@@ -42,5 +42,5 @@
 					}
 				}
-				if (solution==TransientSolutionEnum() & md.trans.isgroundingline){
+				if (solution=='TransientSolution' & md.trans.isgroundingline){
 					checkfield(md,'fieldname','geometry.bed','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
 				}
Index: /issm/trunk-jpl/src/m/classes/gia.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/gia.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/gia.js	(revision 21065)
@@ -25,5 +25,5 @@
 	this.checkconsistency = function(md,solution,analyses) { // {{{
 
-		if(!ArrayAnyEqual(ArrayIsMember(GiaAnalysisEnum(),analyses),1))return;
+		if(!ArrayAnyEqual(ArrayIsMember('GiaAnalysis',analyses),1))return;
 
 		checkfield(md,'fieldname','gia.mantle_viscosity','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices,1],'>',0);
@@ -33,5 +33,5 @@
 		//be sure that if we are running a masstransport ice flow model coupled with gia, that thickness forcings 
 		//are not provided into the future.
-		if (solution==TransientSolutionEnum() & md.trans.ismasstransport & md.trans.isgia){
+		if (solution=='TransientSolution' & md.trans.ismasstransport & md.trans.isgia){
 			//figure out if thickness is a transient forcing: 
 			if (md.geometry.thickness.length == (md.mesh.numberofvertices+1)){
Index: /issm/trunk-jpl/src/m/classes/hydrologyshreve.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologyshreve.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/hydrologyshreve.js	(revision 21065)
@@ -33,5 +33,5 @@
 
 			//Early return
-			if(!ArrayAnyEqual(ArrayIsMember(HydrologyShreveAnalysisEnum(),analyses),1)) return;
+			if(!ArrayAnyEqual(ArrayIsMember('HydrologyShreveAnalysis',analyses),1)) return;
 
 			checkfield(md,'fieldname','hydrology.spcwatercolumn','Inf',1,'timeseries',1);
Index: /issm/trunk-jpl/src/m/classes/initialization.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/initialization.js	(revision 21065)
@@ -41,5 +41,5 @@
     }//}}}
 		this.checkconsistency = function(md,solution,analyses) { //{{{
-			if(ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1)){
+			if(ArrayAnyEqual(ArrayIsMember('StressbalanceAnalysis',analyses),1)){
 				if (!(isNaN(md.initialization.vx) | isNaN(md.initialization.vy))){
 					checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
@@ -47,9 +47,9 @@
 				}
 			}
-			if(ArrayAnyEqual(ArrayIsMember(MasstransportAnalysisEnum(),analyses),1)){
+			if(ArrayAnyEqual(ArrayIsMember('MasstransportAnalysis',analyses),1)){
 				checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
 				checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
 			}
-			if(ArrayAnyEqual(ArrayIsMember(BalancethicknessSolutionEnum(),analyses),1) & (solution==BalancethicknessSolutionEnum())){
+			if(ArrayAnyEqual(ArrayIsMember('BalancethicknessSolution',analyses),1) & (solution=='BalancethicknessSolution')){
 				checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
 				checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
@@ -65,5 +65,5 @@
 				}
 			}
-			if(ArrayAnyEqual(ArrayIsMember(ThermalAnalysisEnum(),analyses),1)){
+			if(ArrayAnyEqual(ArrayIsMember('ThermalAnalysis',analyses),1)){
 				checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
 				checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
@@ -74,19 +74,19 @@
 				checkfield(md,'fieldname','initialization.temperature','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
 			}
-			if( ArrayAnyEqual(ArrayIsMember(EnthalpyAnalysisEnum(),analyses),1) & md.thermal.isenthalpy){
+			if( ArrayAnyEqual(ArrayIsMember('EnthalpyAnalysis',analyses),1) & md.thermal.isenthalpy){
 				checkfield(md,'fieldname','initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices, 1]);
 				checkfield(md,'fieldname','initialization.watercolumn'  ,'>=',0,'size',[md.mesh.numberofvertices, 1]);
 			}
-			if(ArrayAnyEqual(ArrayIsMember(HydrologyShreveAnalysisEnum(),analyses),1)){
+			if(ArrayAnyEqual(ArrayIsMember('HydrologyShreveAnalysis',analyses),1)){
 				if (md.hydrology.type() == 'hydrologyshreve'){
 					checkfield(md,'fieldname','initialization.watercolumn','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
 				}
 			}
-			if(ArrayAnyEqual(ArrayIsMember(HydrologyDCInefficientAnalysisEnum(),analyses),1)){
+			if(ArrayAnyEqual(ArrayIsMember('HydrologyDCInefficientAnalysis',analyses),1)){
 				if (md.hydrology.type() == 'hydrologydc'){
 					checkfield(md,'fieldname','initialization.sediment_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
 				}
 			}
-			if(ArrayAnyEqual(ArrayIsMember(HydrologyDCEfficientAnalysisEnum(),analyses),1)){
+			if(ArrayAnyEqual(ArrayIsMember('HydrologyDCEfficientAnalysis',analyses),1)){
 				if (md.hydrology.type() == 'hydrologydc'){
 					if (md.hydrology.isefficientlayer==1){
Index: /issm/trunk-jpl/src/m/classes/inversion.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/inversion.js	(revision 21065)
@@ -116,5 +116,5 @@
 
 			//Only SSA, HO and FS are supported right now
-			if (solution==StressbalanceSolutionEnum()){
+			if (solution=='StressbalanceSolution'){
 				if (!(md.flowequation.isSSA | md.flowequation.isHO | md.flowequation.isFS | md.flowequation.isL1L2)){
 					md.checkmessage('inversion can only be performed for SSA, HO or FS ice flow models');
@@ -122,8 +122,8 @@
 			}
 
-			if (solution==BalancethicknessSolutionEnum()){
+			if (solution=='BalancethicknessSolution'){
 				checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices ,1],'NaN',1,'Inf',1);
 			}
-			else if (solution==BalancethicknessSoftSolutionEnum()){
+			else if (solution=='BalancethicknessSoftSolution'){
 				checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices, 1],'NaN',1,'Inf',1);
 			}
Index: /issm/trunk-jpl/src/m/classes/levelset.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/levelset.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/levelset.js	(revision 21065)
@@ -30,5 +30,5 @@
 	this.checkconsistency = function(md,solution,analyses) { // {{{
 		//Early return
-		if (solution!=TransientSolutionEnum() | md.trans.ismovingfront==0) return;
+		if (solution!='TransientSolution' | md.trans.ismovingfront==0) return;
 
 		checkfield(md,'fieldname','levelset.spclevelset','Inf',1,'timeseries',1);
Index: /issm/trunk-jpl/src/m/classes/masstransport.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/masstransport.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/masstransport.js	(revision 21065)
@@ -48,5 +48,5 @@
 
 			//Early return
-			if(!ArrayAnyEqual(ArrayIsMember(HydrologyShreveAnalysisEnum(),analyses),1) | (solution==TransientSolutionEnum() & md.trans.ismasstransport==0)) return; 
+			if(!ArrayAnyEqual(ArrayIsMember('HydrologyShreveAnalysis',analyses),1) | (solution=='TransientSolution' & md.trans.ismasstransport==0)) return; 
 
 			checkfield(md,'fieldname','masstransport.spcthickness','Inf',1,'timeseries',1);
Index: /issm/trunk-jpl/src/m/classes/matice.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/matice.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/matice.js	(revision 21065)
@@ -101,5 +101,5 @@
 			checkfield(md,'fieldname','materials.rheology_law','values',['None','Cuffey','CuffeyTemperate','Paterson','Arrhenius','LliboutryDuval']);
 
-			if(ArrayAnyEqual(ArrayIsMember(GiaAnalysisEnum(),analyses),1)){
+			if(ArrayAnyEqual(ArrayIsMember('GiaAnalysis',analyses),1)){
 				checkfield(md,'fieldname','materials.lithosphere_shear_modulus','>',0,'numel',1);
 				checkfield(md,'fieldname','materials.lithosphere_density','>',0,'numel',1);
@@ -107,5 +107,5 @@
 				checkfield(md,'fieldname','materials.mantle_density','>',0,'numel',1);
 			}
-			if (ArrayAnyEqual(ArrayIsMember(SealevelriseAnalysisEnum(),analyses),1)){
+			if (ArrayAnyEqual(ArrayIsMember('SealevelriseAnalysis',analyses),1)){
 				checkfield(md,'fieldname','materials.earth_density','>',0,'numel',1);
 			}
Index: /issm/trunk-jpl/src/m/classes/mesh2d.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh2d.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/mesh2d.js	(revision 21065)
@@ -72,5 +72,5 @@
 
 			switch(solution){
-			case ThermalSolutionEnum():
+			case 'ThermalSolution':
 				checkmessage(md,'thermal not supported for 2d mesh');
 				break;
Index: /issm/trunk-jpl/src/m/classes/outputdefinition.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/outputdefinition.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/outputdefinition.js	(revision 21065)
@@ -29,14 +29,15 @@
 		this.marshall=function(md,prefix,fid) { //{{{
 
-		var enums=NewArrayFill(this.definitions.length,0);
-		for (var i=0;i<this.definitions.length;i++){
-			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.
-			enums[i]=StringToEnum(classdefinition);
-		}
-		enums=ArrayUnique(enums);
-		if (enums.length==0){ enums=NaN; }
-		WriteData(fid,prefix,'data',enums,'name','md.outputdefinition.list','format','DoubleMat','mattype',1);
+			var data=NewArrayFill(this.definitions.length,'');	
+			for(var i=0;i<this.definitions.length;i++){
+				this.definitions[i].marshall(md,fid,prefix);
+				classdefinition=this.definitions[i].classname();
+				classdefinition=classdefinition.charAt(0).toUpperCase() + classdefinition.slice(1); // we match our string definitions
+				data[i]=classdefinition;
+			}
+			data=ArrayUnique(data);
+			if(data.length==0){ data=''; }
+
+			WriteData(fid,prefix,'data',data,'name','md.outputdefinition.list','format','StringArray');
 		}//}}}
 		this.fix=function() { //{{{
Index: /issm/trunk-jpl/src/m/classes/outputdefinition.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/outputdefinition.m	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/outputdefinition.m	(revision 21065)
@@ -37,14 +37,4 @@
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
-		%{
-		enums=zeros(length(self.definitions),1);
-		for i=1:length(self.definitions),
-			self.definitions{i}.marshall(prefix,md,fid);
-			classdefinition=class(self.definitions{i});
-			classdefinition(1)=upper(classdefinition(1)); %so it matches our enums definitions.
-			enums(i)=StringToEnum(classdefinition);
-		end
-		WriteData(fid,prefix,'data',enums,'name','md.outputdefinition.list','format','DoubleMat','mattype',1);
-		%}
 		data={};
 		for i=1:length(self.definitions)
Index: /issm/trunk-jpl/src/m/classes/rifts.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/rifts.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/rifts.js	(revision 21065)
@@ -39,5 +39,5 @@
 				}
 				for (var i=0;i<numrifts;i++){
-					md = checkfield(md,'fieldname',sprintf('rifts.riftstruct[%i].fill',i),'values',[WaterEnum(), AirEnum(), IceEnum(), MelangeEnum()]);
+					md = checkfield(md,'fieldname',sprintf('rifts.riftstruct[%i].fill',i),'values',['Water', 'Air', 'Ice', 'Melange']);
 				}
 			}
@@ -50,5 +50,5 @@
 			var numrifts;
 			//Process rift info
-			if ((this.riftstruct.length==0) | isNaN(this.riftstruct)){
+			if ((this.riftstruct.length==0) | (this.riftstruct == null)){
 				numrifts=0;
 			}
@@ -77,8 +77,8 @@
 			}
 			WriteData(fid,prefix,'data',numrifts,'name','md.rifts.numrifts','format','Integer');
-			WriteData(fid,prefix,'data',data,'name','md.rifts.riftstruct','format','DoubleMat','mattype',3);
+			WriteData(fid,prefix,'data',data,'name','md.rifts.riftstruct','format','StringArray');
 		}//}}}
 		this.fix=function() { //{{{
-			this.riftstruct=NullFix(this.riftstruct,NaN);
+			this.riftstruct=NullFix(this.riftstruct,'');
 			this.riftproperties=NullFix(this.riftproperties,NaN);
 		}//}}}
Index: /issm/trunk-jpl/src/m/classes/slr.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/slr.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/slr.js	(revision 21065)
@@ -37,5 +37,5 @@
 
 			//Early return
-			if(ArrayAnyEqual(ArrayIsMember(SealevelriseAnalysisEnum(),analyses),0))return;
+			if(ArrayAnyEqual(ArrayIsMember('SealevelriseAnalysis',analyses),0))return;
 			
 			md = checkfield(md,'fieldname','slr.deltathickness','NaN',1,'Inf',1,'size',[md.mesh.numberofelements, 1]);
Index: /issm/trunk-jpl/src/m/classes/steadystate.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/steadystate.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/steadystate.js	(revision 21065)
@@ -35,5 +35,5 @@
 
 		//Early return
-		if (solution!=SteadystateSolutionEnum()) return;
+		if (solution!='SteadystateSolution') return;
 
 		if (md.timestepping.time_step!=0){
Index: /issm/trunk-jpl/src/m/classes/stressbalance.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/stressbalance.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/stressbalance.js	(revision 21065)
@@ -87,5 +87,5 @@
 
 		//Early return
-		if(ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),0))return;
+		if(ArrayAnyEqual(ArrayIsMember('StressbalanceAnalysis',analyses),0))return;
 
 		checkfield(md,'fieldname','stressbalance.spcvx','Inf',1,'timeseries',1);
Index: /issm/trunk-jpl/src/m/classes/thermal.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/thermal.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/thermal.js	(revision 21065)
@@ -67,9 +67,9 @@
 
 		//Early return
-		if(!ArrayAnyEqual(ArrayIsMember(ThermalAnalysisEnum(),analyses),1) & !ArrayAnyEqual(ArrayIsMember(EnthalpyAnalysisEnum(),analyses),1)  | (solution == TransientSolutionEnum() & md.trans.isthermal==0)) return;
+		if(!ArrayAnyEqual(ArrayIsMember('ThermalAnalysis',analyses),1) & !ArrayAnyEqual(ArrayIsMember('EnthalpyAnalysis',analyses),1)  | (solution == 'TransientSolution' & md.trans.isthermal==0)) return;
 
 		checkfield(md,'fieldname','thermal.stabilization','numel',[1],'values',[0 ,1, 2]);
 		checkfield(md,'fieldname','thermal.spctemperature','Inf',1,'timeseries',1);
-		if(ArrayAnyEqual(ArrayIsMember(EnthalpyAnalysisEnum(),analyses),1) & md.thermal.isenthalpy & md.mesh.dimension() == 3){
+		if(ArrayAnyEqual(ArrayIsMember('EnthalpyAnalysis',analyses),1) & md.thermal.isenthalpy & md.mesh.dimension() == 3){
 			
 			for(var i=0;i<md.mesh.numberofvertices;i++){
Index: /issm/trunk-jpl/src/m/classes/toolkits.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/toolkits.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/toolkits.js	(revision 21065)
@@ -67,5 +67,5 @@
 
 				 //first write analysis:
-				 string += sprintf('\n+%s\n',analysis); //append a + to recognize it's an analysis enum
+				 string += sprintf('\n+%s\n',analysis); //append a + to recognize it's an analysis string
 
 				 //now, write options
Index: /issm/trunk-jpl/src/m/classes/trans.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/trans.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/classes/trans.js	(revision 21065)
@@ -50,5 +50,5 @@
 
 			//Early return
-			if (solution!=TransientSolutionEnum()) return;
+			if (solution!='TransientSolution') return;
 
 			checkfield(md,'fieldname','trans.issmb','numel',[1],'values',[0 ,1]);
Index: /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.js
===================================================================
--- /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.js	(revision 21065)
@@ -10,5 +10,5 @@
 	//Get solution and associated analyses
 	solution=md.priv.solution;
-	if(typeof solution != 'number')throw Error('ismodelselfconsistent: did not provide solution type in the private class!');
+	if(typeof solution !== 'string')throw Error('ismodelselfconsistent: did not provide correct solution type in the private class!');
 	
 	var analyses = AnalysisConfiguration(solution);
@@ -44,72 +44,71 @@
 
 	var analyses=[];
-	switch (solutiontype){
-
-		case StressbalanceSolutionEnum():
-			analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),L2ProjectionBaseAnalysisEnum()];
+		
+	if(solutiontype === 'StressbalanceSolution'){
+			analyses=['StressbalanceAnalysis','StressbalanceVerticalAnalysis','StressbalanceSIAAnalysis','L2ProjectionBaseAnalysis'];
 			break;
 
-		case SteadystateSolutionEnum():
-			analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),L2ProjectionBaseAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()];
+		}else if(solutiontype ==='SteadystateSolution'){
+			analyses=['StressbalanceAnalysis','StressbalanceVerticalAnalysis','StressbalanceSIAAnalysis','L2ProjectionBaseAnalysis','ThermalAnalysis','MeltingAnalysis'];
 			break;
 
-		case ThermalSolutionEnum():
-			analyses=[EnthalpyAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()];
+		}else if(solutiontype ==='ThermalSolution'){
+			analyses=['EnthalpyAnalysis','ThermalAnalysis','MeltingAnalysis'];
 			break;
 
-		case MasstransportSolutionEnum():
-			analyses=[MasstransportAnalysisEnum()];
+		}else if(solutiontype ==='MasstransportSolution'){
+			analyses=['MasstransportAnalysis'];
 			break;
 
-		case BalancethicknessSolutionEnum():
-			analyses=[BalancethicknessAnalysisEnum()];
+		}else if(solutiontype ==='BalancethicknessSolution'){
+			analyses=['BalancethicknessAnalysis'];
 			break;
 
-		case Balancethickness2SolutionEnum():
-			analyses=[Balancethickness2AnalysisEnum()];
+		}else if(solutiontype ==='Balancethickness2Solution'){
+			analyses=['Balancethickness2Analysis'];
 			break;
 
-		case BalancethicknessSoftSolutionEnum():
-			analyses=[BalancethicknessAnalysisEnum()];
+		}else if(solutiontype ==='BalancethicknessSoftSolution'){
+			analyses=['BalancethicknessAnalysis'];
 			break;
 
-		case BalancevelocitySolutionEnum():
-			analyses=[BalancevelocityAnalysisEnum()];
+		}else if(solutiontype ==='BalancevelocitySolution'){
+			analyses=['BalancevelocityAnalysis'];
 			break;
 
-		case SurfaceSlopeSolutionEnum():
-			analyses=[L2ProjectionBaseAnalysisEnum()];
+		}else if(solutiontype ==='SurfaceSlopeSolution'){
+			analyses=['L2ProjectionBaseAnalysis'];
 			break;
 
-		case BedSlopeSolutionEnum():
-			analyses=[L2ProjectionBaseAnalysisEnum()];
+		}else if(solutiontype ==='BedSlopeSolution'){
+			analyses=['L2ProjectionBaseAnalysis'];
 			break;
 
-		case GiaSolutionEnum():
-			analyses=[GiaAnalysisEnum()];
+		}else if(solutiontype ==='GiaSolution'){
+			analyses=['GiaAnalysis'];
 			break;
 
-		case TransientSolutionEnum():
-			analyses=[StressbalanceAnalysisEnum(),StressbalanceVerticalAnalysisEnum(),StressbalanceSIAAnalysisEnum(),L2ProjectionBaseAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),MasstransportAnalysisEnum(),HydrologySommersAnalysisEnum];
+		}else if(solutiontype ==='TransientSolution'){
+			analyses=['StressbalanceAnalysis','StressbalanceVerticalAnalysis','StressbalanceSIAAnalysis','L2ProjectionBaseAnalysis','ThermalAnalysis','MeltingAnalysis','EnthalpyAnalysis','MasstransportAnalysis','HydrologySommersAnalysis'];
 			break;
 
-		case FlaimSolutionEnum():
-			analyses=[FlaimAnalysisEnum()];
+		}else if(solutiontype ==='FlaimSolution'){
+			analyses=['FlaimAnalysis'];
 			break;
 	
-		case SealevelriseSolutionEnum():
-			analyses=[SealevelriseAnalysisEnum()];
+		}else if(solutiontype ==='SealevelriseSolution'){
+			analyses=['SealevelriseAnalysis'];
 			break;
 
-		case HydrologySolutionEnum():
-			analyses=[L2ProjectionBaseAnalysisEnum(),HydrologyShreveAnalysisEnum(),HydrologyDCInefficientAnalysisEnum(),HydrologyDCEfficientAnalysisEnum()];
+		}else if(solutiontype ==='HydrologySolution'){
+			analyses=['L2ProjectionBaseAnalysis','HydrologyShreveAnalysis','HydrologyDCInefficientAnalysis','HydrologyDCEfficientAnalysis'];
 			break;
 
-		case DamageEvolutionSolutionEnum():
-			analyses=[DamageEvolutionAnalysisEnum()];
+		}else if(solutiontype ==='DamageEvolutionSolution'){
+			analyses=['DamageEvolutionAnalysis'];
 			break;
-
-		default:
-			throw Error(sprintf("%s%s%s\n",' solution type: ',EnumToString(solutiontype),' not supported yet!'));
+		}else{
+			throw Error(sprintf("%s%s%s\n",' solution type: ',solutiontype,' not supported yet!'));
+		}
 	}
 	return analyses;
Index: /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.js
===================================================================
--- /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.js	(revision 21065)
@@ -1,18 +1,18 @@
 function  marshallcostfunctions(cost_functions){
 	for(var i=0;i<cost_functions.length;i++){
-		if(cost_functions[i]==101) data[i]=SurfaceAbsVelMisfitEnum();
-		if(cost_functions[i]==102) data[i]=SurfaceRelVelMisfitEnum();
-		if(cost_functions[i]==103) data[i]=SurfaceLogVelMisfitEnum();
-		if(cost_functions[i]==104) data[i]=SurfaceLogVxVyMisfitEnum();
-		if(cost_functions[i]==105) data[i]=SurfaceAverageVelMisfitEnum();
-		if(cost_functions[i]==201) data[i]=ThicknessAbsMisfitEnum();
-		if(cost_functions[i]==501) data[i]=DragCoefficientAbsGradientEnum();
-		if(cost_functions[i]==502) data[i]=RheologyBbarAbsGradientEnum();
-		if(cost_functions[i]==503) data[i]=ThicknessAbsGradientEnum();
-		if(cost_functions[i]==504) data[i]=ThicknessAlongGradientEnum();
-		if(cost_functions[i]==505) data[i]=ThicknessAcrossGradientEnum();
-		if(cost_functions[i]==506) data[i]=BalancethicknessMisfitEnum();
-		if(cost_functions[i]==507) data[i]=RheologyBAbsGradientEnum();
-		if(cost_functions[i]==601) data[i]=SurfaceAbsMisfitEnum();
+		if(cost_functions[i]==101) data[i]='SurfaceAbsVelMisfit';
+		if(cost_functions[i]==102) data[i]='SurfaceRelVelMisfit';
+		if(cost_functions[i]==103) data[i]='SurfaceLogVelMisfit';
+		if(cost_functions[i]==104) data[i]='SurfaceLogVxVyMisfit';
+		if(cost_functions[i]==105) data[i]='SurfaceAverageVelMisfit';
+		if(cost_functions[i]==201) data[i]='ThicknessAbsMisfit';
+		if(cost_functions[i]==501) data[i]='DragCoefficientAbsGradient';
+		if(cost_functions[i]==502) data[i]='RheologyBbarAbsGradient';
+		if(cost_functions[i]==503) data[i]='ThicknessAbsGradient';
+		if(cost_functions[i]==504) data[i]='ThicknessAlongGradient';
+		if(cost_functions[i]==505) data[i]='ThicknessAcrossGradient';
+		if(cost_functions[i]==506) data[i]='BalancethicknessMisfit';
+		if(cost_functions[i]==507) data[i]='RheologyBAbsGradient';
+		if(cost_functions[i]==601) data[i]='SurfaceAbsMisfit';
 	}
 	return data;
Index: /issm/trunk-jpl/src/m/solve/WriteData.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/WriteData.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/solve/WriteData.js	(revision 21065)
@@ -8,5 +8,5 @@
 	var args = Array.prototype.slice.call(arguments);
 	var options = new pairoptions(args.slice(2,args.length));
-	var enumm;
+	var name;
 	var dataini;
 	var data;
@@ -14,5 +14,5 @@
 	//Get data properties
 	if (options.exist('object')){
-		//This is a object field, construct enum and data
+		//This is a object field, construct string name and data
 		obj       = options.getfieldvalue('object');
 		fieldname = options.getfieldvalue('fieldname');
@@ -80,5 +80,5 @@
 	//Step 2: write the data itself.
 	if (format == 'Boolean'){// {{{
-		if(IsArray(data)) throw  Error(sprintf("field '%s' cannot be marshalled as it has more than one element!",EnumToString(enumm)));
+		if(IsArray(data)) throw  Error(sprintf("field '%s' cannot be marshalled as it has more than one element!",name));
 
 		//first write length of record
@@ -92,5 +92,5 @@
 	} // }}}
 	else if (format == 'Integer'){ // {{{
-		if(IsArray(data)) throw  Error(sprintf("field '%s' cannot be marshalled as it has more than one element!",EnumToString(enumm)));
+		if(IsArray(data)) throw  Error(sprintf("field '%s' cannot be marshalled as it has more than one element!",name));
 
 		//first write length of record
@@ -104,5 +104,5 @@
 	} // }}}
 	else if (format == 'Double'){ // {{{
-		if(IsArray(data)) throw  Error(sprintf("field '%s' cannot be marshalled as it has more than one element!",EnumToString(enumm)));
+		if(IsArray(data)) throw  Error(sprintf("field '%s' cannot be marshalled as it has more than one element!",name));
 
 		//first write length of record
@@ -196,5 +196,5 @@
 		//first write length of record
 		var recordlength=4+4+8*s[0]*s[1]+4+4; //2 integers (32 bits) + the double matrix + code + matrix type
-		if (recordlength>Math.pow(2,31)) throw Error(sprintf("field '%s' cannot be marshalled because it is larger than 2^31 bytes!",EnumToString(enumm)));
+		if (recordlength>Math.pow(2,31)) throw Error(sprintf("field '%s' cannot be marshalled because it is larger than 2^31 bytes!",name));
 		fid.fwrite(recordlength,'int');
 
@@ -276,5 +276,5 @@
 	else { 
 		throw Error(sprintf("WriteData error message: data type: %s not supported yet! ('%s')",
-					format.toString(),EnumToString(enumm)));
+					format.toString(),name));
 	}
 }
Index: /issm/trunk-jpl/src/m/solve/solve.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/solve.js	(revision 21064)
+++ /issm/trunk-jpl/src/m/solve/solve.js	(revision 21065)
@@ -1,20 +1,23 @@
-function solve(md,solutionenum){
+function solve(md,solutionstring){
 //SOLVE - apply solution sequence for this model
 //
 //   Usage:
-//      solve(md,solutionenum,varargin)
+//      solve(md,solutionstring,varargin)
 //      where varargin is a lit of paired arguments of string OR enums
 //
 //   solution types available comprise:
-//		 - StressbalanceSolutionEnum
-//		 - MasstransportSolutionEnum
-//		 - ThermalSolutionEnum
-//		 - SteadystateSolutionEnum
-//		 - TransientSolutionEnum
-//		 - BalancethicknessSolutionEnum
-//		 - BedSlopeSolutionEnum
-//		 - SurfaceSlopeSolutionEnum
-//		 - HydrologySolutionEnum
-//		 - FlaimSolutionEnum
+//		 - 'Stressbalance'      or 'sb'
+//		 - 'Masstransport'      or 'mt'
+//		 - 'Thermal'            or 'th'
+//		 - 'Steadystate'        or 'ss'
+//		 - 'Transient'          or 'tr'
+//		 - 'Balancethickness'   or 'mc'
+//      - 'Balancevelocity'   or 'bv'
+//		 - 'BedSlope'           or 'bsl'
+//		 - 'SurfaceSlope'       or 'ssl'
+//		 - 'Hydrology'          or 'hy'
+//      - 'DamageEvolution'   or 'da'
+//		 - 'Gia'                or 'gia'
+//		 - 'Sealevelrise'       or 'slr'
 //
 //  extra options:
@@ -26,11 +29,40 @@
 //
 //   Examples:
-//      md=solve(md,StressbalanceSolutionEnum);
+//      md=solve(md,'Stressbalance');
+//      md=solve(md,'sb');
 
-	solutionstring=EnumToString(solutionenum);
-	
+	if(typeof solutionstring !== 'string') {
+		throw Error(sprintf("%s\n", "ISSM's solve function only accepts strings for solution sequences. Type help solve to get a list of supported solutions.");
+	}
+
 	//recover and process solve options
-	if (solutionstring.slice(-8) !== 'Solution'){
-		throw Error(sprintf("%s%s%s\n",'solutionenum ',solutionstring,' not supported!'));
+	if((solutionstring.toUpperCase() === 'sb') || (solutionstring.toUpperCase() === 'stressbalance')){
+		solutionstring = 'StressbalanceSolution';
+	}else if((solutionstring.toUpperCase() === 'mt') || (solutionstring.toUpperCase() === 'masstransport')){
+		solutionstring = 'MasstransportSolution';	
+	}else if((solutionstring.toUpperCase() === 'th') || (solutionstring.toUpperCase() === 'thermal')){
+		solutionstring = 'ThermalSolution';
+	}else if((solutionstring.toUpperCase() === 'st') || (solutionstring.toUpperCase() === 'steadystate')){
+		solutionstring = 'SteadystateSolution';
+	}else if((solutionstring.toUpperCase() === 'tr') || (solutionstring.toUpperCase() === 'transient')){
+		solutionstring = 'TransientSolution';
+	}else if((solutionstring.toUpperCase() === 'mc') || (solutionstring.toUpperCase() === 'balancethickness')){
+		solutionstring = 'BalancethicknessSolution';
+	}else if((solutionstring.toUpperCase() === 'bv') || (solutionstring.toUpperCase() === 'balancevelocity')){
+		solutionstring = 'BalancevelocitySolution';
+	}else if((solutionstring.toUpperCase() === 'bsl') || (solutionstring.toUpperCase() === 'bedslope')){
+		solutionstring = 'BedSlopeSolution';
+	}else if((solutionstring.toUpperCase() === 'ssl') || (solutionstring.toUpperCase() === 'surfaceslope')){
+		solutionstring = 'SurfaceSlopeSolution';
+	}else if((solutionstring.toUpperCase() === 'hy') || (solutionstring.toUpperCase() === 'hydrology')){
+		solutionstring = 'HydrologySolution';
+	}else if((solutionstring.toUpperCase() === 'da') || (solutionstring.toUpperCase() === 'damageevolution')){
+		solutionstring = 'DamageEvolutionSolution';
+	}else if((solutionstring.toUpperCase() === 'gia') || (solutionstring.toUpperCase() === 'gia')){
+		solutionstring = 'GiaSolution';
+	}else if((solutionstring.toUpperCase() === 'slr') || (solutionstring.toUpperCase() === 'sealevelrise')){
+		solutionstring = 'SealevelriseSolution';
+	}else{
+		throw Error(sprintf("%s%s%s\n",'solutionstring ',solutionstring,' not supported!'));
 	}
 	
@@ -49,5 +81,5 @@
 			console.log('checking model consistency');
 		}
-		if (solutionenum == FlaimSolutionEnum()){
+		if (solutionstring === 'FlaimSolution'){
 			md.priv.isconsistent=true;
 			md.mesh.checkconsistency(md,solutionenum);
