diff --git a/src/main.cpp b/src/main.cpp
index 47bbbc7258533ed8aefbeea1639e8afdd0646c93..7224ff3965d7ae986c3adb7999a158e7a410d96b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -61,7 +61,7 @@ main(int argc, char* argv[])
     GmshReader gmsh_reader(filename);
     method_cost_map["Mesh building"] = gmsh_timer.seconds();
 
-    std::shared_ptr<IMesh> p_mesh = gmsh_reader.mesh();
+    std::shared_ptr<const IMesh> p_mesh = gmsh_reader.mesh();
 
     switch (p_mesh->dimension()) {
     case 1: {
diff --git a/src/mesh/CMakeLists.txt b/src/mesh/CMakeLists.txt
index 3b92ca14e4c087643c5520aec3a5f61ffbf22435..46a16a505eb85683097e4f62de567ed4ef91633c 100644
--- a/src/mesh/CMakeLists.txt
+++ b/src/mesh/CMakeLists.txt
@@ -3,6 +3,7 @@
 add_library(
   PugsMesh
   CartesianMeshBuilder.cpp
+  DiamondDualMeshBuilder.cpp
   Connectivity.cpp
   ConnectivityComputer.cpp
   ConnectivityDispatcher.cpp
diff --git a/src/mesh/MeshBuilderBase.hpp b/src/mesh/MeshBuilderBase.hpp
index dcca07f5ab32ec50e19d4909ce0f7b5a68d6cf8f..4ba31798190303b082ff5711d55e21a03c11d2ae 100644
--- a/src/mesh/MeshBuilderBase.hpp
+++ b/src/mesh/MeshBuilderBase.hpp
@@ -17,7 +17,7 @@ class MeshBuilderBase
   template <size_t Dimension>
   class ConnectivityFace;
 
-  std::shared_ptr<IMesh> m_mesh;
+  std::shared_ptr<const IMesh> m_mesh;
 
   template <size_t Dimension>
   static void _computeCellFaceAndFaceNodeConnectivities(ConnectivityDescriptor& descriptor);
@@ -29,7 +29,7 @@ class MeshBuilderBase
   void _dispatch();
 
  public:
-  std::shared_ptr<IMesh>
+  std::shared_ptr<const IMesh>
   mesh() const
   {
     return m_mesh;