Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 25957)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 25958)
@@ -795,7 +795,8 @@
 void           MasstransportAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
 
+
 	/*Only update if on base*/
 	if(!element->IsOnBase()) return;
-
+	
 	/*Fetch dof list and allocate solution vector*/
 	int *doflist = NULL;
@@ -805,4 +806,7 @@
 	IssmDouble* newthickness = xNew<IssmDouble>(numnodes);
 	IssmDouble* thicknessresidual = xNew<IssmDouble>(numnodes);
+	
+	/*recover time step:*/
+	IssmDouble dt = element->FindParam(TimesteppingTimeStepEnum);
 
 	/*Use the dof list to index into the solution vector: */
@@ -840,5 +844,5 @@
 	IssmDouble* oldthickness      = xNew<IssmDouble>(numvertices);
 	IssmDouble* cumdeltathickness = xNew<IssmDouble>(numvertices);
-	IssmDouble* deltathickness    = xNew<IssmDouble>(numvertices);
+	IssmDouble* icethicknessrate    = xNew<IssmDouble>(numvertices);
 	IssmDouble* newbase           = xNew<IssmDouble>(numvertices);
 	IssmDouble* bed               = xNew<IssmDouble>(numvertices);
@@ -866,5 +870,5 @@
 	for(int i=0;i<numvertices;i++){
 		cumdeltathickness[i] += newthickness[i]-oldthickness[i];
-		deltathickness[i]     = newthickness[i]-oldthickness[i];
+		icethicknessrate[i]     = (newthickness[i]-oldthickness[i])/dt;
 	}
 
@@ -903,5 +907,5 @@
 	element->AddBasalInput(BaseEnum,newbase,P1Enum);
 	element->AddBasalInput(SealevelchangeCumDeltathicknessEnum,cumdeltathickness,P1Enum);
-	element->AddBasalInput(SurfaceloadIceThicknessChangeEnum,deltathickness,P1Enum);
+	element->AddBasalInput(SurfaceloadIceThicknessRateEnum,icethicknessrate,P1Enum);
 
 	/*Free ressources:*/
@@ -911,5 +915,5 @@
 	xDelete<IssmDouble>(newsurface);
 	xDelete<IssmDouble>(oldthickness);
-	xDelete<IssmDouble>(deltathickness);
+	xDelete<IssmDouble>(icethicknessrate);
 	xDelete<IssmDouble>(oldbase);
 	xDelete<IssmDouble>(oldsurface);
Index: /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp	(revision 25957)
+++ /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp	(revision 25958)
@@ -40,8 +40,9 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchData(&geodetic,"md.solidearth.settings.computesealevelchange");
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.icethicknesschange",SurfaceloadIceThicknessChangeEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.initialsealevel",SealevelEnum,0);
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.waterheightchange",SurfaceloadWaterHeightChangeEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.icethicknesschange",SurfaceloadIceThicknessRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.waterheightchange",SurfaceloadWaterHeightRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.other",SurfaceloadOtherRateEnum);
 		
 	/*dynamic sea level: */
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 25957)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 25958)
@@ -5523,4 +5523,6 @@
 /*}}}*/
 void	Tria::SealevelchangeMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){/*{{{*/
+
+
 	/*early return if we are not on an ice cap OR ocean:*/
 	if(!masks->isiceonly[this->lid] && !masks->isoceanin[this->lid]){
@@ -5599,17 +5601,20 @@
 	}
 	else if(masks->isiceonly[this->lid]){
-		IssmDouble rho_ice, I;
-
-		/*recover material parameters: */
+		IssmDouble rho_ice, dIdt, dt;
+		
+
+		/*recover parameters: */
 		rho_ice=FindParam(MaterialsRhoIceEnum);
+		dt=FindParam(TimesteppingTimeStepEnum);
 
 		/*Compute ice thickness change: */
-		Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessChangeEnum);
+		Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessRateEnum);
 		if (!deltathickness_input)_error_("delta thickness input needed to compute sea level change!");
-		deltathickness_input->GetInputAverage(&I);
-
-		dI_list[0] = -4*PI*(rho_ice*I*area)*pow(re,4)*(sin(late)*cos(late)*cos(longe))/planetarea;
-		dI_list[1] = -4*PI*(rho_ice*I*area)*pow(re,4)*(sin(late)*cos(late)*sin(longe))/planetarea;
-		dI_list[2] = +4*PI*(rho_ice*I*area)*pow(re,4)*(1-pow(sin(late),2))/planetarea;
+		deltathickness_input->GetInputAverage(&dIdt);
+
+
+		dI_list[0] = -4*PI*(rho_ice*dIdt*dt*area)*pow(re,4)*(sin(late)*cos(late)*cos(longe))/planetarea;
+		dI_list[1] = -4*PI*(rho_ice*dIdt*dt*area)*pow(re,4)*(sin(late)*cos(late)*sin(longe))/planetarea;
+		dI_list[2] = +4*PI*(rho_ice*dIdt*dt*area)*pow(re,4)*(1-pow(sin(late),2))/planetarea;
 	}
 
@@ -5819,9 +5824,10 @@
 	IssmDouble area;
 	IssmDouble phi=1.0; //WARNING: do not touch this, default is entire elemnt contributes barystatic
-	IssmDouble I;  //change in ice thickness or water level(Farrel and Clarke, Equ. 4)
+	IssmDouble Idot;  //ice thickness rate (Farrel and Clarke, Equ. 4)
 	bool notfullygrounded=false;
 	bool scaleoceanarea= false;
 	bool computerigid= false;
 	int  glfraction=1;
+	IssmDouble dt=0;
 
 	/*output: */
@@ -5868,4 +5874,5 @@
 	rho_ice=FindParam(MaterialsRhoIceEnum);
 	rho_water=FindParam(MaterialsRhoSeawaterEnum);
+	dt=FindParam(TimesteppingTimeStepEnum);
 	this->parameters->FindParam(&computerigid,SolidearthSettingsRigidEnum);
 	this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum);
@@ -5892,9 +5899,9 @@
 
 	/*Retrieve ice thickness at vertices: */
-	Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessChangeEnum);
+	Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessRateEnum);
 	if (!deltathickness_input)_error_("delta thickness input needed to compute sea level change!");
 
 	/*/Average ice thickness over grounded area of the element only: {{{*/
-	if(!notfullygrounded)deltathickness_input->GetInputAverage(&I);
+	if(!notfullygrounded)deltathickness_input->GetInputAverage(&Idot);
 	else{
 		IssmDouble total_weight=0;
@@ -5909,12 +5916,12 @@
 		/* Start  looping on the number of gaussian points and average over these gaussian points: */
 		total_weight=0;
-		I=0;
+		Idot=0;
 		while(gauss->next()){
-			IssmDouble Ig=0;
-			deltathickness_input->GetInputValue(&Ig,gauss);
-			I+=Ig*gauss->weight;
+			IssmDouble Idotg=0;
+			deltathickness_input->GetInputValue(&Idotg,gauss);
+			Idot+=Idotg*gauss->weight;
 			total_weight+=gauss->weight;
 		}
-		I=I/total_weight;
+		Idot=Idot/total_weight;
 		delete gauss;
 	}
@@ -5924,13 +5931,13 @@
 	_assert_(oceanarea>0.);
 	if(scaleoceanarea) oceanarea=3.619e+14; // use true ocean area, m^2
-	bslcice = rho_ice*area*phi*I/(oceanarea*rho_water);
+	bslcice = rho_ice*area*phi*Idot*dt/(oceanarea*rho_water);
 	_assert_(!xIsNan<IssmDouble>(bslcice));
 
 	if(computerigid){
 		/*convert from m to kg/m^2:*/
-		I=I*rho_ice*phi;
+		Idot=Idot*rho_ice*phi;
 
 		/*convolve:*/
-		for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*I;
+		for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*Idot*dt;
 	}
 
@@ -5950,5 +5957,6 @@
 	IssmDouble area;
 	IssmDouble phi=1.0; //WARNING: do not touch this, default is entire elemnt contributes barystatic
-	IssmDouble W;  //change in water height thickness (Farrel and Clarke, Equ. 4)
+	IssmDouble Wdot;  //change in water height thickness (Farrel and Clarke, Equ. 4)
+	IssmDouble dt=0;
 	bool notfullygrounded=false;
 	bool scaleoceanarea= false;
@@ -5983,4 +5991,5 @@
 	rho_water=FindParam(MaterialsRhoSeawaterEnum);
 	rho_freshwater=FindParam(MaterialsRhoFreshwaterEnum);
+	dt=FindParam(TimesteppingTimeStepEnum);
 	this->parameters->FindParam(&computeelastic,SolidearthSettingsElasticEnum);
 	this->parameters->FindParam(&scaleoceanarea,SolidearthSettingsOceanAreaScalingEnum);
@@ -5993,20 +6002,20 @@
 
 	/*Retrieve water height at vertices: */
-	Input* deltathickness_input=this->GetInput(SurfaceloadWaterHeightChangeEnum);
-	if (!deltathickness_input)_error_("SurfaceloadWaterHeightChangeEnum input needed to compute sea level change!");
-	deltathickness_input->GetInputAverage(&W);
+	Input* deltathickness_input=this->GetInput(SurfaceloadWaterHeightRateEnum);
+	if (!deltathickness_input)_error_("SurfaceloadWaterHeightRateEnum input needed to compute sea level change!");
+	deltathickness_input->GetInputAverage(&Wdot);
 
 	/*Compute barystatic component:*/
 	_assert_(oceanarea>0.);
 	if(scaleoceanarea) oceanarea=3.619e+14; // use true ocean area, m^2
-	bslchydro = rho_freshwater*area*phi*W/(oceanarea*rho_water);
+	bslchydro = rho_freshwater*area*phi*Wdot*dt/(oceanarea*rho_water);
 	_assert_(!xIsNan<IssmDouble>(bslchydro));
 
 	if(computeelastic){
 		/*convert from m to kg/m^2:*/
-		W=W*rho_freshwater*phi;
+		Wdot=Wdot*rho_freshwater*phi;
 
 		/*convolve:*/
-		for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*W;
+		for(int i=0;i<gsize;i++) Sgi[i]+=G[i]*Wdot*dt;
 	}
 
@@ -6118,5 +6127,5 @@
 	/*diverse:*/
 	int gsize;
-	IssmDouble I, S, BP;		//change in relative ice thickness and sea level
+	IssmDouble Idot, S, BP;		//change in relative ice thickness and sea level
 	IssmDouble rho_ice,rho_water;
 	int horiz;
@@ -6182,18 +6191,20 @@
 	}
 	else if (masks->isiceonly[this->lid]){
+		IssmDouble dt=0;
+		dt=FindParam(TimesteppingTimeStepEnum);
 
 		/*Compute ice thickness change: */
-		Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessChangeEnum);
+		Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessRateEnum);
 		if (!deltathickness_input)_error_("delta thickness input needed to compute sea level change!");
-		deltathickness_input->GetInputAverage(&I);
+		deltathickness_input->GetInputAverage(&Idot);
 
 		/*convert to kg/m^2*/
-		I=I*rho_ice;
+		Idot=Idot*rho_ice;
 
 		for(int i=0;i<gsize;i++){
-			Up[i]+=I*GU[i];
+			Up[i]+=Idot*dt*GU[i];
 			if(horiz){
-				North[i]+=I*GN[i];
-				East[i]+=I*GE[i];
+				North[i]+=Idot*dt*GN[i];
+				East[i]+=Idot*dt*GE[i];
 			}
 		}
Index: /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25957)
+++ /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25958)
@@ -255,5 +255,5 @@
 
 		/*we have accumulated thicknesses, dump them in deltathcikness: */
-		if(modelid==earthid)InputDuplicatex(femmodel,SealevelchangeCumDeltathicknessEnum,SurfaceloadIceThicknessChangeEnum);
+		if(modelid==earthid)InputDuplicatex(femmodel,SealevelchangeCumDeltathicknessEnum,SurfaceloadIceThicknessRateEnum);
 	}
 
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25957)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25958)
@@ -734,7 +734,8 @@
 syn keyword cConstant SealevelchangeCumDeltathicknessEnum
 syn keyword cConstant SealevelchangeCumDeltathicknessOldEnum
-syn keyword cConstant SurfaceloadOtherEnum
-syn keyword cConstant SurfaceloadIceThicknessChangeEnum
-syn keyword cConstant SurfaceloadWaterHeightChangeEnum
+syn keyword cConstant SurfaceloadRateEnum
+syn keyword cConstant SurfaceloadIceThicknessRateEnum
+syn keyword cConstant SurfaceloadWaterHeightRateEnum
+syn keyword cConstant SurfaceloadOtherRateEnum
 syn keyword cConstant SealevelchangeIndicesEnum
 syn keyword cConstant SealevelchangeGEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25957)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25958)
@@ -730,7 +730,8 @@
 	SealevelchangeCumDeltathicknessEnum,
 	SealevelchangeCumDeltathicknessOldEnum,
-	SurfaceloadOtherEnum,
-	SurfaceloadIceThicknessChangeEnum,
-	SurfaceloadWaterHeightChangeEnum,
+	SurfaceloadRateEnum,
+	SurfaceloadIceThicknessRateEnum,
+	SurfaceloadWaterHeightRateEnum,
+	SurfaceloadOtherRateEnum,
 	SealevelchangeIndicesEnum,
 	SealevelchangeGEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25957)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25958)
@@ -736,7 +736,8 @@
 		case SealevelchangeCumDeltathicknessEnum : return "SealevelchangeCumDeltathickness";
 		case SealevelchangeCumDeltathicknessOldEnum : return "SealevelchangeCumDeltathicknessOld";
-		case SurfaceloadOtherEnum : return "SurfaceloadOther";
-		case SurfaceloadIceThicknessChangeEnum : return "SurfaceloadIceThicknessChange";
-		case SurfaceloadWaterHeightChangeEnum : return "SurfaceloadWaterHeightChange";
+		case SurfaceloadRateEnum : return "SurfaceloadRate";
+		case SurfaceloadIceThicknessRateEnum : return "SurfaceloadIceThicknessRate";
+		case SurfaceloadWaterHeightRateEnum : return "SurfaceloadWaterHeightRate";
+		case SurfaceloadOtherRateEnum : return "SurfaceloadOtherRate";
 		case SealevelchangeIndicesEnum : return "SealevelchangeIndices";
 		case SealevelchangeGEnum : return "SealevelchangeG";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25957)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25958)
@@ -751,10 +751,11 @@
 	      else if (strcmp(name,"SealevelchangeCumDeltathickness")==0) return SealevelchangeCumDeltathicknessEnum;
 	      else if (strcmp(name,"SealevelchangeCumDeltathicknessOld")==0) return SealevelchangeCumDeltathicknessOldEnum;
-	      else if (strcmp(name,"SurfaceloadOther")==0) return SurfaceloadOtherEnum;
+	      else if (strcmp(name,"SurfaceloadRate")==0) return SurfaceloadRateEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"SurfaceloadIceThicknessChange")==0) return SurfaceloadIceThicknessChangeEnum;
-	      else if (strcmp(name,"SurfaceloadWaterHeightChange")==0) return SurfaceloadWaterHeightChangeEnum;
+	      if (strcmp(name,"SurfaceloadIceThicknessRate")==0) return SurfaceloadIceThicknessRateEnum;
+	      else if (strcmp(name,"SurfaceloadWaterHeightRate")==0) return SurfaceloadWaterHeightRateEnum;
+	      else if (strcmp(name,"SurfaceloadOtherRate")==0) return SurfaceloadOtherRateEnum;
 	      else if (strcmp(name,"SealevelchangeIndices")==0) return SealevelchangeIndicesEnum;
 	      else if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"SolidearthExternalGeoidRate")==0) return SolidearthExternalGeoidRateEnum;
 	      else if (strcmp(name,"SolidearthExternalBarystaticSeaLevelRate")==0) return SolidearthExternalBarystaticSeaLevelRateEnum;
-	      else if (strcmp(name,"StrainRateeffective")==0) return StrainRateeffectiveEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"StrainRateparallel")==0) return StrainRateparallelEnum;
+	      if (strcmp(name,"StrainRateeffective")==0) return StrainRateeffectiveEnum;
+	      else if (strcmp(name,"StrainRateparallel")==0) return StrainRateparallelEnum;
 	      else if (strcmp(name,"StrainRateperpendicular")==0) return StrainRateperpendicularEnum;
 	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
 	      else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
-	      else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
+	      if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
+	      else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
 	      else if (strcmp(name,"Outputdefinition62")==0) return Outputdefinition62Enum;
 	      else if (strcmp(name,"Outputdefinition63")==0) return Outputdefinition63Enum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
-	      else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
+	      if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;
+	      else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
 	      else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
 	      else if (strcmp(name,"Element")==0) return ElementEnum;
@@ -1243,9 +1244,9 @@
 	      else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
 	      else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
-	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"Matestar")==0) return MatestarEnum;
+	      if (strcmp(name,"Materials")==0) return MaterialsEnum;
+	      else if (strcmp(name,"Matestar")==0) return MatestarEnum;
 	      else if (strcmp(name,"Matice")==0) return MaticeEnum;
 	      else if (strcmp(name,"Matlitho")==0) return MatlithoEnum;
@@ -1366,9 +1367,9 @@
 	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
 	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
-	      else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
          else stage=12;
    }
    if(stage==12){
-	      if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
+	      if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
+	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
 	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
 	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 25957)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 25958)
@@ -163,7 +163,7 @@
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
-	else if(strcmp(string_in,"SurfaceloadIceThicknessChange")==0){
+	else if(strcmp(string_in,"SurfaceloadIceThicknessRate")==0){
 		const char* field = "md.solidearth.surfaceload.icethicknesschange";
-		input_enum        = SurfaceloadIceThicknessChangeEnum;
+		input_enum        = SurfaceloadIceThicknessRateEnum;
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
@@ -178,7 +178,7 @@
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
-	else if(strcmp(string_in,"SurfaceloadWaterHeightChange")==0){
+	else if(strcmp(string_in,"SurfaceloadWaterHeightRate")==0){
 		const char* field = "md.solidearth.surfaceload.waterheightchange";
-		input_enum        = SurfaceloadWaterHeightChangeEnum;
+		input_enum        = SurfaceloadWaterHeightRateEnum;
 		fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1));
 	}
Index: /issm/trunk-jpl/src/m/classes/mmeadditionalsolidearthsolution.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mmeadditionalsolidearthsolution.m	(revision 25957)
+++ /issm/trunk-jpl/src/m/classes/mmeadditionalsolidearthsolution.m	(revision 25958)
@@ -69,13 +69,40 @@
 		function marshall(self,prefix,md,fid) % {{{
 			WriteData(fid,prefix,'object',self,'data',3,'name','md.solidearth.external.nature','format','Integer'); %code 3 for mmeadditionalsolidearthsolution  class
-			WriteData(fid,prefix,'name','md.solidearth.external.nummodels','data',length(self.displacementeast),'format','Integer');
+			nummodels=length(self.displacementeast);
+			WriteData(fid,prefix,'name','md.solidearth.external.nummodels','data',nummodels,'format','Integer');
 			WriteData(fid,prefix,'object',self,'fieldname','modelid','format','Double');
-			WriteData(fid,prefix,'object',self,'fieldname','displacementeast','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
-			WriteData(fid,prefix,'object',self,'fieldname','displacementup','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
-			WriteData(fid,prefix,'object',self,'fieldname','displacementnorth','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
-			WriteData(fid,prefix,'object',self,'fieldname','geoid','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
-			WriteData(fid,prefix,'object',self,'fieldname','barystaticsealevel','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
+
+			%transform our cell array of time series into cell array of time series of rates 
+			for i=1:nummodels,
+				displacementeast=self.displacementeast{i}; 
+				displacementnorth=self.displacementnorth{i}; 
+				displacementup=self.displacementup{i}; 
+				geoid=self.geoid{i}; 
+				barystaticsealevel=self.barystaticsealevel{i}; 
+
+				time=displacementeast(end,:);
+				dt=diff(time,1,2);
+				
+				displacementeast_rate=diff(displacementeast(1:end-1,:),1,2)./dt;
+				displacementnorth_rate=diff(displacementnorth(1:end-1,:),1,2)./dt;
+				displacementup_rate=diff(displacementup(1:end-1,:),1,2)./dt;
+				geoid_rate=diff(geoid(1:end-1,:),1,2)./dt;
+				barystaticsealevel_rate=diff(barystaticsealevel(1:end-1,:),1,2)./dt;
+
+				self.displacementeast{i}=displacementeast_rate; 
+				self.displacementnorth{i}=displacementnorth_rate; 
+				self.displacementup{i}=displacementup_rate; 
+				self.geoid{i}=geoid_rate; 
+				self.barystaticsealevel{i}=barystaticsealevel_rate; 
+			end
+			
+			WriteData(fid,prefix,'object',self,'fieldname','displacementeast','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
+			WriteData(fid,prefix,'object',self,'fieldname','displacementup','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
+			WriteData(fid,prefix,'object',self,'fieldname','displacementnorth','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
+			WriteData(fid,prefix,'object',self,'fieldname','geoid','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
+			WriteData(fid,prefix,'object',self,'fieldname','barystaticsealevel','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
 
 		end % }}}
+
 		function savemodeljs(self,fid,modelname) % {{{
 			error('mmeadditionalsolidearthsolution error message: not implemented yet');
Index: /issm/trunk-jpl/src/m/classes/mmeofflinesolidearthsolution.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/mmeofflinesolidearthsolution.m	(revision 25957)
+++ /issm/trunk-jpl/src/m/classes/mmeofflinesolidearthsolution.m	(revision 25958)
@@ -70,10 +70,36 @@
 			WriteData(fid,prefix,'object',self,'data',4,'name','md.solidearth.external.nature','format','Integer'); %code 4 for mmeofflinesolidearthsolution  class
 			WriteData(fid,prefix,'object',self,'fieldname','modelid','format','Double');
-			WriteData(fid,prefix,'name','md.solidearth.external.nummodels','data',length(self.displacementeast),'format','Integer');
-			WriteData(fid,prefix,'object',self,'fieldname','displacementeast','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
-			WriteData(fid,prefix,'object',self,'fieldname','displacementup','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
-			WriteData(fid,prefix,'object',self,'fieldname','displacementnorth','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
-			WriteData(fid,prefix,'object',self,'fieldname','geoid','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
-			WriteData(fid,prefix,'object',self,'fieldname','barystaticsealevel','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1e-3);
+			nummodels=length(self.displacementeast);
+			WriteData(fid,prefix,'name','md.solidearth.external.nummodels','data',nummodels,'format','Integer');
+
+			%transform our cell array of time series into cell array of time series of rates 
+			for i=1:nummodels,
+				displacementeast=self.displacementeast{i}; 
+				displacementnorth=self.displacementnorth{i}; 
+				displacementup=self.displacementup{i}; 
+				geoid=self.geoid{i}; 
+				barystaticsealevel=self.barystaticsealevel{i}; 
+
+				time=displacementeast(end,:);
+				dt=diff(time,1,2);
+				
+				displacementeast_rate=diff(displacementeast(1:end-1,:),1,2)./dt;
+				displacementnorth_rate=diff(displacementnorth(1:end-1,:),1,2)./dt;
+				displacementup_rate=diff(displacementup(1:end-1,:),1,2)./dt;
+				geoid_rate=diff(geoid(1:end-1,:),1,2)./dt;
+				barystaticsealevel_rate=diff(barystaticsealevel(1:end-1,:),1,2)./dt;
+
+				self.displacementeast{i}=displacementeast_rate; 
+				self.displacementnorth{i}=displacementnorth_rate; 
+				self.displacementup{i}=displacementup_rate; 
+				self.geoid{i}=geoid_rate; 
+				self.barystaticsealevel{i}=barystaticsealevel_rate; 
+			end
+			
+			WriteData(fid,prefix,'object',self,'fieldname','displacementeast','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
+			WriteData(fid,prefix,'object',self,'fieldname','displacementup','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
+			WriteData(fid,prefix,'object',self,'fieldname','displacementnorth','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
+			WriteData(fid,prefix,'object',self,'fieldname','geoid','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
+			WriteData(fid,prefix,'object',self,'fieldname','barystaticsealevel','format','MatArray','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts,'scale',1/yts);
 
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/surfaceload.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/surfaceload.m	(revision 25957)
+++ /issm/trunk-jpl/src/m/classes/surfaceload.m	(revision 25958)
@@ -65,26 +65,89 @@
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
-
+			
+			%deal with ice thickness change: {{{
 			if isempty(self.icethicknesschange),
 				self.icethicknesschange=zeros(md.mesh.numberofelements+1,1);
 			end
+
+			if isa(self.icethicknesschange,'cell'),
+				%transform our cell array of time series into cell array of time series of rates 
+				nummodels=length(self.icethicknesschange);
+				for i=1:nummodels,
+					icethicknesschange=self.icethicknesschange{i}; 
+					time=icethicknesschange(end,:);
+					dt=diff(time,1,2);
+					icethicknesschange_rate=diff(icethicknesschange(1:end-1,:),1,2)./dt;
+					self.icethicknesschange{i}=icethicknesschange_rate; 
+				end
+				WriteData(fid,prefix,'object',self,'fieldname','icethicknesschange','name','md.solidearth.surfaceload.icethicknesschange',...
+				'format','MatArray','timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts,'scale',1/yts);
+			else
+				icethicknesschange=self.icethicknesschange;
+				time=icethicknesschange(end,:);
+				dt=diff(time,1,2);
+				icethicknesschange_rate=diff(icethicknesschange(1:end-1,:),1,2)./dt;
+				self.icethicknesschange=icethicknesschange_rate; 
+
+				WriteData(fid,prefix,'object',self,'fieldname','icethicknesschange','name','md.solidearth.surfaceload.icethicknesschange',...
+				'format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts,'scale',1/yts);
+			end
+			%}}}
+			%deal with water height change: {{{
 			if isempty(self.waterheightchange),
 				self.waterheightchange=zeros(md.mesh.numberofelements+1,1);
 			end
+
+			if isa(self.waterheightchange,'cell'),
+				%transform our cell array of time series into cell array of time series of rates 
+				nummodels=length(self.waterheightchange);
+				for i=1:nummodels,
+					waterheightchange=self.waterheightchange{i}; 
+					time=waterheightchange(end,:);
+					dt=diff(time,1,2);
+					waterheightchange_rate=diff(waterheightchange(1:end-1,:),1,2)./dt;
+					self.waterheightchange{i}=waterheightchange_rate; 
+				end
+				WriteData(fid,prefix,'object',self,'fieldname','waterheightchange','name','md.solidearth.surfaceload.waterheightchange',...
+				'format','MatArray','timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts,'scale',1/yts);
+			else
+				waterheightchange=self.waterheightchange;
+				time=waterheightchange(end,:);
+				dt=diff(time,1,2);
+				waterheightchange_rate=diff(waterheightchange(1:end-1,:),1,2)./dt;
+				self.waterheightchange=waterheightchange_rate; 
+
+				WriteData(fid,prefix,'object',self,'fieldname','waterheightchange','name','md.solidearth.surfaceload.waterheightchange',...
+				'format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts,'scale',1/yts);
+			end
+			%}}}
+			%deal with other: {{{
 			if isempty(self.other),
 				self.other=zeros(md.mesh.numberofelements+1,1);
 			end
-			if isa(self.icethicknesschange,'cell'),
-				WriteData(fid,prefix,'object',self,'fieldname','icethicknesschange','name','md.solidearth.surfaceload.icethicknesschange',...
-				'format','MatArray','timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+
+			if isa(self.otherchange,'cell'),
+				%transform our cell array of time series into cell array of time series of rates 
+				nummodels=length(self.otherchange);
+				for i=1:nummodels,
+					otherchange=self.otherchange{i}; 
+					time=otherchange(end,:);
+					dt=diff(time,1,2);
+					otherchange_rate=diff(otherchange(1:end-1,:),1,2)./dt;
+					self.otherchange{i}=otherchange_rate; 
+				end
+				WriteData(fid,prefix,'object',self,'fieldname','otherchange','name','md.solidearth.surfaceload.otherchange',...
+				'format','MatArray','timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts,'scale',1/yts);
 			else
-				WriteData(fid,prefix,'object',self,'fieldname','icethicknesschange','name','md.solidearth.surfaceload.icethicknesschange',...
-				'format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+				otherchange=self.otherchange;
+				time=otherchange(end,:);
+				dt=diff(time,1,2);
+				otherchange_rate=diff(otherchange(1:end-1,:),1,2)./dt;
+				self.otherchange=otherchange_rate; 
+
+				WriteData(fid,prefix,'object',self,'fieldname','otherchange','name','md.solidearth.surfaceload.otherchange',...
+				'format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts,'scale',1/yts);
 			end
-
-			WriteData(fid,prefix,'object',self,'fieldname','waterheightchange','name','md.solidearth.surfaceload.waterheightchange',...
-				'format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
-			WriteData(fid,prefix,'object',self,'fieldname','other','name','md.solidearth.surfaceload.other',...
-				'format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
+			%}}}
 
 		end % }}}
