diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8b70fc58e31c515d04e091b963d2c56fbf758911..181295035f3e751a048fd0c7db5ad6ac9bdbc549 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,19 +1,31 @@
-project("dune-elasticity" CXX)
-cmake_minimum_required(VERSION 2.8.6)
-
-if(NOT (dune-common_DIR OR dune-common_ROOT))
-  string(REPLACE ${CMAKE_PROJECT_NAME} dune-common dune-common_DIR ${PROJECT_BINARY_DIR})
+# We require version CMake version 3.1 to prevent issues
+# with dune_enable_all_packages and older CMake versions.
+cmake_minimum_required(VERSION 3.1)
+project(dune-elasticity CXX)
+
+if(NOT (dune-common_DIR OR dune-common_ROOT OR
+      "${CMAKE_PREFIX_PATH}" MATCHES ".*dune-common.*"))
+    string(REPLACE  ${CMAKE_PROJECT_NAME} dune-common dune-common_DIR
+      ${PROJECT_BINARY_DIR})
 endif()
 
+#find dune-common and set the module path
 find_package(dune-common REQUIRED)
-list(APPEND CMAKE_MODULE_PATH ${dune-common_MODULE_PATH})
+list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules"
+  ${dune-common_MODULE_PATH})
+
+#include the dune macros
 include(DuneMacros)
 
+# start a dune project with information from dune.module
 dune_project()
 
+dune_enable_all_packages()
+
 add_subdirectory("test")
 add_subdirectory("dune")
 add_subdirectory("src")
+add_subdirectory("cmake/modules")
 
 if(HAVE_AMIRAMESH AND HAVE_IPOPT AND HAVE_PSURFACE AND HAVE_UG)
   set(programs viscoelast nonlinelast)
@@ -32,4 +44,5 @@ if(HAVE_AMIRAMESH AND HAVE_IPOPT AND HAVE_PSURFACE AND HAVE_UG AND ADOLC_FOUND)
   add_dune_adolc_flags(nonlinelast)
 endif()
 
+# finalize the dune project, e.g. generating config.h etc.
 finalize_dune_project(GENERATE_CONFIG_H_CMAKE)
diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5c9f0dba89c302a8dc9b16c513ef26a037de6e8b
--- /dev/null
+++ b/cmake/modules/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(modules "DuneElasticityMacros.cmake")
+
+install(FILES ${modules} DESTINATION ${DUNE_INSTALL_MODULEDIR})
diff --git a/cmake/modules/DuneElasticityMacros.cmake b/cmake/modules/DuneElasticityMacros.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..613dfb664b75999b008f0003a4d7c409cbf409ad
--- /dev/null
+++ b/cmake/modules/DuneElasticityMacros.cmake
@@ -0,0 +1 @@
+# File for module specific CMake tests.