diff --git a/src/mesh/Connectivity.cpp b/src/mesh/Connectivity.cpp
index 9f57841e16d414e2df6792705d521222250cbba0..fa6fae399c8548002931e0a91692c00b80fca232 100644
--- a/src/mesh/Connectivity.cpp
+++ b/src/mesh/Connectivity.cpp
@@ -109,22 +109,17 @@ void Connectivity<3>::_computeFaceCellConnectivities()
     m_cell_to_face_matrix = cell_to_face_vector;
   }
 
+  FaceValuePerCell<bool> cell_to_face_is_reversed(*this);
   {
-    std::vector<std::vector<unsigned short>> cell_to_face_is_reversed_vector(this->numberOfCells());
-    for (size_t j=0; j<cell_to_face_is_reversed_vector.size(); ++j) {
-      cell_to_face_is_reversed_vector[j].resize(cell_nb_faces[j]);
-    }
-    int l=0;
     for (const auto& face_cells_vector : face_cells_map) {
       const auto& cells_vector = face_cells_vector.second;
       for (unsigned short lj=0; lj<cells_vector.size(); ++lj) {
         const auto& [cell_number, cell_local_face, reversed] = cells_vector[lj];
-        cell_to_face_is_reversed_vector[cell_number][cell_local_face] = reversed;
+        cell_to_face_is_reversed(cell_number, cell_local_face) = reversed;
       }
-      ++l;
     }
 
-    m_cell_to_face_is_reversed_matrix = cell_to_face_is_reversed_vector;
+    m_cell_to_face_is_reversed_matrix = cell_to_face_is_reversed;
   }
 
   {
diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index 81dda065266c646bbd7430707f6425b1e3bb11ac..3a3e44fc8a7b64be5c04590f749617cd42dc810d 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -232,7 +232,7 @@ public:
   ConnectivityMatrix m_cell_to_node_matrix;
 
   ConnectivityMatrix m_cell_to_face_matrix;
-  ConnectivityMatrixShort m_cell_to_face_is_reversed_matrix;
+  FaceValuePerCell<bool> m_cell_to_face_is_reversed_matrix;
 
   ConnectivityMatrix m_face_to_cell_matrix;
   CellValuePerFace<unsigned short> m_face_to_cell_local_face_matrix;
@@ -498,6 +498,9 @@ itemToItemMatrix(const TypeOfItem& item_type_0,
         case TypeOfItem::node: {
           return itemToItemMatrix<TypeOfItem::cell, TypeOfItem::node>();
         }
+        case TypeOfItem::face: {
+          return itemToItemMatrix<TypeOfItem::cell, TypeOfItem::face>();
+        }
         default: {
           std::cerr << __FILE__ << ":" << __LINE__ << ": NIY " << int(item_type_1) << "\n";
           std::exit(1);
diff --git a/src/mesh/ConnectivityMatrix.hpp b/src/mesh/ConnectivityMatrix.hpp
index b888c175f1e4188aae80e7532137cb9ea12b0d56..9c68d144e5897e66df79f3414045e6685bb0470a 100644
--- a/src/mesh/ConnectivityMatrix.hpp
+++ b/src/mesh/ConnectivityMatrix.hpp
@@ -77,7 +77,4 @@ class ConnectivityMatrix
   ~ConnectivityMatrix() = default;
 };
 
-#warning use right type (unsigned short) instead of a clone of ConnectivityMatrix
-using ConnectivityMatrixShort = ConnectivityMatrix;
-
 #endif // CONNECTIVITY_MATRIX_HPP
diff --git a/src/mesh/MeshData.hpp b/src/mesh/MeshData.hpp
index 09278a77fcd2eb9e30bde67e7a202db0181cb1cc..2ad4ecc9a845dfd07d21d54c5efe5d96f4fce100 100644
--- a/src/mesh/MeshData.hpp
+++ b/src/mesh/MeshData.hpp
@@ -134,11 +134,11 @@ class MeshData
             node_id_to_local[cell_nodes(R)] = R;
           }
           const auto& cell_faces = m_mesh.connectivity().m_cell_to_face_matrix.rowConst(j);
-          const auto& cell_faces_is_reversed = m_mesh.connectivity().m_cell_to_face_is_reversed_matrix.rowConst(j);
+          const auto& cell_faces_is_reversed = m_mesh.connectivity().m_cell_to_face_is_reversed_matrix.itemValues(j);
           for (size_t L=0; L<cell_faces.length; ++L) {
             const size_t l = cell_faces(L);
             const auto& face_nodes = m_mesh.connectivity().m_face_to_node_matrix.rowConst(l);
-            if (cell_faces_is_reversed(L)) {
+            if (cell_faces_is_reversed[L]) {
               for (size_t rl = 0; rl<face_nodes.length; ++rl) {
                 m_Cjr(j, node_id_to_local[face_nodes(rl)]) -= Nlr(l,rl);
               }
diff --git a/src/mesh/SubItemValuePerItem.hpp b/src/mesh/SubItemValuePerItem.hpp
index 384e91c7fc92e1f79c9ad51f774332cdabc17768..3f0c9951e5e2daec9e4d6cd67b5f74a9235f0ec0 100644
--- a/src/mesh/SubItemValuePerItem.hpp
+++ b/src/mesh/SubItemValuePerItem.hpp
@@ -174,6 +174,9 @@ class SubItemValuePerItem
 template <typename DataType>
 using NodeValuePerCell = SubItemValuePerItem<DataType, TypeOfItem::node, TypeOfItem::cell>;
 
+template <typename DataType>
+using FaceValuePerCell = SubItemValuePerItem<DataType, TypeOfItem::face, TypeOfItem::cell>;
+
 template <typename DataType>
 using CellValuePerNode = SubItemValuePerItem<DataType, TypeOfItem::cell, TypeOfItem::node>;