diff --git a/src/mesh/Connectivity.cpp b/src/mesh/Connectivity.cpp
index 7f6b97e5234bfe9d94c0e1f22973b9c58f88f6b4..c0bfbc54142e1bf10284449c087bb75e406ba760 100644
--- a/src/mesh/Connectivity.cpp
+++ b/src/mesh/Connectivity.cpp
@@ -98,7 +98,7 @@ void Connectivity<3>::_computeCellFaceAndFaceNodeConnectivities()
   {
     auto& cell_to_face_matrix
         = m_item_to_item_matrix[itemTId(ItemType::cell)][itemTId(ItemType::face)];
-    std::vector<std::vector<FaceId>> cell_to_face_vector(this->numberOfCells());
+    std::vector<std::vector<unsigned int>> cell_to_face_vector(this->numberOfCells());
     for (CellId j=0; j<cell_to_face_vector.size(); ++j) {
       cell_to_face_vector[j].resize(cell_nb_faces[j]);
     }
@@ -111,7 +111,7 @@ void Connectivity<3>::_computeCellFaceAndFaceNodeConnectivities()
       }
       ++l;
     }
-    cell_to_face_matrix = reinterpret_cast<std::vector<std::vector<unsigned int>>&>(cell_to_face_vector);
+    cell_to_face_matrix = cell_to_face_vector;
   }
 
   FaceValuePerCell<bool> cell_face_is_reversed(*this);
@@ -131,15 +131,14 @@ void Connectivity<3>::_computeCellFaceAndFaceNodeConnectivities()
     auto& face_to_node_matrix
         = m_item_to_item_matrix[itemTId(ItemType::face)][itemTId(ItemType::node)];
 
-    std::vector<std::vector<NodeId>> face_to_node_vector(face_cells_map.size());
+    std::vector<std::vector<unsigned int>> face_to_node_vector(face_cells_map.size());
     int l=0;
     for (const auto& face_info : face_cells_map) {
       const Face& face = face_info.first;
       face_to_node_vector[l] = face.nodeIdList();
       ++l;
     }
-#warning remove all reinterpret_cast
-    face_to_node_matrix = reinterpret_cast<std::vector<std::vector<unsigned int>>&>(face_to_node_vector);
+    face_to_node_matrix = face_to_node_vector;
   }
 
   {
@@ -185,7 +184,7 @@ void Connectivity<2>::_computeCellFaceAndFaceNodeConnectivities()
   }
 
   {
-    std::vector<std::vector<NodeId>> face_to_node_vector(face_cells_map.size());
+    std::vector<std::vector<unsigned int>> face_to_node_vector(face_cells_map.size());
     int l=0;
     for (const auto& face_info : face_cells_map) {
       const Face& face = face_info.first;
@@ -194,11 +193,11 @@ void Connectivity<2>::_computeCellFaceAndFaceNodeConnectivities()
     }
     auto& face_to_node_matrix
         = m_item_to_item_matrix[itemTId(ItemType::face)][itemTId(ItemType::node)];
-    face_to_node_matrix = reinterpret_cast<std::vector<std::vector<unsigned int>>&>(face_to_node_vector);
+    face_to_node_matrix = face_to_node_vector;
   }
 
   {
-    std::vector<std::vector<CellId>> face_to_cell_vector(face_cells_map.size());
+    std::vector<std::vector<unsigned int>> face_to_cell_vector(face_cells_map.size());
     int l=0;
     for (const auto& face_cells_vector : face_cells_map) {
       const auto& [face, cell_info_vector] = face_cells_vector;
@@ -209,21 +208,21 @@ void Connectivity<2>::_computeCellFaceAndFaceNodeConnectivities()
     }
     auto& face_to_cell_matrix
         = m_item_to_item_matrix[itemTId(ItemType::face)][itemTId(ItemType::cell)];
-    face_to_cell_matrix = reinterpret_cast<std::vector<std::vector<unsigned int>>&>(face_to_cell_vector);
+    face_to_cell_matrix = face_to_cell_vector;
   }
 }
 
 
 template<size_t Dimension>
 Connectivity<Dimension>::
-Connectivity(const std::vector<std::vector<CellId>>& cell_by_node_vector,
+Connectivity(const std::vector<std::vector<unsigned int>>& cell_by_node_vector,
              const std::vector<CellType>& cell_type_vector)
 {
   Assert(cell_by_node_vector.size() == cell_type_vector.size());
 
   auto& cell_to_node_matrix
       = m_item_to_item_matrix[itemTId(ItemType::cell)][itemTId(ItemType::node)];
-  cell_to_node_matrix = reinterpret_cast<const std::vector<std::vector<unsigned int>>&>(cell_by_node_vector);
+  cell_to_node_matrix = cell_by_node_vector;
 
   Assert(this->numberOfCells()>0);
 
@@ -250,13 +249,13 @@ Connectivity(const std::vector<std::vector<CellId>>& cell_by_node_vector,
 
 
 template Connectivity1D::
-Connectivity(const std::vector<std::vector<CellId>>& cell_by_node_vector,
+Connectivity(const std::vector<std::vector<unsigned int>>& cell_by_node_vector,
              const std::vector<CellType>& cell_type_vector);
 
 template Connectivity2D::
-Connectivity(const std::vector<std::vector<CellId>>& cell_by_node_vector,
+Connectivity(const std::vector<std::vector<unsigned int>>& cell_by_node_vector,
              const std::vector<CellType>& cell_type_vector);
 
 template Connectivity3D::
-Connectivity(const std::vector<std::vector<CellId>>& cell_by_node_vector,
+Connectivity(const std::vector<std::vector<unsigned int>>& cell_by_node_vector,
              const std::vector<CellType>& cell_type_vector);
diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index 6d437d15c217a99814d25ca558c09926963c4c94..c2784d337f7c2db3698a9f05357b88678ad18218 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -53,14 +53,14 @@ class ConnectivityFace<2>
   {
     size_t operator()(const ConnectivityFace& f) const {
       size_t hash = 0;
-      hash ^= std::hash<NodeId::base_type>()(f.m_node0_id);
-      hash ^= std::hash<NodeId::base_type>()(f.m_node1_id) >> 1;
+      hash ^= std::hash<unsigned int>()(f.m_node0_id);
+      hash ^= std::hash<unsigned int>()(f.m_node1_id) >> 1;
       return hash;
     }
   };
 
-  NodeId m_node0_id;
-  NodeId m_node1_id;
+  unsigned int m_node0_id;
+  unsigned int m_node1_id;
 
   friend std::ostream& operator<<(std::ostream& os, const ConnectivityFace& f)
   {
@@ -90,7 +90,7 @@ class ConnectivityFace<2>
   ConnectivityFace& operator=(ConnectivityFace&&) = default;
 
   KOKKOS_INLINE_FUNCTION
-  ConnectivityFace(const std::vector<NodeId>& given_node_id_list)
+  ConnectivityFace(const std::vector<unsigned int>& given_node_id_list)
   {
     Assert(given_node_id_list.size()==2);
 #warning rework this dirty constructor
@@ -120,14 +120,14 @@ class ConnectivityFace<3>
     size_t operator()(const ConnectivityFace& f) const {
       size_t hash = 0;
       for (size_t i=0; i<f.m_node_id_list.size(); ++i) {
-        hash ^= std::hash<NodeId::base_type>()(f.m_node_id_list[i]) >> i;
+        hash ^= std::hash<unsigned int>()(f.m_node_id_list[i]) >> i;
       }
       return hash;
     }
   };
 
   bool m_reversed;
-  std::vector<NodeId> m_node_id_list;
+  std::vector<NodeId::base_type> m_node_id_list;
 
   friend std::ostream& operator<<(std::ostream& os, const ConnectivityFace& f)
   {
@@ -144,18 +144,18 @@ class ConnectivityFace<3>
   }
 
   KOKKOS_INLINE_FUNCTION
-  const std::vector<NodeId>& nodeIdList() const
+  const std::vector<unsigned int>& nodeIdList() const
   {
     return m_node_id_list;
   }
 
   KOKKOS_INLINE_FUNCTION
-  std::vector<NodeId> _sort(const std::vector<NodeId>& node_list)
+  std::vector<unsigned int> _sort(const std::vector<unsigned int>& node_list)
   {
     const auto min_id = std::min_element(node_list.begin(), node_list.end());
     const int shift = std::distance(node_list.begin(), min_id);
 
-    std::vector<NodeId> rotated_node_list(node_list.size());
+    std::vector<unsigned int> rotated_node_list(node_list.size());
     if (node_list[(shift+1)%node_list.size()] > node_list[(shift+node_list.size()-1)%node_list.size()]) {
       for (size_t i=0; i<node_list.size(); ++i) {
         rotated_node_list[i] = node_list[(shift+node_list.size()-i)%node_list.size()];
@@ -171,7 +171,7 @@ class ConnectivityFace<3>
   }
 
   KOKKOS_INLINE_FUNCTION
-  ConnectivityFace(const std::vector<NodeId>& given_node_id_list)
+  ConnectivityFace(const std::vector<unsigned int>& given_node_id_list)
       : m_reversed(false),
         m_node_id_list(_sort(given_node_id_list))
   {
@@ -477,7 +477,7 @@ class Connectivity final
     return m_inv_cell_nb_nodes;
   }
 
-  FaceId getFaceNumber(const std::vector<NodeId>& face_nodes) const
+  unsigned int getFaceNumber(const std::vector<unsigned int>& face_nodes) const
   {
     const Face face(face_nodes);
     auto i_face = m_face_number_map.find(face);
@@ -491,7 +491,7 @@ class Connectivity final
 
   Connectivity(const Connectivity&) = delete;
 
-  Connectivity(const std::vector<std::vector<CellId>>& cell_by_node_vector,
+  Connectivity(const std::vector<std::vector<unsigned int>>& cell_by_node_vector,
                const std::vector<CellType>& cell_type_vector);
 
   ~Connectivity()
diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp
index 92e7f2086f251adc302a1b688b6d92f9deeeb51c..ea003eb9b6c41d7f049c648ab62b01a01b0add26 100644
--- a/src/mesh/GmshReader.cpp
+++ b/src/mesh/GmshReader.cpp
@@ -791,7 +791,7 @@ GmshReader::__proceedData()
 
     std::vector<CellType> cell_type_vector(nb_cells);
 
-    std::vector<std::vector<CellId>> cell_by_node_vector(nb_cells);
+    std::vector<std::vector<unsigned int>> cell_by_node_vector(nb_cells);
     const size_t nb_tetrahedra = __tetrahedra.size();
     for (size_t j=0; j<nb_tetrahedra; ++j) {
       cell_by_node_vector[j].resize(4);
@@ -853,7 +853,7 @@ GmshReader::__proceedData()
 
     std::vector<CellType> cell_type_vector(nb_cells);
 
-    std::vector<std::vector<CellId>> cell_by_node_vector(nb_cells);
+    std::vector<std::vector<unsigned int>> cell_by_node_vector(nb_cells);
     const size_t nb_triangles = __triangles.size();
     for (size_t j=0; j<nb_triangles; ++j) {
       cell_by_node_vector[j].resize(3);
@@ -924,7 +924,7 @@ GmshReader::__proceedData()
 
     std::vector<CellType> cell_type_vector(nb_cells);
 
-    std::vector<std::vector<CellId>> cell_by_node_vector(nb_cells);
+    std::vector<std::vector<unsigned int>> cell_by_node_vector(nb_cells);
     for (size_t j=0; j<nb_cells; ++j) {
       cell_by_node_vector[j].resize(2);
       for (int r=0; r<2; ++r) {