diff --git a/src/STUBS/mpi.c b/src/STUBS/mpi.c
index ca0e921e131766d5ea4fa8c4554ce706aa1dcd27..281a12a4e74926136f7433b76a618e29c57972c9 100644
--- a/src/STUBS/mpi.c
+++ b/src/STUBS/mpi.c
@@ -190,6 +190,13 @@ int MPI_Type_size(MPI_Datatype datatype, int *size)
 
 /* ---------------------------------------------------------------------- */
 
+int MPI_Request_free(MPI_Request *request)
+{
+  return 0;
+}
+
+/* ---------------------------------------------------------------------- */
+
 int MPI_Send(const void *buf, int count, MPI_Datatype datatype,
              int dest, int tag, MPI_Comm comm)
 {
diff --git a/src/STUBS/mpi.h b/src/STUBS/mpi.h
index 82cbe302ba5982d55381b2283c3d78c35d97eb50..1eca1ec527de6e2d4358630ed665c6a1f52768d0 100644
--- a/src/STUBS/mpi.h
+++ b/src/STUBS/mpi.h
@@ -89,6 +89,7 @@ int MPI_Finalize();
 double MPI_Wtime();
 
 int MPI_Type_size(int, int *);
+int MPI_Request_free(MPI_Request *request);
 
 int MPI_Send(const void *buf, int count, MPI_Datatype datatype,
              int dest, int tag, MPI_Comm comm);
diff --git a/src/irregular.cpp b/src/irregular.cpp
index 3947001541f2fa629703768aa56fa0e305a13b77..d0210244fbd830b1f4d493c23af37907a8b3f4f4 100644
--- a/src/irregular.cpp
+++ b/src/irregular.cpp
@@ -395,7 +395,9 @@ int Irregular::create_atom(int n, int *sizes, int *proclist, int sortflag)
 
   sendmax_proc = 0;
   for (i = 0; i < nsend_proc; i++) {
-    MPI_Send(&length_send[i],1,MPI_INT,proc_send[i],0,world);
+    MPI_Request tmpReq; // Use non-blocking send to avoid possible deadlock
+    MPI_Isend(&length_send[i],1,MPI_INT,proc_send[i],0,world,&tmpReq);
+    MPI_Request_free(&tmpReq); // the MPI_Barrier below marks completion
     sendmax_proc = MAX(sendmax_proc,length_send[i]);
   }
 
@@ -641,7 +643,9 @@ int Irregular::create_data(int n, int *proclist, int sortflag)
 
   sendmax_proc = 0;
   for (i = 0; i < nsend_proc; i++) {
-    MPI_Send(&num_send[i],1,MPI_INT,proc_send[i],0,world);
+    MPI_Request tmpReq; // Use non-blocking send to avoid possible deadlock
+    MPI_Isend(&num_send[i],1,MPI_INT,proc_send[i],0,world,&tmpReq);
+    MPI_Request_free(&tmpReq); // the MPI_Barrier below marks completion
     sendmax_proc = MAX(sendmax_proc,num_send[i]);
   }