Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23641)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23642)
@@ -1422,4 +1422,62 @@
 	*plocal_vector = local_vector;
 }/*}}}*/
+void FemModel::GetLocalVectorWithClonesNodes(IssmDouble** plocal_vector,Vector<IssmDouble> *vector){/*{{{*/
+
+	/*recover my_rank:*/
+	ISSM_MPI_Status status;
+	int my_rank   = IssmComm::GetRank();
+	int num_procs = IssmComm::GetSize();
+
+	/*retrieve vertex info*/
+	int localsize         = this->nodes->NumberOfNodesLocalAll();
+	int localsize_masters = this->nodes->NumberOfNodesLocal();
+
+	/*Get local vector of vector*/
+	int        *indices_vector_masters = NULL;
+	IssmDouble *local_vector_masters   = NULL;
+	vector->GetLocalVector(&local_vector_masters,&indices_vector_masters);
+	_assert_(localsize_masters==indices_vector_masters[localsize_masters-1] - indices_vector_masters[0]+1);
+	xDelete<int>(indices_vector_masters);
+
+	/*Now, extend vectors to account for clones (make vectors longer, for clones at the end)*/
+	IssmDouble *local_vector  = xNew<IssmDouble>(localsize);
+	xMemCpy<IssmDouble>(local_vector,local_vector_masters,localsize_masters);
+	xDelete<IssmDouble>(local_vector_masters);
+
+	/*Now send and receive vector for nodes on partition edge*/
+	#ifdef _HAVE_AD_
+	IssmDouble* buffer = xNew<IssmDouble>(this->nodes->Size(),"t"); //only one alloc, "t" is required by adolc
+	#else
+	IssmDouble* buffer = xNew<IssmDouble>(this->nodes->Size());
+	#endif
+	for(int rank=0;rank<num_procs;rank++){
+		if(this->nodes->common_send[rank]){
+			int  numids = this->nodes->common_send[rank];
+			for(int i=0;i<numids;i++){
+				int   master_lid = this->nodes->common_send_ids[rank][i];
+				Node* vertex=xDynamicCast<Node*>(this->nodes->GetObjectByOffset(master_lid));
+				_assert_(!vertex->clone);
+				buffer[i] = local_vector[vertex->lid];
+			}
+			ISSM_MPI_Send(buffer,numids,ISSM_MPI_DOUBLE,rank,0,IssmComm::GetComm());
+		}
+	}
+	for(int rank=0;rank<num_procs;rank++){
+		if(this->nodes->common_recv[rank]){
+			int  numids = this->nodes->common_recv[rank];
+			ISSM_MPI_Recv(buffer,numids,ISSM_MPI_DOUBLE,rank,0,IssmComm::GetComm(),&status);
+			for(int i=0;i<numids;i++){
+				int   master_lid = this->nodes->common_recv_ids[rank][i];
+				Node* vertex=xDynamicCast<Node*>(this->nodes->GetObjectByOffset(master_lid));
+				_assert_(vertex->clone);
+				local_vector[vertex->lid] = buffer[i];
+			}
+		}
+	}
+	xDelete<IssmDouble>(buffer);
+
+	/*Assign output pointer*/
+	*plocal_vector = local_vector;
+}/*}}}*/
 void FemModel::GroundedAreax(IssmDouble* pV, bool scaled){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 23641)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 23642)
@@ -98,4 +98,5 @@
 		void GetLocalVectorWithClonesGset(IssmDouble** plocal_ug,Vector<IssmDouble> *ug);
 		void GetLocalVectorWithClonesVertices(IssmDouble** plocal_vector,Vector<IssmDouble> *vector);
+		void GetLocalVectorWithClonesNodes(IssmDouble** plocal_vector,Vector<IssmDouble> *vector);
 		void GroundedAreax(IssmDouble* pV, bool scaled);
 		void IceMassx(IssmDouble* pV, bool scaled);
Index: /issm/trunk-jpl/src/c/classes/Node.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.h	(revision 23641)
+++ /issm/trunk-jpl/src/c/classes/Node.h	(revision 23642)
@@ -34,4 +34,5 @@
 		//friend void Nodes::Finalize();
 		friend class Nodes;
+		friend class FemModel;
 
 	public: 
Index: /issm/trunk-jpl/src/c/classes/Nodes.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Nodes.cpp	(revision 23641)
+++ /issm/trunk-jpl/src/c/classes/Nodes.cpp	(revision 23642)
@@ -365,4 +365,9 @@
 }
 /*}}}*/
+int   Nodes::NumberOfNodesLocalAll(void){/*{{{*/
+
+	return this->numberofnodes_local;
+}
+/*}}}*/
 bool  Nodes::RequiresDofReindexing(void){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Nodes.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Nodes.h	(revision 23641)
+++ /issm/trunk-jpl/src/c/classes/Nodes.h	(revision 23642)
@@ -45,4 +45,5 @@
 		int   NumberOfNodes(void);
 		int   NumberOfNodesLocal(void);
+		int   NumberOfNodesLocalAll(void);
 		bool  RequiresDofReindexing(void);
 };
Index: /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 23641)
+++ /issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp	(revision 23642)
@@ -174,5 +174,4 @@
 	int  *d_connectivity         = xNewZeroInit<int>(localnumnodes);
 	int  *o_connectivity         = xNewZeroInit<int>(localnumnodes);
-	int  *all_connectivity_clone = xNewZeroInit<int>(numnodes);
 
 	Vector<IssmDouble> *connectivity_clone= new Vector<IssmDouble>(localmasters,numnodes);
@@ -243,5 +242,5 @@
 	connectivity_clone->Assemble();
 	IssmDouble* serial_connectivity_clone=NULL;
-	femmodel->GetLocalVectorWithClonesVertices(&serial_connectivity_clone,connectivity_clone);
+	femmodel->GetLocalVectorWithClonesNodes(&serial_connectivity_clone,connectivity_clone);
 	delete connectivity_clone;
 
