diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8fc6f636ef5ccdc81431c7a30e4493913ad73488..39c0db72a9258fde881e2fb72eb26e47d5d63648 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,9 +18,9 @@ set(PROMOD3_VERSION_MINOR 1)
 set(PROMOD3_VERSION_PATCH 0)
 set(PROMOD3_VERSION_STRING ${PROMOD3_VERSION_MAJOR}.${PROMOD3_VERSION_MINOR}.${PROMOD3_VERSION_PATCH})
 
-option(DISABLE_DOCUMENTATION "whether to compile with shader support" OFF)
-option(DISABLE_DISABLE_DOCTEST "whether to compile with shader support" OFF)
-option(DISABLE_DISABLE_LINKCHECK "whether to compile with shader support" OFF)
+option(DISABLE_DOCUMENTATION "Do not build documentation" OFF)
+option(DISABLE_DISABLE_DOCTEST "Do not check examples in documentation" OFF)
+option(DISABLE_DISABLE_LINKCHECK "Do not check links in the documentation" OFF)
 
 if (CMAKE_COMPILER_IS_GNUCXX)  
   exec_program(gcc ARGS --version OUTPUT_VARIABLE CMAKE_C_COMPILER_VERSION)
diff --git a/doc/contributing.rst b/doc/contributing.rst
index 16777995889be1ef15ace977e1f43b2b3da3f940..b9bd37f83a2caf79ad5b82a0da3e5b81bc53da76 100644
--- a/doc/contributing.rst
+++ b/doc/contributing.rst
@@ -189,7 +189,7 @@ the Internet. Nevertheless, here is a short list of most important advices:
   :file:`tests/data`
 * If 'exotic' |python| modules are used, consider making the test aware of the
   possibility that the module is not available
-* Test do not fail on purpose
+* Tests do not fail on purpose
 * No failing tests, that are considered 'this does not affect anything'
 
 To run the whole test suite, ``make check`` is enough. This will also trigger
@@ -359,108 +359,130 @@ top level :file:`CMakeLists.txt`:
 
 .. code-block:: cmake
   :linenos:
-  :emphasize-lines: 83
-
-   #-------------------------------------------------------------------------------
-   # Author: Bienchen
-   #-------------------------------------------------------------------------------
-   # Options to CMake:
-   #    DISABLE_DOCUMENTATION: Don't build documentation, don't search for Sphinx
-   #    DISABLE_DOCTEST: Don't run example code from documentation on 'make check'
-   #    DISABLE_LINKCHECK: Don't test links from documentation on 'make check'
-   # (if documentation is disabled, there is no doctest, linkcheck at all)
-   cmake_minimum_required(VERSION 2.6.4 FATAL_ERROR)
-   set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake_support)
-
-   project(PROMOD3 CXX C)
-
-   include(PROMOD3)
-
-   set(PROMOD3_VERSION_MAJOR 0)
-   set(PROMOD3_VERSION_MINOR 1)
-   set(PROMOD3_VERSION_PATCH 0)
-   set(PROMOD3_VERSION_STRING ${PROMOD3_VERSION_MAJOR}.${PROMOD3_VERSION_MINOR}.${PROMOD3_VERSION_PATCH})
-
-   if (CMAKE_COMPILER_IS_GNUCXX)  
-     exec_program(gcc ARGS --version OUTPUT_VARIABLE CMAKE_C_COMPILER_VERSION)
-     if(CMAKE_C_COMPILER_VERSION MATCHES ".*4\\.[5-9].*")
-       set(PROMOD_GCC_45 true)
-     else()
-       set(PROMOD_GCC_45 false)  
-     endif()
-   endif()
-
-   if (OPTIMIZE)
-     set(CMAKE_BUILD_TYPE Release)
-     set(_OPT ON)
-   else()
-      set(CMAKE_BUILD_TYPE Debug)
-      set(_OPT OFF)
-   endif()
-
-   setup_stage()
-   file(MAKE_DIRECTORY ${STAGE_DIR}
-        ${EXECUTABLE_OUTPUT_PATH}
-        ${HEADER_STAGE_PATH}
-        ${LIB_STAGE_PATH}
-        ${LIBEXEC_STAGE_PATH})
-
-   setup_compiler_flags()
-   setup_boost()
-
-   find_package(Python 2.7 REQUIRED)
-   if(NOT DISABLE_DOCUMENTATION)
-     find_package(Sphinx ${PYTHON_VERSION} REQUIRED)
-     set(PYTHON_DOC_URL "https://docs.python.org/${PYTHON_VERSION}")
-     # set this to the URL corresponding to the version of OST you are using
-     set(OST_DOC_URL "http://www.openstructure.org/docs/1.3")
-   endif()
-   find_package(OPENSTRUCTURE 1.4 REQUIRED 
-                COMPONENTS io mol seq seq_alg mol_alg conop)
-   find_package(QMEAN 1.0 REQUIRED)
-
-   if (CMAKE_COMPILER_IS_GNUCXX)
-     # do not write back into cache, otherwise the compile command line gets
-     # expanded with multiple -fno-strict-aliasing flags, triggering a complete
-     # rebuild whenever cmake is run
-     set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-strict-aliasing")
-     if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER "4.6")
-       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes")
-     endif("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER "4.6")
-   endif()
-
-   # basic environment
-   include_directories(${Boost_INCLUDE_DIRS}
-                       ${OST_INCLUDE_DIR}
-                       ${QMEAN_INCLUDE_DIR})
-
-   set(FILES_TO_BE_REMOVED ${PROJECT_BINARY_DIR}/stage)
-   set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
-                                "${FILES_TO_BE_REMOVED}")
-
-   ## sub dirs to be recognised by CMake
-   ## e.g. add_subdirectory(src), subdirs have their own CMakeLists.txt
-   add_subdirectory(config)
-   add_subdirectory(core)
-   add_subdirectory(meld)
-   add_subdirectory(sidechains)
-   add_subdirectory(scripts)
-   add_subdirectory(actions)
-   add_subdirectory(extras)
-   if(NOT DISABLE_DOCUMENTATION)
-     add_changelog_to_doc(FILE "${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG")
-     add_subdirectory(doc)
-   endif()
-
-   ## report setup
-   message(STATUS "PROMOD3 will be built with the following options:\n"
-           "   OpenStructure (-DOST_ROOT) : ${OST_ROOT}\n"
-           "   QMEAN         (-DQMEAN_ROOT) : ${QMEAN_ROOT}\n"
-           "   Optimized     (-DOPTIMIZE) : ${_OPT}\n"
-           "   Python                     : ${PYTHON_BINARY}\n")
+  :emphasize-lines: 103
+
+  #-------------------------------------------------------------------------------
+  # Author: Bienchen
+  #-------------------------------------------------------------------------------
+  # Options to CMake:
+  #    DISABLE_DOCUMENTATION: Don't build documentation, don't search for Sphinx
+  #    DISABLE_DOCTEST: Don't run example code from documentation on 'make check'
+  #    DISABLE_LINKCHECK: Don't test links from documentation on 'make check'
+  # (if documentation is disabled, there is no doctest, linkcheck at all)
+  cmake_minimum_required(VERSION 2.6.4 FATAL_ERROR)
+  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake_support)
+
+  project(ProMod3 CXX C)
+
+  include(PROMOD3)
+
+  set(PROMOD3_VERSION_MAJOR 0)
+  set(PROMOD3_VERSION_MINOR 1)
+  set(PROMOD3_VERSION_PATCH 0)
+  set(PROMOD3_VERSION_STRING ${PROMOD3_VERSION_MAJOR}.${PROMOD3_VERSION_MINOR}.${PROMOD3_VERSION_PATCH})
+
+  option(DISABLE_DOCUMENTATION "Do not build documentation" OFF)
+  option(DISABLE_DISABLE_DOCTEST "Do not check examples in documentation" OFF)
+  option(DISABLE_DISABLE_LINKCHECK "Do not check links in the documentation" OFF)
+
+  if (CMAKE_COMPILER_IS_GNUCXX)
+    exec_program(gcc ARGS --version OUTPUT_VARIABLE CMAKE_C_COMPILER_VERSION)
+    if(CMAKE_C_COMPILER_VERSION MATCHES ".*4\\.[5-9].*")
+      set(PROMOD_GCC_45 true)
+    else()
+      set(PROMOD_GCC_45 false)
+    endif()
+  endif()
+
+  if (OPTIMIZE)
+    set(CMAKE_BUILD_TYPE Release)
+    set(_OPT ON)
+  else()
+     set(CMAKE_BUILD_TYPE Debug)
+     set(_OPT OFF)
+  endif()
+
+  setup_stage()
+  file(MAKE_DIRECTORY ${STAGE_DIR}
+       ${EXECUTABLE_OUTPUT_PATH}
+       ${HEADER_STAGE_PATH}
+       ${LIB_STAGE_PATH}
+       ${LIBEXEC_STAGE_PATH})
+
+  setup_compiler_flags()
+  setup_boost()
+
+  find_package(Python 2.7 REQUIRED)
+  if(NOT DISABLE_DOCUMENTATION)
+    find_package(Sphinx ${PYTHON_VERSION} REQUIRED)
+    set(PYTHON_DOC_URL "https://docs.python.org/${PYTHON_VERSION}")
+    # set this to the URL corresponding to the version of OST you are using
+    set(OST_DOC_URL "http://www.openstructure.org/docs/1.3")
+  endif()
+  find_package(OPENSTRUCTURE 1.4 REQUIRED
+               COMPONENTS io mol seq seq_alg mol_alg conop)
+  find_package(QMEAN 1.0 REQUIRED)
+
+  #The KIC loop closing algorithm requires a solver for a generalized eigen
+  #problem. Eigen3 would provide such a solver, but only allows to extract
+  #the resulting eigenvalues and not the eigenvectors.
+  #As soon as there is an Eigen3 release with the required functionality,
+  #The Lapack dependency can be dropped.
+  find_package(LAPACK)
+
+  if (CMAKE_COMPILER_IS_GNUCXX)
+    # do not write back into cache, otherwise the compile command line gets
+    # expanded with multiple -fno-strict-aliasing flags, triggering a complete
+    # rebuild whenever cmake is run
+    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-strict-aliasing")
+    if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER "4.6")
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes")
+    endif("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER "4.6")
+  endif()
+
+  # additional packages/ headers/ etc.
+  #  Eigen3 is mandatory right now but may vanish once OST switches to the same
+  #  version.
+  find_package(Eigen3 3.2.1 REQUIRED)
+  if(NOT EIGEN3_FOUND)
+    message(FATAL_ERROR "Eigen3 is essential for building ${PROJECT_NAME}.")
+  endif()
+
+  # basic environment
+  include_directories(${Boost_INCLUDE_DIRS}
+                      ${OST_INCLUDE_DIR}
+                      ${QMEAN_INCLUDE_DIR}
+                      ${EIGEN3_INCLUDE_DIR})
+
+  set(FILES_TO_BE_REMOVED ${PROJECT_BINARY_DIR}/stage)
+  set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
+                               "${FILES_TO_BE_REMOVED}")
+
+  ## sub dirs to be recognised by CMake
+  ## e.g. add_subdirectory(src), subdirs have their own CMakeLists.txt
+  add_subdirectory(config)
+  add_subdirectory(core)
+  add_subdirectory(meld)
+  add_subdirectory(sidechains)
+  add_subdirectory(loop)
+  add_subdirectory(scripts)
+  add_subdirectory(actions)
+  add_subdirectory(extras)
+  if(NOT DISABLE_DOCUMENTATION)
+    add_changelog_to_doc(FILE "${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG")
+    add_subdirectory(doc)
+  endif()
+
+  ## report setup
+  message(STATUS "${PROJECT_NAME} will be built with the following options:\n"
+          "   OpenStructure (-DOST_ROOT) : ${OST_ROOT}\n"
+          "   QMEAN         (-DQMEAN_ROOT) : ${QMEAN_ROOT}\n"
+          "   Optimized     (-DOPTIMIZE) : ${_OPT}\n"
+          "   Python                     : ${PYTHON_BINARY}\n"
+          "   Eigen3                     : ${EIGEN3_INCLUDE_DIR}\n")
 
 All that needs to be done for |cmake| to recognise your module is adding its
-directory as shown in line 83.
+directory as shown in line 103.
 
 This was the final step to set up the build system. Running |cmake| at this
 point would create the build environment in place. But building software in