diff --git a/src/mesh/GmshReader.hpp b/src/mesh/GmshReader.hpp
index 2b95822863c4ce87395ffc3173ca5934287fd40e..1d2d70e4f7fa4d9b4812ab50ae31605bf44f4cf8 100644
--- a/src/mesh/GmshReader.hpp
+++ b/src/mesh/GmshReader.hpp
@@ -5,7 +5,7 @@
 
 #include <utils/Array.hpp>
 
-#include <mesh/Mesh.hpp>
+#include <mesh/IMesh.hpp>
 #include <mesh/RefId.hpp>
 
 #include <array>
diff --git a/src/mesh/IMesh.hpp b/src/mesh/IMesh.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..3e22eb85bb750a5083f658cad83a32ea7626eabb
--- /dev/null
+++ b/src/mesh/IMesh.hpp
@@ -0,0 +1,18 @@
+#ifndef I_MESH_HPP
+#define I_MESH_HPP
+
+#include <cstddef>
+
+struct IMesh
+{
+ public:
+  virtual size_t dimension() const = 0;
+
+  IMesh(const IMesh&) = delete;
+  IMesh(IMesh&&)      = delete;
+
+  IMesh()  = default;
+  ~IMesh() = default;
+};
+
+#endif   // I_MESH_HPP
diff --git a/src/mesh/Mesh.hpp b/src/mesh/Mesh.hpp
index 935306b525d90d8c61302d6e6219edc1bc690709..0fe378e7e4c51e8e3a4a20b077d0f9025a0e818a 100644
--- a/src/mesh/Mesh.hpp
+++ b/src/mesh/Mesh.hpp
@@ -2,24 +2,12 @@
 #define MESH_HPP
 
 #include <algebra/TinyVector.hpp>
-
+#include <mesh/IMesh.hpp>
 #include <mesh/ItemValue.hpp>
 #include <utils/CSRGraph.hpp>
 
 #include <memory>
 
-struct IMesh
-{
- public:
-  virtual size_t dimension() const = 0;
-
-  IMesh(const IMesh&) = delete;
-  IMesh(IMesh&&)      = delete;
-
-  IMesh()  = default;
-  ~IMesh() = default;
-};
-
 template <typename ConnectivityType>
 class Mesh final : public IMesh
 {