diff --git a/src/mesh/CellType.hpp b/src/mesh/CellType.hpp
index 3a0f01520bba191ff4535dfb407ddda55edab3c9..335cfc6471b9baf41af1642c40c4325938ce53cb 100644
--- a/src/mesh/CellType.hpp
+++ b/src/mesh/CellType.hpp
@@ -11,6 +11,7 @@ enum class CellType : unsigned short
 
   Triangle,
   Quadrangle,
+  Polygon,
 
   Diamond,
   Hexahedron,
@@ -28,6 +29,8 @@ name(CellType cell_type)
     return "line";
   case CellType::Triangle:
     return "triangle";
+  case CellType::Polygon:
+    return "polygon";
   case CellType::Quadrangle:
     return "quadrangle";
   case CellType::Diamond:
diff --git a/src/mesh/ConnectivityBuilderBase.cpp b/src/mesh/ConnectivityBuilderBase.cpp
index 3da4837ee005fffaf7744165e1470f6ac5730183..55c56b3a4b78f28ecdf8613d04d4d0348b9e5c4a 100644
--- a/src/mesh/ConnectivityBuilderBase.cpp
+++ b/src/mesh/ConnectivityBuilderBase.cpp
@@ -61,6 +61,14 @@ ConnectivityBuilderBase::_computeCellFaceAndFaceNodeConnectivities(ConnectivityD
         face_cells_map[f3].emplace_back(std::make_tuple(j, 3, f3.reversed()));
         break;
       }
+      case CellType::Polygon: {
+        cell_nb_faces[j] = cell_nodes.size();
+        for (size_t i = 0; i < cell_nodes.size(); ++i) {
+          Face f({cell_nodes[i], cell_nodes[(i + 1) % cell_nodes.size()]}, node_number_vector);
+          face_cells_map[f].emplace_back(std::make_tuple(j, i, f.reversed()));
+        }
+        break;
+      }
       default: {
         std::ostringstream error_msg;
         error_msg << name(descriptor.cell_type_vector[j]) << ": unexpected cell type in dimension 2";
diff --git a/src/output/VTKWriter.cpp b/src/output/VTKWriter.cpp
index 4f40e9af371333d2879ca28a2671278c365d6bbb..7b407256ac7cfac5e354330a99a081b73e822540 100644
--- a/src/output/VTKWriter.cpp
+++ b/src/output/VTKWriter.cpp
@@ -491,6 +491,10 @@ VTKWriter::_write(const std::shared_ptr<const MeshType>& mesh,
             types[j] = 9;
             break;
           }
+          case CellType::Polygon: {
+            types[j] = 7;
+            break;
+          }
           case CellType::Tetrahedron: {
             types[j] = 10;
             break;