Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 18189)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 18190)
@@ -2879,6 +2879,4 @@
 	IssmDouble  values[NUMVERTICES];
 	int         vertexpidlist[NUMVERTICES],control_init;
-	Input      *input     = NULL;
-	Input      *new_input = NULL;
 
 	/*Specific case for depth averaged quantities*/
@@ -2903,8 +2901,7 @@
 		values[i]=vector[vertexpidlist[i]];
 	}
-	new_input = new PentaInput(control_enum,values,P1Enum);
-	input=(Input*)this->inputs->GetInput(control_enum);   _assert_(input);
-
-	if (input->ObjectEnum()!=ControlInputEnum){
+	Input* new_input = new PentaInput(control_enum,values,P1Enum);
+	Input* input=(Input*)this->inputs->GetInput(control_enum);   _assert_(input);
+	if(input->ObjectEnum()!=ControlInputEnum){
 		_error_("input " << EnumToStringx(control_enum) << " is not a ControlInput");
 	}
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 18189)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 18190)
@@ -102,4 +102,11 @@
 	*pxyz_front=xyz_front;
 }/*}}}*/
+void       Seg::NodalFunctionsP1(IssmDouble* basis, Gauss* gauss){/*{{{*/
+
+	_assert_(gauss->Enum()==GaussSegEnum);
+	this->GetNodalFunctions(basis,(GaussSeg*)gauss,P1Enum);
+
+}
+/*}}}*/
 int        Seg::GetNumberOfNodes(void){/*{{{*/
 	return this->NumberofNodes(this->element_type);
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 18189)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 18190)
@@ -83,5 +83,5 @@
 		IssmDouble  MinEdgeLength(IssmDouble* xyz_list){_error_("not implemented yet");};
 		void        NodalFunctions(IssmDouble* basis,Gauss* gauss);
-		void        NodalFunctionsP1(IssmDouble* basis,Gauss* gauss){_error_("not implemented yet");};
+		void        NodalFunctionsP1(IssmDouble* basis,Gauss* gauss);
 		void        NodalFunctionsVelocity(IssmDouble* basis,Gauss* gauss){_error_("not implemented yet");};
 		void        NodalFunctionsPressure(IssmDouble* basis,Gauss* gauss){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 18189)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 18190)
@@ -2714,7 +2714,23 @@
 
 	IssmDouble  values[NUMVERTICES];
-	int     vertexpidlist[NUMVERTICES];
-	Input  *input     = NULL;
-	Input  *new_input = NULL;
+	int         vertexpidlist[NUMVERTICES],control_init;
+
+
+	/*Get Domain type*/
+	int domaintype;
+	parameters->FindParam(&domaintype,DomainTypeEnum);
+
+	/*Specific case for depth averaged quantities*/
+	control_init=control_enum;
+	if(domaintype==Domain2DverticalEnum){
+		if(control_enum==MaterialsRheologyBbarEnum){
+			control_enum=MaterialsRheologyBEnum;
+			if(!IsOnBase()) return;
+		}
+		if(control_enum==DamageDbarEnum){
+			control_enum=DamageDEnum;
+			if(!IsOnBase()) return;
+		}
+	}
 
 	/*Get out if this is not an element input*/
@@ -2725,11 +2741,10 @@
 
 	/*Get values on vertices*/
-	for (int i=0;i<NUMVERTICES;i++){
+	for(int i=0;i<NUMVERTICES;i++){
 		values[i]=vector[vertexpidlist[i]];
 	}
-	new_input = new TriaInput(control_enum,values,P1Enum);
-
-	input=(Input*)this->inputs->GetInput(control_enum);   _assert_(input);
-	if (input->ObjectEnum()!=ControlInputEnum){
+	Input* new_input = new TriaInput(control_enum,values,P1Enum);
+	Input* input     = (Input*)this->inputs->GetInput(control_enum);   _assert_(input);
+	if(input->ObjectEnum()!=ControlInputEnum){
 		_error_("input " << EnumToStringx(control_enum) << " is not a ControlInput");
 	}
Index: /issm/trunk-jpl/src/c/cores/control_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/control_core.cpp	(revision 18189)
+++ /issm/trunk-jpl/src/c/cores/control_core.cpp	(revision 18190)
@@ -22,27 +22,16 @@
 void control_core(FemModel* femmodel){/*{{{*/
 
-	int     i;
-
 	/*parameters: */
-	int        num_controls,nsize;
-	int        nsteps;
-	IssmDouble tol_cm;
-	int        solution_type;
-	bool       isFS;
-	bool       dakota_analysis = false;
-
-	int        *control_type   = NULL;
-	int*        maxiter        = NULL;
-	IssmDouble *cm_jump        = NULL;
-
-	/*intermediary: */
-	OptPars    optpars;
+	int         num_controls,nsize,nsteps;
+	int         solution_type;
+	bool        isFS,dakota_analysis;
+	int        *control_type  = NULL;
+	int        *maxiter       = NULL;
+	IssmDouble *cm_jump       = NULL;
+	IssmDouble *J             = NULL;
 
 	/*Solution and Adjoint core pointer*/
 	void (*solutioncore)(FemModel*) = NULL;
 	void (*adjointcore)(FemModel*)  = NULL;
-
-	/*output: */
-	IssmDouble* J=NULL;
 
 	/*Recover parameters used throughout the solution*/
@@ -52,5 +41,4 @@
 	femmodel->parameters->FindParam(&maxiter,NULL,InversionMaxiterPerStepEnum);
 	femmodel->parameters->FindParam(&cm_jump,NULL,InversionStepThresholdEnum);
-	femmodel->parameters->FindParam(&tol_cm,InversionCostFunctionThresholdEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
@@ -74,4 +62,5 @@
 
 	/*Initialize some of the BrentSearch arguments: */
+	OptPars optpars;
 	optpars.xmin    = 0; 
 	optpars.xmax    = 1;
@@ -110,5 +99,5 @@
 		#ifdef _HAVE_ADOLC_
 		IssmPDouble* J_passive=xNew<IssmPDouble>(nsteps);
-		for(i=0;i<nsteps;i++) J_passive[i]=reCast<IssmPDouble>(J[i]);
+		for(int i=0;i<nsteps;i++) J_passive[i]=reCast<IssmPDouble>(J[i]);
 		femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,JEnum,J_passive,nsteps,1,1,0));
 		xDelete<IssmPDouble>(J_passive);
