Index: /issm/trunk-jpl/src/c/analyses/ad_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16140)
+++ /issm/trunk-jpl/src/c/analyses/ad_core.cpp	(revision 16141)
@@ -314,4 +314,5 @@
 			xDelete(xp);
 			xDelete(axp); 
+			xDelete(driver);
 		#else
 			_error_("Should not be requesting AD drivers when an AD library is not available!");
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 16140)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 16141)
@@ -543,4 +543,5 @@
 		}
 		delete dependent_objects;
+		xDelete<IssmPDouble>(dependents);
 		#else
 		_error_("Should not be requesting dependents when an AD library is not available!");
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 16140)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 16141)
@@ -96,5 +96,7 @@
 		for(int i=0;i<MaximumNumberOfDefinitionsEnum;i++){
 			if(this->data[i]){
-				_printf0_("Info: previous pointer of " << EnumToStringx(i) << " has not been freed (DeleteData has not been called)\n");
+				/*Release data pertaining to Autodiff runs: */
+				IssmDouble* array=this->data[i];
+				xDelete<IssmDouble>(array);
 			}
 		}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16140)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 16141)
@@ -56,4 +56,5 @@
 			xDelete<int>(indices);
 		}
+		xDelete<char>(autodiff_driver);
 		/*}}}*/
 		/*Deal with dependents first: {{{*/
@@ -76,4 +77,5 @@
 			xDelete<int>(names);
 			xDelete<int>(types);
+			xDelete<int>(indices);
 		}
 		parameters->AddObject(new DataSetParam(AutodiffDependentObjectsEnum,dependent_objects));
@@ -100,4 +102,5 @@
 			}
 			xp=xp_backup; parameters->AddObject(new DoubleVecParam(AutodiffXpEnum,xp,num_ind));
+			xDelete<IssmDouble>(xp);
 		}
 		parameters->AddObject(new IntParam(AutodiffNumIndependentsEnum,num_ind));
Index: /issm/trunk-jpl/test/NightlyRun/testad.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/testad.m	(revision 16141)
+++ /issm/trunk-jpl/test/NightlyRun/testad.m	(revision 16141)
@@ -0,0 +1,27 @@
+%test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
+md=triangle(model(),'../Exp/Square.exp',100000.);
+md=setmask(md,'all','');
+md=parameterize(md,'../Par/SquareShelfConstrained.par');
+md=setflowequation(md,'SSA','all');
+md.cluster=generic('name',oshostname(),'np',1);
+%md.debug.valgrind=true;
+%md.verbose=verbose('11111111')
+md.toolkits.DefaultAnalysis=issmsolver();
+
+md.autodiff.isautodiff=true;
+md.verbose.autodiff=true;
+
+%first run scalar reverse mode: 
+md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices)};
+md.autodiff.dependents={dependent('name','MaxVel','type','scalar','fos_reverse_index',1)};
+md.autodiff.driver='fos_reverse';
+
+md=solve(md,TransientSolutionEnum());
+
+%recover jacobian: 
+jac_reverse=md.results.TransientSolution(1).AutodiffJacobian;
+
+%Fields and tolerances to track changes
+field_names     ={'Jac Reverse'};
+field_tolerances={1e-8};
+field_values={jac_reverse};
