diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index 4411e728da1b376a6414d1b9f03637477e17f0ff..dc2e0e890646b6e2a57a2d0e8d27eb1bbb4e1f4a 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -80,9 +80,9 @@ class Connectivity final : public IConnectivity
   WeakFaceValuePerCell<const bool> m_cell_face_is_reversed;
   WeakEdgeValuePerFace<const bool> m_face_edge_is_reversed;
 
-  WeakNodeValuePerCell<const unsigned short> m_cell_local_numbers_in_their_nodes;
   WeakFaceValuePerCell<const unsigned short> m_cell_local_numbers_in_their_faces;
   WeakEdgeValuePerCell<const unsigned short> m_cell_local_numbers_in_their_edges;
+  WeakNodeValuePerCell<const unsigned short> m_cell_local_numbers_in_their_nodes;
 
   WeakCellValuePerFace<const unsigned short> m_face_local_numbers_in_their_cells;
   WeakEdgeValuePerFace<const unsigned short> m_face_local_numbers_in_their_edges;
diff --git a/src/mesh/ConnectivityComputer.cpp b/src/mesh/ConnectivityComputer.cpp
index e08a638d750bb70a3e41709a4c70c3539199e048..3c4d1714fb5e7e091acb7c612c21ff025c930edf 100644
--- a/src/mesh/ConnectivityComputer.cpp
+++ b/src/mesh/ConnectivityComputer.cpp
@@ -45,7 +45,7 @@ ConnectivityMatrix
 ConnectivityComputer::_computeInverse(const ConnectivityMatrix& item_to_child_matrix) const
 {
   std::map<unsigned int, std::vector<unsigned int>> child_to_item_vector_map;
-  const size_t& number_of_items = item_to_child_matrix.numRows();
+  const size_t& number_of_items = item_to_child_matrix.numberOfRows();
 
   for (unsigned int j = 0; j < number_of_items; ++j) {
     const auto& item_to_child = item_to_child_matrix[j];
diff --git a/src/mesh/ConnectivityMatrix.hpp b/src/mesh/ConnectivityMatrix.hpp
index 11df5978bbeb3eced43fa57fed878bdf60327916..e51ba189221faeef80fb7966310d9e5c82527d15 100644
--- a/src/mesh/ConnectivityMatrix.hpp
+++ b/src/mesh/ConnectivityMatrix.hpp
@@ -6,9 +6,10 @@
 
 class ConnectivityMatrix
 {
- private:
+ public:
   using IndexType = uint32_t;
 
+ private:
   Array<const IndexType> m_row_map;
   Array<const IndexType> m_column_indices;
 
@@ -22,7 +23,7 @@ class ConnectivityMatrix
   }
 
   const Array<const IndexType>&
-  entries() const
+  values() const
   {
     return m_column_indices;
   }
@@ -35,14 +36,14 @@ class ConnectivityMatrix
 
   PUGS_INLINE
   size_t
-  numEntries() const
+  numberOfValues() const
   {
     return m_column_indices.size();
   }
 
   PUGS_INLINE
   size_t
-  numRows() const
+  numberOfRows() const
   {
     return m_row_map.size() - 1;
   }
diff --git a/src/mesh/ItemId.hpp b/src/mesh/ItemId.hpp
index e62fe7bae6b75f37285257d4211e7ad70d8b6a26..4d7d6714342c62d4c0d3fc35dbb5ae769aafdb8f 100644
--- a/src/mesh/ItemId.hpp
+++ b/src/mesh/ItemId.hpp
@@ -9,7 +9,7 @@ template <ItemType item_type>
 class ItemIdT
 {
  public:
-  using base_type = unsigned int;
+  using base_type = uint32_t;
 
  private:
   base_type m_id;
diff --git a/src/mesh/ItemToItemMatrix.hpp b/src/mesh/ItemToItemMatrix.hpp
index acee8ecd8e85f081ca0e640e2f408a541ac9157a..8ee4e9d74757e904cc5b5581c9421145b4eeaac3 100644
--- a/src/mesh/ItemToItemMatrix.hpp
+++ b/src/mesh/ItemToItemMatrix.hpp
@@ -15,12 +15,13 @@ class ItemToItemMatrix
   using SourceItemId = ItemIdT<SourceItemType>;
   using TargetItemId = ItemIdT<TargetItemType>;
 
-  class SubItemList
+  class UnsafeSubItemArray
   {
    private:
-    const ConnectivityMatrix& m_connectivity_matrix;
-    SourceItemId m_source_item_id;
-    size_t m_size;
+    using IndexType = typename ConnectivityMatrix::IndexType;
+
+    const IndexType* const m_values;
+    const size_t m_size;
 
    public:
     PUGS_INLINE
@@ -34,31 +35,23 @@ class ItemToItemMatrix
     operator[](size_t j) const
     {
       Assert(j < m_size);
-      return m_connectivity_matrix.entries()[m_connectivity_matrix.rowsMap()[m_source_item_id] + j];
+      return m_values[j];
     }
 
     PUGS_INLINE
-    SubItemList(const ConnectivityMatrix& connectivity_matrix, SourceItemId source_item_id)
-      : m_connectivity_matrix{connectivity_matrix},
-        m_source_item_id(source_item_id),
-        m_size(m_connectivity_matrix.rowsMap()[m_source_item_id + 1] -
-               m_connectivity_matrix.rowsMap()[m_source_item_id])
+    UnsafeSubItemArray(const ConnectivityMatrix& connectivity_matrix, SourceItemId source_item_id)
+      : m_values{&(connectivity_matrix.values()[connectivity_matrix.rowsMap()[source_item_id]])},
+        m_size(connectivity_matrix.rowsMap()[source_item_id + 1] - connectivity_matrix.rowsMap()[source_item_id])
     {}
 
     PUGS_INLINE
-    SubItemList& operator=(const SubItemList&) = default;
-
-    PUGS_INLINE
-    SubItemList& operator=(SubItemList&&) = default;
-
-    PUGS_INLINE
-    SubItemList(const SubItemList&) = default;
+    UnsafeSubItemArray& operator=(const UnsafeSubItemArray&) = delete;
 
     PUGS_INLINE
-    SubItemList(SubItemList&&) = default;
+    UnsafeSubItemArray(const UnsafeSubItemArray&) = delete;
 
     PUGS_INLINE
-    ~SubItemList() = default;
+    ~UnsafeSubItemArray() = default;
   };
 
  private:
@@ -66,17 +59,17 @@ class ItemToItemMatrix
 
  public:
   auto
-  entries() const
+  values() const
   {
-    return m_connectivity_matrix.entries();
+    return m_connectivity_matrix.values();
   }
 
   PUGS_INLINE
   auto
   operator[](const SourceItemId& source_id) const
   {
-    Assert(source_id < m_connectivity_matrix.numRows());
-    return SubItemList(m_connectivity_matrix, source_id);
+    Assert(source_id < m_connectivity_matrix.numberOfRows());
+    return UnsafeSubItemArray(m_connectivity_matrix, source_id);
   }
 
   template <typename IndexType>
diff --git a/src/mesh/SubItemArrayPerItem.hpp b/src/mesh/SubItemArrayPerItem.hpp
index cb88e85d76f758262316b547140e85e000b669ca..96a8edb56a1a2890e76128ab652ab7d0100b9201 100644
--- a/src/mesh/SubItemArrayPerItem.hpp
+++ b/src/mesh/SubItemArrayPerItem.hpp
@@ -200,7 +200,7 @@ class SubItemArrayPerItem
     ConnectivityMatrix connectivity_matrix = connectivity._getMatrix(item_type, sub_item_type);
 
     m_row_map = connectivity_matrix.rowsMap();
-    m_values  = Table<std::remove_const_t<DataType>>(connectivity_matrix.numEntries(), size_of_arrays);
+    m_values  = Table<std::remove_const_t<DataType>>(connectivity_matrix.numberOfValues(), size_of_arrays);
   }
 
   ~SubItemArrayPerItem() = default;
diff --git a/src/mesh/SubItemValuePerItem.hpp b/src/mesh/SubItemValuePerItem.hpp
index 2b6ad94604551cabf495e70e758b7eadf00833c6..8201176563de657a8e5af8245c38c0d5572a7531 100644
--- a/src/mesh/SubItemValuePerItem.hpp
+++ b/src/mesh/SubItemValuePerItem.hpp
@@ -195,7 +195,7 @@ class SubItemValuePerItem
     ConnectivityMatrix connectivity_matrix = connectivity._getMatrix(item_type, sub_item_type);
 
     m_row_map = connectivity_matrix.rowsMap();
-    m_values  = Array<std::remove_const_t<DataType>>(connectivity_matrix.numEntries());
+    m_values  = Array<std::remove_const_t<DataType>>(connectivity_matrix.numberOfValues());
   }
 
   ~SubItemValuePerItem() = default;
diff --git a/src/output/VTKWriter.cpp b/src/output/VTKWriter.cpp
index 5e8b84f956d31e76635f51fa78dcd9df7ecef233..98173a1402b588ceb9c9584bf5dbe84c136fc8e3 100644
--- a/src/output/VTKWriter.cpp
+++ b/src/output/VTKWriter.cpp
@@ -456,7 +456,7 @@ VTKWriter::_write(const std::shared_ptr<const MeshType>& mesh,
     {
       const auto& cell_to_node_matrix = mesh->connectivity().cellToNodeMatrix();
 
-      _write_array(fout, "connectivity", cell_to_node_matrix.entries(), serialize_data_list);
+      _write_array(fout, "connectivity", cell_to_node_matrix.values(), serialize_data_list);
     }
 
     {