Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 17063)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 17064)
@@ -468,5 +468,5 @@
 }
 /*}}}*/
-void FemModel::RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs){/*{{{*/
+void FemModel::RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs, bool save_results){/*{{{*/
 
 	/*Intermediaries*/
@@ -495,4 +495,8 @@
 		if(output_enum<0){
 			double_result = OutputDefinitionsResponsex(this,output_string);
+			if(save_results){
+				results->AddResult(new GenericExternalResult<IssmPDouble>(results->Size()+1,output_string,reCast<IssmPDouble>(double_result),step,time));
+				continue;
+			}
 		}
 		else{
@@ -561,5 +565,5 @@
 					vector_result->Assemble();
 
-					results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
+					if (save_results)results->AddResult(new GenericExternalResult<Vector<IssmDouble>*>(results->Size()+1,output_enum,vector_result,step,time));
 					isvec = true;
 					break;
@@ -572,5 +576,5 @@
 
 		/*Add result to Results*/
-		if(!isvec){
+		if(!isvec && save_results){
 			results->AddResult(new GenericExternalResult<IssmPDouble>(results->Size()+1,output_string,reCast<IssmPDouble>(double_result),step,time));
 		}
@@ -581,5 +585,5 @@
 }
 /*}}}*/
-void FemModel::RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs){/*{{{*/
+void FemModel::RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs,bool save_results){/*{{{*/
 
 	/*Convert list of enums to list of string*/
@@ -590,5 +594,5 @@
 
 	/*Call main module*/
-	this->RequestedOutputsx(presults,enumlist,numoutputs);
+	this->RequestedOutputsx(presults,enumlist,numoutputs,save_results);
 
 	/*clean up and return*/
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 17063)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 17064)
@@ -81,6 +81,6 @@
 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
 		#endif
-		void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs);
-		void RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs);
+		void RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs,bool save_results=true);
+		void RequestedOutputsx(Results **presults,int* requested_outputs, int numoutputs,bool save_results=true);
 		void RequestedDependentsx(void);
 		void Responsex(IssmDouble* presponse,int response_descriptor_enum);
Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 17063)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 17064)
@@ -106,5 +106,5 @@
 
 		if(VerboseSolution()) _printf0_("iteration " << step << "/" << floor((finaltime-time)/dt)+step << "  time [yr]: " << time/yts << " (time step: " << dt/yts << ")\n");
-		if(step%output_frequency==0 || time==finaltime || step==1)
+		if(step%output_frequency==0 || (time >= finaltime - (yts*DBL_EPSILON)) || step==1)
 		 save_results=true;
 		else
@@ -160,15 +160,16 @@
 
 		/*unload results*/
+		if(VerboseSolution()) _printf0_("   computing requested outputs\n");
+		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs,save_results);
+		if(isdelta18o){
+			int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
+			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2,save_results);
+		}
+		if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
+			int outputs[1] = {MaskGroundediceLevelsetEnum};
+			femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1,save_results);
+		}
+
 		if(save_results){
-			if(VerboseSolution()) _printf0_("   saving transient results\n");
-			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
-			if(isdelta18o){
-				int outputs[2] = {SurfaceforcingsMonthlytemperaturesEnum,SurfaceforcingsPrecipitationEnum};
-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
-			}
-			if(isgroundingline && (groundingline_migration==SubelementMigrationEnum || groundingline_migration==SubelementMigration2Enum)){
-				int outputs[1] = {MaskGroundediceLevelsetEnum};
-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
-			}
 			if(VerboseSolution()) _printf0_("   saving temporary results\n");
 			OutputResultsx(femmodel);
