Index: /issm/trunk-jpl/src/c/toolkits/gsl/DenseGslSolve.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/gsl/DenseGslSolve.cpp	(revision 23265)
+++ /issm/trunk-jpl/src/c/toolkits/gsl/DenseGslSolve.cpp	(revision 23266)
@@ -254,6 +254,10 @@
 
 #ifdef _HAVE_CODIPACK_
-void SolverxSeq_codi_b(codi::DataStore* data) {/*{{{*/
-  IssmDouble::TapeType& tape = IssmDouble::getGlobalTape();
+void SolverxSeq_codi_b(void* tape_in,void* data_in,void* ra) {/*{{{*/
+
+	/*recast data_in and tape*/
+	codi::DataStore* data = (codi::DataStore*)data_in;
+	//IssmDouble::TapeType& tape = (IssmDouble::TapeType&)tape_in;
+	IssmDouble::TapeType& tape = IssmDouble::getGlobalTape();
 
   IssmDouble::Real* valueATrans;
@@ -291,5 +295,9 @@
 }
 /*}}}*/
-void SolverxSeq_codi_delete(codi::DataStore* data) {/*{{{*/
+void SolverxSeq_codi_delete(void* tape_in,void* data_in) {/*{{{*/
+
+	/*recast data_in*/
+	codi::DataStore* data = (codi::DataStore*)data_in;
+
   IssmDouble::Real* valueATrans;
   IssmDouble::GradientData* indexATrans;
@@ -365,5 +373,5 @@
     dataHandler->addData(n);
 
-    tape.pushExternalFunction(&SolverxSeq_codi_b, dataHandler, &SolverxSeq_codi_delete);
+    tape.pushExternalFunctionHandle(&SolverxSeq_codi_b, dataHandler, &SolverxSeq_codi_delete);
   } else {
     // if the tape is active valueX is stored in the dataHandler and deleted in the reverse sweep
Index: /issm/trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp	(revision 23265)
+++ /issm/trunk-jpl/src/c/toolkits/mumps/MumpsSolve.cpp	(revision 23266)
@@ -480,6 +480,11 @@
 
 #ifdef _HAVE_CODIPACK_
-void MumpsSolve_codi_b(codi::DataStore* data) {/*{{{*/
+void MumpsSolve_codi_b(void* tape_in,void* data_in,void* ra) {/*{{{*/
+
+	/*recast data_in and tape*/
+  codi::DataStore* data = (codi::DataStore*)data_in;
+  //IssmDouble::TapeType& tape = (IssmDouble::TapeType&)tape_in;
   IssmDouble::TapeType& tape = IssmDouble::getGlobalTape();
+
 
   IssmDouble::Real* valueATrans;
@@ -524,5 +529,9 @@
 }
 /*}}}*/
-void MumpsSolve_codi_delete(codi::DataStore* data) {/*{{{*/
+void MumpsSolve_codi_delete(void* tape_in,void* data_in) {/*{{{*/
+
+	/*recast data_in*/
+	codi::DataStore* data = (codi::DataStore*)data_in;
+
   IssmDouble::Real* valueATrans;
   IssmDouble::GradientData* indexATrans;
@@ -616,6 +625,6 @@
     dataHandler->addData(parameters); // we assume here that parameters is still intact when the reverse run is called
 
-	 tape.pushExternalFunction(&MumpsSolve_codi_b, dataHandler, &MumpsSolve_codi_delete);
-    //tape.pushExternalFunctionHandle(&MumpsSolve_codi_b, dataHandler, &MumpsSolve_codi_delete);
+	 //tape.pushExternalFunction(&MumpsSolve_codi_b, dataHandler, &MumpsSolve_codi_delete);
+    tape.pushExternalFunctionHandle(&MumpsSolve_codi_b,(void*)dataHandler, &MumpsSolve_codi_delete);
   } else {
     // if the tape is active valueB is stored in the dataHandler and deleted in the reverse sweep
