diff --git a/experimental/Connectivity1D.hpp b/experimental/Connectivity1D.hpp
index ddfd4d7aa620e2f58e52fce37d0aad9a07697ccc..952b7d9a2f6b7e3540eb7fb8635e71fd6d51a10d 100644
--- a/experimental/Connectivity1D.hpp
+++ b/experimental/Connectivity1D.hpp
@@ -10,13 +10,21 @@ public:
   static constexpr size_t dimension = 1;
 
 private:
-  const size_t m_number_of_cells;
-  const size_t m_number_of_nodes;
+  const size_t  m_number_of_cells;
+  const size_t& m_number_of_faces;
+  const size_t  m_number_of_nodes;
 
   Kokkos::View<unsigned int*[2]> m_cell_nodes;
+  const Kokkos::View<unsigned int*[2]>& m_cell_faces;
+
   Kokkos::View<unsigned short*> m_node_nb_cells;
+  const Kokkos::View<unsigned short*>& m_face_nb_cells;
+
   Kokkos::View<unsigned int*[2]> m_node_cells;
+  const Kokkos::View<unsigned int*[2]>& m_face_cells;
+
   Kokkos::View<unsigned short*[2]> m_node_cell_local_node;
+  const Kokkos::View<unsigned short*[2]>& m_face_cell_local_face;
 
 public:
   const size_t& numberOfNodes() const
@@ -24,6 +32,11 @@ public:
     return m_number_of_nodes;
   }
 
+  const size_t& numberOfFaces() const
+  {
+    return m_number_of_faces;
+  }
+
   const size_t& numberOfCells() const
   {
     return m_number_of_cells;
@@ -34,30 +47,55 @@ public:
     return m_cell_nodes;
   }
 
+  const Kokkos::View<const unsigned int*[2]> cellFaces() const
+  {
+    return m_cell_faces;
+  }
+
   const Kokkos::View<const unsigned short*> nodeNbCells() const
   {
     return m_node_nb_cells;
   }
 
+  const Kokkos::View<const unsigned short*> faceNbCells() const
+  {
+    return m_face_nb_cells;
+  }
+
   const Kokkos::View<const unsigned int*[2]> nodeCells() const
   {
     return m_node_cells;
   }
 
+  const Kokkos::View<const unsigned int*[2]> faceCells() const
+  {
+    return m_face_cells;
+  }
+
   const Kokkos::View<const unsigned short*[2]> nodeCellLocalNode() const
   {
     return m_node_cell_local_node;
   }
 
+  const Kokkos::View<const unsigned short*[2]> faceCellLocalFace() const
+  {
+    return m_face_cell_local_face;
+  }
+
   Connectivity1D(const Connectivity1D&) = delete;
   
   Connectivity1D(const size_t& number_of_cells)
     : m_number_of_cells (number_of_cells),
+      m_number_of_faces (m_number_of_nodes),
       m_number_of_nodes (number_of_cells+1),
       m_cell_nodes ("cell_nodes", m_number_of_cells),
+      m_cell_faces (m_cell_nodes),
       m_node_nb_cells ("node_nb_cells",m_number_of_nodes),
+      m_face_nb_cells (m_node_nb_cells),
       m_node_cells ("node_cells", m_number_of_nodes),
-      m_node_cell_local_node ("node_cell_local_node", m_number_of_nodes)
+      m_face_cells (m_node_cells),
+      m_node_cell_local_node ("node_cell_local_node", m_number_of_nodes),
+      m_face_cell_local_face (m_node_cell_local_node)
   {
     assert(number_of_cells>0);
 
diff --git a/experimental/Mesh.hpp b/experimental/Mesh.hpp
index 3914fb896b552d1a9f799eed37eb9a5841f73a47..98cd0af12499eaa291d890f549a3a42b5eac716e 100644
--- a/experimental/Mesh.hpp
+++ b/experimental/Mesh.hpp
@@ -28,6 +28,11 @@ public:
     return m_connectivity.numberOfNodes();
   }
 
+  const size_t& numberOfFaces() const
+  {
+    return m_connectivity.numberOfFaces();
+  }
+
   const size_t& numberOfCells() const
   {
     return m_connectivity.numberOfCells();