Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 25811)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 25812)
@@ -3814,5 +3814,5 @@
 
 	/*Get vertices coordinates*/
-	VertexCoordinatesx(&x,&y,&z,femmodel_vertices,false) ;
+	VertexCoordinatesx(&x,&y,&z,NULL,femmodel_vertices,false) ;
 
 	/*Get element vertices*/
@@ -4971,5 +4971,5 @@
 
 	/*recover lat,long and radius vectors from vertices: */
-	VertexCoordinatesx(&latitude,&longitude,&radius,this->vertices,spherical);
+	VertexCoordinatesx(&latitude,&longitude,&radius,NULL,this->vertices,spherical);
 
 	/* Green's function (1+k_2-h_2/g): checked against Glenn Milne's thesis Chapter 3 (eqs: 3.3-4, 3.10-11)
Index: /issm/trunk-jpl/src/c/classes/Vertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 25811)
+++ /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 25812)
@@ -205,5 +205,5 @@
 }
 /*}}}*/
-void       Vertex::VertexCoordinates(Vector<IssmDouble>* vx,Vector<IssmDouble>* vy,Vector<IssmDouble>* vz, bool spherical){/*{{{*/
+void       Vertex::VertexCoordinates(Vector<IssmDouble>* vx,Vector<IssmDouble>* vy,Vector<IssmDouble>* vz,Vector<IssmDouble>* vrank,bool spherical){/*{{{*/
 
 	if(this->clone==true) return;
@@ -218,4 +218,8 @@
 		vy->SetValue(this->sid,this->longitude,INS_VAL);
 		vz->SetValue(this->sid,this->R,INS_VAL);
+	}
+	if(vrank){
+		int rank=IssmComm::GetRank();
+		vrank->SetValue(this->sid,rank,INS_VAL);
 	}
 
Index: /issm/trunk-jpl/src/c/classes/Vertex.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertex.h	(revision 25811)
+++ /issm/trunk-jpl/src/c/classes/Vertex.h	(revision 25812)
@@ -61,5 +61,5 @@
 		int        Sid(void); 
 		void       UpdatePosition(Vector<IssmDouble>* vx,Vector<IssmDouble>* vy,Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed);
-		void       VertexCoordinates(Vector<IssmDouble>* vx,Vector<IssmDouble>* vy,Vector<IssmDouble>* vz,bool spherical=false);
+		void       VertexCoordinates(Vector<IssmDouble>* vx,Vector<IssmDouble>* vy,Vector<IssmDouble>* vz,Vector<IssmDouble>* vrank,bool spherical=false);
 };
 
Index: /issm/trunk-jpl/src/c/cores/esa_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/esa_core.cpp	(revision 25811)
+++ /issm/trunk-jpl/src/c/cores/esa_core.cpp	(revision 25812)
@@ -44,6 +44,6 @@
 
 	/* recover coordinates of vertices: */
-	VertexCoordinatesx(&latitude,&longitude,&radius,femmodel->vertices,spherical); 
-	VertexCoordinatesx(&xx,&yy,&zz,femmodel->vertices); 
+	VertexCoordinatesx(&latitude,&longitude,&radius,NULL,femmodel->vertices,spherical); 
+	VertexCoordinatesx(&xx,&yy,&zz,NULL,femmodel->vertices); 
 
 	/*Figure out size of g-set deflection vector and allocate solution vector: */
Index: /issm/trunk-jpl/src/c/cores/gia_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/gia_core.cpp	(revision 25811)
+++ /issm/trunk-jpl/src/c/cores/gia_core.cpp	(revision 25812)
@@ -45,5 +45,5 @@
 
 		/*first, recover x and y vectors from vertices: */
-		VertexCoordinatesx(&x,&y,NULL,femmodel->vertices); //no need for z coordinate
+		VertexCoordinatesx(&x,&y,NULL,NULL,femmodel->vertices); //no need for z coordinate
 
 		/*call the main module: */
Index: /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25811)
+++ /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25812)
@@ -392,6 +392,6 @@
 
 	/*first, recover lat,long and radius vectors from vertices: */
-	VertexCoordinatesx(&latitude,&longitude,&radius,femmodel->vertices,spherical); 
-	if(horiz) VertexCoordinatesx(&xx,&yy,&zz,femmodel->vertices); 
+	VertexCoordinatesx(&latitude,&longitude,&radius,NULL,femmodel->vertices,spherical); 
+	if(horiz) VertexCoordinatesx(&xx,&yy,&zz,NULL,femmodel->vertices); 
 
 
@@ -659,6 +659,6 @@
 
 	/*retrieve geometric information: */
-	VertexCoordinatesx(&latitude,&longitude,&radius,femmodel->vertices,spherical); 
-	VertexCoordinatesx(&xx,&yy,&zz,femmodel->vertices); 
+	VertexCoordinatesx(&latitude,&longitude,&radius,NULL,femmodel->vertices,spherical); 
+	VertexCoordinatesx(&xx,&yy,&zz,NULL,femmodel->vertices); 
 
 	/*call the elastic main modlule:*/ 
Index: /issm/trunk-jpl/src/c/modules/VertexCoordinatesx/VertexCoordinatesx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/VertexCoordinatesx/VertexCoordinatesx.cpp	(revision 25811)
+++ /issm/trunk-jpl/src/c/modules/VertexCoordinatesx/VertexCoordinatesx.cpp	(revision 25812)
@@ -9,30 +9,19 @@
 #include "../../toolkits/toolkits.h"
 
-void VertexCoordinatesx( IssmDouble** px, IssmDouble** py, IssmDouble** pz, Vertices* vertices,bool spherical) {
-
-	/*output: */
-	IssmDouble* x=NULL;
-	IssmDouble* y=NULL;
-	IssmDouble* z=NULL;
-
-	Vector<IssmDouble>* vx=NULL;
-	Vector<IssmDouble>* vy=NULL;
-	Vector<IssmDouble>* vz=NULL;
-
-	/*intermediary: */
-	int  numberofvertices;
-	int  i;
+void VertexCoordinatesx( IssmDouble** px, IssmDouble** py, IssmDouble** pz,int** prank, Vertices* vertices,bool spherical) {
 
 	/*figure out how many vertices we have: */
-	numberofvertices=vertices->NumberOfVertices();
+	int numberofvertices=vertices->NumberOfVertices();
 
-	vx=new Vector<IssmDouble>(numberofvertices);
-	vy=new Vector<IssmDouble>(numberofvertices);
-	vz=new Vector<IssmDouble>(numberofvertices);
+	Vector<IssmDouble>* vx=new Vector<IssmDouble>(numberofvertices);
+	Vector<IssmDouble>* vy=new Vector<IssmDouble>(numberofvertices);
+	Vector<IssmDouble>* vz=new Vector<IssmDouble>(numberofvertices);
+	Vector<IssmDouble>* vrank=NULL;
+	if(prank) vrank = new Vector<IssmDouble>(numberofvertices);
 
 	/*march through our vertices: */
 	for(Object* & object : vertices->objects){
 		Vertex* vertex=(Vertex*)object;
-		vertex->VertexCoordinates(vx,vy,vz,spherical);
+		vertex->VertexCoordinates(vx,vy,vz,vrank,spherical);
 	}
 
@@ -41,9 +30,12 @@
 	vy->Assemble();
 	vz->Assemble();
+	if(prank) vrank->Assemble();
 
 	/*serialize: */
-	x=vx->ToMPISerial();
-	y=vy->ToMPISerial();
-	z=vz->ToMPISerial();
+	IssmDouble* x=vx->ToMPISerial();
+	IssmDouble* y=vy->ToMPISerial();
+	IssmDouble* z=vz->ToMPISerial();
+	IssmDouble* rank = NULL;
+	if(prank) rank = vrank->ToMPISerial();
 
 	/*Free ressources: */
@@ -51,11 +43,14 @@
 	delete vy;
 	delete vz;
+	delete vrank;
 
 	/*output: */
-	if (px)*px=x;
+	if(px) *px=x;
 	else xDelete<IssmDouble>(x);
-	if (py)*py=y;
+	if(py) *py=y;
 	else xDelete<IssmDouble>(y);
-	if (pz)*pz=z;
+	if(pz) *pz=z;
 	else xDelete<IssmDouble>(z);
+	if(prank) *prank=rank;
+	else xDelete<IssmDouble>(rank);
 }
Index: /issm/trunk-jpl/src/c/modules/VertexCoordinatesx/VertexCoordinatesx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/VertexCoordinatesx/VertexCoordinatesx.h	(revision 25811)
+++ /issm/trunk-jpl/src/c/modules/VertexCoordinatesx/VertexCoordinatesx.h	(revision 25812)
@@ -8,5 +8,5 @@
 
 /* local prototypes: */
-void VertexCoordinatesx( IssmDouble** px, IssmDouble** py, IssmDouble** pz, Vertices* vertices,bool spherical=false);
+void VertexCoordinatesx( IssmDouble** px, IssmDouble** py, IssmDouble** pz,int** prank,Vertices* vertices,bool spherical=false);
 
 #endif  /* _VERTEX_COORDINATESX_H */
