diff --git a/src/main.cpp b/src/main.cpp
index 06060150665d432eb8eb8c227a4c4af9ee6a1a84..1a1d939cc020272ceb76dd61808a74c92b990a0d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -197,7 +197,7 @@ int main(int argc, char *argv[])
           typedef TinyVector<MeshType::dimension> Rd;
 
           const Kokkos::View<const double*> Vj = mesh_data.Vj();
-          const Kokkos::View<const Rd**> Cjr = mesh_data.Cjr();
+          const NodeByCellData<Rd> Cjr = mesh_data.Cjr();
 
           const double tmax=0.2;
           double t=0;
@@ -304,10 +304,7 @@ int main(int argc, char *argv[])
 
           AcousticSolver<MeshDataType> acoustic_solver(mesh_data, unknowns, bc_list);
 
-          typedef TinyVector<MeshType::dimension> Rd;
-
           const Kokkos::View<const double*> Vj = mesh_data.Vj();
-          const Kokkos::View<const Rd**> Cjr = mesh_data.Cjr();
 
           const double tmax=0.2;
           double t=0;
@@ -403,10 +400,7 @@ int main(int argc, char *argv[])
 
           AcousticSolver<MeshDataType> acoustic_solver(mesh_data, unknowns, bc_list);
 
-          typedef TinyVector<MeshType::dimension> Rd;
-
           const Kokkos::View<const double*> Vj = mesh_data.Vj();
-          const Kokkos::View<const Rd**> Cjr = mesh_data.Cjr();
 
           const double tmax=0.2;
           double t=0;
@@ -431,7 +425,6 @@ int main(int argc, char *argv[])
               dt=tmax-t;
             }
             acoustic_solver.computeNextStep(t,dt, unknowns);
-
             block_eos.updatePandCFromRhoE();
 
             t += dt;
@@ -490,7 +483,6 @@ int main(int argc, char *argv[])
       typedef TinyVector<MeshType::dimension> Rd;
 
       const Kokkos::View<const double*> Vj = mesh_data.Vj();
-      const Kokkos::View<const Rd**> Cjr = mesh_data.Cjr();
 
       const double tmax=0.2;
       double t=0;
diff --git a/src/mesh/MeshData.hpp b/src/mesh/MeshData.hpp
index f9732fbe98cec1c312b2d244a33e964493f1a9be..4086090a27f7c6b21b69e8f65e66ad7ee8c77630 100644
--- a/src/mesh/MeshData.hpp
+++ b/src/mesh/MeshData.hpp
@@ -4,6 +4,8 @@
 #include <Kokkos_Core.hpp>
 #include <TinyVector.hpp>
 
+#include <NodeByCellData.hpp>
+
 #include <map>
 
 template <typename M>
@@ -21,7 +23,7 @@ public:
 
 private:
   const MeshType& m_mesh;
-  Kokkos::View<Rd**> m_Cjr;
+  NodeByCellData<Rd> m_Cjr;
   Kokkos::View<double**>  m_ljr;
   Kokkos::View<Rd**> m_njr;
   Kokkos::View<Rd*>  m_xj;
@@ -179,7 +181,7 @@ public:
     return m_mesh;
   }
 
-  const Kokkos::View<const Rd**> Cjr() const
+  const NodeByCellData<Rd>& Cjr() const
   {
     return m_Cjr;
   }
@@ -213,7 +215,7 @@ public:
 
   MeshData(const MeshType& mesh)
     : m_mesh(mesh),
-      m_Cjr("Cjr", mesh.numberOfCells(), mesh.connectivity().maxNbNodePerCell()),
+      m_Cjr(mesh.connectivity().m_node_id_per_cell_matrix),
       m_ljr("ljr", mesh.numberOfCells(), mesh.connectivity().maxNbNodePerCell()),
       m_njr("njr", mesh.numberOfCells(), mesh.connectivity().maxNbNodePerCell()),
       m_xj("xj", mesh.numberOfCells()),
@@ -222,15 +224,18 @@ public:
     if constexpr (dimension==1) {
       // in 1d Cjr are computed once for all
       Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) {
-	  m_Cjr(j,0)=-1;
-	  m_Cjr(j,1)= 1;
-	});
+          m_Cjr(j,0)=-1;
+          m_Cjr(j,1)= 1;
+        });
       // in 1d njr=Cjr
-      m_njr=m_Cjr;
       Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) {
-	  m_ljr(j,0)= 1;
-	  m_ljr(j,1)= 1;
-	});
+          m_njr(j,0)=-1;
+          m_njr(j,1)= 1;
+        });
+      Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) {
+          m_ljr(j,0)= 1;
+          m_ljr(j,1)= 1;
+        });
     }
     this->updateAllData();
   }
diff --git a/src/scheme/AcousticSolver.hpp b/src/scheme/AcousticSolver.hpp
index d9c5965195256bda75f1c87ab60a4c56e8cc4f64..e814a1434ffbcab623abe69aac02ed8b1a41503b 100644
--- a/src/scheme/AcousticSolver.hpp
+++ b/src/scheme/AcousticSolver.hpp
@@ -85,7 +85,7 @@ private:
                   const Kokkos::View<const double**>& ljr,
                   const Kokkos::View<const Rd**>& njr)
   {
-    const Kokkos::View<const Rd**> Cjr = m_mesh_data.Cjr();
+    const NodeByCellData<Rd>& Cjr = m_mesh_data.Cjr();
     Kokkos::parallel_for("new nested Ajr", m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) {
         const size_t& nb_nodes =m_Ajr.numberOfSubValues(j);
         const double& rho_c = rhocj(j);
@@ -116,7 +116,7 @@ private:
   KOKKOS_INLINE_FUNCTION
   const Kokkos::View<const Rd*>
   computeBr(const NodeByCellData<Rdd>& Ajr,
-            const Kokkos::View<const Rd**>& Cjr,
+            const NodeByCellData<Rd>& Cjr,
             const Kokkos::View<const Rd*>& uj,
             const Kokkos::View<const double*>& pj) {
     Kokkos::parallel_for(m_mesh.numberOfNodes(), KOKKOS_LAMBDA(const int& r) {
@@ -192,7 +192,7 @@ private:
   void
   computeFjr(const NodeByCellData<Rdd>& Ajr,
              const Kokkos::View<const Rd*>& ur,
-             const Kokkos::View<const Rd**>& Cjr,
+             const NodeByCellData<Rd>& Cjr,
              const Kokkos::View<const Rd*>& uj,
              const Kokkos::View<const double*>& pj)
   {
@@ -221,7 +221,7 @@ private:
                              const Kokkos::View<const double*>& pj,
                              const Kokkos::View<const double*>& cj,
                              const Kokkos::View<const double*>& Vj,
-                             const Kokkos::View<const Rd**>& Cjr,
+                             const NodeByCellData<Rd>& Cjr,
                              const Kokkos::View<const double**>& ljr,
                              const Kokkos::View<const Rd**>& njr) {
     const Kokkos::View<const double*> rhocj  = computeRhoCj(rhoj, cj);
@@ -304,7 +304,7 @@ public:
 
     const Kokkos::View<const Rd*> xj = m_mesh_data.xj();
     const Kokkos::View<const double*> Vj = m_mesh_data.Vj();
-    const Kokkos::View<const Rd**> Cjr = m_mesh_data.Cjr();
+    const NodeByCellData<Rd>& Cjr = m_mesh_data.Cjr();
     const Kokkos::View<const double**> ljr = m_mesh_data.ljr();
     const Kokkos::View<const Rd**> njr = m_mesh_data.njr();
     Kokkos::View<Rd*> xr = m_mesh.xr();
diff --git a/src/scheme/NodeByCellData.hpp b/src/scheme/NodeByCellData.hpp
index 52f9b02cf3e7356ede2ebd84d9a3e41a2a53c203..723cd1f4811e5eb127acaeafea27dee77102a41f 100644
--- a/src/scheme/NodeByCellData.hpp
+++ b/src/scheme/NodeByCellData.hpp
@@ -3,6 +3,8 @@
 
 #include <Kokkos_StaticCrsGraph.hpp>
 
+#warning should not stand in the scheme directory
+
 typedef Kokkos::StaticCrsGraph<unsigned int, Kokkos::HostSpace> ConnectivityMatrix;
 
 template <typename DataType>