diff --git a/src/mesh/MeshData.cpp b/src/mesh/MeshData.cpp
index 0eadfdf300fc31beaa90ece9e49a9cf8c5df63b9..c1a223782128bf065fefe5ebdd02622127e00494 100644
--- a/src/mesh/MeshData.cpp
+++ b/src/mesh/MeshData.cpp
@@ -29,11 +29,16 @@ MeshData<Mesh<Dimension>>::_storeBadMesh()
 template void MeshData<Mesh<1>>::_storeBadMesh();
 template void MeshData<Mesh<2>>::_storeBadMesh();
 template void MeshData<Mesh<3>>::_storeBadMesh();
-
 void
 MeshData<PolynomialMesh<2>>::_storeBadMesh()
 {
-  throw NotImplementedError("storeBadMesh");
+  VTKWriter writer("bad_mesh");
+  writer.writeOnMesh(m_mesh.meshVariant(),
+                     {std::make_shared<NamedItemValueVariant>(std::make_shared<ItemValueVariant>(m_Vj), "volume")});
+  std::ostringstream error_msg;
+  error_msg << "mesh contains cells of non-positive volume (see " << rang::fgB::yellow << "bad_mesh.pvd"
+            << rang::fg::reset << " file).";
+  throw NormalError(error_msg.str());
 }
 
 template <size_t MeshDegree>