diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index b2c7bfec713c1f1cbbbfe85f6ce2fbe35584917f..fea77ee29dd63e573d2e9e5e716d2087daf58a7a 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -407,12 +407,6 @@ class Connectivity final
     return _lazzyBuildItemNumberInTheirChild(m_node_local_numbers_in_their_faces);
   }
 
-  [[deprecated("Use connectivity descriptor")]]
-  void addRefFaceList(const RefFaceList& ref_face_list)
-  {
-    m_ref_face_list.push_back(ref_face_list);
-  }
-
   size_t numberOfRefFaceList() const
   {
     return m_ref_face_list.size();
diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp
index bc7c9cdb37c5d5c464c15a2e868721c8d369e3b9..0ff0f36ad3594c26567314c305e3f3b84f28ee0b 100644
--- a/src/mesh/GmshReader.cpp
+++ b/src/mesh/GmshReader.cpp
@@ -2099,21 +2099,14 @@ GmshReader::__proceedData()
               descriptor.node_owner_vector.end(),
               parallel::rank());
 
-    std::shared_ptr p_connectivity = std::make_shared<Connectivity3D>(descriptor);
-    Connectivity3D& connectivity = *p_connectivity;
     const auto& node_number_vector = descriptor.node_number_vector;
 
     using Face = ConnectivityFace<3>;
     const std::unordered_map<Face, FaceId, typename Face::Hash> face_to_id_map
         = [&]  {
             std::unordered_map<Face, FaceId, typename Face::Hash> face_to_id_map;
-            const auto& face_node_list = connectivity.faceToNodeMatrix();
-            for (FaceId l=0; l<connectivity.numberOfFaces(); ++l) {
-              const auto& node_list = face_node_list[l];
-              std::vector<unsigned int> node_vector(node_list.size());
-              for (size_t r=0; r<node_list.size(); ++r) {
-                node_vector[r] = node_list[r];
-              }
+            for (FaceId l=0; l<descriptor.face_to_node_vector.size(); ++l) {
+              const auto& node_vector = descriptor.face_to_node_vector[l];
               face_to_id_map[Face(node_vector, node_number_vector)] = l;
             }
             return face_to_id_map;
@@ -2199,15 +2192,19 @@ GmshReader::__proceedData()
         }
       }
     }
+
     for (const auto& ref_face_list : ref_faces_map) {
       Array<FaceId> face_list(ref_face_list.second.size());
       for (size_t j=0; j<ref_face_list.second.size(); ++j) {
         face_list[j]=ref_face_list.second[j];
       }
       const PhysicalRefId& physical_ref_id = m_physical_ref_map.at(ref_face_list.first);
-      connectivity.addRefFaceList(RefFaceList(physical_ref_id.refId(), face_list));
+      descriptor.addRefFaceList(RefFaceList(physical_ref_id.refId(), face_list));
     }
 
+    std::shared_ptr p_connectivity = std::make_shared<Connectivity3D>(descriptor);
+    Connectivity3D& connectivity = *p_connectivity;
+
     using MeshType = Mesh<Connectivity3D>;
     using Rd = TinyVector<3, double>;
 
@@ -2267,18 +2264,14 @@ GmshReader::__proceedData()
               descriptor.node_owner_vector.end(),
               parallel::rank());
 
-    std::shared_ptr p_connectivity = std::make_shared<Connectivity2D>(descriptor);
-    Connectivity2D& connectivity = *p_connectivity;
-
     using Face = ConnectivityFace<2>;
     const auto& node_number_vector = descriptor.node_number_vector;
     const std::unordered_map<Face, FaceId, typename Face::Hash> face_to_id_map
         = [&]  {
             std::unordered_map<Face, FaceId, typename Face::Hash> face_to_id_map;
-            const auto& face_node_list = connectivity.faceToNodeMatrix();
-            for (FaceId l=0; l<connectivity.numberOfFaces(); ++l) {
-              const auto& node_list = face_node_list[l];
-              face_to_id_map[Face({node_list[0], node_list[1]}, node_number_vector)] = l;
+            for (FaceId l=0; l<descriptor.face_to_node_vector.size(); ++l) {
+              const auto& node_vector = descriptor.face_to_node_vector[l];
+              face_to_id_map[Face(node_vector, node_number_vector)] = l;
             }
             return face_to_id_map;
           } ();
@@ -2333,9 +2326,12 @@ GmshReader::__proceedData()
         face_list[j]=ref_face_list.second[j];
       }
       const PhysicalRefId& physical_ref_id = m_physical_ref_map.at(ref_face_list.first);
-      connectivity.addRefFaceList(RefFaceList(physical_ref_id.refId(), face_list));
+      descriptor.addRefFaceList(RefFaceList(physical_ref_id.refId(), face_list));
     }
 
+    std::shared_ptr p_connectivity = std::make_shared<Connectivity2D>(descriptor);
+    Connectivity2D& connectivity = *p_connectivity;
+
     std::map<unsigned int, std::vector<unsigned int>> ref_points_map;
     for (unsigned int r=0; r<__points.size(); ++r) {
       const unsigned int point_number = __points[r];