diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp
index e599ea8083c4d0a25471fab73c22192c1478af50..5b9e6516449ae6b29f827b9f0f2287357716263a 100644
--- a/src/mesh/GmshReader.cpp
+++ b/src/mesh/GmshReader.cpp
@@ -309,10 +309,37 @@ GmshReader::GmshReader(const std::string& filename)
     CSRGraph mesh_graph;
     if (commRank() == 0) {
       mesh_graph = m_mesh->cellToCellGraph();
-    }
 
-    Partitioner P;
-    Array<int> new_cell_owner = P.partition(mesh_graph);
+      CellValue<int> cell_parts;
+      switch(m_mesh->meshDimension())
+      {
+        case 1: {
+          Mesh<Connectivity1D>& mesh = dynamic_cast<Mesh<Connectivity1D>&>(*m_mesh);
+          CellValue<int> mesh_cell_parts(mesh.connectivity());
+          cell_parts = mesh_cell_parts;
+          break;
+        }
+        case 2: {
+          Mesh<Connectivity2D>& mesh = dynamic_cast<Mesh<Connectivity2D>&>(*m_mesh);
+          CellValue<int> mesh_cell_parts(mesh.connectivity());
+          cell_parts = mesh_cell_parts;
+          break;
+        }
+        case 3: {
+          Mesh<Connectivity3D>& mesh = dynamic_cast<Mesh<Connectivity3D>&>(*m_mesh);
+          CellValue<int> mesh_cell_parts(mesh.connectivity());
+          cell_parts = mesh_cell_parts;
+          break;
+        }
+        default:{
+          perr() << "unexpected mesh dimension\n";
+          Messenger::destroy();
+          std::exit(1);
+        }
+      }
+      Partitioner P;
+      cell_parts = P.partition(mesh_graph);
+    }
 
     Messenger::destroy();
     std::exit(0);