diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5cba909360812f307dc349110804892341e756bb
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,12 @@
+project("dune-solvers" CXX)
+cmake_minimum_required(VERSION 2.8.6)
+
+find_package(dune-common)
+list(APPEND CMAKE_MODULE_PATH ${dune-common_MODULE_PATH})
+include(DuneMacros)
+
+dune_project()
+
+add_subdirectory("dune")
+
+finalize_dune_project(GENERATE_CONFIG_H_CMAKE)
diff --git a/cmake/pkg/dune-solvers-config.cmake.in b/cmake/pkg/dune-solvers-config.cmake.in
new file mode 100644
index 0000000000000000000000000000000000000000..43ed3a937e99ea9cde7a097d426cc8751d3d5113
--- /dev/null
+++ b/cmake/pkg/dune-solvers-config.cmake.in
@@ -0,0 +1,20 @@
+if(NOT @DUNE_MOD_NAME@_FOUND)
+#compute installation prefix relative to this file
+get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_prefix "${_dir}/../../.." ABSOLUTE)
+
+#import the target
+#include("${_prefix}/lib/cmake/@DUNE_MOD_NAME@-targets.cmake")
+
+#report other information
+set(@DUNE_MOD_NAME@_PREFIX "${_prefix}")
+set(@DUNE_MOD_NAME@_INCLUDE_DIRS "${_prefix}/include")
+set(@DUNE_MOD_NAME@_CXX_FLAGS "@CMAKE_CXX_FLAGS@")
+set(@DUNE_MOD_NAME@_CXX_FLAGS_DEBUG "@CMAKE_CXX_FLAGS_DEBUG@")
+set(@DUNE_MOD_NAME@_CXX_FLAGS_MINSIZEREL "@CMAKE_CXX_FLAGS_MINSIZEREL@")
+set(@DUNE_MOD_NAME@_CXX_FLAGS_RELEASE "@CMAKE_CXX_FLAGS_RELEASE@")
+set(@DUNE_MOD_NAME@_CXX_FLAGS_RELWITHDEBINFO "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@")
+set(@DUNE_MOD_NAME@_DEPENDS "@DUNE_DEPENDS@")
+set(@DUNE_MOD_NAME@_SUGGESTS "@DUNE_SUGGESTS@")
+set(@DUNE_MOD_NAME@_MODULE_PATH "${_prefix}/@DUNE_INSTALL_MODULEDIR@")
+endif(NOT @DUNE_MOD_NAME@_FOUND)
\ No newline at end of file
diff --git a/dune-solvers-config.cmake.in b/dune-solvers-config.cmake.in
new file mode 100644
index 0000000000000000000000000000000000000000..43ed3a937e99ea9cde7a097d426cc8751d3d5113
--- /dev/null
+++ b/dune-solvers-config.cmake.in
@@ -0,0 +1,20 @@
+if(NOT @DUNE_MOD_NAME@_FOUND)
+#compute installation prefix relative to this file
+get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_prefix "${_dir}/../../.." ABSOLUTE)
+
+#import the target
+#include("${_prefix}/lib/cmake/@DUNE_MOD_NAME@-targets.cmake")
+
+#report other information
+set(@DUNE_MOD_NAME@_PREFIX "${_prefix}")
+set(@DUNE_MOD_NAME@_INCLUDE_DIRS "${_prefix}/include")
+set(@DUNE_MOD_NAME@_CXX_FLAGS "@CMAKE_CXX_FLAGS@")
+set(@DUNE_MOD_NAME@_CXX_FLAGS_DEBUG "@CMAKE_CXX_FLAGS_DEBUG@")
+set(@DUNE_MOD_NAME@_CXX_FLAGS_MINSIZEREL "@CMAKE_CXX_FLAGS_MINSIZEREL@")
+set(@DUNE_MOD_NAME@_CXX_FLAGS_RELEASE "@CMAKE_CXX_FLAGS_RELEASE@")
+set(@DUNE_MOD_NAME@_CXX_FLAGS_RELWITHDEBINFO "@CMAKE_CXX_FLAGS_RELWITHDEBINFO@")
+set(@DUNE_MOD_NAME@_DEPENDS "@DUNE_DEPENDS@")
+set(@DUNE_MOD_NAME@_SUGGESTS "@DUNE_SUGGESTS@")
+set(@DUNE_MOD_NAME@_MODULE_PATH "${_prefix}/@DUNE_INSTALL_MODULEDIR@")
+endif(NOT @DUNE_MOD_NAME@_FOUND)
\ No newline at end of file
diff --git a/dune-solvers-version.cmake.in b/dune-solvers-version.cmake.in
new file mode 100644
index 0000000000000000000000000000000000000000..a1c2199d972b8943a646d4feb40d12e9e239b141
--- /dev/null
+++ b/dune-solvers-version.cmake.in
@@ -0,0 +1,8 @@
+set(PACKAGE_VERSION "@DUNE_MOD_VERSION@")
+
+if(NOT "${PACKAGE_FIND_VERSION}" VERSION_GREATER "@DUNE_MOD_VERSION@")
+  set (PACKAGE_VERSION_COMPATIBLE 1) # compatible with older
+  if ("${PACKAGE_FIND_VERSION}" VERSION_EQUAL "@DUNE_MOD_VERSION@")
+    set(PACKAGE_VERSION_EXACT 1) #exact match for this version
+  endif()
+endif()
diff --git a/dune/CMakeLists.txt b/dune/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f62b2603663be0828325d6f0baea2ad203ce7bed
--- /dev/null
+++ b/dune/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory("solvers")
diff --git a/dune/solvers/CMakeLists.txt b/dune/solvers/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..83d271c619a55e73c3033b028ce94366b3ce97e3
--- /dev/null
+++ b/dune/solvers/CMakeLists.txt
@@ -0,0 +1,10 @@
+add_subdirectory("common")
+add_subdirectory("iterationsteps")
+add_subdirectory("norms")
+add_subdirectory("operators")
+add_subdirectory("solvers")
+add_subdirectory("transferoperators")
+
+install(FILES
+    computeenergy.hh
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/solvers)
diff --git a/dune/solvers/common/CMakeLists.txt b/dune/solvers/common/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3bdd6841d5302821f289d9a3eff262bee26efb25
--- /dev/null
+++ b/dune/solvers/common/CMakeLists.txt
@@ -0,0 +1,10 @@
+install(FILES
+    arithmetic.hh
+    boxconstraint.hh
+    canignore.hh
+    genericvectortools.hh
+    numproc.hh
+    permutationmanager.hh
+    preconditioner.hh
+    staticmatrixtools.hh
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/solvers/common)
diff --git a/dune/solvers/iterationsteps/CMakeLists.txt b/dune/solvers/iterationsteps/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f506aac5660cf7c1b4851febf8920c69d1325df2
--- /dev/null
+++ b/dune/solvers/iterationsteps/CMakeLists.txt
@@ -0,0 +1,27 @@
+install(FILES
+    amgstep.hh
+    blockgsstep.cc
+    blockgsstep.hh
+    cgstep.cc
+    cgstep.hh
+    istlseqilu0step.hh
+    iterationstep.hh
+    lineariterationstep.hh
+    linegsstep.cc
+    linegsstep.hh
+    minimalpolynomialextrapolationstep.hh
+    mmgstep.cc
+    mmgstep.hh
+    multigridstep.cc
+    multigridstep.hh
+    obstacletnnmgstep.hh
+    projectedblockgsstep.cc
+    projectedblockgsstep.hh
+    projectedlinegsstep.cc
+    projectedlinegsstep.hh
+    richardsonstep.hh
+    truncatedblockgsstep.hh
+    truncatedsaddlepointgsstep.hh
+    trustregiongsstep.cc
+    trustregiongsstep.hh
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/solvers/iterationsteps)
diff --git a/dune/solvers/norms/CMakeLists.txt b/dune/solvers/norms/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4da971a12fd1a67f61ff58f7e95fdfe5370618eb
--- /dev/null
+++ b/dune/solvers/norms/CMakeLists.txt
@@ -0,0 +1,12 @@
+install(FILES
+    blocknorm.hh
+    diagnorm.hh
+    energynorm.hh
+    fullnorm.hh
+    h1seminorm.hh
+    norm.hh
+    pnorm.hh
+    reorderedblocknorm.hh
+    sumnorm.hh
+    twonorm.hh
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/solvers/norms)
diff --git a/dune/solvers/operators/CMakeLists.txt b/dune/solvers/operators/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a3eee0b0c0ffa5de17e0e6019eaa166831d2c61e
--- /dev/null
+++ b/dune/solvers/operators/CMakeLists.txt
@@ -0,0 +1,5 @@
+install(FILES
+    lowrankoperator.hh
+    nulloperator.hh
+    sumoperator.hh
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/solvers/operators)
diff --git a/dune/solvers/solvers/CMakeLists.txt b/dune/solvers/solvers/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a2e7d1c6b629ea16fb66094512abd83940f8d40f
--- /dev/null
+++ b/dune/solvers/solvers/CMakeLists.txt
@@ -0,0 +1,12 @@
+install(FILES
+    cgsolver.cc
+    cgsolver.hh
+    iterativesolver.cc
+    iterativesolver.hh
+    loopsolver.cc
+    loopsolver.hh
+    quadraticipopt.hh
+    solver.hh
+    tcgsolver.cc
+    tcgsolver.hh
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/solvers/solvers)
diff --git a/dune/solvers/transferoperators/CMakeLists.txt b/dune/solvers/transferoperators/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d76a30ad22c2acd42bc0deafec55af44a4cf1b45
--- /dev/null
+++ b/dune/solvers/transferoperators/CMakeLists.txt
@@ -0,0 +1,14 @@
+install(FILES
+    compressedmultigridtransfer.hh
+    densemultigridtransfer.hh
+    genericmultigridtransfer.hh
+    mandelobsrestrictor.cc
+    mandelobsrestrictor.hh
+    multigridtransfer.hh
+    obstaclerestrictor.hh
+    truncatedcompressedmgtransfer.cc
+    truncatedcompressedmgtransfer.hh
+    truncateddensemgtransfer.cc
+    truncateddensemgtransfer.hh
+    truncatedmgtransfer.hh
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/solvers/transferoperators)
diff --git a/m4/CMakeLists.txt b/m4/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3da0b6f110f5c59291ff206ce6d059b0703ae455
--- /dev/null
+++ b/m4/CMakeLists.txt
@@ -0,0 +1,4 @@
+install(FILES
+    dune-solvers.m4
+    ipopt4.m4
+    DESTINATION share/aclocal)