Index: /issm/trunk-jpl/src/c/classes/Nodes.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Nodes.cpp	(revision 27380)
+++ /issm/trunk-jpl/src/c/classes/Nodes.cpp	(revision 27381)
@@ -181,14 +181,19 @@
 	 * object that is not a clone, tell them to show their dofs, so that later on, they can get picked
 	 * up by their clones: */
-	int  maxdofspernode = this->MaxNumDofs(setenum);
-	int* truedofs       = xNewZeroInit<int>(this->Size()*maxdofspernode); //only one alloc
+	int maxdofspernode  = this->MaxNumDofs(GsetEnum);
+	int **send_truedofs = xNewZeroInit<int*>(num_procs);
+	int  *recv_truedofs = xNewZeroInit<int>(this->Size()*maxdofspernode);
+	ISSM_MPI_Request  *send_requests = xNew<ISSM_MPI_Request>(num_procs);
+	for (int rank = 0;rank<num_procs;rank++) send_requests[rank] = ISSM_MPI_REQUEST_NULL;
+
 	for(int rank=0;rank<num_procs;rank++){
 		if(this->common_send[rank]){
 			int  numids = this->common_send[rank];
+			send_truedofs[rank] = xNew<int>(numids*maxdofspernode);
 			for(int i=0;i<numids;i++){
 				Node* node=xDynamicCast<Node*>(this->GetObjectByOffset(this->common_send_ids[rank][i]));
-				node->ShowMasterDofs(&truedofs[i*maxdofspernode+0],setenum);
-			}
-			ISSM_MPI_Send(truedofs,numids*maxdofspernode,ISSM_MPI_INT,rank,0,IssmComm::GetComm());
+				node->ShowMasterDofs(&send_truedofs[rank][i*maxdofspernode+0],setenum);
+			}
+			ISSM_MPI_Isend(send_truedofs[rank],numids*maxdofspernode,ISSM_MPI_INT,rank,0,IssmComm::GetComm(),&send_requests[rank]);
 		}
 	}
@@ -196,12 +201,18 @@
 		if(this->common_recv[rank]){
 			int  numids = this->common_recv[rank];
-			ISSM_MPI_Recv(truedofs,numids*maxdofspernode,ISSM_MPI_INT,rank,0,IssmComm::GetComm(),&status);
+			ISSM_MPI_Recv(recv_truedofs,numids*maxdofspernode,ISSM_MPI_INT,rank,0,IssmComm::GetComm(),&status);
 			for(int i=0;i<numids;i++){
 				Node* node=xDynamicCast<Node*>(this->GetObjectByOffset(this->common_recv_ids[rank][i]));
-				node->UpdateCloneDofs(&truedofs[i*maxdofspernode+0],setenum);
-			}
-		}
-	}
-	xDelete<int>(truedofs);
+				node->UpdateCloneDofs(&recv_truedofs[i*maxdofspernode+0],setenum);
+			}
+		}
+	}
+	xDelete<int>(recv_truedofs);
+	for(int rank=0;rank<num_procs;rank++){
+		if(rank!=my_rank) ISSM_MPI_Wait(&send_requests[rank],&status);
+		xDelete<int>(send_truedofs[rank]);
+	}
+	xDelete<int*>(send_truedofs);
+	xDelete<ISSM_MPI_Request>(send_requests);
 
 	/*Update indexingupdateflag*/
