Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 16638)
@@ -57,4 +57,6 @@
 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
 	iomodel->FetchDataToInput(elements,EplHeadEnum);
+	iomodel->FetchDataToInput(elements,HydrologydcEplThicknessEnum);
+	
 }/*}}}*/
 void HydrologyDCEfficientAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16638)
@@ -2645,4 +2645,6 @@
 				name==SedimentHeadOldEnum ||
 				name==EplHeadOldEnum ||
+				name==HydrologydcEplThicknessOldEnum ||
+				name==HydrologydcEplThicknessEnum ||
 				name==HydrologydcMaskEplactiveEnum ||
 				name==WaterTransferEnum
@@ -2871,5 +2873,5 @@
 	switch(input->GetResultInterpolation()){
 		case P0Enum:
-			_error_("not implemented...");
+			_error_("P0 not implemented yet for input "<<EnumToStringx(output_enum));
 			break;
 		case P1Enum:{
@@ -10842,10 +10844,75 @@
 void  Penta::ComputeEPLThickness(void){
 
+	int         i;
+	const int   numdof   = NDOF1 *NUMVERTICES;
+	const int   numdof2d = NDOF1 *NUMVERTICES2D;
+	bool        isefficientlayer;
+	IssmDouble  n,A,dt;
+	IssmDouble  rho_water,rho_ice;
+	IssmDouble  gravity,latentheat,EPLgrad;
+	IssmDouble  EPL_N,epl_conductivity;
+	IssmDouble  activeEpl[numdof],thickness[numdof];
+	IssmDouble  eplhead[numdof], old_thickness[numdof];
+	IssmDouble  epl_slopeX[numdof],epl_slopeY[numdof];
+	IssmDouble  ice_thickness[numdof],bed[numdof];
+	Penta       *penta = NULL;
+	/*If not on bed, return*/
 	if (!IsOnBed())return;
 
-	Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
-	tria->ComputeEPLThickness();
-	delete tria->material; delete tria;
-
+	/*Get the flag to know if the efficient layer is present*/
+	this->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+
+	if(isefficientlayer){
+		/*For now, assuming just one way to compute EPL thickness*/
+		rho_water        = matpar->GetRhoWater();
+		rho_ice          = matpar->GetRhoIce();
+		gravity          = matpar->GetG();
+		latentheat       = matpar->GetLatentHeat();
+		epl_conductivity = matpar->GetEplConductivity();
+		n                = material->GetN();
+		A                = material->GetA();
+		
+		
+		GetInputListOnVertices(&activeEpl[0],HydrologydcMaskEplactiveEnum);
+		GetInputListOnVertices(&eplhead[0],EplHeadEnum);
+		GetInputListOnVertices(&epl_slopeX[0],EplHeadSlopeXEnum); 
+		GetInputListOnVertices(&epl_slopeY[0],EplHeadSlopeYEnum);
+		GetInputListOnVertices(&old_thickness[0],HydrologydcEplThicknessOldEnum);
+		GetInputListOnVertices(&ice_thickness[0],ThicknessEnum);
+		GetInputListOnVertices(&bed[0],BedEnum);
+		
+		for(int i=0;i<numdof2d;i++){
+			/*Keeping thickness to 1 if EPL is not active*/
+			if(activeEpl[i]==0.0){
+				thickness[i]=1.0;
+				thickness[i+numdof2d]=thickness[i];
+			}
+			else{
+
+				/*Compute first the effective pressure in the EPL*/
+				EPL_N=gravity*((rho_ice*ice_thickness[i])-(rho_water*(eplhead[i]-bed[i])));
+				
+				/*Get then the gradient of EPL heads*/
+				EPLgrad = epl_slopeX[i]+epl_slopeY[i];
+				
+				/*And proceed to the real thing*/
+				thickness[i] = old_thickness[i]*(1-((rho_water*gravity*dt)/(rho_ice* latentheat))*epl_conductivity*pow(EPLgrad,2.0)-2.0*(A*dt/(pow(n,n)))*EPL_N);
+				thickness[i+numdof2d]=thickness[i];
+			}
+		}
+		penta=this;
+		for(;;){
+
+			/*Add input to the element: */			
+			penta->inputs->AddInput(new PentaInput(HydrologydcEplThicknessEnum,thickness,P1Enum));
+			
+			/*Stop if we have reached the surface*/
+			if (penta->IsOnSurface()) break;
+			
+			/* get upper Penta*/
+			penta=penta->GetUpperElement(); _assert_(penta->Id()!=this->id);
+		}
+	}
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16638)
@@ -1578,6 +1578,7 @@
 
 	/*Call inputs method*/
-	if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum);
-
+	if (IsInput(original_enum)) {
+		inputs->DuplicateInput(original_enum,new_enum);
+	}
 }
 /*}}}*/
@@ -2097,4 +2098,6 @@
 				name==EplHeadOldEnum ||
 				name==EplHeadEnum ||
+				name==HydrologydcEplThicknessOldEnum ||
+				name==HydrologydcEplThicknessEnum ||
 				name==HydrologydcMaskEplactiveEnum ||
 				name==MeshVertexonbedEnum ||
@@ -2455,8 +2458,4 @@
 				input=this->inputs->GetInput(output_enum);
 				break;
-      		case SurfaceNormalVelocityEnum:
-			      this->ComputeSurfaceNormalVelocity();
-				input=this->inputs->GetInput(output_enum);
-				break;
 			default:
 				_error_("input "<<EnumToStringx(output_enum)<<" not found in element");
@@ -2490,7 +2489,4 @@
 
 			vector->SetValues(NUMVERTICES,&sidlist[0],&values[0],ADD_VAL);
-			
-			/*FIXME: Inputs needs to be updated first in Tria::ResultInterpolation, this is a hack*/
-			this->inputs->DeleteInput(SurfaceNormalVelocityEnum);
 			break;
 					}
@@ -2649,51 +2645,4 @@
 	*(surface_normal+1) = normal[1]/normal_norm;
 	*(surface_normal+2) = normal[2]/normal_norm;
-}
-/*}}}*/
-/*FUNCTION Tria::ComputeSurfaceNormalVelocity{{{*/
-void Tria::ComputeSurfaceNormalVelocity(){
-
-  IssmDouble      sum,tangential_vector[2],normal_vector[2],time,ux,uy;
-  IssmDouble      normal_velocity[NUMVERTICES],xyz_list[NUMVERTICES][3];
-  IssmDouble      value[NUMVERTICES],verticesonsurface[NUMVERTICES];
-
-  for(int iv=0;iv<NUMVERTICES;iv++){
-    normal_velocity[iv]=0.;
-    value[iv]=0.;
-  }
-
-  GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-
-  GaussTria* gauss=new GaussTria();
-  Input* slope_input=inputs->GetInput(SurfaceSlopeXEnum); _assert_(slope_input);
-  //  Input* slope_input= inputs->GetInput(SurfaceEnum); _assert_(slope_input);
-  Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
-  Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
-
-
-  /*Get list of nodes on surface*/
-  GetInputListOnVertices(&verticesonsurface[0],MeshVertexonsurfaceEnum);  
-  sum = verticesonsurface[0]+verticesonsurface[1]+verticesonsurface[2];
-  _assert_(sum==0. || sum==1. || sum==2.);
-
-  /*Compute normal velocity for surface nodes from L2 projected slope*/
-  for(int iv=0;iv<NUMVERTICES;iv++){
-    if(verticesonsurface[iv] == 1){
-	gauss->GaussNode(P1Enum,iv);	
-	slope_input->GetInputValue(&value[iv],gauss);
-	//	slope_input->GetInputDerivativeValue(&value[iv],&xyz_list[0][0],gauss);
-	vx_input->GetInputValue(&ux,gauss);
-	vy_input->GetInputValue(&uy,gauss);
-	tangential_vector[0]=sqrt(1./(pow(value[iv],2.)+1.));
-	tangential_vector[1]=value[iv]*tangential_vector[0];
-	normal_vector[0]=-1.*tangential_vector[1];
-	normal_vector[1]=tangential_vector[0];
-     	normal_velocity[iv]=ux*normal_vector[0]+uy*normal_vector[1];
-    }
-  }
-
-  delete gauss;
-  this->inputs->AddInput(new TriaInput(SurfaceNormalVelocityEnum,&normal_velocity[0],P1Enum));
-
 }
 /*}}}*/
@@ -3278,5 +3227,5 @@
 	Input* smb_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(smb_input);
 	smb_input->GetInputAverage(&smb);																								// average smb on element in m ice s-1
-	Total_Smb=rho_ice*base*smb;																											// smb on element in kg s-1
+   Total_Smb=rho_ice*base*smb;																											// smb on element in kg s-1
 
 	/*Return: */
@@ -6734,7 +6683,8 @@
 
 	/* Intermediaries */
-	IssmDouble  D_scalar,Jdet;
-	IssmDouble 	epl_transmitivity,dt;
-	IssmDouble  epl_storing;
+	IssmDouble  D_scalar,Jdet,dt;
+	IssmDouble  epl_thickness;
+	IssmDouble 	epl_conductivity;
+	IssmDouble  epl_specificstoring;
 	IssmDouble  xyz_list[NUMVERTICES][3];
 
@@ -6755,17 +6705,21 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+	Input* thickness_input=inputs->GetInput(HydrologydcEplThicknessEnum); _assert_(thickness);
 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	epl_storing       = matpar->GetEplStoring();
-	epl_transmitivity = matpar->GetEplTransmitivity();
+	epl_specificstoring = matpar->GetEplSpecificStoring();
+	epl_conductivity    = matpar->GetEplConductivity();
+
 
 	/* Start looping on the number of gaussian points: */
 	GaussTria* gauss=new GaussTria(2);
 	for(int ig=gauss->begin();ig<gauss->end();ig++){
-
+		
+		
 		gauss->GaussPoint(ig);
 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
+		thickness_input->GetInputValue(&epl_thickness,gauss);
 
 		/*Diffusivity*/
-		D_scalar=epl_transmitivity*gauss->weight*Jdet;
+		D_scalar=epl_conductivity*epl_thickness*gauss->weight*Jdet;
 		if(reCast<bool,IssmDouble>(dt)) D_scalar=D_scalar*dt;
 		D[0][0]=D_scalar; D[0][1]=0.;
@@ -6780,5 +6734,5 @@
 		if(reCast<bool,IssmDouble>(dt)){
 			GetNodalFunctions(basis,gauss);
-			D_scalar=epl_storing*gauss->weight*Jdet;
+			D_scalar=epl_specificstoring*epl_thickness*gauss->weight*Jdet;
 
 			TripleMultiply(basis,numnodes,1,0,
@@ -6916,5 +6870,6 @@
 	IssmDouble dt,scalar,water_head;
 	IssmDouble transfer,residual;
-	IssmDouble epl_storing;
+	IssmDouble epl_thickness;
+	IssmDouble epl_specificstoring;
 	GaussTria* gauss = NULL;
 
@@ -6932,9 +6887,10 @@
 
 	/*Retrieve all inputs and parameters*/
-	epl_storing = matpar->GetEplStoring();
+	epl_specificstoring = matpar->GetEplSpecificStoring();
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input* residual_input=inputs->GetInput(SedimentHeadResidualEnum);  _assert_(residual_input);
-	Input* transfer_input=inputs->GetInput(WaterTransferEnum);  _assert_(transfer_input);
+	Input* residual_input=inputs->GetInput(SedimentHeadResidualEnum);     _assert_(residual_input);
+	Input* transfer_input=inputs->GetInput(WaterTransferEnum);            _assert_(transfer_input);
+	Input* thickness_input=inputs->GetInput(HydrologydcEplThicknessEnum); _assert_(thickness_input);
 	Input* old_wh_input=NULL; 
 
@@ -6959,6 +6915,7 @@
 		/*Transient term*/
 		if(reCast<bool,IssmDouble>(dt)){
+			thickness_input->GetInputValue(&epl_thickness,gauss);
 			old_wh_input->GetInputValue(&water_head,gauss);
-			scalar = Jdet*gauss->weight*water_head*epl_storing;
+			scalar = Jdet*gauss->weight*water_head*epl_specificstoring*epl_thickness;
 			for(int i=0;i<numnodes;i++) pe->values[i]+=scalar*basis[i];
 		}
@@ -7142,6 +7099,6 @@
 	IssmDouble leakage,h_max;
 	IssmDouble wh_trans;
-	IssmDouble activeEpl[numdof];
-	IssmDouble eplstoring[numdof],sedstoring[numdof];
+	IssmDouble activeEpl[numdof],epl_thickness[numdof];
+	IssmDouble epl_specificstoring[numdof],sedstoring[numdof];
 	IssmDouble epl_head[numdof],sed_head[numdof];
 
@@ -7165,4 +7122,5 @@
 			GetInputListOnVertices(&sed_head[0],SedimentHeadEnum); 
 			GetInputListOnVertices(&epl_head[0],EplHeadEnum);
+			GetInputListOnVertices(&epl_thickness[0],HydrologydcEplThicknessEnum);
 
 			this->parameters->FindParam(&leakage,HydrologydcLeakageFactorEnum);
@@ -7177,10 +7135,10 @@
 				}
 				else{
-					eplstoring[i]=matpar->GetEplStoring();		
+					epl_specificstoring[i]=matpar->GetEplSpecificStoring();		
 					sedstoring[i]=matpar->GetSedimentStoring();
 
 					/*EPL head higher than sediment head, transfer from the epl to the sediment*/
 					if(epl_head[i]>sed_head[i]){
-						wh_trans=eplstoring[i]*sed_trans*(epl_head[i]-sed_head[i])/(leakage*sed_thick);				
+						wh_trans=epl_specificstoring[i]*epl_thickness[i]*sed_trans*(epl_head[i]-sed_head[i])/(leakage*sed_thick);				
 
 						/*No transfer if the sediment head is allready at the maximum*/
@@ -7246,5 +7204,5 @@
 	GetInputListOnVertices(&residual[0],SedimentHeadResidualEnum);
 
-	/*Get minimum sediment head*/
+	/*Get minimum sediment head of the element*/
 	sedheadmin=sedhead[0];
 	for(i=1;i<numdof;i++) if(sedhead[i]<=sedheadmin)sedheadmin=sedhead[i];
@@ -7280,4 +7238,61 @@
 /*FUNCTION Tria::ComputeEPLThickness{{{*/
 void  Tria::ComputeEPLThickness(void){
+
+	int         i;
+	const int   numdof         = NDOF1 *NUMVERTICES;
+	bool        isefficientlayer;
+	IssmDouble  n,A,dt;
+	IssmDouble  rho_water,rho_ice;
+	IssmDouble  gravity,latentheat,EPLgrad;
+	IssmDouble  EPL_N,epl_conductivity;
+	IssmDouble  activeEpl[numdof],thickness[numdof];
+	IssmDouble  eplhead[numdof], old_thickness[numdof];
+	IssmDouble  epl_slopeX[numdof],epl_slopeY[numdof];
+	IssmDouble  ice_thickness[numdof],bed[numdof];
+
+
+	/*Get the flag to know if the efficient layer is present*/
+	this->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+	this->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+
+	if(isefficientlayer){
+		/*For now, assuming just one way to compute EPL thickness*/
+		rho_water  = matpar->GetRhoWater();
+		rho_ice    = matpar->GetRhoIce();
+		gravity    = matpar->GetG();
+		latentheat = matpar->GetLatentHeat();
+		n          = material->GetN();
+		A          = material->GetAbar();
+		
+		GetInputListOnVertices(&activeEpl[0],HydrologydcMaskEplactiveEnum);
+		GetInputListOnVertices(&eplhead[0],EplHeadEnum);
+		GetInputListOnVertices(&epl_slopeX[0],EplHeadSlopeXEnum); 
+		GetInputListOnVertices(&epl_slopeY[0],EplHeadSlopeYEnum);
+		GetInputListOnVertices(&old_thickness[0],HydrologydcEplThicknessOldEnum);
+		GetInputListOnVertices(&ice_thickness[0],ThicknessEnum);
+		GetInputListOnVertices(&bed[0],BedEnum);
+		
+		epl_conductivity = matpar->GetEplConductivity();
+		
+		for(int i=0;i<numdof;i++){
+			/*Keeping thickness to 1 if EPL is not active*/
+			if(activeEpl[i]==0.0){
+				thickness[i]=1.0;
+			}
+			else{
+
+				/*Compute first the effective pressure in the EPL*/
+				EPL_N=gravity*((rho_ice*ice_thickness[i])-(rho_water*(eplhead[i]-bed[i])));
+				
+				/*Get then the gradient of EPL heads*/
+				EPLgrad = epl_slopeX[i]+epl_slopeY[i];
+				
+				/*And proceed to the real thing*/
+				thickness[i] = old_thickness[i]*(1-((rho_water*gravity*dt)/(rho_ice*latentheat))*epl_conductivity*pow(EPLgrad,2.0)-2.0*(A*dt/(pow(n,n)))*EPL_N);
+
+			}
+		}
+		this->inputs->AddInput(new TriaInput(HydrologydcEplThicknessEnum,thickness,P1Enum));
+	}
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Materials/Material.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 16637)
+++ /issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 16638)
@@ -36,4 +36,5 @@
 		virtual void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon)=0;
 		virtual IssmDouble GetA()=0;
+		virtual IssmDouble GetAbar()=0;
 		virtual IssmDouble GetB()=0;
 		virtual IssmDouble GetBbar()=0;
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 16638)
@@ -140,4 +140,18 @@
 
 	inputs->GetInputAverage(&B,MaterialsRheologyBEnum);
+	n=this->GetN();
+
+	return pow(B,-n);
+}
+/*}}}*/
+/*FUNCTION Matice::GetAbar {{{*/
+IssmDouble Matice::GetAbar(){
+	/*
+	 * A = 1/B^n
+	 */
+
+	IssmDouble B,n;
+
+	inputs->GetInputAverage(&B,MaterialsRheologyBbarEnum);
 	n=this->GetN();
 
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16637)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16638)
@@ -63,4 +63,5 @@
 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon);
 		IssmDouble GetA();
+		IssmDouble GetAbar();
 		IssmDouble GetB();
 		IssmDouble GetBbar();
Index: /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 16638)
@@ -66,6 +66,5 @@
 				iomodel->Constant(&this->epl_compressibility,HydrologydcEplCompressibilityEnum);
 				iomodel->Constant(&this->epl_porosity,HydrologydcEplPorosityEnum);
-				iomodel->Constant(&this->epl_thickness,HydrologydcEplThicknessEnum);
-				iomodel->Constant(&this->epl_transmitivity,HydrologydcEplTransmitivityEnum);
+				iomodel->Constant(&this->epl_conductivity,HydrologydcEplConductivityEnum);
 		}
 	}
@@ -354,7 +353,7 @@
 }		 
 /*}}}*/ 
-/*FUNCTION Matpar::GetEplStoring {{{*/
-IssmDouble Matpar::GetEplStoring(){
-	return this->rho_freshwater* this->g* this->epl_porosity* this->epl_thickness*
+/*FUNCTION Matpar::GetEplSpecificStoring {{{*/
+IssmDouble Matpar::GetEplSpecificStoring(){
+	return this->rho_freshwater* this->g* this->epl_porosity* 
     ( this->water_compressibility+( this->epl_compressibility/ this->epl_porosity));		 
 }		 
@@ -369,8 +368,8 @@
 	return sediment_thickness;		 
 }		 
-/*}}}*/ 
-/*FUNCTION Matpar::GetEplTransitivity {{{*/
-IssmDouble Matpar::GetEplTransmitivity(){
-	return epl_transmitivity;		 
+/*}}}*/	
+/*FUNCTION Matpar::GetEplConductivity {{{*/
+IssmDouble Matpar::GetEplConductivity(){
+	return epl_conductivity;		 
 }		 
 /*}}}*/			 
Index: /issm/trunk-jpl/src/c/classes/Materials/Matpar.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16637)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16638)
@@ -49,6 +49,5 @@
 		IssmDouble  epl_compressibility;
 		IssmDouble  epl_porosity;	 
-		IssmDouble  epl_thickness;
-		IssmDouble  epl_transmitivity;	 
+		IssmDouble  epl_conductivity;	 
 
 		/*gia: */
@@ -94,4 +93,5 @@
 		void       GetViscosity2dDerivativeEpsSquare(IssmDouble* pmu_prime, IssmDouble* pepsilon){_error_("not supported");};
 		IssmDouble GetA(){_error_("not supported");};
+		IssmDouble GetAbar(){_error_("not supported");};
 		IssmDouble GetB(){_error_("not supported");};
 		IssmDouble GetBbar(){_error_("not supported");};
@@ -121,8 +121,8 @@
 		IssmDouble GetHydrologyN();
 		IssmDouble GetSedimentStoring();
-		IssmDouble GetEplStoring();
+		IssmDouble GetEplSpecificStoring();
 		IssmDouble GetSedimentTransmitivity();
 		IssmDouble GetSedimentThickness();
-		IssmDouble GetEplTransmitivity();
+		IssmDouble GetEplConductivity();
 		IssmDouble TMeltingPoint(IssmDouble pressure);
 		IssmDouble PureIceEnthalpy(IssmDouble pressure);
Index: /issm/trunk-jpl/src/c/cores/hydrology_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 16638)
@@ -84,4 +84,5 @@
 			if (isefficientlayer){
 				InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
+				InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
 			}
 			
@@ -92,6 +93,6 @@
 				if(VerboseSolution()) _printf0_("   saving results \n");
 				if(isefficientlayer){
-					int outputs[6] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum};
-					femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],6);
+					int outputs[7] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum,HydrologydcEplThicknessEnum};
+					femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],7);
 				}
 				else{
Index: /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 16638)
@@ -9,5 +9,4 @@
 
 void InputDuplicatex(FemModel* femmodel,int original_enum, int new_enum){
-
 	/*Go through elemnets, and ask to reinitialie the input: */
 	for(int i=0;i<femmodel->elements->Size();i++){
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16637)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16638)
@@ -114,5 +114,6 @@
 	HydrologydcEplPorosityEnum,
 	HydrologydcEplThicknessEnum,
-	HydrologydcEplTransmitivityEnum,
+	HydrologydcEplThicknessOldEnum,
+	HydrologydcEplConductivityEnum,
 	HydrologydcIsefficientlayerEnum,
 	HydrologydcSedimentlimitFlagEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16638)
@@ -122,5 +122,6 @@
 		case HydrologydcEplPorosityEnum : return "HydrologydcEplPorosity";
 		case HydrologydcEplThicknessEnum : return "HydrologydcEplThickness";
-		case HydrologydcEplTransmitivityEnum : return "HydrologydcEplTransmitivity";
+		case HydrologydcEplThicknessOldEnum : return "HydrologydcEplThicknessOld";
+		case HydrologydcEplConductivityEnum : return "HydrologydcEplConductivity";
 		case HydrologydcIsefficientlayerEnum : return "HydrologydcIsefficientlayer";
 		case HydrologydcSedimentlimitFlagEnum : return "HydrologydcSedimentlimitFlag";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16638)
@@ -122,5 +122,6 @@
 	      else if (strcmp(name,"HydrologydcEplPorosity")==0) return HydrologydcEplPorosityEnum;
 	      else if (strcmp(name,"HydrologydcEplThickness")==0) return HydrologydcEplThicknessEnum;
-	      else if (strcmp(name,"HydrologydcEplTransmitivity")==0) return HydrologydcEplTransmitivityEnum;
+	      else if (strcmp(name,"HydrologydcEplThicknessOld")==0) return HydrologydcEplThicknessOldEnum;
+	      else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum;
 	      else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
 	      else if (strcmp(name,"HydrologydcSedimentlimitFlag")==0) return HydrologydcSedimentlimitFlagEnum;
@@ -136,9 +137,9 @@
 	      else if (strcmp(name,"WaterTransfer")==0) return WaterTransferEnum;
 	      else if (strcmp(name,"IndependentObject")==0) return IndependentObjectEnum;
-	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
          else stage=2;
    }
    if(stage==2){
-	      if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+	      if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
+	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
 	      else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
@@ -259,9 +260,9 @@
 	      else if (strcmp(name,"SteadystateReltol")==0) return SteadystateReltolEnum;
 	      else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum;
-	      else if (strcmp(name,"Surface")==0) return SurfaceEnum;
          else stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum;
+	      if (strcmp(name,"Surface")==0) return SurfaceEnum;
+	      else if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum;
 	      else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
 	      else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
 	      else if (strcmp(name,"Element")==0) return ElementEnum;
-	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"FileParam")==0) return FileParamEnum;
+	      if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
+	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
 	      else if (strcmp(name,"Input")==0) return InputEnum;
 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum;
 	      else if (strcmp(name,"QmuTemperature")==0) return QmuTemperatureEnum;
-	      else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
+	      if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
+	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
 	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
 	      else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 16637)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 16638)
@@ -129,7 +129,10 @@
 			femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum);
 
+			/*Reset constraint on the ZigZag Lock*/
+			ResetConstraintsx(femmodel);
 			/*Iteration on the EPL layer*/
 			eplconverged = false;
 			for(;;){
+				femmodel->HydrologyEPLThicknessx();
 				femmodel->HydrologyTransferx();
 				SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
Index: /issm/trunk-jpl/src/m/classes/hydrologydc.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologydc.m	(revision 16637)
+++ /issm/trunk-jpl/src/m/classes/hydrologydc.m	(revision 16638)
@@ -27,5 +27,5 @@
 		epl_porosity             = 0;
 		epl_thickness            = 0;
-		epl_transmitivity        = 0;
+		epl_conductivity         = 0;
   end
 	methods
@@ -61,5 +61,5 @@
 			obj.epl_porosity             = 0.4;
 			obj.epl_thickness            = 1.0;
-			obj.epl_transmitivity        = 8.0e-02;
+			obj.epl_conductivity         = 8.0e-02;
 
 		end 
@@ -97,5 +97,5 @@
 				md = checkfield(md,'hydrology.epl_porosity','>',0,'numel',1);
 				md = checkfield(md,'hydrology.epl_thickness','>',0,'numel',1);
-				md = checkfield(md,'hydrology.epl_transmitivity','>',0,'numel',1);
+				md = checkfield(md,'hydrology.epl_conductivity','>',0,'numel',1);
 	    end
 		end 
@@ -137,6 +137,6 @@
 				fielddisplay(obj,'epl_compressibility','epl compressibility [Pa^-1]');
 				fielddisplay(obj,'epl_porosity','epl [dimensionless]');
-				fielddisplay(obj,'epl_thickness','epl thickness [m]');
-				fielddisplay(obj,'epl_transmitivity','epl transmitivity [m^2/s]');
+				fielddisplay(obj,'epl_thickness','epl initial thickness [m]');
+				fielddisplay(obj,'epl_conductivity','epl conductivity [m^2/s]');
 	    end
 
@@ -172,5 +172,6 @@
 				WriteData(fid,'object',obj,'fieldname','epl_porosity','format','Double');			
 				WriteData(fid,'object',obj,'fieldname','epl_thickness','format','Double');
-				WriteData(fid,'object',obj,'fieldname','epl_transmitivity','format','Double');
+				%WriteData(fid,'object',obj,'fieldname','epl_transmitivity','format','Double');
+				WriteData(fid,'object',obj,'fieldname','epl_conductivity','format','Double');
 			end
 		end 
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16637)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16638)
@@ -114,5 +114,6 @@
 def HydrologydcEplPorosityEnum(): return StringToEnum("HydrologydcEplPorosity")[0]
 def HydrologydcEplThicknessEnum(): return StringToEnum("HydrologydcEplThickness")[0]
-def HydrologydcEplTransmitivityEnum(): return StringToEnum("HydrologydcEplTransmitivity")[0]
+def HydrologydcEplThicknessOldEnum(): return StringToEnum("HydrologydcEplThicknessOld")[0]
+def HydrologydcEplConductivityEnum(): return StringToEnum("HydrologydcEplConductivity")[0]
 def HydrologydcIsefficientlayerEnum(): return StringToEnum("HydrologydcIsefficientlayer")[0]
 def HydrologydcSedimentlimitFlagEnum(): return StringToEnum("HydrologydcSedimentlimitFlag")[0]
Index: /issm/trunk-jpl/src/m/enum/HydrologydcEplConductivityEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/HydrologydcEplConductivityEnum.m	(revision 16638)
+++ /issm/trunk-jpl/src/m/enum/HydrologydcEplConductivityEnum.m	(revision 16638)
@@ -0,0 +1,11 @@
+function macro=HydrologydcEplConductivityEnum()
+%HYDROLOGYDCEPLCONDUCTIVITYENUM - Enum of HydrologydcEplConductivity
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=HydrologydcEplConductivityEnum()
+
+macro=StringToEnum('HydrologydcEplConductivity');
Index: /issm/trunk-jpl/src/m/enum/HydrologydcEplThicknessOldEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/HydrologydcEplThicknessOldEnum.m	(revision 16638)
+++ /issm/trunk-jpl/src/m/enum/HydrologydcEplThicknessOldEnum.m	(revision 16638)
@@ -0,0 +1,11 @@
+function macro=HydrologydcEplThicknessOldEnum()
+%HYDROLOGYDCEPLTHICKNESSOLDENUM - Enum of HydrologydcEplThicknessOld
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=HydrologydcEplThicknessOldEnum()
+
+macro=StringToEnum('HydrologydcEplThicknessOld');
