diff --git a/d2o/distributor_factory.py b/d2o/distributor_factory.py
index c9af9e37e55bbd92724fa04b61b67fe373d85491..6a3b08c8ee532f4b1170e9f38d054369872a74b2 100644
--- a/d2o/distributor_factory.py
+++ b/d2o/distributor_factory.py
@@ -1054,6 +1054,8 @@ class _slicing_distributor(distributor):
         return global_result
 
     def _invert_mpi_data_ordering(self, data):
+        data = np.ascontiguousarray(data)
+
         comm = self.comm
         s = comm.size
         r = comm.rank
@@ -1061,10 +1063,18 @@ class _slicing_distributor(distributor):
             return data
 
         partner = s - 1 - r
-        new_data = comm.sendrecv(sendobj=data,
-                                 dest=partner,
-                                 source=partner)
-        comm.barrier()
+
+        new_shape = comm.sendrecv(sendobj=data.shape,
+                                  dest=partner,
+                                  source=partner)
+        new_data = np.empty(new_shape,
+                            dtype=self.dtype)
+
+        comm.Sendrecv(sendbuf=[data, self.mpi_dtype],
+                      recvbuf=[new_data, self.mpi_dtype],
+                      dest=partner,
+                      source=partner)
+
         return new_data
 
     def collect_data_from_slices(self, data, slice_objects, copy=True,