Index: /issm/trunk-jpl/src/m/classes/inversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.m	(revision 18993)
+++ /issm/trunk-jpl/src/m/classes/inversion.m	(revision 18994)
@@ -136,5 +136,5 @@
 			md = checkfield(md,'fieldname','inversion.maxiter_per_step','size',[md.inversion.nsteps 1],'>=',0);
 			md = checkfield(md,'fieldname','inversion.step_threshold','size',[md.inversion.nsteps 1]);
-			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:507 601:604]);
+			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
 			md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
 			md = checkfield(md,'fieldname','inversion.gradient_scaling','size',[md.inversion.nsteps num_controls]);
@@ -227,19 +227,5 @@
 			%process cost functions
 			num_cost_functions=size(obj.cost_functions,2);
-			data=obj.cost_functions;
-			pos=find(obj.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();
-			pos=find(obj.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();
-			pos=find(obj.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();
-			pos=find(obj.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();
-			pos=find(obj.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();
-			pos=find(obj.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();
-			pos=find(obj.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();
-			pos=find(obj.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();
-			pos=find(obj.cost_functions==503); data(pos)=ThicknessAbsGradientEnum();
-			pos=find(obj.cost_functions==504); data(pos)=ThicknessAlongGradientEnum();
-			pos=find(obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();
-			pos=find(obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
-			pos=find(obj.cost_functions==507); data(pos)=RheologyBAbsGradientEnum();
-			pos=find(obj.cost_functions==601); data(pos)=SurfaceAbsMisfitEnum();
+			data=marshallcostfunctions(obj.cost_functions);
 			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
 			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
Index: /issm/trunk-jpl/src/m/classes/inversion.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.py	(revision 18993)
+++ /issm/trunk-jpl/src/m/classes/inversion.py	(revision 18994)
@@ -1,4 +1,3 @@
 import numpy
-import copy
 from fielddisplay import fielddisplay
 from EnumDefinitions import *
@@ -6,4 +5,7 @@
 from checkfield import checkfield
 from WriteData import WriteData
+from supportedcontrols import supportedcontrols
+from supportedcostfunctions import supportedcostfunctions
+from marshallcostfunctions import marshallcostfunctions
 
 class inversion(object):
@@ -119,9 +121,9 @@
 		md = checkfield(md,'fieldname','inversion.iscontrol','values',[0,1])
 		md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1])
-		md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy'])
+		md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols())
 		md = checkfield(md,'fieldname','inversion.nsteps','numel',[1],'>=',0)
 		md = checkfield(md,'fieldname','inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
 		md = checkfield(md,'fieldname','inversion.step_threshold','size',[md.inversion.nsteps])
-		md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
+		md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',supportedcostfunctions())
 		md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
 		md = checkfield(md,'fieldname','inversion.gradient_scaling','size',[md.inversion.nsteps,num_controls])
@@ -173,27 +175,5 @@
 		#process cost functions
 		num_cost_functions=numpy.size(self.cost_functions)
-		data=copy.deepcopy(self.cost_functions)
-		pos=[i for i,x in enumerate(self.cost_functions) if x==101];
-		for i in pos: data[i]=SurfaceAbsVelMisfitEnum()        
-		pos=[i for i,x in enumerate(self.cost_functions) if x==102];
-		for i in pos: data[i]=SurfaceRelVelMisfitEnum()        
-		pos=[i for i,x in enumerate(self.cost_functions) if x==103];
-		for i in pos: data[i]=SurfaceLogVelMisfitEnum()        
-		pos=[i for i,x in enumerate(self.cost_functions) if x==104];
-		for i in pos: data[i]=SurfaceLogVxVyMisfitEnum()       
-		pos=[i for i,x in enumerate(self.cost_functions) if x==105];
-		for i in pos: data[i]=SurfaceAverageVelMisfitEnum()    
-		pos=[i for i,x in enumerate(self.cost_functions) if x==201];
-		for i in pos: data[i]=ThicknessAbsMisfitEnum()         
-		pos=[i for i,x in enumerate(self.cost_functions) if x==501];
-		for i in pos: data[i]=DragCoefficientAbsGradientEnum() 
-		pos=[i for i,x in enumerate(self.cost_functions) if x==502];
-		for i in pos: data[i]=RheologyBbarAbsGradientEnum()    
-		pos=[i for i,x in enumerate(self.cost_functions) if x==503];
-		for i in pos: data[i]=ThicknessAbsGradientEnum()       
-		pos=[i for i,x in enumerate(self.cost_functions) if x==504];
-		for i in pos: data[i]=ThicknessAlongGradientEnum()     
-		pos=[i for i,x in enumerate(self.cost_functions) if x==505];
-		for i in pos: data[i]=ThicknessAcrossGradientEnum()    
+		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')
Index: /issm/trunk-jpl/src/m/classes/inversionvalidation.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversionvalidation.m	(revision 18993)
+++ /issm/trunk-jpl/src/m/classes/inversionvalidation.m	(revision 18994)
@@ -57,9 +57,7 @@
 			md = checkfield(md,'fieldname','inversion.iscontrol','values',[0 1]);
 			md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0 1]);
-			md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
-				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar' 'Vx' 'Vy' 'Thickness',...
-				'BalancethicknessOmega' 'BalancethicknessApparentMassbalance','MaterialsRheologyB'});
+			md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols());
 			md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[1 num_controls],'>',0,'NaN',1);
-			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:507 601:604]);
+			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
 			md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
 			md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
@@ -137,19 +135,5 @@
 			%process cost functions
 			num_cost_functions=size(obj.cost_functions,2);
-			data=obj.cost_functions;
-			pos=find(obj.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();
-			pos=find(obj.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();
-			pos=find(obj.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();
-			pos=find(obj.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();
-			pos=find(obj.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();
-			pos=find(obj.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();
-			pos=find(obj.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();
-			pos=find(obj.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();
-			pos=find(obj.cost_functions==503); data(pos)=ThicknessAbsGradientEnum();
-			pos=find(obj.cost_functions==504); data(pos)=ThicknessAlongGradientEnum();
-			pos=find(obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();
-			pos=find(obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
-			pos=find(obj.cost_functions==507); data(pos)=RheologyBAbsGradientEnum();
-			pos=find(obj.cost_functions==601); data(pos)=SurfaceAbsMisfitEnum();
+			data=marshallcostfunctions(obj.cost_functions);
 			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
 			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
Index: /issm/trunk-jpl/src/m/classes/m1qn3inversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/m1qn3inversion.m	(revision 18993)
+++ /issm/trunk-jpl/src/m/classes/m1qn3inversion.m	(revision 18994)
@@ -74,7 +74,5 @@
 			md = checkfield(md,'fieldname','inversion.iscontrol','values',[0 1]);
 			md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0 1]);
-			md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
-				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar',...
-				'Vx' 'Vy' 'Thickness' 'BalancethicknessOmega' 'BalancethicknessApparentMassbalance','MaterialsRheologyB'});
+			md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols());
 			md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[1 num_controls],'>',0,'NaN',1);
 			md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0);
@@ -82,5 +80,5 @@
 			md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0);
 			md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>',0);
-			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:507 601:604]);
+			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
 			md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
 			md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
@@ -167,19 +165,5 @@
 			%process cost functions
 			num_cost_functions=size(obj.cost_functions,2);
-			data=obj.cost_functions;
-			pos=find(obj.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();
-			pos=find(obj.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();
-			pos=find(obj.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();
-			pos=find(obj.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();
-			pos=find(obj.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();
-			pos=find(obj.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();
-			pos=find(obj.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();
-			pos=find(obj.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();
-			pos=find(obj.cost_functions==503); data(pos)=ThicknessAbsGradientEnum();
-			pos=find(obj.cost_functions==504); data(pos)=ThicknessAlongGradientEnum();
-			pos=find(obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();
-			pos=find(obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
-			pos=find(obj.cost_functions==507); data(pos)=RheologyBAbsGradientEnum();
-			pos=find(obj.cost_functions==601); data(pos)=SurfaceAbsMisfitEnum();
+			data=marshallcostfunctions(obj.cost_functions);
 			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
 			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
Index: /issm/trunk-jpl/src/m/classes/m1qn3inversion.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/m1qn3inversion.py	(revision 18993)
+++ /issm/trunk-jpl/src/m/classes/m1qn3inversion.py	(revision 18994)
@@ -1,4 +1,3 @@
 import numpy
-import copy
 from fielddisplay import fielddisplay
 from EnumDefinitions import *
@@ -6,4 +5,7 @@
 from checkfield import checkfield
 from WriteData import WriteData
+from supportedcontrols import supportedcontrols
+from supportedcostfunctions import supportedcostfunctions
+from marshallcostfunctions import marshallcostfunctions
 
 class m1qn3inversion(object):
@@ -119,10 +121,10 @@
 		md = checkfield(md,'fieldname','inversion.iscontrol','values',[0,1])
 		md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1])
-		md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy','Thickness'])
+		md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols())
 		md = checkfield(md,'fieldname','inversion.maxsteps','numel',[1],'>=',0)
 		md = checkfield(md,'fieldname','inversion.maxiter','numel',[1],'>=',0)
 		md = checkfield(md,'fieldname','inversion.dxmin','numel',[1],'>',0.)
 		md = checkfield(md,'fieldname','inversion.gttol','numel',[1],'>',0.)
-		md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
+		md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',supportedcostfunctions())
 		md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
 		md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices,num_controls])
@@ -166,27 +168,5 @@
 		#process cost functions
 		num_cost_functions=numpy.size(self.cost_functions)
-		data=copy.deepcopy(self.cost_functions)
-		pos=[i for i,x in enumerate(self.cost_functions) if x==101];
-		for i in pos: data[i]=SurfaceAbsVelMisfitEnum()        
-		pos=[i for i,x in enumerate(self.cost_functions) if x==102];
-		for i in pos: data[i]=SurfaceRelVelMisfitEnum()        
-		pos=[i for i,x in enumerate(self.cost_functions) if x==103];
-		for i in pos: data[i]=SurfaceLogVelMisfitEnum()        
-		pos=[i for i,x in enumerate(self.cost_functions) if x==104];
-		for i in pos: data[i]=SurfaceLogVxVyMisfitEnum()       
-		pos=[i for i,x in enumerate(self.cost_functions) if x==105];
-		for i in pos: data[i]=SurfaceAverageVelMisfitEnum()    
-		pos=[i for i,x in enumerate(self.cost_functions) if x==201];
-		for i in pos: data[i]=ThicknessAbsMisfitEnum()         
-		pos=[i for i,x in enumerate(self.cost_functions) if x==501];
-		for i in pos: data[i]=DragCoefficientAbsGradientEnum() 
-		pos=[i for i,x in enumerate(self.cost_functions) if x==502];
-		for i in pos: data[i]=RheologyBbarAbsGradientEnum()    
-		pos=[i for i,x in enumerate(self.cost_functions) if x==503];
-		for i in pos: data[i]=ThicknessAbsGradientEnum()       
-		pos=[i for i,x in enumerate(self.cost_functions) if x==504];
-		for i in pos: data[i]=ThicknessAlongGradientEnum()     
-		pos=[i for i,x in enumerate(self.cost_functions) if x==505];
-		for i in pos: data[i]=ThicknessAcrossGradientEnum()    
+		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')
Index: /issm/trunk-jpl/src/m/classes/taoinversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/taoinversion.m	(revision 18993)
+++ /issm/trunk-jpl/src/m/classes/taoinversion.m	(revision 18994)
@@ -86,6 +86,5 @@
 			md = checkfield(md,'fieldname','inversion.iscontrol','values',[0 1]);
 			md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0 1]);
-			md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
-				{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy' 'Thickness'});
+			md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',supportedcontrols());
 			md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0);
 			md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0);
@@ -104,5 +103,5 @@
 			end
 
-			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]);
+			md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',supportedcostfunctions());
 			md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
 			md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
@@ -187,18 +186,5 @@
 			%process cost functions
 			num_cost_functions=size(obj.cost_functions,2);
-			data=obj.cost_functions;
-			pos=find(obj.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();
-			pos=find(obj.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();
-			pos=find(obj.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();
-			pos=find(obj.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();
-			pos=find(obj.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();
-			pos=find(obj.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();
-			pos=find(obj.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();
-			pos=find(obj.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();
-			pos=find(obj.cost_functions==503); data(pos)=ThicknessAbsGradientEnum();
-			pos=find(obj.cost_functions==504); data(pos)=ThicknessAlongGradientEnum();
-			pos=find(obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();
-			pos=find(obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
-			pos=find(obj.cost_functions==507); data(pos)=Balancethickness2MisfitEnum();
+			data=marshallcostfunctions(obj.cost_functions);
 			WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3);
 			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
Index: /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.m
===================================================================
--- /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.m	(revision 18994)
+++ /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.m	(revision 18994)
@@ -0,0 +1,15 @@
+function data = marshallcostfunctions(cost_functions)
+	pos=find(cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();
+	pos=find(cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();
+	pos=find(cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();
+	pos=find(cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();
+	pos=find(cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();
+	pos=find(cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();
+	pos=find(cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();
+	pos=find(cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();
+	pos=find(cost_functions==503); data(pos)=ThicknessAbsGradientEnum();
+	pos=find(cost_functions==504); data(pos)=ThicknessAlongGradientEnum();
+	pos=find(cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();
+	pos=find(cost_functions==506); data(pos)=BalancethicknessMisfitEnum();
+	pos=find(cost_functions==507); data(pos)=RheologyBAbsGradientEnum();
+	pos=find(cost_functions==601); data(pos)=SurfaceAbsMisfitEnum();
Index: /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.py
===================================================================
--- /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.py	(revision 18994)
+++ /issm/trunk-jpl/src/m/inversions/marshallcostfunctions.py	(revision 18994)
@@ -0,0 +1,33 @@
+import copy
+from EnumDefinitions import *
+
+def marshallcostfunctions(cost_functions):
+
+	#copy list first
+	data=copy.deepcopy(cost_functions)
+
+	#convert to  Enums
+	pos=[i for i,x in enumerate(cost_functions) if x==101];
+	for i in pos: data[i]=SurfaceAbsVelMisfitEnum()        
+	pos=[i for i,x in enumerate(cost_functions) if x==102];
+	for i in pos: data[i]=SurfaceRelVelMisfitEnum()        
+	pos=[i for i,x in enumerate(cost_functions) if x==103];
+	for i in pos: data[i]=SurfaceLogVelMisfitEnum()        
+	pos=[i for i,x in enumerate(cost_functions) if x==104];
+	for i in pos: data[i]=SurfaceLogVxVyMisfitEnum()       
+	pos=[i for i,x in enumerate(cost_functions) if x==105];
+	for i in pos: data[i]=SurfaceAverageVelMisfitEnum()    
+	pos=[i for i,x in enumerate(cost_functions) if x==201];
+	for i in pos: data[i]=ThicknessAbsMisfitEnum()         
+	pos=[i for i,x in enumerate(cost_functions) if x==501];
+	for i in pos: data[i]=DragCoefficientAbsGradientEnum() 
+	pos=[i for i,x in enumerate(cost_functions) if x==502];
+	for i in pos: data[i]=RheologyBbarAbsGradientEnum()    
+	pos=[i for i,x in enumerate(cost_functions) if x==503];
+	for i in pos: data[i]=ThicknessAbsGradientEnum()       
+	pos=[i for i,x in enumerate(cost_functions) if x==504];
+	for i in pos: data[i]=ThicknessAlongGradientEnum()     
+	pos=[i for i,x in enumerate(cost_functions) if x==505];
+	for i in pos: data[i]=ThicknessAcrossGradientEnum()    
+
+	return data
Index: /issm/trunk-jpl/src/m/inversions/supportedcontrols.py
===================================================================
--- /issm/trunk-jpl/src/m/inversions/supportedcontrols.py	(revision 18994)
+++ /issm/trunk-jpl/src/m/inversions/supportedcontrols.py	(revision 18994)
@@ -0,0 +1,2 @@
+def supportedcontrols():
+	return ['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy']
Index: /issm/trunk-jpl/src/m/inversions/supportedcostfunctions.m
===================================================================
--- /issm/trunk-jpl/src/m/inversions/supportedcostfunctions.m	(revision 18994)
+++ /issm/trunk-jpl/src/m/inversions/supportedcostfunctions.m	(revision 18994)
@@ -0,0 +1,3 @@
+function list = supportedcostfunctions(),
+
+	list = [101:105 201 501:507 601:604];
Index: /issm/trunk-jpl/src/m/inversions/supportedcostfunctions.py
===================================================================
--- /issm/trunk-jpl/src/m/inversions/supportedcostfunctions.py	(revision 18994)
+++ /issm/trunk-jpl/src/m/inversions/supportedcostfunctions.py	(revision 18994)
@@ -0,0 +1,2 @@
+def supportedcostfunctions():
+	return [101,102,103,104,105,201,501,502,503,504,505]
