diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d497cb91e2723c1e2768cabe0cb75ff2e0a77421..5db9b7bcb46aedd4d95c252f74508ee3bd982e8c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -14,5 +14,9 @@ add_executable("mmdg-2d" mmdg.cc)
 target_compile_definitions("mmdg-2d" PRIVATE GRIDDIM=2)
 target_link_dune_default_libraries("mmdg-2d")
 
+add_executable("mmdg-3d" mmdg.cc)
+target_compile_definitions("mmdg-3d" PRIVATE GRIDDIM=3)
+target_link_dune_default_libraries("mmdg-3d")
+
 dune_symlink_to_source_files(FILES grids parameterMMDG.ini parameterDG.ini
   dgAnalysis.py mmdgAnalysis.py)
diff --git a/src/mmdg.cc b/src/mmdg.cc
index 726d33f2f3c9231294b4b91c2ce4879b6c3cf959..96c62702a1a04965ab451e8c55424720f31ec2b2 100644
--- a/src/mmdg.cc
+++ b/src/mmdg.cc
@@ -101,7 +101,8 @@ int main(int argc, char** argv)
     }
 
     //create a grid from .dgf file
-    GridFactory gridFactory( "grids/" + gridType + ".msh" );
+    GridFactory gridFactory( "grids/" + gridType + "_" + std::to_string(dim)
+      + "d.msh" );
     const Grid& grid = *gridFactory.grid();
     const GridView& gridView = grid.leafGridView();
     const IGrid& iGrid = grid.interfaceGrid();