diff --git a/src/mesh/ConnectivityDispatcher.cpp b/src/mesh/ConnectivityDispatcher.cpp
index 3e6d4cb13f037c21731e79f9bebecb91014f62ee..465e7f01220249508f9df4088c7fe651a57ed3b2 100644
--- a/src/mesh/ConnectivityDispatcher.cpp
+++ b/src/mesh/ConnectivityDispatcher.cpp
@@ -6,6 +6,9 @@
 
 #include <iostream>
 
+#warning remove
+#include <utils/Demangle.hpp>
+
 template <size_t Dimension>
 template <ItemType item_type>
 void
@@ -199,6 +202,8 @@ void
 ConnectivityDispatcher<Dimension>::_gatherFrom(const ItemValue<DataType, item_type, ConnectivityPtr>& data_to_gather,
                                                Array<std::remove_const_t<DataType>>& gathered_array)
 {
+  std::cout << rang::style::underline << "-- _gatherFrom[" << itemName(item_type) << "][" << demangle<DataType>()
+            << "] --" << rang::style::reset << "\n";
   std::vector<Array<const DataType>> recv_item_data_by_proc = this->exchange(data_to_gather);
 
   if constexpr (not(std::is_same_v<std::decay_t<DataType>, CellType>)) {
@@ -218,12 +223,19 @@ ConnectivityDispatcher<Dimension>::_gatherFrom(const ItemValue<DataType, item_ty
   Assert(recv_id_correspondance_by_proc.size() == parallel::size());
 
   gathered_array = Array<std::remove_const_t<DataType>>(this->_dispatchedInfo<item_type>().m_number_to_id_map.size());
+  size_t shift   = 0;
   for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
     Assert(recv_id_correspondance_by_proc[i_rank].size() == recv_item_data_by_proc[i_rank].size());
     for (size_t r = 0; r < recv_id_correspondance_by_proc[i_rank].size(); ++r) {
-      const auto& item_id     = recv_id_correspondance_by_proc[i_rank][r];
-      gathered_array[item_id] = recv_item_data_by_proc[i_rank][r];
+      const auto& item_id             = recv_id_correspondance_by_proc[i_rank][r];
+      gathered_array[item_id + shift] = recv_item_data_by_proc[i_rank][r];
     }
+    shift += recv_item_data_by_proc[i_rank].size();
+  }
+
+  if constexpr (not(std::is_same_v<std::decay_t<DataType>, CellType>)) {
+    std::cout << rang::style::reversed << rang::fgB::yellow << "=> gathered_array = " << gathered_array
+              << rang::style::reset << rang::fg::reset << "\n";
   }
 }
 
@@ -453,9 +465,9 @@ ConnectivityDispatcher<Dimension>::_buildItemToSubItemDescriptor()
   }
 
   if constexpr (print) {
-    for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
-      std::cout << rang::fgB::magenta << "item_to_subitem_legacy[" << i_rank
-                << "] = " << convert_to_array(item_to_subitem_legacy[i_rank]) << rang::fg::reset << '\n';
+    for (size_t i = 0; i < item_to_subitem_legacy.size(); ++i) {
+      std::cout << rang::fgB::magenta << "item_to_subitem_legacy[" << i
+                << "] = " << convert_to_array(item_to_subitem_legacy[i]) << rang::fg::reset << '\n';
     }
   }
 
@@ -505,17 +517,15 @@ ConnectivityDispatcher<Dimension>::_buildRecvItemIdCorrespondanceByProc()
   parallel::exchange(send_item_number_by_proc, recv_item_number_by_proc);
 
   const auto& item_number_to_id_map = this->_dispatchedInfo<item_type>().m_number_to_id_map;
-  size_t first_new_item_id          = 0;
   for (size_t i_rank = 0; i_rank < item_list_to_recv_size_by_proc.size(); ++i_rank) {
     Array<ItemId> item_id_correspondance(item_list_to_recv_size_by_proc[i_rank]);
     for (size_t l = 0; l < item_list_to_recv_size_by_proc[i_rank]; ++l) {
       const int& recv_item_number  = recv_item_number_by_proc[i_rank][l];
       const auto& searched_item_id = item_number_to_id_map.find(recv_item_number);
       Assert(searched_item_id != item_number_to_id_map.end());
-      item_id_correspondance[l] = searched_item_id->second + first_new_item_id;
+      item_id_correspondance[l] = searched_item_id->second;
     }
     recv_item_id_correspondance_by_proc[i_rank] = item_id_correspondance;
-    first_new_item_id += item_id_correspondance.size();
   }
   this->_dispatchedInfo<item_type>().m_recv_id_correspondance_by_proc = recv_item_id_correspondance_by_proc;
 }
@@ -829,10 +839,16 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
   }
   this->_buildNewOwner<ItemType::node>();
 
+  std::cout << rang::style::reversed << "--- cell to exchange ---" << rang::style::reset << '\n';
+
   this->_buildItemToExchangeLists<ItemType::cell>();
 
+  std::cout << rang::style::reversed << "--- number of node per cell ---" << rang::style::reset << '\n';
+
   this->_buildNumberOfSubItemPerItemToRecvByProc<NodeOfCell>();
 
+  std::cout << rang::style::reversed << "--- node by cell to recv by proc ---" << rang::style::reset << '\n';
+
   this->_buildSubItemNumbersToRecvByProc<NodeOfCell>();
 
   m_new_descriptor.setCellNumberVector([&] {
@@ -844,8 +860,12 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
   std::cout << rang::fgB::green << "cell_number_vector = " << m_new_descriptor.cellNumberVector() << rang::fg::reset
             << "\n";
 
+  std::cout << rang::style::reversed << "--- node of cell to id map ---" << rang::style::reset << '\n';
+
   this->_buildSubItemNumberToIdMap<NodeOfCell>();
 
+  std::cout << rang::style::reversed << "--- node to exchange ---" << rang::style::reset << '\n';
+
   this->_buildItemToExchangeLists<ItemType::node>();
 
   m_new_descriptor.setCellTypeVector([&] {