Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 25591)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 25592)
@@ -333,9 +333,11 @@
 
 		/*Go through our dependent variables, and compute the response:*/
-		DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
-		for(Object* & object:dependent_objects->objects){
-			DependentObject* dep=(DependentObject*)object;
-			dep->Responsex(&output_value,femmodel);
-			dep->AddValue(output_value);
+		if(finaltime==time){
+			DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
+			for(Object* & object:dependent_objects->objects){
+				DependentObject* dep=(DependentObject*)object;
+				dep->Responsex(&output_value,femmodel);
+				dep->AddValue(output_value);
+			}
 		}
 
@@ -378,13 +380,8 @@
 
 	IssmDouble J = 0.;
-	if(0){
-		DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
-		for(Object* & object:dependent_objects->objects){
-			DependentObject* dep=(DependentObject*)object;
-			J += dep->GetValue();
-		}
-	}
-	else{
-		femmodel->IceVolumeAboveFloatationx(&J,false);
+	DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
+	for(Object* & object:dependent_objects->objects){
+		DependentObject* dep=(DependentObject*)object;
+		J += dep->GetValue();
 	}
 	tape_codi.registerOutput(J);
@@ -435,4 +432,14 @@
 			transient_step(femmodel);
 
+			/*Go through our dependent variables, and compute the response:*/
+			if(thistime==finaltime){
+				DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
+				for(Object* & object:dependent_objects->objects){
+					DependentObject* dep=(DependentObject*)object;
+					dep->Responsex(&output_value,femmodel);
+					dep->AddValue(output_value);
+				}
+			}
+
 			/*First and last segment need special treatment*/
 			if(thisstep==finalstep) break;
@@ -460,4 +467,6 @@
 		for(int i=0; i<Xsize;   i++) Xb[i] += X[i].gradient();
 	}
+	/*Clear tape*/
+	tape_codi.reset();
 
 	/*Broadcast gradient to other ranks (make sure to sum all gradients)*/
