Index: issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15689)
+++ issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15694)
@@ -456,6 +456,12 @@
 	}
 
-	/*Add to global matrix*/
 	if(Ke){
+		/*Condense if requested*/
+		if(this->element_type==MINIcondensedEnum){
+			int indices[3]={18,19,20};
+			Ke->StaticCondensation(3,&indices[0]);
+		}
+
+		/*Add to global matrix*/
 		Ke->AddToGlobal(Kff,Kfs);
 		delete Ke;
@@ -592,6 +598,19 @@
 	}
 
-	/*Add to global Vector*/
 	if(pe){
+
+		/*StaticCondensation if requested*/
+		if(this->element_type==MINIcondensedEnum){
+			int indices[3]={18,19,20};
+
+			this->element_type=MINIEnum;
+			ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
+			this->element_type=MINIcondensedEnum;
+
+			pe->StaticCondensation(Ke,3,&indices[0]);
+			delete Ke;
+		}
+
+		/*Add to global Vector*/
 		pe->AddToGlobal(pf);
 		delete pe;
@@ -1165,5 +1184,5 @@
 		GaussPenta* gauss=new GaussPenta();
 		for(int iv=0;iv<this->NumberofNodes();iv++){
-			gauss->GaussNode(numnodes,iv);
+			gauss->GaussNode(this->element_type,iv);
 			input->GetInputValue(&pvalue[iv],gauss);
 		}
@@ -1188,5 +1207,5 @@
 	GaussPenta* gauss=new GaussPenta();
 	for (int iv=0;iv<this->NumberofNodes();iv++){
-		gauss->GaussNode(numnodes,iv);
+		gauss->GaussNode(this->element_type,iv);
 		input->GetInputValue(&pvalue[iv],gauss);
 	}
@@ -7429,10 +7448,4 @@
 	Ke =new ElementMatrix(Ke1,Ke2);
 
-	/*Condense if requested*/
-	if(this->element_type==MINIcondensedEnum){
-		int indices[3]={18,19,20};
-		Ke->StaticCondensation(3,&indices[0]);
-	}
-
 	/*clean-up and return*/
 	delete Ke1;
@@ -8458,16 +8471,4 @@
 	pe =new ElementVector(pe1,pe2,pe3);
 
-	/*Condense if requested*/
-	if(this->element_type==MINIcondensedEnum){
-		int indices[3]={18,19,20};
-
-		this->element_type=MINIEnum;
-		ElementMatrix* Ke = CreateKMatrixDiagnosticFS();
-		this->element_type=MINIcondensedEnum;
-
-		pe->StaticCondensation(Ke,3,&indices[0]);
-		delete Ke;
-	}
-
 	/*clean-up and return*/
 	delete pe1;
@@ -9182,5 +9183,5 @@
 	GaussPenta* gauss=new GaussPenta();
 	for(int i=0;i<numnodes;i++){
-		gauss->GaussNode(numnodes,i);
+		gauss->GaussNode(this->element_type,i);
 
 		/*Recover vx and vy*/
@@ -9301,5 +9302,5 @@
 	gauss = new GaussPenta();
 	for(int i=0;i<vnumnodes;i++){
-		gauss->GaussNode(vnumnodes,i);
+		gauss->GaussNode(this->VelocityInterpolation(),i);
 
 		vx_input->GetInputValue(&vx,gauss);
@@ -9311,5 +9312,5 @@
 	}
 	for(int i=0;i<pnumnodes;i++){
-		gauss->GaussNode(pnumnodes,i);
+		gauss->GaussNode(this->PressureInterpolation(),i);
 
 		p_input ->GetInputValue(&p ,gauss);
Index: issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15689)
+++ issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15694)
@@ -1968,2 +1968,32 @@
 }
 /*}}}*/
+/*FUNCTION PentaRef::VelocityInterpolation{{{*/
+int PentaRef::VelocityInterpolation(void){
+
+	switch(this->element_type){
+		case P1P1Enum:          return P1Enum;
+		case P1P1GLSEnum:       return P1Enum;
+		case MINIcondensedEnum: return P1bubbleEnum;
+		case MINIEnum:          return P1bubbleEnum;
+		case TaylorHoodEnum:    return P2Enum;
+		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+	}
+
+	return -1;
+}
+/*}}}*/
+/*FUNCTION PentaRef::PressureInterpolation{{{*/
+int PentaRef::PressureInterpolation(void){
+
+	switch(this->element_type){
+		case P1P1Enum:          return P1Enum;
+		case P1P1GLSEnum:       return P1Enum;
+		case MINIcondensedEnum: return P1Enum;
+		case MINIEnum:          return P1Enum;
+		case TaylorHoodEnum:    return P1Enum;
+		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
+	}
+
+	return -1;
+}
+/*}}}*/
Index: issm/trunk-jpl/src/c/classes/Elements/PentaRef.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15689)
+++ issm/trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15694)
@@ -72,4 +72,6 @@
 		int  NumberofNodesVelocity(void);
 		int  NumberofNodesPressure(void);
+		int  VelocityInterpolation(void);
+		int  PressureInterpolation(void);
 };
 #endif
Index: issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15689)
+++ issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15694)
@@ -231,6 +231,18 @@
 	}
 
-	/*Add to global matrix*/
 	if(Ke){
+		/*Static condensation if requested*/
+		if(this->element_type==P1bubblecondensedEnum){
+			int size   = nodes[3]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+			int offset = 0;
+			for(int i=0;i<3;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+			int* indices=xNew<int>(size);
+			for(int i=0;i<size;i++) indices[i] = offset+i;
+			printarray(indices,1,size);
+			Ke->StaticCondensation(size,indices);
+			xDelete<int>(indices);
+		}
+
+		/*Add to global matrix*/
 		Ke->AddToGlobal(Kff,Kfs);
 		delete Ke;
@@ -346,4 +358,21 @@
 	/*Add to global Vector*/
 	if(pe){
+		/*Static condensation if requested*/
+		if(this->element_type==P1bubblecondensedEnum){
+			int size   = nodes[3]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+			int offset = 0;
+			for(int i=0;i<3;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
+			int* indices=xNew<int>(size);
+			for(int i=0;i<size;i++) indices[i] = offset+i;
+
+			this->element_type=P1bubbleEnum;
+			ElementMatrix* Ke = CreateKMatrixDiagnosticSSA();
+			this->element_type=P1bubblecondensedEnum;
+
+			pe->StaticCondensation(Ke,size,indices);
+			xDelete<int>(indices);
+			delete Ke;
+		}
+
 		pe->AddToGlobal(pf);
 		delete pe;
@@ -1129,5 +1158,5 @@
 		GaussTria* gauss=new GaussTria();
 		for(int iv=0;iv<this->NumberofNodes();iv++){
-			gauss->GaussNode(numnodes,iv);
+			gauss->GaussNode(this->element_type,iv);
 			input->GetInputValue(&pvalue[iv],gauss);
 		}
@@ -1152,5 +1181,5 @@
 	GaussTria* gauss=new GaussTria();
 	for (int iv=0;iv<this->NumberofNodes();iv++){
-		gauss->GaussNode(numnodes,iv);
+		gauss->GaussNode(this->element_type,iv);
 		input->GetInputValue(&pvalue[iv],gauss);
 	}
@@ -3359,5 +3388,5 @@
 	gauss=new GaussTria();
 	for(int i=0;i<numnodes;i++){
-		gauss->GaussNode(numnodes,i);
+		gauss->GaussNode(this->element_type,i);
 
 		/*Recover vx and vy*/
Index: issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15689)
+++ issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15694)
@@ -444,4 +444,5 @@
 			/*bubble*/
 			basis[3]=27.*gauss->coord1*gauss->coord2*gauss->coord3;
+			return;
 		case P2Enum:
 			/*Corner nodes*/
@@ -560,6 +561,6 @@
 			dbasis[NUMNODESP1b*1+2] = SQRT3/3.;
 			/*Nodal function 4*/
-			dbasis[NUMNODESP1b*0+2] = 27.*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);;
-			dbasis[NUMNODESP1b*1+2] = 27.*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
+			dbasis[NUMNODESP1b*0+3] = 27.*(-.5*gauss->coord2*gauss->coord3 + .5*gauss->coord1*gauss->coord3);;
+			dbasis[NUMNODESP1b*1+3] = 27.*SQRT3*(-1./6.*gauss->coord2*gauss->coord3 - 1./6.*gauss->coord1*gauss->coord3 +1./3.*gauss->coord1*gauss->coord2);
 			return;
 		case P2Enum:
