Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 18138)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 18139)
@@ -874,4 +874,8 @@
 }
 /*}}}*/
+void     Tetra::ValueP1OnGauss(IssmDouble* pvalue,IssmDouble* values,Gauss* gauss){/*{{{*/
+	TetraRef::GetInputValue(pvalue,values,gauss,P1Enum);
+}
+/*}}}*/
 int      Tetra::VelocityInterpolation(void){/*{{{*/
 	return TetraRef::VelocityInterpolation(this->element_type);
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 18138)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 18139)
@@ -105,5 +105,5 @@
 		IssmDouble  StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa){_error_("not implemented yet");};
 		int         PressureInterpolation(void);
-		void        ValueP1OnGauss(IssmDouble* pvalue,IssmDouble* values,Gauss* gauss){_error_("not implemented yet");};
+		void        ValueP1OnGauss(IssmDouble* pvalue,IssmDouble* values,Gauss* gauss);
 		void        ValueP1DerivativesOnGauss(IssmDouble* dvalue,IssmDouble* values,IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");};
 		int         VelocityInterpolation(void);
Index: /issm/trunk-jpl/src/c/classes/Elements/TetraRef.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/TetraRef.cpp	(revision 18138)
+++ /issm/trunk-jpl/src/c/classes/Elements/TetraRef.cpp	(revision 18139)
@@ -30,8 +30,12 @@
 
 /*Reference Element numerics*/
-void TetraRef::GetNodalFunctions(IssmDouble* basis,GaussTetra* gauss,int finiteelement){/*{{{*/
+void TetraRef::GetNodalFunctions(IssmDouble* basis,Gauss* gauss_in,int finiteelement){/*{{{*/
 	/*This routine returns the values of the nodal functions  at the gaussian point.*/
 
 	_assert_(basis);
+
+	/*Cast gauss to GaussTetra*/
+	_assert_(gauss_in->Enum()==GaussTetraEnum);
+	GaussTetra* gauss = dynamic_cast<GaussTetra*>(gauss_in);
 
 	switch(finiteelement){
@@ -239,5 +243,5 @@
 }
 /*}}}*/
-void TetraRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTetra* gauss,int finiteelement){/*{{{*/
+void TetraRef::GetInputValue(IssmDouble* p, IssmDouble* plist, Gauss* gauss,int finiteelement){/*{{{*/
 
 	/*Output*/
Index: /issm/trunk-jpl/src/c/classes/Elements/TetraRef.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/TetraRef.h	(revision 18138)
+++ /issm/trunk-jpl/src/c/classes/Elements/TetraRef.h	(revision 18139)
@@ -20,9 +20,9 @@
 		void GetJacobianDeterminantFace(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussTetra* gauss);
 		void GetJacobianInvert(IssmDouble* Jinv, IssmDouble* xyz_list,GaussTetra* gauss);
-		void GetNodalFunctions(IssmDouble* basis,GaussTetra* gauss,int finiteelement);
+		void GetNodalFunctions(IssmDouble* basis,Gauss* gauss_in,int finiteelement);
 		void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTetra* gauss,int finiteelement);
 		void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTetra* gauss,int finiteelement);
 		void GetInputDerivativeValue(IssmDouble* p, IssmDouble* plist,IssmDouble* xyz_list, GaussTetra* gauss,int finiteelement);
-		void GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTetra* gauss,int finiteelement);
+		void GetInputValue(IssmDouble* p, IssmDouble* plist, Gauss* gauss,int finiteelement);
 
 		int  NumberofNodes(int finiteelement);
