Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15039)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15040)
@@ -933,6 +933,5 @@
 void  Penta::GetVertexPidList(int* doflist){
 
-	int i;
-	for(i=0;i<6;i++) doflist[i]=nodes[i]->GetVertexPid();
+	for(int i=0;i<6;i++) doflist[i]=vertices[i]->Pid();
 
 }
@@ -941,6 +940,5 @@
 void  Penta::GetVertexSidList(int* sidlist){
 
-	int i;
-	for(i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetVertexSid();
+	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=vertices[i]->Sid();
 
 }
@@ -2090,5 +2088,5 @@
 				/*Get values on the 6 vertices*/
 				for (int i=0;i<6;i++){
-					values[i]=vector[this->nodes[i]->GetVertexPid()];
+					values[i]=vector[this->vertices[i]->Pid()];
 				}
 
@@ -2426,5 +2424,5 @@
 	found=0;
 	for(i=0;i<NUMVERTICES;i++){
-		if(index==nodes[i]->GetVertexId()){
+		if(index==vertices[i]->Id()){
 			/*Do we have natureofdataenum in our inputs? :*/
 			if(data){
@@ -2453,5 +2451,5 @@
 
 	/*will be needed later: */
-	for(i=0;i<6;i++) vertices_ids[i]=nodes[i]->GetVertexId(); //vertices id start at column 3 of the patch.
+	for(i=0;i<6;i++) vertices_ids[i]=vertices[i]->Id(); //vertices id start at column 3 of the patch.
 
 	for(i=0;i<this->results->Size();i++){
@@ -5001,5 +4999,5 @@
 	/*get gradient indices*/
 	for(int i=0;i<NUMVERTICES;i++){
-		indexing[i]=num_controls*this->nodes[i]->GetVertexPid() + control_index;
+		indexing[i]=num_controls*this->vertices[i]->Pid() + control_index;
 	}
 
@@ -5767,5 +5765,5 @@
 			/*Get values on the 6 vertices*/
 			for (i=0;i<6;i++){
-				values[i]=vector[this->nodes[i]->GetVertexSid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
+				values[i]=vector[this->vertices[i]->Sid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
 			}
 
@@ -5887,5 +5885,5 @@
 				/*create input values: */
 				for(i=0;i<6;i++){
-					row=this->nodes[i]->GetVertexSid();
+					row=this->vertices[i]->Sid();
 					values[i]=(IssmDouble)matrix[ncols*row+t];
 				}
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15039)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15040)
@@ -1360,6 +1360,5 @@
 void  Tria::GetVertexPidList(int* doflist){
 
-	int i;
-	for(i=0;i<3;i++) doflist[i]=nodes[i]->GetVertexPid();
+	for(int i=0;i<3;i++) doflist[i]=vertices[i]->Pid();
 
 }
@@ -1367,5 +1366,5 @@
 /*FUNCTION Tria::GetVertexSidList {{{*/
 void  Tria::GetVertexSidList(int* sidlist){
-	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetVertexSid();
+	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=vertices[i]->Sid();
 }
 /*}}}*/
@@ -1886,5 +1885,5 @@
 		/*Get values on the 3 vertices*/
 		for (int i=0;i<3;i++){
-			values[i]=vector[this->nodes[i]->GetVertexPid()];
+			values[i]=vector[this->vertices[i]->Pid()];
 		}
 		/*update input*/
@@ -1900,5 +1899,5 @@
 		/*Get values on the 3 vertices*/
 		for (int i=0;i<3;i++){
-			values[i]=vector[this->nodes[i]->GetVertexSid()];
+			values[i]=vector[this->vertices[i]->Sid()];
 		}
 		/*update input*/
@@ -2313,5 +2312,5 @@
 	found=0;
 	for(int i=0;i<NUMVERTICES;i++){
-		if(index==nodes[i]->GetVertexId()){
+		if(index==vertices[i]->Id()){
 			/*Do we have natureofdataenum in our inputs? :*/
 			if(data){
@@ -2341,5 +2340,5 @@
 	row=*prow;
 
-	for(i=0;i<3;i++) vertices_ids[i]=nodes[i]->GetVertexId(); //vertices id start at column 3 of the patch.
+	for(i=0;i<3;i++) vertices_ids[i]=vertices[i]->Id(); //vertices id start at column 3 of the patch.
 
 	for(i=0;i<this->results->Size();i++){
@@ -4555,5 +4554,5 @@
 	/*get gradient indices*/
 	for(int i=0;i<NUMVERTICES;i++){
-		indexing[i]=num_controls*this->nodes[i]->GetVertexPid() + control_index;
+		indexing[i]=num_controls*this->vertices[i]->Pid() + control_index;
 	}
 
@@ -6551,5 +6550,5 @@
 			/*Get values on the 3 vertices*/
 			for (i=0;i<3;i++){
-				values[i]=vector[this->nodes[i]->GetVertexSid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
+				values[i]=vector[this->vertices[i]->Sid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
 			}
 
@@ -6657,5 +6656,5 @@
 				/*create input values: */
 				for(i=0;i<3;i++){
-					row=this->nodes[i]->GetVertexSid();
+					row=this->vertices[i]->Sid();
 					values[i]=(IssmDouble)matrix[ncols*row+t];
 				}
Index: /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15039)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15040)
@@ -198,6 +198,6 @@
 
 			/*Prepare index list*/
-			int doflist1[3];
-			for(int i=0;i<3;i++) doflist1[i]=((Tria*)element)->nodes[i]->GetVertexPid();
+			int vertexpidlist[3];
+			((Tria*)element)->GetVertexPidList(&vertexpidlist[0]);
 
 			/*Get input (either in element or material)*/
@@ -206,5 +206,5 @@
 
 			/*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
-			input->GetVectorFromInputs(vector,&doflist1[0]);}
+			input->GetVectorFromInputs(vector,&vertexpidlist[0]);}
 			break;
 
@@ -629,5 +629,5 @@
 				case TriaEnum: {
 					IssmDouble values[3];
-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexPid()];
+					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->vertices[i]->Pid()];
 					this->inputs->AddInput(new TriaP1Input(name,values));
 					return;
@@ -671,5 +671,5 @@
 				case TriaEnum: {
 					IssmDouble values[3];
-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexSid()]; //use sid list, to index into serial oriented vector 
+					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->vertices[i]->Sid()]; //use sid list, to index into serial oriented vector 
 					this->inputs->AddInput(new TriaP1Input(name,values));
 					/*Special case for rheology B in 2D: Pourave land for this solution{{{*/
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15039)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15040)
@@ -20,4 +20,5 @@
 #include "../Elements/Penta.h"
 #include "../Params/Parameters.h"
+#include "../Vertex.h"
 #include "../Hook.h"
 #include "../Node.h"
@@ -190,15 +191,15 @@
 		case TriaEnum:{
 
-			/*Prepare index list*/
-			int doflist1[3];
-			for(int i=0;i<3;i++) doflist1[i]=((Tria*)element)->nodes[i]->GetVertexPid();
-
-			/*Get input (either in element or material)*/
-			Input* input=inputs->GetInput(input_enum);
-			if(!input) _error_("Input " << EnumToStringx(input_enum) << " not found in material");
-
-			/*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
-			input->GetVectorFromInputs(vector,&doflist1[0]);}
-			break;
+							  /*Prepare index list*/
+							  int vertexpidlist[3];
+							  ((Tria*)element)->GetVertexPidList(&vertexpidlist[0]);
+
+								 /*Get input (either in element or material)*/
+								 Input* input=inputs->GetInput(input_enum);
+							  if(!input) _error_("Input " << EnumToStringx(input_enum) << " not found in material");
+
+							  /*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
+							  input->GetVectorFromInputs(vector,&vertexpidlist[0]);}
+						break;
 
 		default: _error_("element " << EnumToStringx(element->ObjectEnum()) << " not implemented yet");
@@ -562,5 +563,5 @@
 				case TriaEnum: {
 					IssmDouble values[3];
-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexPid()];
+					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->vertices[i]->Pid()];
 					this->inputs->AddInput(new TriaP1Input(name,values));
 					return;
@@ -604,5 +605,5 @@
 				case TriaEnum: {
 					IssmDouble values[3];
-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexSid()]; //index into serial oriented vector 
+					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->vertices[i]->Sid()]; //index into serial oriented vector 
 					this->inputs->AddInput(new TriaP1Input(name,values));
 					/*Special case for rheology B in 2D: Pourave land for this solution{{{*/
Index: /issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 15039)
+++ /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 15040)
@@ -384,32 +384,4 @@
 /*FUNCTION Node::Sid{{{*/
 int    Node::Sid(void){ return sid; }
-/*}}}*/
-/*FUNCTION Node::GetVertexId {{{*/
-int   Node::GetVertexId(void){
-
-	Vertex*  vertex=NULL;
-
-	vertex=(Vertex*)hvertex->delivers();
-	return vertex->id;
-}
-/*}}}*/
-/*FUNCTION Node::GetVertexPid{{{*/
-int   Node::GetVertexPid(void){
-
-	Vertex*  vertex=NULL;
-
-	vertex=(Vertex*)hvertex->delivers();
-	return vertex->pid;
-}
-/*}}}*/
-/*FUNCTION Node::GetVertexSid{{{*/
-int  Node::GetVertexSid(void){
-
-	Vertex* vertex=NULL;
-
-	vertex=(Vertex*)this->hvertex->delivers();
-
-	return vertex->sid;
-}
 /*}}}*/
 #ifdef _HAVE_DIAGNOSTIC_
Index: /issm/trunk-jpl/src/c/classes/Node.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.h	(revision 15039)
+++ /issm/trunk-jpl/src/c/classes/Node.h	(revision 15040)
@@ -86,7 +86,4 @@
 		void   GetDofList(int* poutdoflist,int approximation_enum,int setenum);
 		void   GetLocalDofList(int* poutdoflist,int approximation_enum,int setenum);
-		int    GetVertexId(void);
-		int    GetVertexPid(void);
-		int    GetVertexSid(void);
 		void   FreezeDof(int dof);
 		int    IsFloating();
Index: /issm/trunk-jpl/src/c/classes/Vertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 15039)
+++ /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 15040)
@@ -121,4 +121,7 @@
 int    Vertex::Sid(void){ return sid; }
 /*}}}*/
+/*FUNCTION Vertex::Pid{{{*/
+int    Vertex::Pid(void){ return pid; }
+/*}}}*/
 /*FUNCTION Vertex::UpdateVertexPosition {{{*/
 void  Vertex::UpdatePosition(Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed){
Index: /issm/trunk-jpl/src/c/classes/Vertex.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertex.h	(revision 15039)
+++ /issm/trunk-jpl/src/c/classes/Vertex.h	(revision 15040)
@@ -45,4 +45,5 @@
 		/*}}}*/
 		/*Vertex management:*/ 
+		int        Pid(void); 
 		int        Sid(void); 
 		int        Connectivity(void); 
