Index: /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 23292)
+++ /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 23293)
@@ -322,11 +322,11 @@
 	int num_dependents_old   = num_dependents;
 	int num_independents_old = num_independents;
+
+	#if defined(_HAVE_ADOLC_)
+	/*Get gradient for ADOLC {{{*/
 	if(my_rank!=0){
 		num_dependents   = 0;
 		num_independents = 0;
 	}
-
-	#if defined(_HAVE_ADOLC_)
-	/*Get gradient for ADOLC {{{*/
 
 	/*get the EDF pointer:*/
@@ -382,5 +382,10 @@
 		/*initialize direction index in the weights vector: */
 		aWeightVector=xNewZeroInit<IssmPDouble>(num_dependents);
-		if(my_rank==0)  tape_codi.setGradient(codi_global.output_indices[aDepIndex],1.0);
+		if(my_rank==0){
+			if(aDepIndex<0 || aDepIndex>=num_dependents || codi_global.output_indices.size() <= aDepIndex){
+				_error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
+			}
+			tape_codi.setGradient(codi_global.output_indices[aDepIndex],1.0);
+		}
 		tape_codi.evaluate();
 
@@ -461,4 +466,6 @@
 	xDelete<double>(XU);
 	xDelete<double>(XL);
+	xDelete<int>(control_enum);
+	xDelete<int>(N);
 	xDelete<IssmDouble>(scaling_factors);
 	xDelete<IssmPDouble>(totalgradient);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 23292)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 23293)
@@ -229,4 +229,5 @@
 	xDelete<IssmDouble>(independents_fullmax);
 	xDelete<int>(start_point);
+	xDelete<int>(control_sizes);
 	/*Step2: create cost functions (dependents)*/
 
Index: /issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp	(revision 23292)
+++ /issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp	(revision 23293)
@@ -33,4 +33,6 @@
 
 		xDelete<int>(control_type);
+		xDelete<int>(M);
+		xDelete<int>(N);
 	}
 	else{
