diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index 7c990dc5c45dad8ecf69a14247d1476c43905b7c..8c1dfb6646877de0dbe49e6a03981bb42751192f 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -550,17 +550,34 @@ class Connectivity final
   CSRGraph cellToCellGraph() const
   {
     std::vector<std::set<int>> cell_cells(this->numberOfCells());
-    const auto& face_to_cell_matrix
-        = this->faceToCellMatrix();
-
-    for (FaceId l=0; l<this->numberOfFaces(); ++l) {
-      const auto& face_to_cell = face_to_cell_matrix[l];
-      if (face_to_cell.size() == 2) {
-        const CellId cell_0 = face_to_cell[0];
-        const CellId cell_1 = face_to_cell[1];
-
-        cell_cells[cell_0].insert(cell_1);
-        cell_cells[cell_1].insert(cell_0);
+    if constexpr (true) {
+      const auto& face_to_cell_matrix
+          = this->faceToCellMatrix();
+
+      for (FaceId l=0; l<this->numberOfFaces(); ++l) {
+        const auto& face_to_cell = face_to_cell_matrix[l];
+        if (face_to_cell.size() > 1) {
+          const CellId cell_0 = face_to_cell[0];
+          const CellId cell_1 = face_to_cell[1];
+
+          cell_cells[cell_0].insert(cell_1);
+          cell_cells[cell_1].insert(cell_0);
+        }
+      }
+    } else {
+      const auto& node_to_cell_matrix
+          = this->nodeToCellMatrix();
+
+      for (NodeId l=0; l<this->numberOfNodes(); ++l) {
+        const auto& node_to_cell = node_to_cell_matrix[l];
+        for (size_t i_cell=0; i_cell<node_to_cell.size(); ++i_cell) {
+          const CellId cell_0 = node_to_cell[i_cell];
+          for (size_t j_cell=0; j_cell<i_cell; ++j_cell) {
+            const CellId cell_1 = node_to_cell[j_cell];
+            cell_cells[cell_0].insert(cell_1);
+            cell_cells[cell_1].insert(cell_0);
+          }
+        }
       }
     }