Index: /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 11809)
+++ /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 11810)
@@ -163,6 +163,7 @@
 	ThermalIsenthalpyEnum,
 	ThicknessEnum,
+	TimesteppingStartTimeEnum,
+	TimesteppingFinalTimeEnum,
 	TimesteppingCflCoefficientEnum,
-	TimesteppingFinalTimeEnum,
 	TimesteppingTimeAdaptEnum,
 	TimesteppingTimeStepEnum,
Index: /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 11809)
+++ /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 11810)
@@ -167,6 +167,7 @@
 		case ThermalIsenthalpyEnum : return "ThermalIsenthalpy";
 		case ThicknessEnum : return "Thickness";
+		case TimesteppingStartTimeEnum : return "TimesteppingStartTime";
+		case TimesteppingFinalTimeEnum : return "TimesteppingFinalTime";
 		case TimesteppingCflCoefficientEnum : return "TimesteppingCflCoefficient";
-		case TimesteppingFinalTimeEnum : return "TimesteppingFinalTime";
 		case TimesteppingTimeAdaptEnum : return "TimesteppingTimeAdapt";
 		case TimesteppingTimeStepEnum : return "TimesteppingTimeStep";
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 11809)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 11810)
@@ -45,7 +45,8 @@
 	parameters->AddObject(iomodel->CopyConstantObject(SteadystateMaxiterEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(ConstantsYtsEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingStartTimeEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingFinalTimeEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeAdaptEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingTimeStepEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(TimesteppingCflCoefficientEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(PrognosticHydrostaticAdjustmentEnum));
Index: /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 11809)
+++ /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 11810)
@@ -171,6 +171,7 @@
 	      else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum;
 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
+	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
 	      else if (strcmp(name,"TimesteppingCflCoefficient")==0) return TimesteppingCflCoefficientEnum;
-	      else if (strcmp(name,"TimesteppingFinalTime")==0) return TimesteppingFinalTimeEnum;
 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
 	      else if (strcmp(name,"Param")==0) return ParamEnum;
-	      else if (strcmp(name,"PattynIceFront")==0) return PattynIceFrontEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"Pengrid")==0) return PengridEnum;
+	      if (strcmp(name,"PattynIceFront")==0) return PattynIceFrontEnum;
+	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
-	      else if (strcmp(name,"DoubleVecExternalResult")==0) return DoubleVecExternalResultEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
+	      if (strcmp(name,"DoubleVecExternalResult")==0) return DoubleVecExternalResultEnum;
+	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
 	      else if (strcmp(name,"J")==0) return JEnum;
 	      else if (strcmp(name,"Patch")==0) return PatchEnum;
Index: /issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp	(revision 11809)
+++ /issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp	(revision 11810)
@@ -47,29 +47,27 @@
 	double scale;
 	switch(type_enum){
-		case TimesteppingTimeStepEnum: scale=1.0/yts;break; //yr
-		case TimesteppingFinalTimeEnum:    scale=1.0/yts;break; //yr
-		case TimeEnum:        scale=1.0/yts;break; //yr
-		case HydrologyWaterVxEnum: scale=yts;break; //m/yr
-		case HydrologyWaterVyEnum: scale=yts;break; //m/yr
-		case VxEnum:          scale=yts;break; //m/yr
-		case InversionVxObsEnum:       scale=yts;break; //m/yr
-		case VyEnum:          scale=yts;break; //m/yr
-		case InversionVyObsEnum:       scale=yts;break; //m/yr
-		case VzEnum:          scale=yts;break; //m/yr
-		case InversionVzObsEnum:       scale=yts;break; //m/yr
-		case VelEnum:         scale=yts;break; //m/yr
-		case InversionVelObsEnum:      scale=yts;break; //m/yr
-		case BalancethicknessThickeningRateEnum:  scale=yts;break; //m/yr
-		case BasalforcingsMeltingRateEnum:        scale=yts;break; //m/yr
+		case TimesteppingStartTimeEnum:              scale=1.0/yts;break; //yr
+		case TimesteppingFinalTimeEnum:              scale=1.0/yts;break; //yr
+		case TimesteppingTimeStepEnum:               scale=1.0/yts;break; //yr
+		case TimeEnum:                               scale=1.0/yts;break; //yr
+		case HydrologyWaterVxEnum:                   scale=yts;break; //m/yr
+		case HydrologyWaterVyEnum:                   scale=yts;break; //m/yr
+		case VxEnum:                                 scale=yts;break; //m/yr
+		case InversionVxObsEnum:                     scale=yts;break; //m/yr
+		case VyEnum:                                 scale=yts;break; //m/yr
+		case InversionVyObsEnum:                     scale=yts;break; //m/yr
+		case VzEnum:                                 scale=yts;break; //m/yr
+		case InversionVzObsEnum:                     scale=yts;break; //m/yr
+		case VelEnum:                                scale=yts;break; //m/yr
+		case InversionVelObsEnum:                    scale=yts;break; //m/yr
+		case BalancethicknessThickeningRateEnum:     scale=yts;break; //m/yr
+		case BasalforcingsMeltingRateEnum:           scale=yts;break; //m/yr
 		case BasalforcingsMeltingRateCorrectionEnum: scale=yts;break; //m/yr
-		case SurfaceforcingsPrecipitationEnum:     scale=yts;break; //m/yr
-		case SurfaceforcingsMassBalanceEnum:      scale=yts;break; //m/yr
-		case MisfitEnum:      scale=pow(yts,2);break; //(m/yr)^2
-		case MassFluxEnum:    scale=pow((double)10,-12)*yts;break; // (GigaTon/year)
+		case SurfaceforcingsPrecipitationEnum:       scale=yts;break; //m/yr
+		case SurfaceforcingsMassBalanceEnum:         scale=yts;break; //m/yr
+		case MisfitEnum:                             scale=pow(yts,2);break; //(m/yr)^2
+		case MassFluxEnum:                           scale=pow((double)10,-12)*yts;break; // (GigaTon/year)
 		default: scale=1.0; break;
 	}
 	return scale;
 }
-
-
-
Index: /issm/trunk-jpl/src/c/solutions/enthalpy_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/enthalpy_core.cpp	(revision 11809)
+++ /issm/trunk-jpl/src/c/solutions/enthalpy_core.cpp	(revision 11810)
@@ -20,11 +20,12 @@
 	double time;
 	int    nsteps;
-	double final_time;
+	double starttime,final_time;
 	double dt;
 	double melting_offset;
-	bool control_analysis;
-	int solution_type;
+	bool   control_analysis;
+	int    solution_type;
 
 	//first recover parameters common to all solutions
+	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
 	femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
@@ -37,5 +38,6 @@
 		nsteps=1;
 	}
-	else nsteps=(int)(final_time/dt);
+	else nsteps=(int)((final_time-starttime)/dt);
+	time=starttime;
 
 	/*Loop through time: */
@@ -43,5 +45,5 @@
 		
 		if(nsteps)_printf_(VerboseSolution(),"time step: %i/%i\n",i+1,nsteps);
-		time=(i+1)*dt;
+		time+=dt;
 
 		/*call enthalpy_core_step: */
Index: /issm/trunk-jpl/src/c/solutions/hydrology_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/hydrology_core.cpp	(revision 11809)
+++ /issm/trunk-jpl/src/c/solutions/hydrology_core.cpp	(revision 11810)
@@ -19,11 +19,12 @@
 	double time;
 	int    nsteps;
-	double final_time;
+	double starttime,final_time;
 	double dt;
-	bool control_analysis;
-	int solution_type;
-	int output_frequency;
+	bool   control_analysis;
+	int    solution_type;
+	int    output_frequency;
 
 	//first recover parameters common to all solutions
+	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
 	femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
@@ -40,5 +41,6 @@
 		nsteps=1;
 	}
-	else nsteps=(int)(final_time/dt);
+	else nsteps=(int)((final_time-starttime)/dt);
+	time=starttime;
 
 	/*Loop through time: */
@@ -46,5 +48,5 @@
 		
 		if(nsteps)_printf_(VerboseSolution(),"time step:%i/%i\n",i+1,nsteps);
-		time=(i+1)*dt;
+		time+=dt;
 		femmodel->parameters->SetParam(time,TimeEnum);
 
Index: /issm/trunk-jpl/src/c/solutions/thermal_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/thermal_core.cpp	(revision 11809)
+++ /issm/trunk-jpl/src/c/solutions/thermal_core.cpp	(revision 11810)
@@ -20,12 +20,13 @@
 	double time;
 	int    nsteps;
-	double final_time;
+	double starttime,final_time;
 	double dt;
 	double melting_offset;
-	bool control_analysis;
-	int solution_type;
-	bool   dakota_analysis         = false;
+	bool   control_analysis;
+	int    solution_type;
+	bool   dakota_analysis  = false;
 
 	//first recover parameters common to all solutions
+	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
 	femmodel->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
@@ -39,5 +40,6 @@
 		nsteps=1;
 	}
-	else nsteps=(int)(final_time/dt);
+	else nsteps=(int)((final_time-starttime)/dt);
+	time=starttime;
 
 	if(dakota_analysis){
@@ -45,4 +47,5 @@
 		ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
 	}
+	printf("start = %g final = %g n=%i\n",starttime,final_time,nsteps);
 
 	/*Loop through time: */
@@ -50,5 +53,5 @@
 		
 		if(nsteps)_printf_(VerboseSolution(),"time step: %i/%i\n",i+1,nsteps);
-		time=(i+1)*dt;
+		time+=dt;
 		femmodel->parameters->SetParam(time,TimeEnum);
 
Index: /issm/trunk-jpl/src/c/solutions/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/transient_core.cpp	(revision 11809)
+++ /issm/trunk-jpl/src/c/solutions/transient_core.cpp	(revision 11810)
@@ -23,5 +23,5 @@
 
 	/*parameters: */
-	double finaltime,dt,yts;
+	double starttime,finaltime,dt,yts;
 	bool   control_analysis,isdiagnostic,isprognostic,isthermal,isgroundingline,isenthalpy;
 	bool   dakota_analysis=false;
@@ -39,4 +39,5 @@
 	//first recover parameters common to all solutions
 	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
+	femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
 	femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
 	femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
@@ -58,5 +59,5 @@
 	/*initialize: */
 	step=0;
-	time=0;
+	time=starttime;
 
 	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
Index: /issm/trunk-jpl/src/m/classes/timestepping.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 11809)
+++ /issm/trunk-jpl/src/m/classes/timestepping.m	(revision 11810)
@@ -6,6 +6,7 @@
 classdef timestepping
 	properties (SetAccess=public) 
+		start_time      = 0;
+		final_time      = 0;
 		time_step       = 0;
-		final_time      = 0;
 		time_adapt      = 0;
 		cfl_coefficient = 0;
@@ -41,12 +42,19 @@
 		function checkconsistency(obj,md,solution,analyses) % {{{
 
+			checkfield(md,'timestepping.start_time','numel',1,'NaN',1);
+			checkfield(md,'timestepping.final_time','numel',1,'NaN',1);
+			checkfield(md,'timestepping.time_step','numel',1,'>=',0,'NaN',1);
 			checkfield(md,'timestepping.time_adapt','numel',1,'values',[0 1]);
 			checkfield(md,'timestepping.cfl_coefficient','numel',1,'>',0,'<=',1);
+			if obj.final_time-obj.start_time<0,
+				checkmessage('timestepping.final_time should be larger than timestepping.start_time');
+			end 
 		end % }}}
 		function disp(obj) % {{{
 			disp(sprintf('   timestepping parameters:'));
 
+			fielddisplay(obj,'start_time','simulation starting time [yrs]');
+			fielddisplay(obj,'final_time','final time to stop the simulation [yrs]');
 			fielddisplay(obj,'time_step','length of time steps [yrs]');
-			fielddisplay(obj,'final_time','final time to stop the simulation [yrs]');
 			fielddisplay(obj,'time_adapt','use cfl condition to define time step ? (0 or 1) ');
 			fielddisplay(obj,'cfl_coefficient','coefficient applied to cfl condition');
@@ -54,6 +62,7 @@
 		end % }}}
 		function marshall(obj,fid) % {{{
+			WriteData(fid,'object',obj,'fieldname','start_time','format','Double');
+			WriteData(fid,'object',obj,'fieldname','final_time','format','Double');
 			WriteData(fid,'object',obj,'fieldname','time_step','format','Double');
-			WriteData(fid,'object',obj,'fieldname','final_time','format','Double');
 			WriteData(fid,'object',obj,'fieldname','time_adapt','format','Boolean');
 			WriteData(fid,'object',obj,'fieldname','cfl_coefficient','format','Double');
Index: /issm/trunk-jpl/src/m/enum/TimesteppingStartTimeEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/TimesteppingStartTimeEnum.m	(revision 11810)
+++ /issm/trunk-jpl/src/m/enum/TimesteppingStartTimeEnum.m	(revision 11810)
@@ -0,0 +1,11 @@
+function macro=TimesteppingStartTimeEnum()
+%TIMESTEPPINGSTARTTIMEENUM - Enum of TimesteppingStartTime
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+%            Please read src/c/EnumDefinitions/README for more information
+%
+%   Usage:
+%      macro=TimesteppingStartTimeEnum()
+
+macro=StringToEnum('TimesteppingStartTime');
Index: /issm/trunk-jpl/src/m/solutions/transient_core.m
===================================================================
--- /issm/trunk-jpl/src/m/solutions/transient_core.m	(revision 11809)
+++ /issm/trunk-jpl/src/m/solutions/transient_core.m	(revision 11810)
@@ -7,5 +7,6 @@
 	%recover parameters common to all solutions
 	dim=femmodel.parameters.MeshDimension;
-	ndt=femmodel.parameters.TimesteppingFinalTime;
+	starttime=femmodel.parameters.TimesteppingStartTime;
+	finaltime=femmodel.parameters.TimesteppingFinalTime;
 	dt=femmodel.parameters.TimesteppingTimeStep;
 	yts=femmodel.parameters.ConstantsYts;
@@ -23,5 +24,5 @@
 
 	%Initialize
-	time=0;
+	time=starttime;
 	step=0;
 
@@ -42,10 +43,10 @@
 
 	%Loop through time
-	while (time < ndt - (yts*eps)),
+	while (time < finaltime+eps),
 
 		%Increment
 		if(time_adapt),
 			dt=TimeAdapt(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters);
-			if(time+dt>ndt), dt=ndt-time; end
+			if(time+dt>finaltime), dt=finaltime-time; end
 			femmodel.parameters.TimesteppingTimeStep=dt;
 		end
@@ -54,5 +55,5 @@
 		femmodel.parameters.Time=time;
 
-		issmprintf(VerboseSolution,'\n%s%g%s%i%s%g\n','time [yr] ',time/yts,' iteration number: ',step,'/',floor(ndt/dt));
+		issmprintf(VerboseSolution,'\n%s%g%s%i%s%g\n','time [yr] ',time/yts,' iteration number: ',step,'/',floor((finaltime-starttime)/dt));
 
 		if (isthermal & dim==3)
@@ -84,5 +85,5 @@
 		end
 
-		if (solution_type==TransientSolutionEnum & ~control_analysis & (mod(step,output_frequency)==0 | time==ndt)),
+		if (solution_type==TransientSolutionEnum & ~control_analysis & (mod(step,output_frequency)==0 | time==finaltime)),
 			issmprintf(VerboseSolution,'\n%s',['   saving results']);
 			femmodel.elements=InputToResult(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,VxEnum,step,time);
