diff --git a/CMakeLists.txt b/CMakeLists.txt
index db9b193ddfab85a5f58996217e8cd3e1894e0697..7ae77a93a04bd0777c2900953ae15e259cb02b26 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,18 +1,27 @@
-project("dune-solvers" CXX)
 cmake_minimum_required(VERSION 2.8.6)
+project(dune-solvers CXX)
 
-if(NOT (dune-common_DIR OR dune-common_ROOT))
-  string(REPLACE ${CMAKE_PROJECT_NAME} dune-common dune-common_DIR ${PROJECT_BINARY_DIR})
+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()
 
-add_subdirectory("doc")
-add_subdirectory("dune")
 add_subdirectory("m4")
+add_subdirectory("dune")
+add_subdirectory("doc")
+add_subdirectory("cmake/modules")
 
+# finalize the dune project, e.g. generating config.h etc.
 finalize_dune_project(GENERATE_CONFIG_H_CMAKE)
diff --git a/Makefile.am b/Makefile.am
index 17c3a973f2ad656533ff54cadecb5f3778a1b471..6429c75c4cb7dffbdd2d0dc32963743263dd7ff2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,17 +1,19 @@
-# $Id: duneproject 5500 2009-04-03 13:45:04Z sander $
+# $Id$
 
 # we need the module file to be able to build via dunecontrol
-EXTRA_DIST=dune.module
+EXTRA_DIST = dune.module \
+  CMakeLists.txt \
+  config.h.cmake
 
-SUBDIRS = m4 dune
+SUBDIRS = m4 dune doc cmake
 
 if BUILD_DOCS
 SUBDIRS += doc
 endif
 
 # don't follow the full GNU-standard
-# we need automake 1.5
-AUTOMAKE_OPTIONS = foreign 1.5
+# we need automake 1.9 or newer
+AUTOMAKE_OPTIONS = foreign 1.9
 
 # pass most important options when "make distcheck" is used
 # dune-geometry is a dependency of dune-grid.
@@ -19,3 +21,8 @@ DISTCHECK_CONFIGURE_FLAGS = --with-dune-common=$(DUNE_COMMON_ROOT) --with-dune-g
 
 include $(top_srcdir)/am/top-rules
 include $(top_srcdir)/am/global-rules
+
+# Generate package configuration files for finding
+# installed modules with CMake
+include $(top_srcdir)/am/cmake-pkg-config
+
diff --git a/README b/README
index 8edb463fa64ceec25ff2c3df4817081f95402560..7ea5ff02a8b0605dd632b049fbfdcf3aaf167df6 100644
--- a/README
+++ b/README
@@ -4,9 +4,9 @@ Preparing the Sources
 Additional to the software mentioned in README you'll need the
 following programs installed on your system:
 
-  automake >= 1.5
+  automake >= 1.9
 
-  autoconf >= 2.50
+  autoconf >= 2.62
 
   libtool
 
@@ -69,5 +69,5 @@ for further options.
 
 The full build-system is described in the dune-common/doc/buildsystem (SVN version) or under share/doc/dune-common/buildsystem if you installed DUNE!
 
-$Id: duneproject 5500 2009-04-03 13:45:04Z sander $
+$Id$
 
diff --git a/cmake/Makefile.am b/cmake/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..26735eb4029328e305290cf95dfdc43a0e5fa55d
--- /dev/null
+++ b/cmake/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = modules
+
+include $(top_srcdir)/am/global-rules
diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0aba9c378cfcf69f4295d29164ae91e7f1ba63a9
--- /dev/null
+++ b/cmake/modules/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(modules "DuneSolversMacros.cmake")
+
+install(FILES ${modules} DESTINATION ${DUNE_INSTALL_MODULEDIR})
diff --git a/cmake/modules/DuneSolversMacros.cmake b/cmake/modules/DuneSolversMacros.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..613dfb664b75999b008f0003a4d7c409cbf409ad
--- /dev/null
+++ b/cmake/modules/DuneSolversMacros.cmake
@@ -0,0 +1 @@
+# File for module specific CMake tests.
diff --git a/cmake/modules/Makefile.am b/cmake/modules/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..f9d2b9aced3f7ce6bbf41b9a55f52a3fef855eed
--- /dev/null
+++ b/cmake/modules/Makefile.am
@@ -0,0 +1,6 @@
+MODULES = DuneSolversMacros.cmake
+modulesdir = $(datadir)/dune/cmake/modules
+dist_modules_DATA = ${MODULES}
+
+include $(top_srcdir)/am/global-rules
+EXTRA_DIST = CMakeLists.txt
diff --git a/config.h.cmake b/config.h.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..6fc20f0466f37d08892a43c23de381ae54d334fc
--- /dev/null
+++ b/config.h.cmake
@@ -0,0 +1,45 @@
+/* begin solvers
+   put the definitions for config.h specific to
+   your project here. Everything above will be
+   overwritten
+*/
+
+/* begin private */
+/* Name of package */
+#define PACKAGE "@DUNE_MOD_NAME"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "@DUNE_MAINTAINER@"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "@DUNE_MOD_NAME@"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "@DUNE_MOD_NAME@ @DUNE_MOD_VERSION@"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "@DUNE_MOD_NAME@"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "@DUNE_MOD_URL@"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "@DUNE_MOD_VERSION@"
+
+/* end private */
+
+/* Define to the version of dune-solvers */
+#define DUNE_SOLVERS_VERSION "@DUNE_SOLVERS_VERSION@"
+
+/* Define to the major version of dune-solvers */
+#define DUNE_SOLVERS_VERSION_MAJOR @DUNE_SOLVERS_VERSION_MAJOR@
+
+/* Define to the minor version of dune-solvers */
+#define DUNE_SOLVERS_VERSION_MINOR @DUNE_SOLVERS_VERSION_MINOR@
+
+/* Define to the revision of dune-solvers */
+#define DUNE_SOLVERS_VERSION_REVISION @DUNE_SOLVERS_VERSION_REVISION@
+
+/* end solvers
+   Everything below here will be overwritten
+*/
diff --git a/configure.ac b/configure.ac
index d3164328fe26403a7177eb400f69337bf48105ca..65e70c45bbd01c0b74e84e2c3701b7450a9ccedf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,13 +1,15 @@
 # -*- Autoconf -*-
 # Process this file with autoconf to produce a configure script.
-AC_PREREQ(2.50)
+AC_PREREQ([2.62])
 DUNE_AC_INIT # gets module version from dune.module file
 AM_INIT_AUTOMAKE
 AC_CONFIG_SRCDIR([dune-solvers.pc.in])
 AC_CONFIG_HEADERS([config.h])
 
 
-# Run all checks
+# we need no more than the standard DE-stuff
+# this module depends on dune-common dune-grid dune-istl dune-localfunctions
+# this implies checking for [dune-common], [dune-geometry], [dune-grid], [dune-istl], [dune-localfunctions]
 DUNE_CHECK_ALL
 
 # implicitly set the Dune-flags everywhere
@@ -17,6 +19,10 @@ LIBS="$DUNE_LIBS"
 
 AC_CONFIG_FILES([
   Makefile
+  cmake/Makefile
+  cmake/modules/Makefile
+  doc/Makefile
+  doc/doxygen/Makefile
   doc/doxygen/Doxyfile
   dune/Makefile
   dune/solvers/Makefile
@@ -27,8 +33,6 @@ AC_CONFIG_FILES([
   dune/solvers/solvers/Makefile
   dune/solvers/test/Makefile
   dune/solvers/transferoperators/Makefile
-  doc/Makefile
-  doc/doxygen/Makefile
   m4/Makefile
   dune-solvers.pc
 ])
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index 428298579f3345b31e32eb76931c0841e2656786..80f4b3b923fd68322c4cf9ea5258098ffceef6a2 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -1 +1,3 @@
-add_subdirectory(doxygen)
+add_subdirectory("doxygen")
+
+install(FILES LOWRANKBRANCH-BACKPORT-CHANGES ${CMAKE_INSTALL_DOCDIR})
\ No newline at end of file
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 12455f0e384a4517c6ee8678261d11c5fdecbaa2..3e9b46985508dcc8601d8d9aa1c839b569036129 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -3,9 +3,12 @@ SUBDIRS = doxygen
 CURDIR = doc
 BASEDIR = ..
 
-docdir=$(datadir)/doc/dune/solvers
+# add list of html files to generate from wml
+PAGES=
 
-EXTRA_DIST = CMakeLists.txt
+docdir=$(datadir)/doc/dune-solvers
+
+EXTRA_DIST = CMakeLists.txt LOWRANKBRANCH-BACKPORT-CHANGES
 
 include $(top_srcdir)/am/webstuff
 include $(top_srcdir)/am/global-rules
diff --git a/doc/doxygen/Doxylocal b/doc/doxygen/Doxylocal
index 4b763b3057579d061408bd796ab225f0ccb64c3b..227177bb6121d1ee311ae78756de365d986de6b5 100644
--- a/doc/doxygen/Doxylocal
+++ b/doc/doxygen/Doxylocal
@@ -1,8 +1,30 @@
-INPUT                  += @top_srcdir@/dune/solvers
-EXCLUDE                += 
-EXAMPLE_PATH           +=
-EXAMPLE_PATTERNS       +=
-IMAGE_PATH             +=
-PREDEFINED             += DOXYGEN 
-
-EXTRA_PACKAGES         = amsmath amssymb
+# This file contains local changes to the doxygen configuration
+# please us '+=' to add file/directories to the lists
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                 += @top_srcdir@/dune/
+# see e.g. dune-grid for the examples of mainpage and modules
+# INPUT                 += @srcdir@/mainpage #                          @srcdir@/modules
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+# EXCLUDE               += @top_srcdir@/dune/solvers/test
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+# EXAMPLE_PATH          += @top_srcdir@/src
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+# IMAGE_PATH            += @top_srcdir@/dune/solvers/pics
+
diff --git a/doc/doxygen/Makefile.am b/doc/doxygen/Makefile.am
index f3d804194c41348ea97d73bfe44d0db7fbb4cba4..a4917f4dffcf42997a809eadcdbffb6be0bd740c 100644
--- a/doc/doxygen/Makefile.am
+++ b/doc/doxygen/Makefile.am
@@ -1,22 +1,9 @@
 
 BASEDIR=../..
 CURDIR=doc/doxygen
-WHAT=
 
-doxygendir = $(datadir)/doc/dune/solvers/doxygen
-doxygen_DATA = $(WHAT)
-
-#we need this in the distribution
-EXTRA_DIST = $(WHAT) $(DOXYGENDISTFILES)
-
-all: $(WHAT) $(DOXYGENFILES)
+EXTRA_DIST = CMakeLists.txt
 
 include $(top_srcdir)/am/doxygen
 include $(top_srcdir)/am/global-rules
 
-# file to clean only in svn and not in tarball tree
-SVNCLEANFILES = html $(WHAT) $(DOXYGENHEADER)
-
-clean-local:
-	if test "x$(VPATH)" != "x" && test ! -e $(srcdir)/doxygen-tag; then 	  if test -e $(top_srcdir)/doc/doxygen/Doxydep; then 	    rm -rf $(SVNCLEANFILES); 	  fi; 	fi
-
diff --git a/dune-solvers.pc.in b/dune-solvers.pc.in
index d0fff91df07fc8059daf44c1c5c6f09f1dda2240..e67abba94ffcf594ebda4938bbb7ebe84233c6e7 100644
--- a/dune-solvers.pc.in
+++ b/dune-solvers.pc.in
@@ -11,5 +11,5 @@ Version: @VERSION@
 Description: dune-solvers module
 URL: http://dune-project.org/
 Requires: dune-common dune-grid dune-istl
-Libs: -L
-Cflags: -I
+Libs: -L${libdir}
+Cflags: -I${includedir}
diff --git a/dune/CMakeLists.txt b/dune/CMakeLists.txt
index f62b2603663be0828325d6f0baea2ad203ce7bed..d9733c63b898febe2bfa6a052d15e6d43d4e84fe 100644
--- a/dune/CMakeLists.txt
+++ b/dune/CMakeLists.txt
@@ -1 +1 @@
-add_subdirectory("solvers")
+add_subdirectory(solvers)
diff --git a/dune/Makefile.am b/dune/Makefile.am
index 6d4b6b1938084b4aa717fe17fed96308eb28c7e9..b5abf089252de0eb38618d15a56bcd271491bdaa 100644
--- a/dune/Makefile.am
+++ b/dune/Makefile.am
@@ -1,5 +1,5 @@
-# $Id: $
-
 SUBDIRS = solvers
 
+EXTRA_DIST = CMakeLists.txt
+
 include $(top_srcdir)/am/global-rules
diff --git a/dune/solvers/Makefile.am b/dune/solvers/Makefile.am
index 3ae1ab1f4213e4c89b6cf5a625b028220b4a18d9..3d0a8933d1796e0fe12f53ea4fe38f00574b269f 100644
--- a/dune/solvers/Makefile.am
+++ b/dune/solvers/Makefile.am
@@ -4,4 +4,6 @@ SUBDIRS = common iterationsteps norms operators solvers test transferoperators
 dune_solversdir = $(includedir)/dune/solvers
 dune_solvers_HEADERS = computeenergy.hh
 
+EXTRA_DIST = CMakeLists.txt
+
 include $(top_srcdir)/am/global-rules
diff --git a/dune/solvers/common/Makefile.am b/dune/solvers/common/Makefile.am
index 7abdcc50ac8d1541ea85780dfa038cf5ba1d0b0f..14bd9a2ed137dadf4e18087af052197c3a33ddcb 100644
--- a/dune/solvers/common/Makefile.am
+++ b/dune/solvers/common/Makefile.am
@@ -11,4 +11,6 @@ common_HEADERS = arithmetic.hh \
                  preconditioner.hh \
                  staticmatrixtools.hh
 
+EXTRA_DIST = CMakeLists.txt
+
 include $(top_srcdir)/am/global-rules
diff --git a/dune/solvers/iterationsteps/Makefile.am b/dune/solvers/iterationsteps/Makefile.am
index 050ac67ee659965850172392b7e4138f2e0c2fb1..0b3b1c269eef9a373da05c88c8c57235c82202e9 100644
--- a/dune/solvers/iterationsteps/Makefile.am
+++ b/dune/solvers/iterationsteps/Makefile.am
@@ -24,4 +24,6 @@ iterationsteps_HEADERS = amgstep.hh \
                          trustregiongsstep.cc \
                          trustregiongsstep.hh
 
+EXTRA_DIST = CMakeLists.txt
+
 include $(top_srcdir)/am/global-rules
diff --git a/dune/solvers/norms/Makefile.am b/dune/solvers/norms/Makefile.am
index cd74e773f2ec44fcd781afdc5e8e49167f8af1d0..0a28797a5f7312ed295b711587f30b98b0b0b0aa 100644
--- a/dune/solvers/norms/Makefile.am
+++ b/dune/solvers/norms/Makefile.am
@@ -4,4 +4,6 @@ normsdir = $(includedir)/dune/solvers/norms
 norms_HEADERS = blocknorm.hh  diagnorm.hh  energynorm.hh  fullnorm.hh  h1seminorm.hh \
                 norm.hh  pnorm.hh  sumnorm.hh
 
+EXTRA_DIST = CMakeLists.txt
+
 include $(top_srcdir)/am/global-rules
\ No newline at end of file
diff --git a/dune/solvers/operators/Makefile.am b/dune/solvers/operators/Makefile.am
index e1c13db94cd12fee3a4c3aa3647bd884c491b1c5..10ece4a3189186817c46591699d71b54a4dca72f 100644
--- a/dune/solvers/operators/Makefile.am
+++ b/dune/solvers/operators/Makefile.am
@@ -5,4 +5,6 @@ operators_HEADERS = lowrankoperator.hh \
                     nulloperator.hh \
                     sumoperator.hh
 
+EXTRA_DIST = CMakeLists.txt
+
 include $(top_srcdir)/am/global-rules
diff --git a/dune/solvers/solvers/Makefile.am b/dune/solvers/solvers/Makefile.am
index 798340a9221158eebe41d20159204f82bd620cb7..fd48820fe5cefad57388951cd1f5e1f2802c88e9 100644
--- a/dune/solvers/solvers/Makefile.am
+++ b/dune/solvers/solvers/Makefile.am
@@ -5,4 +5,6 @@ solvers_HEADERS = cgsolver.cc cgsolver.hh iterativesolver.cc iterativesolver.hh
                   loopsolver.cc loopsolver.hh quadraticipopt.hh solver.hh \
                   tcgsolver.cc tcgsolver.hh
 
+EXTRA_DIST = CMakeLists.txt
+
 include $(top_srcdir)/am/global-rules
\ No newline at end of file
diff --git a/dune/solvers/transferoperators/Makefile.am b/dune/solvers/transferoperators/Makefile.am
index d5394ca193801baf8e56fbac7843e9f334d63717..47e9926129c9ec4010afa92f9ffae4e78824a9b9 100644
--- a/dune/solvers/transferoperators/Makefile.am
+++ b/dune/solvers/transferoperators/Makefile.am
@@ -7,4 +7,6 @@ transferoperators_HEADERS = compressedmultigridtransfer.hh multigridtransfer.hh
                 genericmultigridtransfer.hh mandelobsrestrictor.hh truncatedcompressedmgtransfer.cc \
                 truncateddensemgtransfer.hh
 
+EXTRA_DIST = CMakeLists.txt
+
 include $(top_srcdir)/am/global-rules
\ No newline at end of file
diff --git a/m4/CMakeLists.txt b/m4/CMakeLists.txt
index 2c84197caf4a9b8a3bd13bcb786aa58076c34a01..ab4832ecc0f7ce739d483a3312e3a2ae74f1909e 100644
--- a/m4/CMakeLists.txt
+++ b/m4/CMakeLists.txt
@@ -1,4 +1,6 @@
+
 install(FILES
-    dune-solvers.m4
-    ipopt.m4
-    DESTINATION share/dune/aclocal)
+  dune-solvers.m4
+  ipopt.m4
+  DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/dune/aclocal)
+
diff --git a/m4/Makefile.am b/m4/Makefile.am
index d861134118bdf94049cbae369acda6501cfcbbde..725c62cc9f6fb0b92f1e366ecb97da78669bf7e1 100644
--- a/m4/Makefile.am
+++ b/m4/Makefile.am
@@ -3,6 +3,6 @@ M4FILES = dune-solvers.m4 ipopt.m4
 aclocaldir = $(datadir)/dune/aclocal
 aclocal_DATA = $(M4FILES)
 
-EXTRA_DIST = $(M4FILES)
+EXTRA_DIST = $(M4FILES) CMakeLists.txt
 
 include $(top_srcdir)/am/global-rules
diff --git a/m4/dune-solvers.m4 b/m4/dune-solvers.m4
index 7ac5399de94dacb22bc84e56e1c5bf5a312ea381..22ef1d4fc7bcad6eccc29367cb469fdad63c0078 100644
--- a/m4/dune-solvers.m4
+++ b/m4/dune-solvers.m4
@@ -1,9 +1,19 @@
-# Additional checks needed to build the module
+dnl -*- autoconf -*-
+# Macros needed to find dune-solvers and dependent libraries.  They are called by
+# the macros in ${top_src_dir}/dependencies.m4, which is generated by
+# "dunecontrol autogen"
+
+# Additional checks needed to build dune-solvers
+# This macro should be invoked by every module which depends on dune-solvers, as
+# well as by dune-solvers itself
 AC_DEFUN([DUNE_SOLVERS_CHECKS],[
   AC_REQUIRE([DUNE_IPOPT])
 ])
 
-# Additional checks needed to find the module
-AC_DEFUN([DUNE_SOLVERS_CHECK_MODULE],[
-  DUNE_CHECK_MODULES([dune-solvers], [solvers/solvers/solver.hh])
+# Additional checks needed to find dune-solvers
+# This macro should be invoked by every module which depends on dune-solvers, but
+# not by dune-solvers itself
+AC_DEFUN([DUNE_SOLVERS_CHECK_MODULE],
+[
+  DUNE_CHECK_MODULES([dune-solvers],[solvers/solvers/solver.hh])
 ])