Index: /issm/trunk-jpl/src/m/classes/SMBforcing.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBforcing.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/SMBforcing.m	(revision 19879)
@@ -84,4 +84,10 @@
 
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.smb.mass_balance'],self.mass_balance);
+			writejscellstring(fid,[modelname '.smb.requested_outputs'],self.requested_outputs);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/autodiff.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/autodiff.m	(revision 19879)
@@ -257,4 +257,10 @@
 
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+			%do nothing for now
+			if self.isautodiff,
+				error('autodiff savemodeljs error message: not implemented yet!');
+			end
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/balancethickness.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/balancethickness.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/balancethickness.m	(revision 19879)
@@ -55,4 +55,12 @@
 			WriteData(fid,'object',self,'fieldname','omega','format','DoubleMat','mattype',1);
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.balancethickness.spcthickness'],self.spcthickness);
+			writejs1Darray(fid,[modelname '.balancethickness.thickening_rate'],self.thickening_rate);
+			writejsdouble(fid,[modelname '.balancethickness.stabilization'],self.stabilization);
+			writejs1Darray(fid,[modelname '.balancethickness.omega'],self.omega);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/basalforcings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/basalforcings.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/basalforcings.m	(revision 19879)
@@ -80,4 +80,11 @@
 			WriteData(fid,'object',self,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.basalforcings.groundedice_melting_rate'],self.groundedice_melting_rate);
+			writejs1Darray(fid,[modelname '.basalforcings.floatingice_melting_rate'],self.floatingice_melting_rate);
+			writejs1Darray(fid,[modelname '.basalforcings.geothermalflux'],self.geothermalflux);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/calving.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calving.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/calving.m	(revision 19879)
@@ -65,4 +65,12 @@
 			WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.calving.stabilization'],self.stabilization);
+			writejs1Darray(fid,[modelname '.calving.spclevelset'],self.spclevelset);
+			writejs1Darray(fid,[modelname '.calving.calvingrate'],self.calvingrate);
+			writejs1Darray(fid,[modelname '.calving.meltingrate'],self.meltingrate);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/constants.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/constants.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/constants.m	(revision 19879)
@@ -64,4 +64,12 @@
 			WriteData(fid,'object',self,'fieldname','referencetemperature','format','Double');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.constants.g'],self.g);
+			writejsdouble(fid,[modelname '.constants.omega'],self.omega);
+			writejsdouble(fid,[modelname '.constants.yts'],self.yts);
+			writejsdouble(fid,[modelname '.constants.referencetemperature'],self.referencetemperature);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/damage.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/damage.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/damage.m	(revision 19879)
@@ -227,4 +227,12 @@
 
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.damage.isdamage'],self.isdamage);
+			if self.isdamage,
+				error('savemodeljs error message: not implemented  yet!');
+			end
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/debug.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/debug.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/debug.m	(revision 19879)
@@ -45,4 +45,11 @@
 			WriteData(fid,'object',self,'fieldname','profiling','format','Boolean');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.debug.valgrind'],self.valgrind);
+			writejsdouble(fid,[modelname '.debug.gprof'],self.gprof);
+			writejsdouble(fid,[modelname '.debug.profiling'],self.profiling);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/flaim.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/flaim.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/flaim.m	(revision 19879)
@@ -106,4 +106,12 @@
 			fielddisplay(self,'quality'            ,'quality of kml solution');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			%do nothing for now!
+			if ~isempty(self.targets),
+				error('flaim savemodeljs error message: not supported yet!');
+			end
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/flowequation.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/flowequation.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/flowequation.m	(revision 19879)
@@ -242,4 +242,26 @@
 			WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2);
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.flowequation.isSIA'],self.isSIA);
+			writejsdouble(fid,[modelname '.flowequation.isSSA'],self.isSSA);
+			writejsdouble(fid,[modelname '.flowequation.isL1L2'],self.isL1L2);
+			writejsdouble(fid,[modelname '.flowequation.isHO'],self.isHO);
+			writejsdouble(fid,[modelname '.flowequation.isFS'],self.isFS);
+			writejsstring(fid,[modelname '.flowequation.fe_SSA'],self.fe_SSA);
+			writejsstring(fid,[modelname '.flowequation.fe_HO'],self.fe_HO);
+			writejsstring(fid,[modelname '.flowequation.fe_FS'],self.fe_FS);
+			writejsdouble(fid,[modelname '.flowequation.augmented_lagrangian_r'],self.augmented_lagrangian_r);
+			writejsdouble(fid,[modelname '.flowequation.augmented_lagrangian_rhop'],self.augmented_lagrangian_rhop);
+			writejsdouble(fid,[modelname '.flowequation.augmented_lagrangian_rlambda'],self.augmented_lagrangian_rlambda);
+			writejsdouble(fid,[modelname '.flowequation.augmented_lagrangian_rholambda'],self.augmented_lagrangian_rholambda);
+			writejsdouble(fid,[modelname '.flowequation.XTH_theta'],self.XTH_theta);
+			writejs1Darray(fid,[modelname '.flowequation.vertex_equation'],self.vertex_equation);
+			writejs1Darray(fid,[modelname '.flowequation.element_equation'],self.element_equation);
+			writejs1Darray(fid,[modelname '.flowequation.borderSSA'],self.borderSSA);
+			writejs1Darray(fid,[modelname '.flowequation.borderHO'],self.borderHO);
+			writejs1Darray(fid,[modelname '.flowequation.borderFS'],self.borderFS);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/friction.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/friction.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/friction.m	(revision 19879)
@@ -61,4 +61,11 @@
 
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.friction.coefficient'],self.coefficient);
+			writejs1Darray(fid,[modelname '.friction.p'],self.p);
+			writejs1Darray(fid,[modelname '.friction.q'],self.q);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/geometry.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/geometry.m	(revision 19879)
@@ -94,4 +94,13 @@
 			WriteData(fid,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1);
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.geometry.surface'],self.surface);
+			writejs1Darray(fid,[modelname '.geometry.thickness'],self.thickness);
+			writejs1Darray(fid,[modelname '.geometry.base'],self.base);
+			writejs1Darray(fid,[modelname '.geometry.bed'],self.bed);
+			writejs1Darray(fid,[modelname '.geometry.hydrostatic_ratio'],self.hydrostatic_ratio);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/gia.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/gia.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/gia.m	(revision 19879)
@@ -77,4 +77,11 @@
 			WriteData(fid,'object',self,'fieldname','cross_section_shape','format','Integer');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.gia.mantle_viscosity'],self.mantle_viscosity);
+			writejsdouble(fid,[modelname '.gia.lithosphere_thickness'],self.lithosphere_thickness);
+			writejsdouble(fid,[modelname '.gia.cross_section_shape'],self.cross_section_shape);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/groundingline.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/groundingline.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/groundingline.m	(revision 19879)
@@ -64,4 +64,9 @@
 			WriteData(fid,'data',StringToEnum(self.migration),'enum',GroundinglineMigrationEnum(),'format','Integer');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsstring(fid,[modelname '.groundingline.migration'],self.migration);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/hydrologyshreve.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologyshreve.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/hydrologyshreve.m	(revision 19879)
@@ -59,4 +59,10 @@
 			WriteData(fid,'object',self,'fieldname','stabilization','format','Double');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.hydrology.spcwatercolumn'],self.spcwatercolumn);
+			writejsdouble(fid,[modelname '.hydrology.stabilization'],self.stabilization);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/initialization.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/initialization.m	(revision 19879)
@@ -152,4 +152,19 @@
 			end
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.initialization.vx'],self.vx);
+			writejs1Darray(fid,[modelname '.initialization.vy'],self.vy);
+			writejs1Darray(fid,[modelname '.initialization.vz'],self.vz);
+			writejs1Darray(fid,[modelname '.initialization.vel'],self.vel);
+			writejs1Darray(fid,[modelname '.initialization.pressure'],self.pressure);
+			writejs1Darray(fid,[modelname '.initialization.temperature'],self.temperature);
+			writejs1Darray(fid,[modelname '.initialization.waterfraction'],self.waterfraction);
+			writejs1Darray(fid,[modelname '.initialization.sediment_head'],self.sediment_head);
+			writejs1Darray(fid,[modelname '.initialization.epl_head'],self.epl_head);
+			writejs1Darray(fid,[modelname '.initialization.epl_thickness'],self.epl_thickness);
+			writejs1Darray(fid,[modelname '.initialization.watercolumn'],self.watercolumn);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/m1qn3inversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/m1qn3inversion.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/m1qn3inversion.m	(revision 19879)
@@ -178,4 +178,26 @@
 			WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.inversion.iscontrol'],self.iscontrol);
+			writejsdouble(fid,[modelname '.inversion.incomplete_adjoint'],self.incomplete_adjoint);
+			writejscellstring(fid,[modelname '.inversion.control_parameters'],self.control_parameters);
+			writejsdouble(fid,[modelname '.inversion.control_scaling_factors'],self.control_scaling_factors);
+			writejsdouble(fid,[modelname '.inversion.maxsteps'],self.maxsteps);
+			writejsdouble(fid,[modelname '.inversion.maxiter'],self.maxiter);
+			writejsdouble(fid,[modelname '.inversion.dxmin'],self.dxmin);
+			writejsdouble(fid,[modelname '.inversion.gttol'],self.gttol);
+			writejs2Darray(fid,[modelname '.inversion.cost_functions'],self.cost_functions);
+			writejs2Darray(fid,[modelname '.inversion.cost_functions_coefficients'],self.cost_functions_coefficients);
+			writejs1Darray(fid,[modelname '.inversion.min_parameters'],self.min_parameters);
+			writejs1Darray(fid,[modelname '.inversion.max_parameters'],self.max_parameters);
+			writejs1Darray(fid,[modelname '.inversion.vx_obs'],self.vx_obs);
+			writejs1Darray(fid,[modelname '.inversion.vy_obs'],self.vy_obs);
+			writejs1Darray(fid,[modelname '.inversion.vz_obs'],self.vz_obs);
+			writejs1Darray(fid,[modelname '.inversion.vel_obs'],self.vel_obs);
+			writejs1Darray(fid,[modelname '.inversion.thickness_obs'],self.thickness_obs);
+			writejs1Darray(fid,[modelname '.inversion.surface_obs'],self.surface_obs);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/mask.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mask.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/mask.m	(revision 19879)
@@ -82,6 +82,11 @@
 				vlist(md.mesh.elements(pos,:))=1;
 				WriteData(fid,'data',vlist,'enum',IceMaskNodeActivationEnum(),'format','DoubleMat','mattype',1);
-				save temp vlist;
 			end
+
+		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.mask.groundedice_levelset'],self.groundedice_levelset);
+			writejs1Darray(fid,[modelname '.mask.ice_levelset'],self.ice_levelset);
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/masstransport.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/masstransport.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/masstransport.m	(revision 19879)
@@ -132,4 +132,16 @@
 			WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum,'format','StringArray');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.masstransport.spcthickness'],self.spcthickness);
+			writejsdouble(fid,[modelname '.masstransport.isfreesurface'],self.isfreesurface);
+			writejsdouble(fid,[modelname '.masstransport.min_thickness'],self.min_thickness);
+			writejsdouble(fid,[modelname '.masstransport.hydrostatic_adjustment'],self.hydrostatic_adjustment);
+			writejsdouble(fid,[modelname '.masstransport.stabilization'],self.stabilization);
+			writejs2Darray(fid,[modelname '.masstransport.vertex_pairing'],self.vertex_pairing);
+			writejsdouble(fid,[modelname '.masstransport.penalty_factor'],self.penalty_factor);
+			writejscellstring(fid,[modelname '.masstransport.requested_outputs'],self.requested_outputs);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/matice.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/matice.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/matice.m	(revision 19879)
@@ -205,4 +205,28 @@
 			WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.materials.rho_ice'],self.rho_ice);
+			writejsdouble(fid,[modelname '.materials.rho_water'],self.rho_water);
+			writejsdouble(fid,[modelname '.materials.rho_freshwater'],self.rho_freshwater);
+			writejsdouble(fid,[modelname '.materials.mu_water'],self.mu_water);
+			writejsdouble(fid,[modelname '.materials.heatcapacity'],self.heatcapacity);
+			writejsdouble(fid,[modelname '.materials.latentheat'],self.latentheat);
+			writejsdouble(fid,[modelname '.materials.thermalconductivity'],self.thermalconductivity);
+			writejsdouble(fid,[modelname '.materials.temperateiceconductivity'],self.temperateiceconductivity);
+			writejsdouble(fid,[modelname '.materials.meltingpoint'],self.meltingpoint);
+			writejsdouble(fid,[modelname '.materials.beta'],self.beta);
+			writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity);
+			writejsdouble(fid,[modelname '.materials.thermal_exchange_velocity'],self.thermal_exchange_velocity);
+			writejsdouble(fid,[modelname '.materials.mixed_layer_capacity'],self.mixed_layer_capacity);
+			writejs1Darray(fid,[modelname '.materials.rheology_B'],self.rheology_B);
+			writejs1Darray(fid,[modelname '.materials.rheology_n'],self.rheology_n);
+			writejsstring(fid,[modelname '.materials.rheology_law'],self.rheology_law);
+			writejsdouble(fid,[modelname '.materials.lithosphere_shear_modulus'],self.lithosphere_shear_modulus);
+			writejsdouble(fid,[modelname '.materials.lithosphere_density'],self.lithosphere_density);
+			writejsdouble(fid,[modelname '.materials.mantle_shear_modulus'],self.mantle_shear_modulus);
+			writejsdouble(fid,[modelname '.materials.mantle_density'],self.mantle_density);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/mesh2d.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mesh2d.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/mesh2d.m	(revision 19879)
@@ -150,4 +150,26 @@
 			s = 'Tria';
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.mesh.x'],self.x);
+			writejs1Darray(fid,[modelname '.mesh.y'],self.y);
+			writejs2Darray(fid,[modelname '.mesh.elements'],self.elements);
+			writejsdouble(fid,[modelname '.mesh.numberofelements'],self.numberofelements);
+			writejsdouble(fid,[modelname '.mesh.numberofvertices'],self.numberofvertices);
+			writejsdouble(fid,[modelname '.mesh.numberofedges'],self.numberofedges);
+			writejs1Darray(fid,[modelname '.mesh.lat'],self.lat);
+			writejs1Darray(fid,[modelname '.mesh.long'],self.long);
+			writejsdouble(fid,[modelname '.mesh.epsg'],self.epsg);
+			writejs1Darray(fid,[modelname '.mesh.vertexonboundary'],self.vertexonboundary);
+			writejs2Darray(fid,[modelname '.mesh.edges'],self.edges);
+			writejs2Darray(fid,[modelname '.mesh.segments'],self.segments);
+			writejs2Darray(fid,[modelname '.mesh.segmentmarkers'],self.segmentmarkers);
+			writejs2Darray(fid,[modelname '.mesh.vertexconnectivity'],self.vertexconnectivity);
+			writejs2Darray(fid,[modelname '.mesh.elementconnectivity'],self.elementconnectivity);
+			writejsdouble(fid,[modelname '.mesh.average_vertex_connectivity'],self.average_vertex_connectivity);
+			writejs1Darray(fid,[modelname '.mesh.extractedvertices'],self.extractedvertices);
+			writejs1Darray(fid,[modelname '.mesh.extractedelements'],self.extractedelements);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/miscellaneous.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/miscellaneous.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/miscellaneous.m	(revision 19879)
@@ -49,4 +49,11 @@
 			WriteData(fid,'object',self,'fieldname','name','format','String');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsstring(fid,[modelname '.miscellaneous.notes'],self.notes);
+			writejsstring(fid,[modelname '.miscellaneous.name'],self.name);
+			%do not save dummy data.
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/model.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/model.m	(revision 19879)
@@ -1352,4 +1352,40 @@
 
 		end % }}}
+		function savemodeljs(md,modelname,filename) % {{{
+
+			%the goal of this routine is to save the model as a javascript array that can be included in any html 
+			%file: 
+
+			%disp: 
+			disp(['saving model ''' modelname ''' in file ' filename]);
+
+			%open file for writing and declare the model:
+			fid=fopen(filename,'w');
+			fprintf(fid,'var %s=new model();\n',modelname);
+
+			%now go through all the classes and fwrite all the corresponding fields: 
+			
+			fields=properties('model');
+			for i=1:length(fields),
+				field=fields{i};
+
+				%Some properties do not need to be saved
+				if ismember(field,{'results' 'radaroverlay','cluster' }),
+					continue;
+				end
+
+				%Check that current field is an object
+				if ~isobject(md.(field))
+					error(['field ''' char(field) ''' is not an object']);
+				end
+
+				%savemodeljs for current object
+				%disp(['javascript saving ' field '...']);
+				savemodeljs(md.(field),fid,modelname);
+			end
+
+			%done, close file:
+			fclose(fid);
+		end
 	end
  end
Index: /issm/trunk-jpl/src/m/classes/outputdefinition.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/outputdefinition.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/outputdefinition.m	(revision 19879)
@@ -58,4 +58,11 @@
 		WriteData(fid,'data',enums,'enum',OutputdefinitionListEnum(),'format','DoubleMat','mattype',1);
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			if ~isempty(self.definitions),
+				error('outputdefinition savemodeljs error message: not supported yet!');
+			end
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/private.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/private.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/private.m	(revision 19879)
@@ -35,4 +35,12 @@
 
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.priv.isconsistent'],self.isconsistent);
+			writejsstring(fid,[modelname '.priv.runtimename'],self.runtimename);
+			writejsstring(fid,[modelname '.priv.solution'],self.solution);
+			%no bamg 
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/qmu.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/qmu.m	(revision 19879)
@@ -209,4 +209,11 @@
 			WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			if self.isdakota,
+				error('qmu savemodeljs error message: not supported yet!');
+			end
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/rifts.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/rifts.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/rifts.m	(revision 19879)
@@ -91,4 +91,17 @@
 			WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3);
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+	
+			if isempty(self.riftstruct) | isnans(self.riftstruct),
+				numrifts=0;
+			else
+				numrifts=numel(self.riftstruct);
+			end
+			
+			if numrifts,
+				error('rifts savemodeljs error message: not supported yet!');
+			end
+	
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/settings.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/settings.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/settings.m	(revision 19879)
@@ -110,4 +110,19 @@
 			end
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.settings.results_on_nodes'],self.results_on_nodes);
+			writejsdouble(fid,[modelname '.settings.io_gather'],self.io_gather);
+			writejsdouble(fid,[modelname '.settings.lowmem'],self.lowmem);
+			writejsdouble(fid,[modelname '.settings.output_frequency'],self.output_frequency);
+			writejsdouble(fid,[modelname '.settings.recording_frequency'],self.recording_frequency);
+			writejsdouble(fid,[modelname '.settings.waitonlock'],self.waitonlock);
+			writejsstring(fid,[modelname '.settings.upload_server'],self.upload_server);
+			writejsstring(fid,[modelname '.settings.upload_path'],self.upload_path);
+			writejsstring(fid,[modelname '.settings.upload_login'],self.upload_login);
+			writejsdouble(fid,[modelname '.settings.upload_port'],self.upload_port);
+			writejsstring(fid,[modelname '.settings.upload_filename'],self.upload_filename);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/steadystate.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/steadystate.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/steadystate.m	(revision 19879)
@@ -80,4 +80,11 @@
 			WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum,'format','StringArray');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.steadystate.reltol'],self.reltol);
+			writejsdouble(fid,[modelname '.steadystate.maxiter'],self.maxiter);
+			writejscellstring(fid,[modelname '.steadystate.requested_outputs'],self.requested_outputs);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/stressbalance.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/stressbalance.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/stressbalance.m	(revision 19879)
@@ -252,4 +252,26 @@
 			WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum,'format','StringArray');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.stressbalance.spcvx'],self.spcvx);
+			writejs1Darray(fid,[modelname '.stressbalance.spcvy'],self.spcvy);
+			writejs1Darray(fid,[modelname '.stressbalance.spcvz'],self.spcvz);
+			writejsdouble(fid,[modelname '.stressbalance.restol'],self.restol);
+			writejsdouble(fid,[modelname '.stressbalance.reltol'],self.reltol);
+			writejsdouble(fid,[modelname '.stressbalance.abstol'],self.abstol);
+			writejsdouble(fid,[modelname '.stressbalance.isnewton'],self.isnewton);
+			writejsdouble(fid,[modelname '.stressbalance.FSreconditioning'],self.FSreconditioning);
+			writejsdouble(fid,[modelname '.stressbalance.viscosity_overshoot'],self.viscosity_overshoot);
+			writejsdouble(fid,[modelname '.stressbalance.maxiter'],self.maxiter);
+			writejsdouble(fid,[modelname '.stressbalance.shelf_dampening'],self.shelf_dampening);
+			writejs1Darray(fid,[modelname '.stressbalance.vertex_pairing'],self.vertex_pairing);
+			writejsdouble(fid,[modelname '.stressbalance.penalty_factor'],self.penalty_factor);
+			writejsdouble(fid,[modelname '.stressbalance.rift_penalty_lock'],self.rift_penalty_lock);
+			writejsdouble(fid,[modelname '.stressbalance.rift_penalty_threshold'],self.rift_penalty_threshold);
+			writejs1Darray(fid,[modelname '.stressbalance.referential'],self.referential);
+			writejs1Darray(fid,[modelname '.stressbalance.loadingforce'],self.loadingforce);
+			writejscellstring(fid,[modelname '.stressbalance.requested_outputs'],self.requested_outputs);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/thermal.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/thermal.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/thermal.m	(revision 19879)
@@ -151,4 +151,18 @@
 			WriteData(fid,'data',outputs,'enum',ThermalRequestedOutputsEnum(),'format','StringArray');
         	end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejs1Darray(fid,[modelname '.thermal.spctemperature'],self.spctemperature);
+			writejsdouble(fid,[modelname '.thermal.penalty_threshold'],self.penalty_threshold);
+			writejsdouble(fid,[modelname '.thermal.stabilization'],self.stabilization);
+			writejsdouble(fid,[modelname '.thermal.reltol'],self.reltol);
+			writejsdouble(fid,[modelname '.thermal.maxiter'],self.maxiter);
+			writejsdouble(fid,[modelname '.thermal.penalty_lock'],self.penalty_lock);
+			writejsdouble(fid,[modelname '.thermal.penalty_factor'],self.penalty_factor);
+			writejsdouble(fid,[modelname '.thermal.isenthalpy'],self.isenthalpy);
+			writejsdouble(fid,[modelname '.thermal.isdynamicbasalspc'],self.isdynamicbasalspc);
+			writejscellstring(fid,[modelname '.thermal.requested_outputs'],self.requested_outputs);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/timestepping.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 19879)
@@ -85,4 +85,15 @@
 			WriteData(fid,'object',self,'fieldname','interp_forcings','format','Boolean');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.timestepping.start_time'],self.start_time);
+			writejsdouble(fid,[modelname '.timestepping.final_time'],self.final_time);
+			writejsdouble(fid,[modelname '.timestepping.time_step'],self.time_step);
+			writejsdouble(fid,[modelname '.timestepping.time_adapt'],self.time_adapt);
+			writejsdouble(fid,[modelname '.timestepping.cfl_coefficient'],self.cfl_coefficient);
+			writejsdouble(fid,[modelname '.timestepping.interp_forcings'],self.interp_forcings);
+			writejsdouble(fid,[modelname '.timestepping.in_years'],self.in_years);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/toolkits.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/toolkits.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/toolkits.m	(revision 19879)
@@ -125,4 +125,16 @@
 			 fclose(fid);
 		 end %}}}
+		function savemodeljs(self,fid,modelname) % {{{
+	
+			analyses=properties(self);
+			 for i=1:numel(analyses),
+				 if isempty(fieldnames(self.(analyses{i})))
+					 error(['md.toolkits.' analyses{i} ' is empty']);
+				 else
+					 writejsstruct(fid,[modelname '.toolkits.' analyses{i}],self.(analyses{i}));
+				 end
+			 end
+	
+		end % }}}
 	 end
  end
Index: /issm/trunk-jpl/src/m/classes/transient.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/transient.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/transient.m	(revision 19879)
@@ -141,4 +141,19 @@
 			WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum,'format','StringArray');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.trans.issmb'],self.issmb);
+			writejsdouble(fid,[modelname '.trans.ismasstransport'],self.ismasstransport);
+			writejsdouble(fid,[modelname '.trans.isstressbalance'],self.isstressbalance);
+			writejsdouble(fid,[modelname '.trans.isthermal'],self.isthermal);
+			writejsdouble(fid,[modelname '.trans.isgroundingline'],self.isgroundingline);
+			writejsdouble(fid,[modelname '.trans.isgia'],self.isgia);
+			writejsdouble(fid,[modelname '.trans.isdamageevolution'],self.isdamageevolution);
+			writejsdouble(fid,[modelname '.trans.islevelset'],self.islevelset);
+			writejsdouble(fid,[modelname '.trans.iscalving'],self.iscalving);
+			writejsdouble(fid,[modelname '.trans.ishydrology'],self.ishydrology);
+			writejscellstring(fid,[modelname '.trans.requested_outputs'],self.requested_outputs);
+
+		end % }}}
 	end
 end
Index: /issm/trunk-jpl/src/m/classes/verbose.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/verbose.m	(revision 19878)
+++ /issm/trunk-jpl/src/m/classes/verbose.m	(revision 19879)
@@ -150,4 +150,17 @@
 			WriteData(fid,'data',VerboseToBinary(self),'enum',VerboseEnum(),'format','Integer');
 		end % }}}
+		function savemodeljs(self,fid,modelname) % {{{
+		
+			writejsdouble(fid,[modelname '.verbose.mprocessor'],self.mprocessor);
+			writejsdouble(fid,[modelname '.verbose.module'],self.module);
+			writejsdouble(fid,[modelname '.verbose.solution'],self.solution);
+			writejsdouble(fid,[modelname '.verbose.solver'],self.solver);
+			writejsdouble(fid,[modelname '.verbose.convergence'],self.convergence);
+			writejsdouble(fid,[modelname '.verbose.control'],self.control);
+			writejsdouble(fid,[modelname '.verbose.qmu'],self.qmu);
+			writejsdouble(fid,[modelname '.verbose.autodiff'],self.autodiff);
+			writejsdouble(fid,[modelname '.verbose.smb'],self.smb);
+
+		end % }}}
 	end
 end
