diff --git a/src/mesh/ConnectivityDispatcher.cpp b/src/mesh/ConnectivityDispatcher.cpp
index 465e7f01220249508f9df4088c7fe651a57ed3b2..11188d9a0efda9704022960bd0dd8a2cc1a07e07 100644
--- a/src/mesh/ConnectivityDispatcher.cpp
+++ b/src/mesh/ConnectivityDispatcher.cpp
@@ -327,13 +327,19 @@ ConnectivityDispatcher<Dimension>::_buildSubItemNumberToIdMap()
     this->_dispatchedInfo<ItemOfItemT>().m_sub_item_numbers_to_recv_by_proc;
 
   auto& sub_item_number_id_map = this->_dispatchedInfo<ItemOfItemT::sub_item_type>().m_number_to_id_map;
+  int sub_item_id              = 0;
   for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
-    int sub_item_id = 0;
     for (size_t i = 0; i < cell_sub_item_number_to_recv_by_proc[i_rank].size(); ++i) {
-      int sub_item_number       = cell_sub_item_number_to_recv_by_proc[i_rank][i];
+      int sub_item_number = cell_sub_item_number_to_recv_by_proc[i_rank][i];
+
+      std::cout << "looking for " << sub_item_number;
       auto [iterator, inserted] = sub_item_number_id_map.insert(std::make_pair(sub_item_number, sub_item_id));
-      if (inserted)
-        sub_item_id++;
+      if (inserted) {
+        std::cout << ": inserted with item_id " << sub_item_id << '\n';
+        ++sub_item_id;
+      } else {
+        std::cout << ": *exists* with item_id " << iterator->second << '\n';
+      }
     }
   }
 }
@@ -444,9 +450,22 @@ ConnectivityDispatcher<Dimension>::_buildItemToSubItemDescriptor()
 
   const auto& sub_item_number_id_map = this->_dispatchedInfo<sub_item_type>().m_number_to_id_map;
 
+  std::cout << "sub_item_number_id_map = ";
+  std::cout << rang::fgB::magenta << rang::style::reversed;
+  for (auto&& i_sub : sub_item_number_id_map) {
+    std::cout << ' ' << i_sub.first << "->" << i_sub.second;
+  }
+  std::cout << rang::fg::reset << rang::style::reset;
+  std::cout << '\n';
+
   const auto& recv_item_of_item_numbers_by_proc =
     this->_dispatchedInfo<ItemOfItemT>().m_sub_item_numbers_to_recv_by_proc;
 
+  for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
+    std::cout << rang::fgB::blue << "recv_item_of_item_numbers_by_proc[" << i_rank
+              << "] = " << recv_item_of_item_numbers_by_proc[i_rank] << rang::fg::reset << '\n';
+  }
+
   std::vector<std::vector<unsigned int>> item_to_subitem_legacy;
   size_t number_of_node_by_cell = 0;
   for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
@@ -903,10 +922,13 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
   this->_buildItemReferenceList<ItemType::node>();
 
   std::cout << "m_new_descriptor.nodeNumberVector() = " << m_new_descriptor.nodeNumberVector() << '\n';
+  std::cout << rang::fgB::blue << m_new_descriptor.nodeNumberVector() << rang::fg::reset << '\n';
   std::cout << "m_new_descriptor.nodeOwnerVector()  = " << m_new_descriptor.nodeOwnerVector() << '\n';
+  std::cout << rang::fgB::blue << m_new_descriptor.nodeOwnerVector() << rang::fg::reset << '\n';
 
   std::cout << "m_new_descriptor.cellOwnerVector().size()          = " << m_new_descriptor.cellOwnerVector().size()
             << '\n';
+  std::cout << rang::fgB::blue << m_new_descriptor.cellOwnerVector() << rang::fg::reset << '\n';
   std::cout << "m_new_descriptor.cellTypeVector().size()           = " << m_new_descriptor.cellTypeVector().size()
             << '\n';
   std::cout << "m_new_descriptor.cellToNodeMatrix().numberOfRows() = "
@@ -917,9 +939,6 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
               << ")" << m_new_descriptor.cellToNodeMatrix()[cell_id] << '\n';
   }
 
-  std::cout.flush();
-  parallel::barrier();
-
   m_dispatched_connectivity = ConnectivityType::build(m_new_descriptor);
 
   {
diff --git a/src/mesh/ConnectivityDispatcher.hpp b/src/mesh/ConnectivityDispatcher.hpp
index 9d9d6a14fa95f10a8b78553c0cd69732b8804393..dae37d986ebb620f8333b6fec3fb3203c1da1bb1 100644
--- a/src/mesh/ConnectivityDispatcher.hpp
+++ b/src/mesh/ConnectivityDispatcher.hpp
@@ -273,14 +273,16 @@ class ConnectivityDispatcher
     const auto& recv_item_id_correspondance_by_proc =
       this->_dispatchedInfo<item_type>().m_recv_id_correspondance_by_proc;
     ItemValue<MutableDataType, item_type> new_item_value(*m_dispatched_connectivity);
+    size_t shift = 0;
     for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
       const auto& recv_item_id_correspondance = recv_item_id_correspondance_by_proc[i_rank];
       const auto& recv_item_value             = recv_item_value_by_proc[i_rank];
       parallel_for(
-        recv_item_value.size(), PUGS_LAMBDA(size_t r) {
-          const ItemId& item_id   = recv_item_id_correspondance[r];
-          new_item_value[item_id] = recv_item_value[r];
+        recv_item_value.size(), PUGS_LAMBDA(size_t index) {
+          const ItemId shifted_item_id    = recv_item_id_correspondance[index] + shift;
+          new_item_value[shifted_item_id] = recv_item_value[index];
         });
+      shift += recv_item_value.size();
     }
     return new_item_value;
   }
diff --git a/src/mesh/MeshBuilderBase.cpp b/src/mesh/MeshBuilderBase.cpp
index 861050ed7e3cfd070ab13d6eaa7eed489f4352a4..9bc0b5ddd8605b06109072f2dc8d1fe2d7f55f16 100644
--- a/src/mesh/MeshBuilderBase.cpp
+++ b/src/mesh/MeshBuilderBase.cpp
@@ -42,7 +42,27 @@ MeshBuilderBase::_dispatch()
   std::shared_ptr dispatched_connectivity = p_dispatcher->dispatchedConnectivity();
   NodeValue<Rd> dispatched_xr             = p_dispatcher->dispatch(mesh.xr());
 
-  m_mesh = std::make_shared<MeshVariant>(std::make_shared<const MeshType>(dispatched_connectivity, dispatched_xr));
+  std::cout << rang::fgB::magenta << "dispatched xr=" << dispatched_xr << rang::fg::reset << '\n';
+
+  auto dispatched_mesh = std::make_shared<const MeshType>(dispatched_connectivity, dispatched_xr);
+
+  {
+    const auto& d_connectivity = dispatched_mesh->connectivity();
+    auto cell_to_node_matrix   = d_connectivity.cellToNodeMatrix();
+    auto d_xr                  = dispatched_mesh->xr();
+    auto d_cell_number         = d_connectivity.cellNumber();
+
+    for (CellId cell_id = 0; cell_id < dispatched_mesh->numberOfCells(); ++cell_id) {
+      std::cout << cell_id << "(" << d_cell_number[cell_id] << "):\n";
+      const auto cell_nodes = cell_to_node_matrix[cell_id];
+      for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) {
+        const NodeId node_id = cell_nodes[i_node];
+        std::cout << i_node << ": " << d_xr[node_id] << '\n';
+      }
+    }
+  }
+  m_mesh = std::make_shared<MeshVariant>(dispatched_mesh);
+  //  m_mesh = std::make_shared<MeshVariant>(std::make_shared<const MeshType>(dispatched_connectivity, dispatched_xr));
 }
 
 template void MeshBuilderBase::_dispatch<1>();