Index: /issm/trunk-jpl/src/c/classes/Numberedcostfunction.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Numberedcostfunction.cpp	(revision 23239)
+++ /issm/trunk-jpl/src/c/classes/Numberedcostfunction.cpp	(revision 23240)
@@ -149,6 +149,8 @@
 				 _error_("not supported");
 		 }
+		 _printf0_("#"<<i+1<<": "<<value<<" ");
 		 value_sum += value;
  }
+	 _printf0_("\n");
 
 	 /*done:*/
Index: /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 23239)
+++ /issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp	(revision 23240)
@@ -163,6 +163,7 @@
 	/*Turning off trace tape*/
 	trace_off();
-time_t now = time(NULL);
-if(my_rank==0) _printf_("\nTIME: "<<now<<"\n");
+	//time_t now = time(NULL);
+	//if(my_rank==0) _printf_("\nTIME: "<<now<<"\n");
+
 	/*Print tape statistics so that user can kill this run if something is off already:*/
 	if(VerboseAutodiff()){ /*{{{*/
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 23239)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 23240)
@@ -9,5 +9,4 @@
 #include "../ModelProcessorx.h"
 
-#if !defined(_HAVE_ADOLC_)
 void	UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel){
 	/*Intermediary*/
@@ -20,4 +19,12 @@
 	char     **controls         = NULL;
 	char     **cost_functions   = NULL;
+
+	/*Fetch parameters: */
+	bool isautodiff;
+	iomodel->FindConstant(&isautodiff,"md.autodiff.isautodiff");
+	if(isautodiff){
+		UpdateElementsAndMaterialsControlAD(elements,parameters,materials,iomodel);
+		return;
+	}
 
 	/*Fetch parameters: */
@@ -126,7 +133,7 @@
 	xDelete<char*>(controls);
 }
-#else 
-void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel){
-
+void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel){
+
+	#if defined(_HAVE_ADOLC_)
 	/*Intermediaries*/
 	int				num_independent_objects,M,N,M_par,N_par;
@@ -225,4 +232,6 @@
 
 	return;
+#else 
+	_error_("ADOLC not compiled");
+#endif
 }
-#endif
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 23239)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 23240)
@@ -19,4 +19,5 @@
 void CreateOutputDefinitions(Elements* elements, Parameters* parameters,IoModel* iomodel);
 void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel);
+void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters,Materials* materials, IoModel* iomodel);
 void UpdateElementsAndMaterialsDakota(Elements* elements,Materials* materials, IoModel* iomodel);
 void UpdateElementsTransient(Elements* elements,Parameters* parameters,IoModel* iomodel,int analysis_type);
Index: /issm/trunk-jpl/src/c/shared/MemOps/MemOps.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/MemOps/MemOps.cpp	(revision 23239)
+++ /issm/trunk-jpl/src/c/shared/MemOps/MemOps.cpp	(revision 23240)
@@ -16,5 +16,5 @@
 #if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
 template <> adouble*  xNew(unsigned int size, const char* const contig) {
-	if (*contig == 't')
+	if (contig[0] == 't' || contig[0] == 'c')
 		ensureContiguousLocations(size);
 
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 23239)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiSparseMat.h	(revision 23240)
@@ -264,8 +264,8 @@
 
 			for(i=0;i<num_procs;i++){
-				ISSM_MPI_Scatterv( row_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, row_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
-				ISSM_MPI_Scatterv( col_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, col_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
-				ISSM_MPI_Scatterv( values_forcpu, sendcnts, displs, ISSM_MPI_DOUBLE, values_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_DOUBLE, i, comm);
-				ISSM_MPI_Scatterv( modes_forcpu, sendcnts, displs, ISSM_MPI_INT, modes_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
+				if(row_indices_fromcpu[i]) ISSM_MPI_Scatterv( row_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, row_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
+				if(col_indices_fromcpu[i]) ISSM_MPI_Scatterv( col_indices_forcpu, sendcnts, displs, ISSM_MPI_INT, col_indices_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
+				if(values_fromcpu[i])      ISSM_MPI_Scatterv( values_forcpu, sendcnts, displs, ISSM_MPI_DOUBLE, values_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_DOUBLE, i, comm);
+				if(modes_fromcpu[i])       ISSM_MPI_Scatterv( modes_forcpu, sendcnts, displs, ISSM_MPI_INT, modes_fromcpu[i], numvalues_fromcpu[i], ISSM_MPI_INT, i, comm);
 			}
 			/*}}}*/
