diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index 4c19ae6b53a97523f977fdb56a5d310c84227b1d..27d5e248970fc46d63267f35a08fd4b41165dcde 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -47,11 +47,11 @@ class ConnectivityDescriptor
 
 #warning should be set in 2d
   std::vector<std::vector<unsigned int>> cell_to_face_vector;
-  std::vector<std::vector<bool>> cell_face_is_reversed_vector;
-
   // std::vector<std::vector<unsigned int>> face_to_cell_vector;
   std::vector<std::vector<unsigned int>> face_to_node_vector;
 
+  std::vector<Array<bool>> cell_face_is_reversed_vector;
+
   std::vector<CellType> cell_type_vector;
 
   std::vector<int> cell_number_vector;
diff --git a/src/mesh/ConnectivityDispatcher.cpp b/src/mesh/ConnectivityDispatcher.cpp
index f1744112301e55d1a183cad5aaea4804c79b0348..7ac1dbb398a384f0546efb585a0a544c82a2c6c5 100644
--- a/src/mesh/ConnectivityDispatcher.cpp
+++ b/src/mesh/ConnectivityDispatcher.cpp
@@ -154,28 +154,27 @@ template <int Dimension>
 template<typename DataType, typename ItemOfItem, typename ConnectivityPtr>
 void ConnectivityDispatcher<Dimension>::
 _gatherFrom(const SubItemValuePerItem<DataType, ItemOfItem, ConnectivityPtr>& data_to_gather,
-            std::vector<std::vector<std::remove_const_t<DataType>>>& gathered_vector)
+            std::vector<Array<std::remove_const_t<DataType>>>& gathered_vector)
 {
   using MutableDataType = std::remove_const_t<DataType>;
 
   constexpr ItemType item_type = ItemOfItem::item_type;
   using ItemId = ItemIdT<item_type>;
 
+  const auto& item_list_to_send_by_proc = this->_dispatchedInfo<item_type>().m_list_to_send_by_proc;
+
   std::vector<Array<MutableDataType>> data_to_send_by_proc(parallel::size());
-  {
-    const auto& item_list_to_send_by_proc = this->_dispatchedInfo<item_type>().m_list_to_send_by_proc;
 
-    for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
-      std::vector<MutableDataType> data_by_item_vector;
-      for (size_t j=0; j<item_list_to_send_by_proc[i_rank].size(); ++j) {
-        const ItemId& item_id = item_list_to_send_by_proc[i_rank][j];
-        const auto& item_data = data_to_gather.itemValues(item_id);
-        for (size_t l=0; l<item_data.size(); ++l) {
-          data_by_item_vector.push_back(item_data[l]);
-        }
+  for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
+    std::vector<MutableDataType> data_by_item_vector;
+    for (size_t j=0; j<item_list_to_send_by_proc[i_rank].size(); ++j) {
+      const ItemId& item_id = item_list_to_send_by_proc[i_rank][j];
+      const auto& item_data = data_to_gather.itemValues(item_id);
+      for (size_t l=0; l<item_data.size(); ++l) {
+        data_by_item_vector.push_back(item_data[l]);
       }
-      data_to_send_by_proc[i_rank] = convert_to_array(data_by_item_vector);
     }
+    data_to_send_by_proc[i_rank] = convert_to_array(data_by_item_vector);
   }
 
   const auto& number_of_item_per_item_by_proc =
@@ -195,9 +194,9 @@ _gatherFrom(const SubItemValuePerItem<DataType, ItemOfItem, ConnectivityPtr>& da
   for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
     int l=0;
     for (size_t i=0; i<item_list_to_recv_size_by_proc[i_rank]; ++i) {
-      std::vector<MutableDataType> data_vector;
-      for (int k=0; k<number_of_item_per_item_by_proc[i_rank][i]; ++k) {
-        data_vector.push_back(recv_data_to_gather_by_proc[i_rank][l++]);
+      Array<MutableDataType> data_vector(number_of_item_per_item_by_proc[i_rank][i]);
+      for (size_t k=0; k<data_vector.size(); ++k) {
+        data_vector[k] = recv_data_to_gather_by_proc[i_rank][l++];
       }
       gathered_vector.emplace_back(data_vector);
     }
@@ -389,6 +388,8 @@ ConnectivityDispatcher<Dimension>::_dispatchFaces()
     {
       const auto& cell_list_to_recv_size_by_proc =
           this->_dispatchedInfo<ItemType::cell>().m_list_to_recv_size_by_proc;
+      const auto& recv_number_of_face_per_cell_by_proc =
+          this->_dispatchedInfo<FaceOfCell>().m_recv_number_of_item_per_item_by_proc;
 
       for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
         int l=0;
diff --git a/src/mesh/ConnectivityDispatcher.hpp b/src/mesh/ConnectivityDispatcher.hpp
index e8d3a159781d2a1667f5bbeb55a17de816995e33..b4becdf236266b5eb9887d8f6af9dad0768c4762 100644
--- a/src/mesh/ConnectivityDispatcher.hpp
+++ b/src/mesh/ConnectivityDispatcher.hpp
@@ -176,7 +176,7 @@ class ConnectivityDispatcher
 
   template<typename DataType, typename ItemOfItem, typename ConnectivityPtr>
   void _gatherFrom(const SubItemValuePerItem<DataType, ItemOfItem, ConnectivityPtr>& data_to_gather,
-                   std::vector<std::vector<std::remove_const_t<DataType>>>& gathered_vector);
+                   std::vector<Array<std::remove_const_t<DataType>>>& gathered_vector);
 
   template <typename SubItemOfItemT>
   std::vector<Array<const int>>
diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp
index fde501ac1fea1516e6bcb1577be60ea0c1d1efa3..2ecaa06967b5ab767ab7e1a6a3e96e3742f35277 100644
--- a/src/mesh/GmshReader.cpp
+++ b/src/mesh/GmshReader.cpp
@@ -947,7 +947,7 @@ GmshReader::__computeCellFaceAndFaceNodeConnectivities(ConnectivityDescriptor& d
   {
     descriptor.cell_face_is_reversed_vector.resize(descriptor.cell_by_node_vector.size());
     for (CellId j=0; j<descriptor.cell_face_is_reversed_vector.size(); ++j) {
-      descriptor.cell_face_is_reversed_vector[j].resize(cell_nb_faces[j]);
+      descriptor.cell_face_is_reversed_vector[j] = Array<bool>(cell_nb_faces[j]);
     }
     for (const auto& face_cells_vector : face_cells_map) {
       const auto& cells_vector = face_cells_vector.second;