Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 17064)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 17065)
@@ -372,4 +372,5 @@
 				case MINIEnum          : finiteelement = P1bubbleEnum; break;
 				case TaylorHoodEnum    : finiteelement = P2Enum;       break;
+				case OneLayerP4zEnum   : finiteelement = P2xP4Enum;    break;
 				default: _error_("finite element "<<finiteelement<<" not supported");
 			}
@@ -462,4 +463,7 @@
 					}
 					break;
+				case P2xP4Enum:
+					//Nothing yet
+					break;
 				default:
 					_error_("not implemented yet");
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 17064)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 17065)
@@ -2915,4 +2915,51 @@
 			penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[6*index+5];
 			break;
+		case OneLayerP4zEnum:
+			numnodes         = 30+12;
+			penta_node_ids   = xNew<int>(numnodes);
+			penta_node_ids[ 0]=iomodel->nodecounter+iomodel->elements[6*index+0];
+			penta_node_ids[ 1]=iomodel->nodecounter+iomodel->elements[6*index+1];
+			penta_node_ids[ 2]=iomodel->nodecounter+iomodel->elements[6*index+2];
+			penta_node_ids[ 3]=iomodel->nodecounter+iomodel->elements[6*index+3];
+			penta_node_ids[ 4]=iomodel->nodecounter+iomodel->elements[6*index+4];
+			penta_node_ids[ 5]=iomodel->nodecounter+iomodel->elements[6*index+5];
+			penta_node_ids[ 6]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+0]+1;
+			penta_node_ids[ 7]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+1]+1;
+			penta_node_ids[ 8]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+2]+1;
+			penta_node_ids[ 9]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+3]+1;
+			penta_node_ids[10]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+4]+1;
+			penta_node_ids[11]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+5]+1;
+			penta_node_ids[12]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+6]+1;
+			penta_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+7]+1;
+			penta_node_ids[14]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+8]+1;
+			penta_node_ids[15]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+0]+2;
+			penta_node_ids[16]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+1]+2;
+			penta_node_ids[17]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+2]+2;
+			penta_node_ids[18]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+0]+3;
+			penta_node_ids[19]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+1]+3;
+			penta_node_ids[20]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+2]+3;
+			penta_node_ids[21]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+3]+2;
+			penta_node_ids[22]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+4]+2;
+			penta_node_ids[23]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+5]+2;
+			penta_node_ids[24]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+3]+3;
+			penta_node_ids[25]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+4]+3;
+			penta_node_ids[26]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+5]+3;
+			penta_node_ids[27]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+3]+4;
+			penta_node_ids[28]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+4]+4;
+			penta_node_ids[29]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->elementtoedgeconnectivity[9*index+5]+4;
+
+			penta_node_ids[30]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->elements[6*index+0];
+			penta_node_ids[31]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->elements[6*index+1];
+			penta_node_ids[32]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->elements[6*index+2];
+			penta_node_ids[33]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->elements[6*index+3];
+			penta_node_ids[34]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->elements[6*index+4];
+			penta_node_ids[35]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->elements[6*index+5];
+			penta_node_ids[36]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+0]+1;
+			penta_node_ids[37]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+1]+1;
+			penta_node_ids[38]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+2]+1;
+			penta_node_ids[39]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+0]+2;
+			penta_node_ids[40]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+1]+2;
+			penta_node_ids[41]=iomodel->nodecounter+iomodel->numberofvertices+4*iomodel->numberofedges+iomodel->numberofvertices+2*iomodel->elementtoedgeconnectivity[9*index+2]+2;
+			break;
 		default:
 			_error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
Index: /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 17064)
+++ /issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 17065)
@@ -1452,4 +1452,9 @@
 			this->element_type = TaylorHoodEnum;
 			return;
+		case OneLayerP4zEnum:
+			this->element_type = P2xP4Enum;
+			this->GetNodalFunctions(basis,gauss);
+			this->element_type = OneLayerP4zEnum;
+			return;
 		default:
 			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
@@ -1486,4 +1491,9 @@
 			this->GetNodalFunctions(basis,gauss);
 			this->element_type = TaylorHoodEnum;
+			return;
+		case OneLayerP4zEnum:
+			this->element_type = P1xP3Enum;
+			this->GetNodalFunctions(basis,gauss);
+			this->element_type = OneLayerP4zEnum;
 			return;
 		default:
@@ -1554,4 +1564,9 @@
 			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
 			this->element_type = TaylorHoodEnum;
+			return;
+		case OneLayerP4zEnum:
+			this->element_type = P2xP4Enum;
+			this->GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss);
+			this->element_type = OneLayerP4zEnum;
 			return;
 		default:
@@ -2252,4 +2267,5 @@
 		case MINIEnum:              return NUMNODESP1b+NUMNODESP1;
 		case TaylorHoodEnum:        return NUMNODESP2+NUMNODESP1;
+		case OneLayerP4zEnum:       return NUMNODESP2xP4+NUMNODESP1xP3;
 		case P2xP4Enum:             return NUMNODESP2xP4;
 		case P1xP3Enum:             return NUMNODESP1xP3;
@@ -2269,4 +2285,5 @@
 		case MINIEnum:          return NUMNODESP1;
 		case TaylorHoodEnum:    return NUMNODESP1;
+		case OneLayerP4zEnum:   return NUMNODESP1xP3;
 		default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
 	}
@@ -2284,4 +2301,5 @@
 		case MINIEnum:          return NUMNODESP1b;
 		case TaylorHoodEnum:    return NUMNODESP2;
+		case OneLayerP4zEnum:   return NUMNODESP2xP4;
 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
 	}
@@ -2299,4 +2317,5 @@
 		case MINIEnum:          return P1bubbleEnum;
 		case TaylorHoodEnum:    return P2Enum;
+		case OneLayerP4zEnum:   return P2xP4Enum;
 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
 	}
@@ -2314,4 +2333,5 @@
 		case MINIEnum:          return P1Enum;
 		case TaylorHoodEnum:    return P1Enum;
+		case OneLayerP4zEnum:   return P1xP3Enum;
 		default:       _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
 	}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 17064)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp	(revision 17065)
@@ -291,5 +291,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum));
 				}
 			}
@@ -298,9 +298,9 @@
 				if(iomodel->edges[i*3+2]==2){/*Vertical edges*/
 					if(my_edges[i]){
-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+3,counter+3,lid++,0,iomodel,analysis,approximation);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+1,counter+1,lid++,0,iomodel,analysis,FSvelocityEnum);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+2,counter+2,lid++,0,iomodel,analysis,FSvelocityEnum);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+3,counter+3,lid++,0,iomodel,analysis,FSvelocityEnum);
 						nodes->AddObject(node);
 					}
@@ -308,11 +308,11 @@
 				else if(iomodel->edges[i*3+2]==1){/*Basal edges*/
 					if(my_edges[i]){
-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+3,counter+3,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+4,counter+4,lid++,0,iomodel,analysis,approximation);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+1,counter+1,lid++,0,iomodel,analysis,FSvelocityEnum);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+2,counter+2,lid++,0,iomodel,analysis,FSvelocityEnum);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+3,counter+3,lid++,0,iomodel,analysis,FSvelocityEnum);
+						nodes->AddObject(node);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+4,counter+4,lid++,0,iomodel,analysis,FSvelocityEnum);
 						nodes->AddObject(node);
 					}
@@ -320,5 +320,5 @@
 				else if(iomodel->edges[i*3+2]==3){/*Top edges*/
 					if(my_edges[i]){
-						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
+						node = new Node(iomodel->nodecounter+iomodel->numberofvertices+4*i+1,counter+1,lid++,0,iomodel,analysis,FSvelocityEnum);
 						nodes->AddObject(node);
 					}
@@ -333,5 +333,5 @@
 			for(i=0;i<iomodel->numberofvertices;i++){
 				if(iomodel->my_vertices[i]){
-					nodes->AddObject(new Node(vnodes+i+1,i,lid++,i,iomodel,analysis,approximation));
+					nodes->AddObject(new Node(vnodes+i+1,i,lid++,i,iomodel,analysis,FSpressureEnum));
 				}
 			}
@@ -341,7 +341,7 @@
 				if(iomodel->edges[i*3+2]==2){
 					if(my_edges[i]){
-						node = new Node(vnodes+iomodel->numberofvertices+2*i+1,counter+1,lid++,0,iomodel,analysis,approximation);
-						nodes->AddObject(node);
-						node = new Node(vnodes+iomodel->numberofvertices+2*i+2,counter+2,lid++,0,iomodel,analysis,approximation);
+						node = new Node(vnodes+iomodel->numberofvertices+2*i+1,counter+1,lid++,0,iomodel,analysis,FSpressureEnum);
+						nodes->AddObject(node);
+						node = new Node(vnodes+iomodel->numberofvertices+2*i+2,counter+2,lid++,0,iomodel,analysis,FSpressureEnum);
 						nodes->AddObject(node);
 					}
