diff --git a/src/mesh/ConnectivityDispatcher.cpp b/src/mesh/ConnectivityDispatcher.cpp
index 11188d9a0efda9704022960bd0dd8a2cc1a07e07..bda78f1ac40bcbd92be36a639a83d0b76e8f9545 100644
--- a/src/mesh/ConnectivityDispatcher.cpp
+++ b/src/mesh/ConnectivityDispatcher.cpp
@@ -14,19 +14,13 @@ template <ItemType item_type>
 void
 ConnectivityDispatcher<Dimension>::_buildNewOwner()
 {
-  std::cout << "#### " << rang::fgB::yellow << itemName(item_type) << rang::fg::reset << " _buildNewOwner() ####\n";
-
   if constexpr (item_type == ItemType::cell) {
     CRSGraph connectivity_graph = m_connectivity.ownCellToCellGraph();
     Partitioner P;
     Array new_owner_array = P.partition(connectivity_graph);
 
-    std::cout << "new_owner_array = " << new_owner_array << '\n';
-
     const auto& cell_is_owned = m_connectivity.cellIsOwned();
 
-    std::cout << "cell_is_owned = " << cell_is_owned << '\n';
-
     CellValue<int> cell_new_owner(m_connectivity);
 
     size_t i = 0;
@@ -37,9 +31,6 @@ ConnectivityDispatcher<Dimension>::_buildNewOwner()
     }
     synchronize(cell_new_owner);
 
-    std::cout << "cell_new_owner = " << cell_new_owner << '\n';
-    std::cout << "cell_number    = " << m_connectivity.template number<item_type>() << '\n';
-
     this->_dispatchedInfo<ItemType::cell>().m_new_owner = cell_new_owner;
   } else {
     const auto& item_to_cell_matrix = m_connectivity.template getItemToItemMatrix<item_type, ItemType::cell>();
@@ -65,9 +56,6 @@ ConnectivityDispatcher<Dimension>::_buildNewOwner()
 
     synchronize(item_new_owner);
 
-    std::cout << itemName(item_type) << "_new_owner = " << item_new_owner << '\n';
-    std::cout << itemName(item_type) << "_number    = " << m_connectivity.template number<item_type>() << '\n';
-
     this->_dispatchedInfo<item_type>().m_new_owner = item_new_owner;
   }
 }
@@ -98,8 +86,6 @@ ConnectivityDispatcher<Dimension>::_buildItemListToSend()
     const auto& cell_new_owner = this->_dispatchedInfo<ItemType::cell>().m_new_owner;
     const auto& cell_number    = m_connectivity.cellNumber();
 
-    std::cout << "- cell_new_owner = " << cell_new_owner << '\n';
-
     std::vector<std::vector<CellId>> cell_vector_to_send_by_proc(parallel::size());
     Array<bool> send_to_rank(parallel::size());
 
@@ -107,9 +93,6 @@ ConnectivityDispatcher<Dimension>::_buildItemListToSend()
       send_to_rank.fill(false);
       const auto& cell_to_node = cell_to_node_matrix[cell_id];
 
-      std::cout << rang::fgB::cyan << " looking for cell " << cell_id << "(" << cell_number[cell_id] << ")"
-                << rang::fg::reset << "\n";
-
       if (cell_is_owned[cell_id]) {
         for (size_t i_node = 0; i_node < cell_to_node.size(); ++i_node) {
           const NodeId& node_id    = cell_to_node[i_node];
@@ -117,8 +100,6 @@ ConnectivityDispatcher<Dimension>::_buildItemListToSend()
           for (size_t i_node_cell = 0; i_node_cell < node_to_cell.size(); ++i_node_cell) {
             const CellId& node_cell                 = node_to_cell[i_node_cell];
             send_to_rank[cell_new_owner[node_cell]] = true;
-            std::cout << rang::fgB::green << " storing cell " << node_cell << "(" << cell_number[node_cell] << ")"
-                      << rang::fg::reset << "\n";
           }
         }
 
@@ -135,10 +116,6 @@ ConnectivityDispatcher<Dimension>::_buildItemListToSend()
     for (size_t i = 0; i < parallel::size(); ++i) {
       cell_list_to_send_by_proc[i] = convert_to_array(cell_vector_to_send_by_proc[i]);
     }
-
-    for (size_t i = 0; i < parallel::size(); ++i) {
-      std::cout << itemName(item_type) << " send to " << i << ": " << cell_list_to_send_by_proc[i] << '\n';
-    }
   } else {
     const auto& cell_list_to_send_by_proc = this->_dispatchedInfo<ItemType::cell>().m_list_to_send_by_proc;
 
@@ -167,10 +144,6 @@ ConnectivityDispatcher<Dimension>::_buildItemListToSend()
       }
       item_list_to_send_by_proc[i_rank] = convert_to_array(item_id_vector);
     }
-
-    for (size_t i = 0; i < parallel::size(); ++i) {
-      std::cout << itemName(item_type) << " send to " << i << ": " << item_list_to_send_by_proc[i] << '\n';
-    }
   }
 }
 
@@ -186,14 +159,7 @@ ConnectivityDispatcher<Dimension>::_buildNumberOfItemToExchange()
   }
   this->_dispatchedInfo<item_type>().m_list_to_send_size_by_proc = nb_item_to_send_by_proc;
 
-  std::cout << rang::fgB::yellow << itemName(item_type) << " nb_item_to_send_by_proc = " << nb_item_to_send_by_proc
-            << rang::fg::reset << '\n';
-
   this->_dispatchedInfo<item_type>().m_list_to_recv_size_by_proc = parallel::allToAll(nb_item_to_send_by_proc);
-
-  std::cout << rang::fgB::blue << itemName(item_type)
-            << " m_list_to_recv_size_by_proc = " << this->_dispatchedInfo<item_type>().m_list_to_recv_size_by_proc
-            << rang::fg::reset << '\n';
 }
 
 template <size_t Dimension>
@@ -202,40 +168,19 @@ 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>)) {
-    for (size_t i_rank = 0; i_rank < recv_item_data_by_proc.size(); ++i_rank) {
-      std::cout << "- from " << rang::fgB::cyan << i_rank << ": recv_" << itemName(item_type)
-                << "_data_by_proc=" << recv_item_data_by_proc[i_rank] << rang::fg::reset << '\n';
-    }
-  }
-
   const auto& recv_id_correspondance_by_proc = this->_dispatchedInfo<item_type>().m_recv_id_correspondance_by_proc;
-  if constexpr (not(std::is_same_v<std::decay_t<DataType>, CellType>)) {
-    for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
-      std::cout << rang::fgB::green << "* recv_id_correspondance_by_proc[" << i_rank
-                << "] = " << recv_id_correspondance_by_proc[i_rank] << rang::fg::reset << '\n';
-    }
-  }
+
   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 + shift] = recv_item_data_by_proc[i_rank][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];
     }
-    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";
   }
 }
 
@@ -304,8 +249,8 @@ ConnectivityDispatcher<Dimension>::_buildCellNumberIdMap()
 {
   const auto recv_cell_number_by_proc = this->exchange(m_connectivity.template number<ItemType::cell>());
   auto& cell_number_id_map            = this->_dispatchedInfo<ItemType::cell>().m_number_to_id_map;
+  CellId cell_id                      = 0;
   for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
-    CellId cell_id = 0;
     for (size_t i = 0; i < recv_cell_number_by_proc[i_rank].size(); ++i) {
       const int cell_number     = recv_cell_number_by_proc[i_rank][i];
       auto [iterator, inserted] = cell_number_id_map.insert(std::make_pair(cell_number, cell_id));
@@ -332,13 +277,9 @@ ConnectivityDispatcher<Dimension>::_buildSubItemNumberToIdMap()
     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];
 
-      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) {
-        std::cout << ": inserted with item_id " << sub_item_id << '\n';
         ++sub_item_id;
-      } else {
-        std::cout << ": *exists* with item_id " << iterator->second << '\n';
       }
     }
   }
@@ -361,13 +302,6 @@ ConnectivityDispatcher<Dimension>::_buildNumberOfSubItemPerItemToRecvByProc()
 
   this->_dispatchedInfo<SubItemOfItemT>().m_number_of_sub_item_per_item_to_recv_by_proc =
     this->exchange(number_of_sub_item_per_item);
-
-  for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
-    std::cout << "rcv from " << i_rank << ": " << rang::fgB::red << itemName(SubItemOfItemT::item_type) << "->"
-              << itemName(SubItemOfItemT::sub_item_type) << ": "
-              << this->_dispatchedInfo<SubItemOfItemT>().m_number_of_sub_item_per_item_to_recv_by_proc[i_rank]
-              << rang::fg::reset << '\n';
-  }
 }
 
 template <size_t Dimension>
@@ -402,12 +336,6 @@ ConnectivityDispatcher<Dimension>::_buildSubItemNumbersToRecvByProc()
     return mutable_sub_item_numbers_to_send_by_proc;
   }();
 
-  for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
-    std::cout << "sub_item_nb_to_send " << i_rank << ": " << rang::fgB::magenta << itemName(SubItemOfItemT::item_type)
-              << "->" << itemName(SubItemOfItemT::sub_item_type) << ": " << sub_item_numbers_to_send_by_proc[i_rank]
-              << rang::fg::reset << '\n';
-  }
-
   const auto& number_of_sub_item_per_item_to_recv_by_proc =
     this->_dispatchedInfo<SubItemOfItemT>().m_number_of_sub_item_per_item_to_recv_by_proc;
 
@@ -424,13 +352,6 @@ ConnectivityDispatcher<Dimension>::_buildSubItemNumbersToRecvByProc()
   for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
     const_sub_item_numbers_to_recv_by_proc[i_rank] = sub_item_numbers_to_recv_by_proc[i_rank];
   }
-
-  for (size_t i_rank = 0; i_rank < parallel::size(); ++i_rank) {
-    std::cout << "sub_item_nb_to_recv " << i_rank << ": " << rang::fgB::magenta << itemName(SubItemOfItemT::item_type)
-              << "->" << itemName(SubItemOfItemT::sub_item_type) << ": "
-              << this->_dispatchedInfo<SubItemOfItemT>().m_sub_item_numbers_to_recv_by_proc[i_rank] << rang::fg::reset
-              << '\n';
-  }
 }
 
 template <size_t Dimension>
@@ -441,8 +362,6 @@ ConnectivityDispatcher<Dimension>::_buildItemToSubItemDescriptor()
   constexpr ItemType item_type     = ItemOfItemT::item_type;
   constexpr ItemType sub_item_type = ItemOfItemT::sub_item_type;
 
-  constexpr const bool print = (item_type == ItemType::cell) and (sub_item_type == ItemType::node);
-
   const auto& item_list_to_recv_size_by_proc = this->_dispatchedInfo<item_type>().m_list_to_recv_size_by_proc;
 
   const auto& number_of_sub_item_per_item_to_recv_by_proc =
@@ -450,22 +369,9 @@ 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) {
@@ -483,13 +389,6 @@ ConnectivityDispatcher<Dimension>::_buildItemToSubItemDescriptor()
     }
   }
 
-  if constexpr (print) {
-    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';
-    }
-  }
-
   Array<unsigned int> item_to_subitem_row_map(item_to_subitem_legacy.size() + 1);
   Array<unsigned int> item_to_subitem_list(number_of_node_by_cell);
 
@@ -536,6 +435,7 @@ 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;
+
   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) {
@@ -815,40 +715,6 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
     }
   }
 
-  std::cout << "--- initial mesh ---\n";
-  std::cout << "--- cells\n";
-  for (CellId cell_id = 0; cell_id < connectivity.numberOfCells(); ++cell_id) {
-    std::cout << "cell " << cell_id << "(" << connectivity.cellNumber()[cell_id] << "):" << rang::style::bold
-              << ((connectivity.cellIsOwned()[cell_id]) ? 'O' : 'G') << rang::style::reset << ": ";
-    auto node_list = connectivity.cellToNodeMatrix()[cell_id];
-    for (size_t i_node = 0; i_node < node_list.size(); ++i_node) {
-      const NodeId node_id = node_list[i_node];
-      std::cout << ' ' << node_id << "(" << connectivity.nodeNumber()[node_id] << "):" << rang::style::bold
-                << ((connectivity.nodeIsOwned()[node_id]) ? 'O' : 'G') << rang::style::reset;
-    }
-    std::cout << '\n';
-  }
-  if constexpr (Dimension > 1) {
-    std::cout << "--- faces\n";
-    for (FaceId face_id = 0; face_id < connectivity.numberOfFaces(); ++face_id) {
-      std::cout << "cell " << face_id << "(" << connectivity.faceNumber()[face_id] << "):" << rang::style::bold
-                << ((connectivity.faceIsOwned()[face_id]) ? 'O' : 'G') << rang::style::reset << ": ";
-      auto node_list = connectivity.faceToNodeMatrix()[face_id];
-      for (size_t i_node = 0; i_node < node_list.size(); ++i_node) {
-        const NodeId node_id = node_list[i_node];
-        std::cout << ' ' << node_id << "(" << connectivity.nodeNumber()[node_id] << "):" << rang::style::bold
-                  << ((connectivity.nodeIsOwned()[node_id]) ? 'O' : 'G') << rang::style::reset;
-      }
-      std::cout << '\n';
-    }
-  }
-  std::cout << "--- nodes\n";
-  for (NodeId node_id = 0; node_id < connectivity.numberOfNodes(); ++node_id) {
-    std::cout << "node " << node_id << "(" << connectivity.nodeNumber()[node_id] << "):" << rang::style::bold
-              << ((connectivity.nodeIsOwned()[node_id]) ? 'O' : 'G') << rang::style::reset << ": ";
-    std::cout << '\n';
-  }
-
   this->_buildNewOwner<ItemType::cell>();
   if constexpr (Dimension > 1) {
     this->_buildNewOwner<ItemType::face>();
@@ -858,16 +724,10 @@ 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([&] {
@@ -876,15 +736,8 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
     return cell_number_vector;
   }());
 
-  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([&] {
@@ -920,25 +773,6 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
   this->_dispatchEdges();
 
   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() = "
-            << m_new_descriptor.cellToNodeMatrix().numberOfRows() << '\n';
-
-  for (CellId cell_id = 0; cell_id < m_new_descriptor.cellToNodeMatrix().numberOfRows(); ++cell_id) {
-    std::cout << "- cell [" << cell_id << "]("   // << m_new_descriptor.cellNumberVector()[cell_id]
-              << ")" << m_new_descriptor.cellToNodeMatrix()[cell_id] << '\n';
-  }
-
   m_dispatched_connectivity = ConnectivityType::build(m_new_descriptor);
 
   {
diff --git a/src/mesh/ConnectivityDispatcher.hpp b/src/mesh/ConnectivityDispatcher.hpp
index dae37d986ebb620f8333b6fec3fb3203c1da1bb1..15c83a66c6fad41f893d5480a18faa20bfed0f21 100644
--- a/src/mesh/ConnectivityDispatcher.hpp
+++ b/src/mesh/ConnectivityDispatcher.hpp
@@ -273,16 +273,14 @@ 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 index) {
-          const ItemId shifted_item_id    = recv_item_id_correspondance[index] + shift;
-          new_item_value[shifted_item_id] = recv_item_value[index];
+          const ItemId item_id    = recv_item_id_correspondance[index];
+          new_item_value[item_id] = recv_item_value[index];
         });
-      shift += recv_item_value.size();
     }
     return new_item_value;
   }
diff --git a/src/output/VTKWriter.cpp b/src/output/VTKWriter.cpp
index 64d35434462e5980a11b69ea2257ce779b3ec581..03e6337f572e494e94d1a31b48991c9444c881bd 100644
--- a/src/output/VTKWriter.cpp
+++ b/src/output/VTKWriter.cpp
@@ -45,7 +45,9 @@ class CharArrayEmbedder : public ICharArrayEmbedder
   void
   write(std::ostream& os) const final
   {
-    os.write(&(m_char_cast_array[0]), m_char_cast_array.size());
+    if (m_char_cast_array.size() > 0) {
+      os.write(&(m_char_cast_array[0]), m_char_cast_array.size());
+    }
   }
 
   CharArrayEmbedder(Array<InputDataT> array) : m_char_cast_array{array} {}