Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 24029)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 24030)
@@ -434,16 +434,9 @@
 	basalelement->GetDofListLocal(&doflist,NoneApproximationEnum,GsetEnum);
 	IssmDouble* eplHeads = xNew<IssmDouble>(numnodes);
-	IssmDouble* base     = xNew<IssmDouble>(numnodes);
-
-	basalelement->GetInputListOnVertices(&base[0],BaseEnum);
+
 	/*Use the dof list to index into the solution vector: */
-	/*If the EPL is not active we revert to the bedrock elevation*/
+	/*If the EPL is not active we revert to the bedrock elevation when deactivating*/
 	for(int i=0;i<numnodes;i++){
-		if(basalelement->nodes[i]->IsActive()){
-			eplHeads[i]=solution[doflist[i]];
-		}
-		else{
-			eplHeads[i]=base[i];
-		}
+		eplHeads[i]=solution[doflist[i]];
 		if(xIsNan<IssmDouble>(eplHeads[i])) _error_("NaN found in solution vector");
 		if(xIsInf<IssmDouble>(eplHeads[i])) _error_("Inf found in solution vector");
@@ -453,5 +446,4 @@
 	/*Free ressources:*/
 	xDelete<IssmDouble>(eplHeads);
-	xDelete<IssmDouble>(base);
 	xDelete<int>(doflist);
 	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 24029)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 24030)
@@ -364,9 +364,9 @@
 	basalelement->FindParam(&smb_model,SmbEnum);
 
-	Input*	sed_head_input			 = basalelement->GetInput(SedimentHeadHydrostepEnum);
-	Input*	epl_head_input			 = basalelement->GetInput(EplHeadHydrostepEnum);
-	Input*	base_input					 = basalelement->GetInput(BaseEnum);
-	Input*	basal_melt_input		 = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);
-	Input*	SedTrans_input			 = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
+	Input* sed_head_input	= basalelement->GetInput(SedimentHeadHydrostepEnum);
+	Input* epl_head_input	= basalelement->GetInput(EplHeadHydrostepEnum);
+	Input* base_input			= basalelement->GetInput(BaseEnum);
+	Input* basal_melt_input	= basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);
+	Input* SedTrans_input	= basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
 
 	if(dt!= 0.){
@@ -488,7 +488,8 @@
 
 	/*Intermediaries*/
-	int			 domaintype;
+	int	 domaintype;
 	Element* basalelement=NULL;
-	bool		 converged;
+	bool	 converged;
+	int*     doflist = NULL;
 
 	/*Get basal element*/
@@ -504,7 +505,4 @@
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
-	/*Intermediary*/
-	int* doflist = NULL;
-
 	/*Fetch number of nodes for this finite element*/
 	int numnodes = basalelement->GetNumberOfNodes();
@@ -515,15 +513,8 @@
 	IssmDouble* pressure = xNew<IssmDouble>(numnodes);
 	IssmDouble* residual = xNew<IssmDouble>(numnodes);
-	IssmDouble* base     = xNew<IssmDouble>(numnodes);
-
-	basalelement->GetInputListOnVertices(&base[0],BaseEnum);
-	/*Use the dof list to index into the solution vector, frozen nodes are set to initial value: */
+
+	/*Use the dof list to index into the solution vector reseting to base is done at the deactivate stage: */
 	for(int i=0;i<numnodes;i++){
-		if(basalelement->nodes[i]->IsActive()){
-			values[i] =solution[doflist[i]];
-		}
-		else{
-			values[i] = base[i];
-		}
+	  	values[i] =solution[doflist[i]];
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
 		if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in solution vector");
@@ -537,4 +528,5 @@
 		IssmDouble  penalty_factor,kmax,kappa,h_max;
 		IssmDouble* thickness = xNew<IssmDouble>(numnodes);
+		IssmDouble* base = xNew<IssmDouble>(numnodes);
 		IssmDouble* transmitivity = xNew<IssmDouble>(numnodes);
 
@@ -546,4 +538,5 @@
 
 		basalelement->GetInputListOnVertices(&thickness[0],ThicknessEnum);
+		basalelement->GetInputListOnVertices(&base[0],BaseEnum);
 		basalelement->GetInputListOnVertices(&transmitivity[0],HydrologydcSedimentTransmitivityEnum);
 
@@ -563,6 +556,6 @@
 		}
 		xDelete<IssmDouble>(thickness);
+		xDelete<IssmDouble>(base);
 		xDelete<IssmDouble>(transmitivity);
-		xDelete<IssmDouble>(base);
 	}
 
@@ -576,5 +569,4 @@
 	xDelete<IssmDouble>(residual);
 	xDelete<IssmDouble>(pressure);
-	xDelete<IssmDouble>(base);
 	xDelete<int>(doflist);
 	if(domaintype!=Domain2DhorizontalEnum){
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 24029)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 24030)
@@ -1470,11 +1470,11 @@
 		ISSM_MPI_Reduce(&local_icefront_area,&total_icefront_area,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm());
 		ISSM_MPI_Bcast(&total_icefront_area,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
-		
+
 		basin_icefront_area[basin-1]=total_icefront_area;
 	}
-	
+
 	this->parameters->AddObject(new DoubleVecParam(FrontalForcingsBasinIcefrontAreaEnum,basin_icefront_area,numbasins));
 	xDelete<IssmDouble>(basin_icefront_area);
-	
+
 }/*}}}*/
 void FemModel::IcefrontMassFluxx(IssmDouble* pM, bool scaled){/*{{{*/
@@ -4808,15 +4808,24 @@
 	delete active;
 
+
 	/*Update node activation accordingly*/
-	int counter =0;
-	for (int i=0;i<nodes->Size();i++){
-		Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i));
-		if(serial_active[node->Sid()]==1.){
-			node->Activate();
-			if(!node->IsClone()) counter++;
-		}
-		else{
-			node->Deactivate();
-		}
+	int         counter  = 0; //this is probably not acurate but we are only interested in positivity
+	for(int i=0;i<elements->Size();i++){
+		Element    *element  = xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+		int         numnodes = element->GetNumberOfNodes();
+		IssmDouble *base     = xNew<IssmDouble>(numnodes);
+		element->GetInputListOnNodes(&base[0],BaseEnum);
+		for(int in=0;in<numnodes;in++){
+			Node* node=element->GetNode(in);
+			if(serial_active[node->Sid()]==1.){
+				node->Activate();
+				if(!node->IsClone()) counter++;
+			}
+			else{
+				node->Deactivate();
+				node->ApplyConstraint(0,base[in]);
+			}
+		}
+		xDelete<IssmDouble>(base);
 	}
 	xDelete<IssmDouble>(serial_active);
@@ -4828,5 +4837,12 @@
 	counter=sum_counter;
 	*pEplcount = counter;
-	if(VerboseSolution()) _printf0_("   Number of active nodes in EPL layer: "<< counter <<"\n");
+	if(VerboseSolution()) {
+		if(counter==0){
+			_printf0_("   No nodes are active in EPL layer \n");
+		}
+		else {
+			_printf0_("   Some active nodes in EPL layer \n");
+		}
+	}
 
 	/*Update dof indexings*/
@@ -4881,16 +4897,25 @@
 
 	/*Update node activation accordingly*/
-	int counter =0;
-	for (int i=0;i<nodes->Size();i++){
-		Node* node=xDynamicCast<Node*>(nodes->GetObjectByOffset(i));
-		if(serial_active[node->Sid()]==1.){
-			node->Activate();
-			if(!node->IsClone()) counter++;
-		}
-		else{
-			node->Deactivate();
-		}
-	}
-
+	int         counter  = 0; //this is probably not acurate but we are only interested in positivity
+	for(int i=0;i<elements->Size();i++){
+		Element    *element  = xDynamicCast<Element*>(elements->GetObjectByOffset(i));
+		int         numnodes = element->GetNumberOfNodes();
+		IssmDouble *base     = xNew<IssmDouble>(numnodes);
+
+		element->GetInputListOnNodes(&base[0],BaseEnum);
+
+		for(int in=0;in<numnodes;in++){
+			Node* node=element->GetNode(in);
+			if(serial_active[node->Sid()]==1.){
+				node->Activate();
+				if(!node->IsClone()) counter++;
+			}
+			else{
+				node->Deactivate();
+				node->ApplyConstraint(0,base[in]);
+			}
+		}
+		xDelete<IssmDouble>(base);
+	}
 	xDelete<IssmDouble>(serial_active);
 	delete inefanalysis;
@@ -4900,6 +4925,12 @@
 	counter=sum_counter;
 	*pIDScount = counter;
-	if(VerboseSolution()) _printf0_("   Number of active nodes in IDS layer: "<< counter <<"\n");
-
+	if(VerboseSolution()) {
+		if(counter==0){
+			_printf0_("   No nodes are active in IDS layer \n");
+		}
+		else {
+			_printf0_("   Some active nodes in IDS layer \n");
+		}
+	}
 	/*Update dof indexings*/
 	this->UpdateConstraintsx();
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 24029)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 24030)
@@ -402,5 +402,5 @@
 			_printf0_(" Marshalled file is corrupted                                            \n");
 			_printf0_("                                                                         \n");
-			_printf0_("   * Last record found is : \n");
+			_printf0_("   * Last record found is :                                              \n");
 			_printf0_("     the corresponding model field has probably been marshalled          \n");
 			_printf0_("     incorrectly                                                         \n");
Index: /issm/trunk-jpl/src/c/shared/Exp/exp.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Exp/exp.h	(revision 24029)
+++ /issm/trunk-jpl/src/c/shared/Exp/exp.h	(revision 24030)
@@ -80,5 +80,5 @@
 	/*open domain outline file for reading: */
 	if ((fid=fopen(domainname,"r"))==NULL){
-		_error_("could not find file \"" << domainname<<"\". Make sure that the file and path provided exist."); 
+		_error_("could not find file \"" << domainname<<"\". Make sure that the file and path provided exist.");
 	}
 
