diff --git a/src/sampling/meshToMesh/meshToMeshParallelOps.C b/src/sampling/meshToMesh/meshToMeshParallelOps.C
index 180290a469402e5386779fd89c6f116d3c4ac7ce..ed4c3efb38e78e58693a3bf646c3a314053276ce 100644
--- a/src/sampling/meshToMesh/meshToMeshParallelOps.C
+++ b/src/sampling/meshToMesh/meshToMeshParallelOps.C
@@ -212,27 +212,46 @@ Foam::autoPtr<Foam::mapDistribute> Foam::meshToMesh::calcProcMap
                     }
                 }
 
-                // convert dynamicList to labelList
-                forAll(sendMap, proci)
-                {
-                    sendMap[proci].transfer(dynSendMap[proci]);
-                }
-
-                // debug printing
                 if (debug)
                 {
                     Pout<< "Of my " << tgt.nCells()
                         << " target cells I need to send to:" << nl
                         << "\tproc\tcells" << endl;
-                    forAll(sendMap, proci)
+                    forAll(dynSendMap, proci)
                     {
                         Pout<< '\t' << proci << '\t'
-                            << sendMap[proci].size() << endl;
+                            << dynSendMap[proci].size() << endl;
                     }
                 }
+
+                // Convert DynamicList -> List
+                forAll(sendMap, proci)
+                {
+                    sendMap[proci].transfer(dynSendMap[proci]);
+                }
             }
 
-            return autoPtr<mapDistribute>::New(std::move(sendMap));
+
+            labelList recvSizes;
+            Pstream::exchangeSizes(sendMap, recvSizes, UPstream::worldComm);
+
+            // Uses linear receive order
+            labelListList constructMap(UPstream::nProcs());
+
+            label constructSize = 0;
+            forAll(constructMap, proci)
+            {
+                const label len = recvSizes[proci];
+                constructMap[proci] = identity(len, constructSize);
+                constructSize += len;
+            }
+
+            return autoPtr<mapDistribute>::New
+            (
+                constructSize,
+                std::move(sendMap),
+                std::move(constructMap)
+            );
             break;
         }
     }