Index: /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 25577)
+++ /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 25578)
@@ -271,8 +271,7 @@
 	int          num_dependents;
 	IssmPDouble *dependents;
-	DataSet     *dependent_objects = NULL;
-	IssmDouble   J                 = 0.;
+	IssmDouble   J = 0.;
+	DataSet     *dependent_objects = ((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
 	femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
-	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
 
 	/*Go through our dependent variables, and compute the response:*/
@@ -471,5 +470,4 @@
 	xDelete<IssmPDouble>(dependents);
 	xDelete<IssmPDouble>(totalgradient);
-	delete dependent_objects;
 }/*}}}*/
 void controladm1qn3_core(FemModel* femmodel){/*{{{*/
Index: /issm/trunk-jpl/src/c/cores/controlvalidation_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/controlvalidation_core.cpp	(revision 25577)
+++ /issm/trunk-jpl/src/c/cores/controlvalidation_core.cpp	(revision 25578)
@@ -209,8 +209,7 @@
 	int         num_dependents;
 	IssmPDouble *dependents;
-	DataSet*    dependent_objects=NULL;
+	DataSet     *dependent_objects = ((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
 	IssmDouble	J=0.;
 	femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
-	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
 
 	/*Go through our dependent variables, and compute the response:*/
@@ -340,6 +339,3 @@
 	xDelete<double>(X0);
 	xDelete<IssmDouble>(scaling_factors);
-	#if defined(_HAVE_CODIPACK_)
-	delete dependent_objects;
-	#endif
 }
Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 25577)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 25578)
@@ -62,9 +62,4 @@
 	#endif
 
-	DataSet* dependent_objects=NULL;
-	if(iscontrol && isautodiff){
-		femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
-	}
-
 	if(isslr) sealevelrise_core_geometry(femmodel);
 
@@ -128,4 +123,5 @@
 		if(iscontrol && isautodiff){
 			/*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;
@@ -138,6 +134,4 @@
 
 	if(!iscontrol || !isautodiff) femmodel->RequestedDependentsx();
-	if(iscontrol && isautodiff) femmodel->parameters->SetParam(dependent_objects,AutodiffDependentObjectsEnum);
-
 }/*}}}*/
 void transient_step(FemModel* femmodel){/*{{{*/
@@ -277,5 +271,7 @@
 	int        step,timestepping;
 	int        recording_frequency;
-	DataSet*   dependent_objects=NULL;
+
+	/*Get rank*/
+	int my_rank = IssmComm::GetRank();
 
 	/*then recover parameters common to all solutions*/
@@ -286,5 +282,4 @@
 	femmodel->parameters->FindParam(&timestepping,TimesteppingTypeEnum);
 	femmodel->parameters->FindParam(&isslr,TransientIsslrEnum);
-	femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
 	femmodel->parameters->FindParam(&recording_frequency,SettingsRecordingFrequencyEnum); _assert_(recording_frequency>0);
 	if(isslr) sealevelrise_core_geometry(femmodel);
@@ -338,4 +333,5 @@
 
 		/*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;
@@ -378,10 +374,10 @@
 	femmodel->Marshall(hdl_regin);
 	delete hdl_regin;
-	for(int i=0; i < Xsize; i++) tape_codi.registerInput(X[i]);
-
+	if(my_rank==0) for(int i=0; i < Xsize; i++) tape_codi.registerInput(X[i]);
 	SetControlInputsFromVectorx(femmodel,X);
 
 	IssmDouble J = 0.;
 	if(0){
+		DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
 		for(Object* & object:dependent_objects->objects){
 			DependentObject* dep=(DependentObject*)object;
