diff --git a/src/mesh/Connectivity3D.hpp b/src/mesh/Connectivity3D.hpp
index f57829ef0c5a04145ba63651d1915186cf2ae9df..b51f137b33f688917c7af4671f354005ac5031cb 100644
--- a/src/mesh/Connectivity3D.hpp
+++ b/src/mesh/Connectivity3D.hpp
@@ -163,8 +163,29 @@ private:
       switch (cell_nb_nodes) {
         case 4: { // tetrahedron
           cell_nb_faces[j] = 4;
-          std::cerr << "tetrahedron cell type NIY!\n";
-          std::exit(0);
+          // face 0
+          Face f0({m_cell_nodes(j,1),
+                   m_cell_nodes(j,2),
+                   m_cell_nodes(j,3)});
+          face_cells_map[f0].push_back(std::make_tuple(j, 0, f0.reversed()));
+
+          // face 1
+          Face f1({m_cell_nodes(j,0),
+                   m_cell_nodes(j,3),
+                   m_cell_nodes(j,2)});
+          face_cells_map[f1].push_back(std::make_tuple(j, 1, f1.reversed()));
+
+          // face 2
+          Face f2({m_cell_nodes(j,0),
+                   m_cell_nodes(j,1),
+                   m_cell_nodes(j,3)});
+          face_cells_map[f2].push_back(std::make_tuple(j, 2, f2.reversed()));
+
+          // face 3
+          Face f3({m_cell_nodes(j,0),
+                   m_cell_nodes(j,2),
+                   m_cell_nodes(j,1)});
+          face_cells_map[f3].push_back(std::make_tuple(j, 3, f3.reversed()));
           break;
         }
         case 8: { // hexahedron
@@ -225,14 +246,10 @@ private:
     m_cell_nb_faces = cell_nb_faces;
 
     m_number_of_faces = face_cells_map.size();
-    Kokkos::View<unsigned short*> face_nb_nodes("face_nb_nodes", m_number_of_faces);
-    Kokkos::parallel_for(m_number_of_faces, KOKKOS_LAMBDA(const unsigned int& l) {
-        face_nb_nodes[l] = 4;
-      });
-    m_face_nb_nodes = face_nb_nodes;
 
     std::cerr << __FILE__ << ':' << __LINE__ << ':'
               << rang::fg::red << " m_max_nb_node_per_face forced to 4" << rang::fg::reset << '\n';
+    Kokkos::View<unsigned short*> face_nb_nodes("face_nb_nodes", m_number_of_faces);
     m_max_nb_node_per_face = 4;
     Kokkos::View<unsigned int**> face_nodes("face_nodes", m_number_of_faces, m_max_nb_node_per_face);
     {
@@ -242,10 +259,12 @@ private:
         for(size_t r=0; r<face.nodeIdList().size(); ++r) {
           face_nodes(l,r) = face.nodeIdList()[r];
         }
+        face_nb_nodes[l] = face.nodeIdList().size();
         ++l;
       }
     }
     m_face_nodes = face_nodes;
+    m_face_nb_nodes = face_nb_nodes;
 
     Kokkos::View<unsigned short*> face_nb_cells("face_nb_cells", m_number_of_faces);
     {
diff --git a/src/output/VTKWriter.hpp b/src/output/VTKWriter.hpp
index 50fb147c65c9d72522a9a299b49e684b2869bd10..4e34f666cc0829eef509f4140aaa3aab6d9f9727 100644
--- a/src/output/VTKWriter.hpp
+++ b/src/output/VTKWriter.hpp
@@ -102,7 +102,11 @@ class VTKWriter
           break;
         }
         case 4: {
-          fout << "9 ";
+          if (mesh.meshDimension() == 3) {
+            fout << "10 ";
+          } else {
+            fout << "9 ";
+          }
           break;
         }
         case 8: {