diff --git a/cmake/modules/DuneMacros.cmake b/cmake/modules/DuneMacros.cmake
index 64a07dad7c384a75d2b02d7e3435f073255511e9..d2422fafcd01db0316f31a1d77fc5eccda324e74 100644
--- a/cmake/modules/DuneMacros.cmake
+++ b/cmake/modules/DuneMacros.cmake
@@ -123,69 +123,75 @@ function(convert_deps_to_list var)
 endfunction(convert_deps_to_list var)
 
 # add dune-common version from dune.module to config.h
-macro(dune_module_information MODULE_DIR)
-  file(READ "${MODULE_DIR}/dune.module" DUNE_MODULE)
+macro(dune_module_information MODULE_DIR PREFIX)
+  # Is this a directory or the module file
+  string(REGEX MATCH "dune.module$" is_file  "${MODULE_DIR}")
+  if(is_file)
+    file(READ "${MODULE_DIR}" ${PREFIX}_MODULE)
+  else(is_file)
+    file(READ "${MODULE_DIR}/dune.module" ${PREFIX}_MODULE)
+  endif(is_file)
 
   # find version string
-  extract_line("Version:" MODULE_LINE "${DUNE_MODULE}")
+  extract_line("Version:" MODULE_LINE "${${PREFIX}_MODULE}")
   if(NOT MODULE_LINE)
     message(FATAL_ERROR "${MODULE_DIR}/dune.module is missing a version.")
   endif(NOT MODULE_LINE)
 
-  string(REGEX REPLACE ".*Version:[ ]*([^ \n]+).*" "\\1" DUNE_MOD_VERSION "${MODULE_LINE}")
-  string(REGEX REPLACE "([0-9]).*" "\\1" DUNE_VERSION_MAJOR "${DUNE_MOD_VERSION}")
-  string(REGEX REPLACE "[0-9]*\\.([0-9]).*" "\\1" DUNE_VERSION_MINOR "${DUNE_MOD_VERSION}")
-  string(REGEX REPLACE "[0-9]*\\.[0-9]*\\.([0-9]).*" "\\1" DUNE_VERSION_REVISION "${DUNE_MOD_VERSION}")
+  string(REGEX REPLACE ".*Version:[ ]*([^ \n]+).*" "\\1" ${PREFIX}_MOD_VERSION "${MODULE_LINE}")
+  string(REGEX REPLACE "([0-9]).*" "\\1" ${PREFIX}_VERSION_MAJOR "${${PREFIX}_MOD_VERSION}")
+  string(REGEX REPLACE "[0-9]*\\.([0-9]).*" "\\1" ${PREFIX}_VERSION_MINOR "${${PREFIX}_MOD_VERSION}")
+  string(REGEX REPLACE "[0-9]*\\.[0-9]*\\.([0-9]).*" "\\1" ${PREFIX}_VERSION_REVISION "${${PREFIX}_MOD_VERSION}")
 
   # remove false matches in version string
-  string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${DUNE_VERSION_MINOR}")
+  string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${${PREFIX}_VERSION_MINOR}")
   if(NON_NUMBER_CHARACTER)
-    set(DUNE_VERSION_MINOR "0")
+    set(${PREFIX}_VERSION_MINOR "0")
   endif(NON_NUMBER_CHARACTER)
-  string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${DUNE_VERSION_REVISION}")
+  string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${${PREFIX}_VERSION_REVISION}")
   if(NON_NUMBER_CHARACTER)
-    set(DUNE_VERSION_REVISION "0")
+    set(${PREFIX}_VERSION_REVISION "0")
   endif(NON_NUMBER_CHARACTER)
 
   # find strings for module name, maintainer
   # 1. Check for line starting with Module
-  extract_line("Module:" DUNE_MOD_NAME "${DUNE_MODULE}")
-  if(NOT DUNE_MOD_NAME)
+  extract_line("Module:" ${PREFIX}_MOD_NAME "${${PREFIX}_MODULE}")
+  if(NOT ${PREFIX}_MOD_NAME)
     message(FATAL_ERROR "${MODULE_DIR}/dune.module is missing a module name.")
-  endif(NOT DUNE_MOD_NAME)
+  endif(NOT ${PREFIX}_MOD_NAME)
 
   # 2. Check for line starting with Maintainer
-  extract_line("Maintainer:" DUNE_MAINTAINER "${DUNE_MODULE}")
-  if(NOT DUNE_MAINTAINER)
+  extract_line("Maintainer:" ${PREFIX}_MAINTAINER "${${PREFIX}_MODULE}")
+  if(NOT ${PREFIX}_MAINTAINER)
     message(FATAL_ERROR "${MODULE_DIR}/dune.module is missing a maintainer.")
-  endif(NOT DUNE_MAINTAINER)
+  endif(NOT ${PREFIX}_MAINTAINER)
 
   # 3. Check for line starting with Depends
-  extract_line("Depends:" DUNE_DEPENDS "${DUNE_MODULE}")
-  if(DUNE_DEPENDS)
-    split_module_version(${DUNE_DEPENDS} DEPENDS_MODULE DEPENDS_VERSIONS)
-    foreach(_mod ${DUNE_DEPENDS})
+  extract_line("Depends:" ${PREFIX}_DEPENDS "${${PREFIX}_MODULE}")
+  if(${PREFIX}_DEPENDS)
+    split_module_version(${${PREFIX}_DEPENDS} DEPENDS_MODULE DEPENDS_VERSIONS)
+    foreach(_mod ${${PREFIX}_DEPENDS})
       set(${_mod}_REQUIRED REQUIRED)
-    endforeach(_mod ${DUNE_DEPENDS})
-    convert_deps_to_list(DUNE_DEPENDS)
-    message(STATUS "Dependencies: ${DEPENDS_MODULE} (versions: ${DEPENDS_VERSIONS}) DUNE_DEPENDS=${DUNE_DEPENDS}")
-  endif(DUNE_DEPENDS)
+    endforeach(_mod ${${PREFIX}_DEPENDS})
+    convert_deps_to_list(${PREFIX}_DEPENDS)
+    message(STATUS "Dependencies: ${DEPENDS_MODULE} (versions: ${DEPENDS_VERSIONS}) ${PREFIX}_DEPENDS=${${PREFIX}_DEPENDS}")
+  endif(${PREFIX}_DEPENDS)
 
   # 4. Check for line starting with Suggests
-  extract_line("Suggests:" DUNE_SUGGESTS "${DUNE_MODULE}")
-  if(DUNE_SUGGESTS)
-    split_module_version(${DUNE_SUGGESTS} SUGGESTS_MODULE SUGGESTS_VERSION)
-    convert_deps_to_list(DUNE_SUGGESTS)
-    message(STATUS "Suggestions: ${SUGGESTS_MODULE} (versions: ${SUGGESTS_VERSIONS}) DUNE_SUGGESTS=${DUNE_SUGGESTS}")
-  endif(DUNE_SUGGESTS)
+  extract_line("Suggests:" ${PREFIX}_SUGGESTS "${${PREFIX}_MODULE}")
+  if(${PREFIX}_SUGGESTS)
+    split_module_version(${${PREFIX}_SUGGESTS} SUGGESTS_MODULE SUGGESTS_VERSION)
+    convert_deps_to_list(${PREFIX}_SUGGESTS)
+    message(STATUS "Suggestions: ${SUGGESTS_MODULE} (versions: ${SUGGESTS_VERSIONS}) ${PREFIX}_SUGGESTS=${${PREFIX}_SUGGESTS}")
+  endif(${PREFIX}_SUGGESTS)
 
-  dune_module_to_uppercase(DUNE_MOD_NAME_UPPERCASE ${DUNE_MOD_NAME})
+  dune_module_to_uppercase(DUNE_MOD_NAME_UPPERCASE ${${PREFIX}_MOD_NAME})
 
   # set module version
-  set(${DUNE_MOD_NAME_UPPERCASE}_VERSION         "${DUNE_MOD_VERSION}")
-  set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_MAJOR    "${DUNE_VERSION_MAJOR}")
-  set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_MINOR    "${DUNE_VERSION_MINOR}")
-  set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_REVISION "${DUNE_VERSION_REVISION}")
+  set(${DUNE_MOD_NAME_UPPERCASE}_VERSION         "${${PREFIX}_MOD_VERSION}")
+  set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_MAJOR    "${${PREFIX}_VERSION_MAJOR}")
+  set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_MINOR    "${${PREFIX}_VERSION_MINOR}")
+  set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_REVISION "${${PREFIX}_VERSION_REVISION}")
 endmacro(dune_module_information)
 
 macro(dune_process_dependency_leafs modules versions is_required next_level_deps
@@ -198,6 +204,10 @@ macro(dune_process_dependency_leafs modules versions is_required next_level_deps
     foreach(i RANGE 0 ${length})
       list(GET mmodules ${i} _mod)
       find_package(${_mod} ${REQUIRED})
+      set(_dune_module_dir _dune_module_dir-NOTFOUND)
+      find_file(_dune_module_dir dune.module HINTS ${${_mod}_DIR}  ${${_mod}_INCLUDE_DIRS}
+	PATH_SUFFIXES ../../dunecontrol/${_mod})
+      dune_module_information(${_dune_module_dir} ${_mod})
       if(${_mod}_MODULE_PATH)
 	list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH})
       endif(${_mod}_MODULE_PATH)
@@ -264,6 +274,10 @@ macro(dune_create_dependency_tree)
     set(global_suggests ${SUGGESTS_MODULE})
     foreach(_mod ${DEPENDS_MODULE})
       find_package(${_mod} REQUIRED)
+      set(_dune_module_dir _dune_module_dir-NOTFOUND)
+      find_file(_dune_module_dir dune.module HINTS ${${_mod}_DIR} ${${_mod}_INCLUDE_DIRS}
+	PATH_SUFFIXES ../../dunecontrol/${_mod})
+      dune_module_information(${_dune_module_dir} ${_mod})
       if(${_mod}_MODULE_PATH)
 	list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH})
       endif(${_mod}_MODULE_PATH)
@@ -271,6 +285,10 @@ macro(dune_create_dependency_tree)
     endforeach(_mod ${DEPENDS_MODULE})
     foreach(_mod ${SUGGESTS_MODULE})
       find_package(${_mod})
+      set(_dune_module_dir _dune_module_dir-NOTFOUND)
+      find_file(_dune_module_dir dune.module HINTS ${${_mod}_DIR}  ${${_mod}_INCLUDE_DIRS}
+	PATH_SUFFIXES ../../dunecontrol/${_mod})
+      dune_module_information(${_dune_module_dir} ${_mod})
       if(${_mod}_MODULE_PATH)
 	list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH})
       endif(${_mod}_MODULE_PATH)
@@ -360,7 +378,7 @@ macro(dune_project)
   set(CMAKE_C_FLAGS_RELEASE "-funroll-loops -O3")
 
   # extract information from dune.module
-  dune_module_information(${CMAKE_SOURCE_DIR})
+  dune_module_information(${CMAKE_SOURCE_DIR} DUNE)
   set(ProjectName            "${DUNE_MOD_NAME}")
   set(ProjectVersion         "${DUNE_MOD_VERSION}")
   set(ProjectMaintainerEmail "${DUNE_MAINTAINER}")