diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index 84ed64c4081051158dd4a479772d0bae3c6e23f4..0ba7c101a87969c8486d1f713c2f4e114bd26a34 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -99,15 +99,6 @@ class ConnectivityFace<2>
   KOKKOS_INLINE_FUNCTION
   ConnectivityFace(ConnectivityFace&&) = default;
 
-  // KOKKOS_INLINE_FUNCTION
-  // ConnectivityFace(unsigned int node0_id,
-  //                  unsigned int node1_id)
-  //     : m_node0_id(node0_id),
-  //       m_node1_id(node1_id)
-  // {
-  //   ;
-  // }
-
   KOKKOS_INLINE_FUNCTION
   ~ConnectivityFace() = default;
 };
@@ -253,13 +244,6 @@ public:
 private:
   ConnectivityComputer m_connectivity_computer;
 
-  // Stores numbering of nodes of each cell.
-  // gives an id to each node of each cell. (j,r) -> id
-  //
-  // This is different from m_cell_to_node_matrix which return the global id of
-  // a local node in a cell
-  ConnectivityMatrix m_node_id_per_cell_matrix;
-
   std::vector<RefFaceList> m_ref_face_list;
   std::vector<RefNodeList> m_ref_node_list;
 
@@ -357,20 +341,6 @@ private:
       m_inv_cell_nb_nodes = inv_cell_nb_nodes;
     }
 
-    {
-      std::vector<std::vector<unsigned int>> node_id_per_cell_vector(this->numberOfCells());
-      unsigned int id=0;
-      for (unsigned int j=0; j<this->numberOfCells(); ++j) {
-        const auto& cell_to_node = m_cell_to_node_matrix.rowConst(j);
-        auto& node_id_per_cell = node_id_per_cell_vector[j];
-        node_id_per_cell.resize(cell_to_node.length);
-        for (size_t r=0; r<cell_to_node.length; ++r) {
-          node_id_per_cell[r] = id++;
-        }
-      }
-      m_node_id_per_cell_matrix = node_id_per_cell_vector;
-    }
-
     m_connectivity_computer.computeInverseConnectivityMatrix(m_cell_to_node_matrix,
                                                              m_node_to_cell_matrix);
 
@@ -397,7 +367,7 @@ inline const ConnectivityMatrix&
 Connectivity<3>::subItemIdPerItemMatrix<TypeOfItem::node,
                                         TypeOfItem::cell>() const
 {
-  return m_node_id_per_cell_matrix;
+  return m_cell_to_node_matrix;
 }
 
 using Connectivity2D = Connectivity<2>;
@@ -408,7 +378,7 @@ inline const ConnectivityMatrix&
 Connectivity<2>::subItemIdPerItemMatrix<TypeOfItem::node,
                                         TypeOfItem::cell>() const
 {
-  return m_node_id_per_cell_matrix;
+  return m_cell_to_node_matrix;
 }
 
 using Connectivity1D = Connectivity<1>;
@@ -419,7 +389,7 @@ inline const ConnectivityMatrix&
 Connectivity<1>::subItemIdPerItemMatrix<TypeOfItem::node,
                                         TypeOfItem::cell>() const
 {
-  return m_node_id_per_cell_matrix;
+  return m_cell_to_node_matrix;
 }
 
 #endif // CONNECTIVITY_HPP
diff --git a/src/mesh/ConnectivityMatrix.hpp b/src/mesh/ConnectivityMatrix.hpp
index 0e7804432902f262e8765c9ffa102e05addb2086..b888c175f1e4188aae80e7532137cb9ea12b0d56 100644
--- a/src/mesh/ConnectivityMatrix.hpp
+++ b/src/mesh/ConnectivityMatrix.hpp
@@ -11,6 +11,18 @@ class ConnectivityMatrix
   HostMatrix m_host_matrix;
 
  public:
+  typedef HostMatrix::row_map_type HostRowType;
+
+  const auto& entries() const
+  {
+    return m_host_matrix.entries;
+  }
+
+  const auto& rowsMap() const
+  {
+    return m_host_matrix.row_map;
+  }
+
   KOKKOS_INLINE_FUNCTION
   const auto numEntries() const
   {
@@ -42,6 +54,13 @@ class ConnectivityMatrix
     ;
   }
 
+  KOKKOS_INLINE_FUNCTION
+  ConnectivityMatrix(const ConnectivityMatrix& connecticity_matrix,std::vector<std::vector<unsigned int>>& initializer)
+      : m_host_matrix(Kokkos::create_staticcrsgraph<HostMatrix>("connecticity_matrix", initializer))
+  {
+    ;
+  }
+
   [[deprecated("Must only define connectivities so that only unsigned int should be treated")]]
   ConnectivityMatrix(const std::vector<std::vector<unsigned short>>& initializer)
   : m_host_matrix(Kokkos::create_staticcrsgraph<HostMatrix>("connecticity_matrix", initializer))
diff --git a/src/scheme/SubItemValuePerItem.hpp b/src/scheme/SubItemValuePerItem.hpp
index 09dde640fc95d43257176cccca13544647e654a5..d2dd8596d62c9e8304ef2a89278acea63569fd2f 100644
--- a/src/scheme/SubItemValuePerItem.hpp
+++ b/src/scheme/SubItemValuePerItem.hpp
@@ -15,9 +15,7 @@ class SubItemValuePerItem
 {
 #warning should eventually filter const from DataType
  private:
-  [[deprecated ("must use a specific class for subitem per item numbering")]]
-  ConnectivityMatrix m_subitem_id_per_item_matrix;
-
+  ConnectivityMatrix::HostRowType m_host_row_map;
   Kokkos::View<DataType*> m_values;
 
  public:
@@ -105,13 +103,13 @@ class SubItemValuePerItem
   KOKKOS_FORCEINLINE_FUNCTION
   DataType& operator()(const size_t& j, const size_t& r)
   {
-    return m_values[m_subitem_id_per_item_matrix.rowMap(j)+r];
+    return m_values[m_host_row_map(j)+r];
   }
 
   KOKKOS_FORCEINLINE_FUNCTION
   const DataType& operator()(const size_t& j, const size_t& r) const
   {
-    return m_values[m_subitem_id_per_item_matrix.rowMap(j)+r];
+    return m_values[m_host_row_map(j)+r];
   }
 
   KOKKOS_INLINE_FUNCTION
@@ -135,28 +133,29 @@ class SubItemValuePerItem
   KOKKOS_INLINE_FUNCTION
   size_t numberOfItems() const
   {
-    return m_subitem_id_per_item_matrix.numRows();
+    Assert(m_host_row_map.extent(0) != 0>0);
+    return m_host_row_map.extent(0);
   }
 
   KOKKOS_INLINE_FUNCTION
   size_t numberOfSubValues(const size_t& i_cell) const
   {
-    return m_subitem_id_per_item_matrix.rowMap(i_cell+1)-m_subitem_id_per_item_matrix.rowMap(i_cell);
+    return m_host_row_map(i_cell+1)-m_host_row_map(i_cell);
   }
 
   KOKKOS_INLINE_FUNCTION
   SubView itemValues(const size_t& i_cell)
   {
-    const auto& cell_begin = m_subitem_id_per_item_matrix.rowMap(i_cell);
-    const auto& cell_end = m_subitem_id_per_item_matrix.rowMap(i_cell+1);
+    const auto& cell_begin = m_host_row_map(i_cell);
+    const auto& cell_end = m_host_row_map(i_cell+1);
     return SubView(m_values, cell_begin, cell_end);
   }
 
   KOKKOS_INLINE_FUNCTION
   SubViewConst itemValues(const size_t& i_cell) const
   {
-    const auto& cell_begin = m_subitem_id_per_item_matrix.rowMap(i_cell);
-    const auto& cell_end = m_subitem_id_per_item_matrix.rowMap(i_cell+1);
+    const auto& cell_begin = m_host_row_map(i_cell);
+    const auto& cell_end = m_host_row_map(i_cell+1);
     return SubViewConst(m_values, cell_begin, cell_end);
   }
 
@@ -165,8 +164,10 @@ class SubItemValuePerItem
   template <typename ConnectivityType>
   SubItemValuePerItem(const ConnectivityType& connectivity)
   {
-    m_subitem_id_per_item_matrix = connectivity.template subItemIdPerItemMatrix<SubItemType,ItemType>();
-    m_values = Kokkos::View<DataType*>("values", m_subitem_id_per_item_matrix.numEntries());
+    ConnectivityMatrix connectivity_matrix
+        = connectivity.template subItemIdPerItemMatrix<SubItemType,ItemType>();
+    m_host_row_map = connectivity_matrix.rowsMap();
+    m_values = Kokkos::View<DataType*>("values", connectivity_matrix.numEntries());
   }
 
   ~SubItemValuePerItem() = default;