Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 18714)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 18715)
@@ -149,5 +149,5 @@
 
 	/*Intermediaries*/
-	IssmDouble dlambda[2],ds[2],D0,Jdet; 
+	IssmDouble dlambda[2],ds[2],D0,omega,Jdet; 
 	IssmDouble *xyz_list= NULL;
 
@@ -166,4 +166,5 @@
 	Input* s_input       = element->GetInput(SurfaceEnum);            _assert_(s_input);
 	Input* D0_input      = element->GetInput(BalancethicknessD0Enum); _assert_(D0_input);
+	Input* omega_input   = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
 
 	Gauss* gauss=element->NewGauss(2);
@@ -175,4 +176,5 @@
 
 		D0_input->GetInputValue(&D0,gauss);
+		omega_input->GetInputValue(&omega,gauss);
 		adjoint_input->GetInputDerivativeValue(&dlambda[0],xyz_list,gauss);
 		s_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss);
@@ -180,5 +182,5 @@
 		/*Build gradient vector (actually -dJ/da): */
 		for(int i=0;i<numvertices;i++){
-			ge[i]+= -Jdet*gauss->weight*basis[i]*D0*(ds[0]*dlambda[0] + ds[1]*dlambda[1]);
+			ge[i]+= -Jdet*gauss->weight*basis[i]*exp(omega)*D0*(ds[0]*dlambda[0] + ds[1]*dlambda[1]);
 			_assert_(!xIsNan<IssmDouble>(ge[i]));
 		}
Index: /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 18714)
+++ /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 18715)
@@ -98,5 +98,5 @@
 		for(int i=0;i<numnodes;i++){
 			for(int j=0;j<numnodes;j++){
-				Ke->values[i*numnodes+j] += D0*omega*gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
+				Ke->values[i*numnodes+j] += D0*exp(omega)*gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);
 			}
 		}
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 18714)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 18715)
@@ -483,4 +483,5 @@
 
 		case Balancethickness2SolutionEnum:
+			analyses_temp[numanalyses++]=L2ProjectionBaseAnalysisEnum;
 			analyses_temp[numanalyses++]=SmoothAnalysisEnum;
 			analyses_temp[numanalyses++]=Balancethickness2AnalysisEnum;
Index: /issm/trunk-jpl/src/c/cores/balancethickness2_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/balancethickness2_core.cpp	(revision 18714)
+++ /issm/trunk-jpl/src/c/cores/balancethickness2_core.cpp	(revision 18715)
@@ -14,5 +14,5 @@
 	/*parameters: */
 	bool        save_results;
-	IssmDouble  l = 8.;
+	IssmDouble  l = 3.;
 
 	/*recover parameters: */
@@ -20,10 +20,11 @@
 
 	if(VerboseSolution()) _printf0_("computing smooth surface slopes:\n");
-	femmodel->parameters->SetParam(l,SmoothThicknessMultiplierEnum);
-	femmodel->SetCurrentConfiguration(SmoothAnalysisEnum);
-	femmodel->parameters->SetParam(SurfaceSlopeXEnum,InputToSmoothEnum);
-	solutionsequence_linear(femmodel);
-	femmodel->parameters->SetParam(SurfaceSlopeYEnum,InputToSmoothEnum);
-	solutionsequence_linear(femmodel);
+	//femmodel->parameters->SetParam(l,SmoothThicknessMultiplierEnum);
+	//femmodel->SetCurrentConfiguration(SmoothAnalysisEnum);
+	//femmodel->parameters->SetParam(SurfaceSlopeXEnum,InputToSmoothEnum);
+	//solutionsequence_linear(femmodel);
+	//femmodel->parameters->SetParam(SurfaceSlopeYEnum,InputToSmoothEnum);
+	//solutionsequence_linear(femmodel);
+	surfaceslope_core(femmodel);
 
 	if(VerboseSolution()) _printf0_("call computational core:\n");
