diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 5d58f1cb4e15df04671abc8aa477eb0e726e03c2..ea3c60e1ad55bdae6936eb6677b188327f6f2bb1 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,10 @@
+Changes in Release 1.11.0
+--------------------------------------------------------------------------------
+
+ * This is expected to be the last release supporting Python 2.
+ * Read revision version numbers from mmCIF files.
+ * Several minor bug fixes and improvements.
+
 Changes in Release 1.10.0
 --------------------------------------------------------------------------------
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7b76c4eeabb796d74a31491335e6be9ab53c2a2b..c7b1c5ceeafa4fafc9863670a718cdac505261f9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 2.6.4 FATAL_ERROR)
 project(OpenStructure CXX C)
 set (CMAKE_EXPORT_COMPILE_COMMANDS 1)
 set (OST_VERSION_MAJOR 1)
-set (OST_VERSION_MINOR 10)
+set (OST_VERSION_MINOR 11)
 set (OST_VERSION_PATCH 0)
 set (OST_VERSION_STRING ${OST_VERSION_MAJOR}.${OST_VERSION_MINOR}.${OST_VERSION_PATCH} )
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake_support)
diff --git a/doc/conf/conf.py b/doc/conf/conf.py
index 7a7fa741fbd498a62e8a9c47a8ae6cb77a7b4030..d1b395a9222cfa2feb2d1823e6986f3cb49afce0 100644
--- a/doc/conf/conf.py
+++ b/doc/conf/conf.py
@@ -49,7 +49,7 @@ master_doc = 'index'
 
 # General information about the project.
 project = u'OpenStructure'
-copyright = u'2019, OpenStructure authors'
+copyright = u'2020, OpenStructure authors'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
diff --git a/docker/Dockerfile b/docker/Dockerfile
index a02301453bc4c02b5cbb0de4a2948d64f2d15d0e..552fa6b4f46ec6a6818e5ab3cc35d210e75d386a 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -3,7 +3,7 @@ FROM ubuntu:18.04
 # ARGUMENTS
 ###########
 
-ARG OPENSTRUCTURE_VERSION="1.10.0"
+ARG OPENSTRUCTURE_VERSION="1.11.0"
 ARG SRC_FOLDER="/usr/local/src"
 ARG CPUS_FOR_MAKE=8
 ARG PYTHONPATH="/usr/local/lib64/python2.7/site-packages:${PYTHONPATH}"
diff --git a/modules/base/doc/logging.rst b/modules/base/doc/logging.rst
index df7e24ef74bc32d275e73feb3063c60c7942ac2a..adb5a57682981fec8c588b7bb9aa04d9839c3b15 100644
--- a/modules/base/doc/logging.rst
+++ b/modules/base/doc/logging.rst
@@ -41,11 +41,29 @@ OpenStructure has a logging system going beyond what print statements can offer.
 Verbosity Level
 --------------------------------------------------------------------------------
 
+Several verbosity levels are available. Verbosity levels are represented
+by an enumeration of integer values. They are wrapped to objects with
+memorable names by the :class:`LogLevel` class. The available levels are
+are summarized in the table below.
+
+===========   ================   ===================
+Level name    Verbosity value    LogLevel object
+===========   ================   ===================
+Error         0                  LogLevel.Error
+Warning       1                  LogLevel.Warning
+Script        2                  LogLevel.Script
+Info          3                  LogLevel.Info
+Verbose       4                  LogLevel.Verbose
+Debug         5                  LogLevel.Debug
+Trace         6                  LogLevel.Trace
+===========   ================   ===================
+
 You can change the verbosity level  with the following two methods:
 
 .. function:: PushVerbosityLevel(verbosity)
 
-  Change the verbosity level to the given integer value. All log events which
+  Change the verbosity level to the given integer value or :class:`LogLevel` 
+  enumeration object. All log events which
   have a severity above *verbosity* will not be shown. By default, the log level
   is 2, meaning that errors, warnings and script logging events are visible. By
   setting it to -1, you can disable all logging.
@@ -53,6 +71,14 @@ You can change the verbosity level  with the following two methods:
   :param verbosity: Desired verbosity level
   :type  verbosity: :class:`int`
 
+  .. code-block:: python
+    
+       # Display warnings and errors:
+       ost.PushVerbosityLevel(ost.LogLevel.Warning)
+
+       # Disable all logging:
+       ost.PushVerbosityLevel(-1)
+
 .. function:: PopVerbosityLevel()
 
   Change the log level back to the previous verbosity level. It is an error to 
@@ -68,7 +94,36 @@ You can change the verbosity level  with the following two methods:
 
   Enumerates the logging levels (see :ref:`picking-logging-level`). Values:
 
-    Error, Warning, Script, Info, Verbose, Debug, Trace
+    .. attribute:: Error, Warning, Script, Info, Verbose, Debug, Trace
+
+      The enumerated LogLevel object, which wraps the corresponding integer
+      value. Note that these attributes are LogLevel objects themselves.
+
+      :type: :class:`LogLevel`
+
+      .. code-block:: python
+
+          ost.LogLevel.Info
+          # Outputs: ost._ost_base.LogLevel.Info
+
+          print ost.LogLevel.Info
+          # Outputs: Info
+          
+          int(ost.LogLevel.Info)
+          # Outputs: 3
+
+  These objects behave like integers, meaning that numeric comparisons work
+  as expected. So for instance if you want to increase verbosity to the Info
+  level, but leave it unchanged if it was already set to a higher value (such
+  as Debug), you can do the following:
+
+  .. code-block:: python
+
+    new_level = max(ost.GetVerbosityLevel(), ost.LogLevel.Info)
+    ost.PopVerbosityLevel()
+    ost.PushVerbosityLevel(new_level)
+
+
          
 Log sinks
 --------------------------------------------------------------------------------
@@ -217,4 +272,4 @@ terminal (or the python shell in DNG). The logger also prints the current time.
   py_logger=PyLogger()
   ost.PushLogSink(py_logger)
 
-  ost.LogInfo("amazing logging system")
\ No newline at end of file
+  ost.LogInfo("amazing logging system")
diff --git a/modules/base/pymod/export_logger.cc b/modules/base/pymod/export_logger.cc
index 41433a40a9a9b0553bb3834ee94c79abf766a64e..1434b4f6721113600427e205a18c85f2e4e754e6 100644
--- a/modules/base/pymod/export_logger.cc
+++ b/modules/base/pymod/export_logger.cc
@@ -18,6 +18,7 @@
 //------------------------------------------------------------------------------
 #include <boost/python.hpp>
 #include <boost/python/raw_function.hpp>
+#include <boost/version.hpp>
 #if BOOST_VERSION<103400
 #include <boost/python/detail/api_placeholder.hpp>
 #endif
diff --git a/modules/base/src/boost_filesystem_helper.hh b/modules/base/src/boost_filesystem_helper.hh
index 450ffa94deaef5b230c11cd0129e3a5422549fda..03a9786e75d838d97fbee3694a59fb79dd177132 100644
--- a/modules/base/src/boost_filesystem_helper.hh
+++ b/modules/base/src/boost_filesystem_helper.hh
@@ -24,6 +24,7 @@
 #define OST_BOOST_FILESYSTEM_HELPER_HH
 
 #include <boost/filesystem/path.hpp>
+#include <boost/version.hpp>
 
 namespace {
 
diff --git a/modules/base/tests/test_generic_property.cc b/modules/base/tests/test_generic_property.cc
index 17632311a8ae45128463d7f05389ad6fde7e9caf..c30c1fc6ffd83058a386b6afc4f6855d5db6244d 100644
--- a/modules/base/tests/test_generic_property.cc
+++ b/modules/base/tests/test_generic_property.cc
@@ -19,7 +19,6 @@
 #define BOOST_TEST_DYN_LINK
 
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/mol.hh>
 
diff --git a/modules/base/tests/test_pod_vector.cc b/modules/base/tests/test_pod_vector.cc
index 0e7225cedd522e89e527b0ea643932b80ae37beb..3cf34fc4c511f06619bea27f09e78b3ab70fe292 100644
--- a/modules/base/tests/test_pod_vector.cc
+++ b/modules/base/tests/test_pod_vector.cc
@@ -22,7 +22,6 @@
 #include <ost/pod_vector.hh>
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 using namespace ost;
 
diff --git a/modules/base/tests/test_string_ref.cc b/modules/base/tests/test_string_ref.cc
index 05b9bd84416d083d7b9c178914550305fb922d95..7ef5b67768347822693f6d75918e7954a109e716 100644
--- a/modules/base/tests/test_string_ref.cc
+++ b/modules/base/tests/test_string_ref.cc
@@ -23,8 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
 #include <ost/string_ref.hh>
 using namespace ost;
 
diff --git a/modules/base/tests/tests.cc b/modules/base/tests/tests.cc
index 9d9646b9f8ead978584f0a48da4af3c58a671fad..8bf9b0a2357bd946b17b31d2e554684ef2e4f4da 100644
--- a/modules/base/tests/tests.cc
+++ b/modules/base/tests/tests.cc
@@ -18,7 +18,4 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE ost_base
-#define BOOST_AUTO_TEST_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-
diff --git a/modules/conop/tests/test_amino_acids.cc b/modules/conop/tests/test_amino_acids.cc
index 29266729c3c24d8e4c1857c1321f6c6a14c79870..58c842a57e7281e2111bf88495fc43f71b49799e 100644
--- a/modules/conop/tests/test_amino_acids.cc
+++ b/modules/conop/tests/test_amino_acids.cc
@@ -23,7 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/conop/amino_acids.hh>
 
diff --git a/modules/conop/tests/test_heuristic_builder.cc b/modules/conop/tests/test_heuristic_builder.cc
index f2378e660eb4649fb0787af02e65ab5c21481839..cf6efa96f28187ded714133b97b87b955ca2b76f 100644
--- a/modules/conop/tests/test_heuristic_builder.cc
+++ b/modules/conop/tests/test_heuristic_builder.cc
@@ -22,7 +22,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/log.hh>
 using boost::unit_test_framework::test_suite;
diff --git a/modules/conop/tests/test_heuristic_conop.cc b/modules/conop/tests/test_heuristic_conop.cc
index 61155c644b20c11220218355153a8b334e4817bf..65e0a7fc2d7e9f5de8754b8668eedb28db1e5b44 100644
--- a/modules/conop/tests/test_heuristic_conop.cc
+++ b/modules/conop/tests/test_heuristic_conop.cc
@@ -24,7 +24,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include "helper.hh"
 using boost::unit_test_framework::test_suite;
 using namespace ost;
diff --git a/modules/conop/tests/test_rule_based_conop.cc b/modules/conop/tests/test_rule_based_conop.cc
index 1ce4ebe2436ff5f3d148a6272d3cb7b73cefb481..485454611462364f4a77f75d0fff4f3dd3672daf 100644
--- a/modules/conop/tests/test_rule_based_conop.cc
+++ b/modules/conop/tests/test_rule_based_conop.cc
@@ -20,7 +20,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/mol.hh>
 #include <ost/platform.hh>
diff --git a/modules/conop/tests/tests.cc b/modules/conop/tests/tests.cc
index 7a6d17c40b6332d2185913263122eb86e91d3df6..21dd70140444ba26a29e3c3ce7a85b8d7faaa2b2 100644
--- a/modules/conop/tests/tests.cc
+++ b/modules/conop/tests/tests.cc
@@ -18,6 +18,4 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE ost_conop
-#define BOOST_AUTO_TEST_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
diff --git a/modules/doc/install.rst b/modules/doc/install.rst
index b86672515a32ada004e5a40b97acd8750997f773..cfea868bf996b792f7942aff96324fa692ab73f7 100644
--- a/modules/doc/install.rst
+++ b/modules/doc/install.rst
@@ -205,7 +205,7 @@ can influence it.
     files directly)
   * `PNG_LIBRARY` defines the location of the libpng library (file name starting
     with `libpng`)
-  * `PNG_INCLUDE_DIR` defines the include folder of libpng (contains include
+  * `PNG_PNG_INCLUDE_DIR` defines the include folder of libpng (contains include
     files directly)
   * `ZLIB_LIBRARY` defines the location of the zlib library (file name starting
     with `libz`)
diff --git a/modules/geom/src/vec_mat_predicates.hh b/modules/geom/src/vec_mat_predicates.hh
index 7f897a5099941015200444cc5148a19098fa39ca..bbe639f3b70f7e68cafaf96e30668027d3c95b33 100644
--- a/modules/geom/src/vec_mat_predicates.hh
+++ b/modules/geom/src/vec_mat_predicates.hh
@@ -18,9 +18,13 @@
 //------------------------------------------------------------------------------
 #ifndef OST_GEOM_VEC_MAT_PREDICATES_HH
 #define OST_GEOM_VEC_MAT_PREDICATES_HH
-#include <boost/version.hpp>
 #include <boost/test/unit_test.hpp>
+#include <boost/version.hpp>
+#if BOOST_VERSION<105900
 #include <boost/test/floating_point_comparison.hpp>
+#else
+#include <boost/test/tools/floating_point_comparison.hpp>
+#endif
 #include <ost/geom/geom.hh>
 
 
diff --git a/modules/geom/tests/test_composite2.cc b/modules/geom/tests/test_composite2.cc
index 612d73b0a13b3ef27f6ad86b88e0ffbcc72c6b0f..a459f74d1123ff14855470eb41f49f573078301b 100644
--- a/modules/geom/tests/test_composite2.cc
+++ b/modules/geom/tests/test_composite2.cc
@@ -23,7 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_composite3.cc b/modules/geom/tests/test_composite3.cc
index a9fb6ea4d6bf4038c91450ac4b74f6edec35b8b8..48309acd0476adbced427021e1ffb23af061079a 100644
--- a/modules/geom/tests/test_composite3.cc
+++ b/modules/geom/tests/test_composite3.cc
@@ -23,8 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_mat2.cc b/modules/geom/tests/test_mat2.cc
index c0f2e429f130a93186f9114e7275b5be9bbd3f23..944de8e9a5276af0c1e33c0c414fc5032379eeb8 100644
--- a/modules/geom/tests/test_mat2.cc
+++ b/modules/geom/tests/test_mat2.cc
@@ -21,7 +21,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_mat3.cc b/modules/geom/tests/test_mat3.cc
index 7481e519e4bbf2d8b9c26943521fd73044a24bdd..2d4ce923eb4d276b2c3b6acece0e56dd5f286009 100644
--- a/modules/geom/tests/test_mat3.cc
+++ b/modules/geom/tests/test_mat3.cc
@@ -21,7 +21,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_mat4.cc b/modules/geom/tests/test_mat4.cc
index 64c0eff7a9efa0f9d2b06ca920f793ad9fa0e433..bee468108bc8c038caae0b2156dcd67d6f3a3b2d 100644
--- a/modules/geom/tests/test_mat4.cc
+++ b/modules/geom/tests/test_mat4.cc
@@ -21,7 +21,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_op2.cc b/modules/geom/tests/test_op2.cc
index fd52c6f3b32cb9d50ab370be1c99cf670e7dc78b..3805cc879bbf5caa0df7d1ab885b7add4f30e744 100644
--- a/modules/geom/tests/test_op2.cc
+++ b/modules/geom/tests/test_op2.cc
@@ -21,7 +21,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_op3.cc b/modules/geom/tests/test_op3.cc
index b37013a8c096bc5d2c90566f36ee9c26fa926377..519b19f8eb38cf3126d7a1ee083f769f7023b5b2 100644
--- a/modules/geom/tests/test_op3.cc
+++ b/modules/geom/tests/test_op3.cc
@@ -21,7 +21,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_op4.cc b/modules/geom/tests/test_op4.cc
index b9c4beeedfaa2e8e91693dbd86fbb17788a592d9..96edec9175189a3e4b30446b215ad3e65a43cc71 100644
--- a/modules/geom/tests/test_op4.cc
+++ b/modules/geom/tests/test_op4.cc
@@ -21,7 +21,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 
 #include "helper.hh"
diff --git a/modules/geom/tests/test_quat.cc b/modules/geom/tests/test_quat.cc
index 54b8cea33e8ae65206d96dfcf35af88e43f19082..158f44d1ee415c6ab32a475ef89ad543e819350e 100644
--- a/modules/geom/tests/test_quat.cc
+++ b/modules/geom/tests/test_quat.cc
@@ -21,8 +21,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_transform.cc b/modules/geom/tests/test_transform.cc
index 8ac2ce97b579fe2e5c854c31b6a348e9e0a0910c..f52a47628f635d8c01a9889e77a0fbdbef8bde78 100644
--- a/modules/geom/tests/test_transform.cc
+++ b/modules/geom/tests/test_transform.cc
@@ -21,7 +21,6 @@
  */
  #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/geom/geom.hh>
 
 using namespace geom;
diff --git a/modules/geom/tests/test_vec2.cc b/modules/geom/tests/test_vec2.cc
index c7cb014de5378c0da4745ad327c260d48fe9c592..3ea6090b2c3d3ce4e4cf348d360ede46bfc75ce8 100644
--- a/modules/geom/tests/test_vec2.cc
+++ b/modules/geom/tests/test_vec2.cc
@@ -21,7 +21,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_vec3.cc b/modules/geom/tests/test_vec3.cc
index 9b2a4cc8bb9919c1cee60581a11312ed8e76da57..b7c03ff7f2a3ec7f5b43d55c7a498a00df9caad6 100644
--- a/modules/geom/tests/test_vec3.cc
+++ b/modules/geom/tests/test_vec3.cc
@@ -21,7 +21,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/test_vec4.cc b/modules/geom/tests/test_vec4.cc
index f39988a41eef50063a77810c0e8ff5b08f785915..44b87bcf19a9aee5018159ddd02b93cecaa98dbb 100644
--- a/modules/geom/tests/test_vec4.cc
+++ b/modules/geom/tests/test_vec4.cc
@@ -22,7 +22,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include "helper.hh"
 using namespace geom;
diff --git a/modules/geom/tests/tests.cc b/modules/geom/tests/tests.cc
index 87ec85ccf0cf850e2307d22223343055c59eb17f..c0b2b30306327a8892ab74e9bbc22923711f2c84 100644
--- a/modules/geom/tests/tests.cc
+++ b/modules/geom/tests/tests.cc
@@ -18,7 +18,4 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE geom
-#define BOOST_AUTO_TEST_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-
diff --git a/modules/gfx/src/CMakeLists.txt b/modules/gfx/src/CMakeLists.txt
index acd3f9eb4bf94f4fe29b2e4dccd863a0659f8ecc..d7790789e5c38d1bac5fcd90a29cba681aac1297 100644
--- a/modules/gfx/src/CMakeLists.txt
+++ b/modules/gfx/src/CMakeLists.txt
@@ -210,7 +210,7 @@ module(NAME gfx SOURCES ${OST_GFX_SOURCES} ${OST_GFX_MAP_SOURCES}
                ${OST_GFX_HEADERS} ${OST_GFX_MAP_HEADERS}
        DEPENDS_ON ${OST_GFX_DEPENDENCIES})
 
-include_directories(${PNG_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR})
+include_directories(${PNG_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIR})
 
 # link against OpenGL and PNG libraries
 target_link_libraries(ost_gfx ${OPENGL_LIBRARIES} ${PNG_LIBRARIES})
diff --git a/modules/gfx/tests/test_color.cc b/modules/gfx/tests/test_color.cc
index 26784b4cc6bbac872aa3b4703564b1b3be8aeb95..21f82f2c3e54f06eaae81c0affad095f106d7d33 100644
--- a/modules/gfx/tests/test_color.cc
+++ b/modules/gfx/tests/test_color.cc
@@ -25,7 +25,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
 
 using boost::unit_test_framework::test_suite;
 
diff --git a/modules/gui/pymod/init_context_menu.py b/modules/gui/pymod/init_context_menu.py
index 568241a3a35d7737230fe65f16a4e83319dd519e..9693ef5c8db13ef1dca585a17614eb77650aaa6b 100644
--- a/modules/gui/pymod/init_context_menu.py
+++ b/modules/gui/pymod/init_context_menu.py
@@ -269,7 +269,7 @@ class AlignmentContextMenu(QtCore.QObject):
     if(sd.exec_()):
       self.__Align(sd.GetEntities(),sd.GetShowScores(), sd.GetDisplayAlignment())
         
-  def __Align(self, ent_list,show_scores=True, display_alignment=False):
+  def __Align(self, ent_list, show_scores=True, display_alignment=False):
     node = ent_list[0]
     res_list = list()
     if isinstance(node, gfx.Entity):
@@ -277,7 +277,9 @@ class AlignmentContextMenu(QtCore.QObject):
       for i in range(1,len(ent_list)):
         node = ent_list[i]
         if isinstance(node, gfx.Entity):
-          res_list.append(WrappedTMAlign(node.view.chains[0], ref))
+          tm_result = WrappedTMAlign(node.view.chains[0], ref)
+          res_list.append(tm_result)
+          node.view.handle.EditXCS().ApplyTransform(tm_result.transform)
           node.UpdatePositions()
     if show_scores:
       self.__ShowScore(ent_list, res_list)
diff --git a/modules/gui/src/file_loader.cc b/modules/gui/src/file_loader.cc
index c9d958acf815dca5caf6b3ca06d178ebd3e44595..476c6e89fc2a0a5f032b304c3e3427dd918f1d84 100644
--- a/modules/gui/src/file_loader.cc
+++ b/modules/gui/src/file_loader.cc
@@ -126,7 +126,7 @@ void FileLoader::AddToScene(const QString& filename, gfx::GfxObjP obj)
       gfx::Scene::Instance().SetCenter(obj->GetCenter());
     }
   }
-  catch (Error m) {
+  catch (Error& m) {
     FileLoader::HandleError(m, GFX_ADD, filename, obj);
   }
 }
@@ -208,7 +208,7 @@ gfx::GfxObjP FileLoader::TryLoadEntity(const QString& filename, io::EntityIOHand
     try{
       handler = io::IOManager::Instance().FindEntityImportHandler(filename.toStdString());
     }
-    catch(io::IOUnknownFormatException e){
+    catch(io::IOUnknownFormatException& e){
       handler = io::EntityIOHandlerP();
     }
   }
@@ -242,7 +242,7 @@ gfx::GfxObjP FileLoader::TryLoadMap(const QString& filename, io::MapIOHandlerPtr
     try{
       handler = io::IOManager::Instance().FindMapImportHandlerFile(filename.toStdString(),io::UndefinedImageFormat());
     }
-    catch(io::IOUnknownFormatException e){
+    catch(io::IOUnknownFormatException& e){
       handler = io::MapIOHandlerPtr();
     }
   }
@@ -275,7 +275,7 @@ gfx::GfxObjP FileLoader::TryLoadSurface(const QString& filename, io::SurfaceIOHa
     try{
       handler = io::IOManager::Instance().FindSurfaceImportHandler(filename.toStdString(),"auto");
     }
-    catch(io::IOUnknownFormatException e){
+    catch(io::IOUnknownFormatException& e){
       handler = io::SurfaceIOHandlerPtr();
     }
   }
@@ -306,7 +306,7 @@ gfx::GfxObjP FileLoader::TryLoadAlignment(const QString& filename,
     try{
       handler = io::IOManager::Instance().FindAlignmentImportHandler(filename.toStdString(),"auto");
     }
-    catch(io::IOUnknownFormatException e){
+    catch(io::IOUnknownFormatException& e){
       handler = io::SequenceIOHandlerPtr();
     }
   }
@@ -378,7 +378,7 @@ void FileLoader::LoadPDB(const QString& filename, const QString& selection)
     try{
       gfx::Scene::Instance().Add(gfx_ent);
     }
-    catch (Error e) {
+    catch (Error& e) {
       HandleError(e, GFX_ADD, filename, gfx_ent);
     }
     if (gfx::Scene::Instance().GetRootNode()->GetChildCount()==1) {
@@ -391,7 +391,7 @@ void FileLoader::LoadPDB(const QString& filename, const QString& selection)
         gfx::Scene::Instance().Add(gfx_ent);
       }
     }
-    catch (Error e) {
+    catch (Error& e) {
       FileLoader::HandleError(e,GFX_MULTIPLE_ADD,filename);
     }
   }
diff --git a/modules/gui/src/python_shell/python_interpreter.cc b/modules/gui/src/python_shell/python_interpreter.cc
index 8fe84743fa5e1d70ea746719a3c2a263db3a7914..29178f2c0a7816459f4838f8b7efe75b447851ea 100644
--- a/modules/gui/src/python_shell/python_interpreter.cc
+++ b/modules/gui/src/python_shell/python_interpreter.cc
@@ -140,12 +140,12 @@ CodeBlockStatus PythonInterpreter::GetCodeBlockStatus(const QString& command)
           String doc=bp::extract<String>(result.attr("__doc__"));
           complete=true;
           status=CODE_BLOCK_COMPLETE;
-        } catch(bp::error_already_set) {
+        } catch(bp::error_already_set&) {
           status=CODE_BLOCK_INCOMPLETE;
           ++i;          
           PyErr_Clear();
         }
-      } catch(bp::error_already_set) {
+      } catch(bp::error_already_set&) {
         status=CODE_BLOCK_ERROR;
         complete=true;
         PyErr_Clear();
diff --git a/modules/gui/src/python_shell/python_interpreter_worker.cc b/modules/gui/src/python_shell/python_interpreter_worker.cc
index 842b1c4ddf1fd36c3dc47f57c19c4d6b6a1b70ea..5f7fb42a6db98946d27656124c82b8b5fa396ea2 100644
--- a/modules/gui/src/python_shell/python_interpreter_worker.cc
+++ b/modules/gui/src/python_shell/python_interpreter_worker.cc
@@ -132,7 +132,7 @@ void PythonInterpreterWorker::run_command_(std::pair<unsigned int,QString> pair)
     error_redirector_->Flush();
     emit Finished(pair.first,true);
     return;
-  }catch(bp::error_already_set){
+  }catch(bp::error_already_set&){
     if(PyErr_ExceptionMatches(PyExc_SystemExit)){
       PyErr_Clear();
       //emit Exit();
diff --git a/modules/gui/src/python_shell/python_namespace_tree_item.cc b/modules/gui/src/python_shell/python_namespace_tree_item.cc
index 5c59e235810eb61c730cc36b11989aa416c46901..e03444f692f1f18962f970b2132d85a79409610d 100644
--- a/modules/gui/src/python_shell/python_namespace_tree_item.cc
+++ b/modules/gui/src/python_shell/python_namespace_tree_item.cc
@@ -110,7 +110,7 @@ void PythonNamespaceTreeItem::FetchMore()
     try{
       String keystring=bp::extract<String>(keys[i]);
       child_namespace=namespace_.attr(keystring.c_str());
-    } catch(bp::error_already_set) {
+    } catch(bp::error_already_set&) {
       PyErr_Clear();
     }
     children_.append(new PythonNamespaceTreeItem(child_namespace,
diff --git a/modules/img/alg/tests/test_normalizer.cc b/modules/img/alg/tests/test_normalizer.cc
index 205a5a5b31125332ea527bd4e0e666f75f0b5354..2b13c649f5441cc99fc7c6fa7d49ab0da05f8a7d 100644
--- a/modules/img/alg/tests/test_normalizer.cc
+++ b/modules/img/alg/tests/test_normalizer.cc
@@ -25,6 +25,12 @@
 #include <iostream>
 
 #include "tests.hh"
+#include <boost/version.hpp>
+#if BOOST_VERSION<105900
+#include <boost/test/floating_point_comparison.hpp>
+#else
+#include <boost/test/tools/floating_point_comparison.hpp>
+#endif
 
 #include <ost/img/image.hh>
 #include  <ost/img/alg/normalizer_factory.hh>
diff --git a/modules/img/base/src/image_state/CMakeLists.txt b/modules/img/base/src/image_state/CMakeLists.txt
index f02420efc2276c837f5a811e0975081164e599ce..71a1daf9a98617b84975885ddedfd66f1fc5af9b 100644
--- a/modules/img/base/src/image_state/CMakeLists.txt
+++ b/modules/img/base/src/image_state/CMakeLists.txt
@@ -6,7 +6,6 @@ PARENT_SCOPE
 )
 
 set(OST_IMG_IMAGE_STATE_HEADERS
-binop.hh
 dispatch.hh
 image_state.hh
 image_state_fw.hh
diff --git a/modules/img/base/src/image_state/binop.cc b/modules/img/base/src/image_state/binop.cc
deleted file mode 100644
index dc3339aa2939b1f6b1974b0fceadc584eb7b93ab..0000000000000000000000000000000000000000
--- a/modules/img/base/src/image_state/binop.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-//------------------------------------------------------------------------------
-// This file is part of the OpenStructure project <www.openstructure.org>
-//
-// Copyright (C) 2008-2011 by the OpenStructure authors
-// Copyright (C) 2003-2010 by the IPLT authors
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License as published by the Free
-// Software Foundation; either version 3.0 of the License, or (at your option)
-// any later version.
-// This library is distributed in the hope that it will be useful, but WITHOUT
-// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-// details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this library; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-//------------------------------------------------------------------------------
-
-/*
-  Author: Ansgar Philippsen
-*/
-
-#ifndef IMG_IMAGE_STATE_INST_H
-#error "binop.cc must be included from image_state_inst.hh"
-#endif
-
-#include "binop.hh"
-
-#include <ost/img/extent_iterator.hh>
-
-namespace ost { namespace img { namespace image_state { namespace binop {
-
-template<typename T1, class D1, typename T2, class D2>
-void fnc_add_ip<T1,D1,T2,D2>::operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs)
-{
-  Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
-  for(ExtentIterator it(ov);!it.AtEnd();++it) {
-    lhs->Value(it)+=Val2Val<T2,T1>(rhs->Value(it));
-  }
-}
-
-
-
-template<typename T1, class D1, typename T2, class D2>
-void fnc_sub_ip<T1,D1,T2,D2>::operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs)
-{
-  Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
-  for(ExtentIterator it(ov);!it.AtEnd();++it) {
-    lhs->Value(it)-=Val2Val<T2,T1>(rhs->Value(it));
-  }
-}
-
-
-template<typename T1, class D1, typename T2, class D2>
-void fnc_mul_ip<T1,D1,T2,D2>::operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs)
-{
-  Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
-  for(ExtentIterator it(ov);!it.AtEnd();++it) {
-    lhs->Value(it)*=Val2Val<T2,T1>(rhs->Value(it));
-  }
-}
-
-
-template<typename T1, class D1, typename T2, class D2>
-void fnc_div_ip<T1,D1,T2,D2>::operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs)
-{
-  Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
-  for(ExtentIterator it(ov);!it.AtEnd();++it) {
-    lhs->Value(it)/=Val2Val<T2,T1>(rhs->Value(it));
-  }
-}
-
-
-// partial specialization for half_frequency rhs
-template<typename T1, class D1>
-struct fnc_paste_ip<T1,D1,Complex,HalfFrequencyDomain> {
-  void operator()(ImageStateImpl<T1,D1>* lhs,
-		  const ImageStateImpl<Complex,HalfFrequencyDomain>* rhs)
-  {
-    Extent ov=Overlap(lhs->GetExtent(),rhs->GetLogicalExtent());
-    for(ExtentIterator it(ov);!it.AtEnd();++it) {
-      lhs->Value(it)=Val2Val<Complex,T1>(rhs->GetComplex(it));
-    }
-  }
-};
-
-// default for rest
-template<typename T1, class D1, typename T2, class D2>
-void fnc_paste_ip<T1,D1,T2,D2>::operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs)
-{
-  Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
-  for(ExtentIterator it(ov);!it.AtEnd();++it) {
-    lhs->Value(it)=Val2Val<T2,T1>(rhs->Value(it));
-  }
-}
-
-// required explicit template instantiation for optimization to work
-template struct fnc_paste_ip<Real,SpatialDomain,Complex,HalfFrequencyDomain>;
-template struct fnc_paste_ip<Complex,SpatialDomain,Complex,HalfFrequencyDomain>;
-template struct fnc_paste_ip<Word,SpatialDomain,Complex,HalfFrequencyDomain>;
-template struct fnc_paste_ip<Real,FrequencyDomain,Complex,HalfFrequencyDomain>;
-template struct fnc_paste_ip<Complex,FrequencyDomain,Complex,HalfFrequencyDomain>;
-template struct fnc_paste_ip<Complex,HalfFrequencyDomain,Complex,HalfFrequencyDomain>;
-template struct fnc_paste_ip<Real,FrequencyDomain,Complex,SpatialDomain>;
-template struct fnc_paste_ip<Real,FrequencyDomain,unsigned short,SpatialDomain>;
-template struct fnc_paste_ip<Complex,FrequencyDomain,unsigned short,SpatialDomain>;
-template struct fnc_paste_ip<Complex,HalfFrequencyDomain,unsigned short,SpatialDomain>;
-template struct fnc_paste_ip<Complex,HalfFrequencyDomain,Real,SpatialDomain>;
-template struct fnc_paste_ip<Complex,HalfFrequencyDomain,Complex,SpatialDomain>;
-template struct fnc_paste_ip<Complex,FrequencyDomain,Complex,SpatialDomain>;
-template struct fnc_paste_ip<Complex,FrequencyDomain,Real,SpatialDomain>;
-template struct fnc_paste_ip<Real,FrequencyDomain,Real,SpatialDomain>;
-
-template struct fnc_add_ip<Real,SpatialDomain,Real,SpatialDomain>;
-template struct fnc_sub_ip<Real,SpatialDomain,Real,SpatialDomain>;
-template struct fnc_mul_ip<Real,SpatialDomain,Real,SpatialDomain>;
-template struct fnc_div_ip<Real,SpatialDomain,Real,SpatialDomain>;
-}
-
-template struct dispatch::binary_dispatch_ip<binop::fnc_add_ip>;
-template struct dispatch::binary_dispatch_ip<binop::fnc_sub_ip>;
-template struct dispatch::binary_dispatch_ip<binop::fnc_mul_ip>;
-template struct dispatch::binary_dispatch_ip<binop::fnc_div_ip>;
-template struct dispatch::binary_dispatch_ip<binop::fnc_paste_ip>;
-
-}}} // ns
-
diff --git a/modules/img/base/src/image_state/binop.hh b/modules/img/base/src/image_state/binop.hh
deleted file mode 100644
index 68fdc3bef529b2f4ac5eae1af9e37bf1bee12c27..0000000000000000000000000000000000000000
--- a/modules/img/base/src/image_state/binop.hh
+++ /dev/null
@@ -1,74 +0,0 @@
-//------------------------------------------------------------------------------
-// This file is part of the OpenStructure project <www.openstructure.org>
-//
-// Copyright (C) 2008-2011 by the OpenStructure authors
-// Copyright (C) 2003-2010 by the IPLT authors
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License as published by the Free
-// Software Foundation; either version 3.0 of the License, or (at your option)
-// any later version.
-// This library is distributed in the hope that it will be useful, but WITHOUT
-// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-// details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this library; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-//------------------------------------------------------------------------------
-
-/*
-  Author: Ansgar Philippsen
-*/
-
-#ifndef IMG_IMAGE_STATE_BINOP_HH
-#define IMG_IMAGE_STATE_BINOP_HH
-
-#include "dispatch.hh"
-
-namespace ost { namespace img { namespace image_state { namespace binop {
-
-// add
-template<typename T1, class D1, typename T2, class D2>
-struct fnc_add_ip {
-  void operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs);
-};
-
-typedef dispatch::binary_dispatch_ip<fnc_add_ip> add_ip;
-
-// sub
-template<typename T1, class D1, typename T2, class D2>
-struct fnc_sub_ip {
-  void operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs);
-};
-
-typedef dispatch::binary_dispatch_ip<fnc_sub_ip> sub_ip;
-
-// mul
-template<typename T1, class D1, typename T2, class D2>
-struct fnc_mul_ip {
-  void operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs);
-};
-
-typedef dispatch::binary_dispatch_ip<fnc_mul_ip> mul_ip;
-
-// div
-template<typename T1, class D1, typename T2, class D2>
-struct fnc_div_ip {
-  void operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs);
-};
-
-typedef dispatch::binary_dispatch_ip<fnc_div_ip> div_ip;
-
-// paste
-template<typename T1, class D1, typename T2, class D2>
-struct fnc_paste_ip {
-  void operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs);
-};
-
-typedef dispatch::binary_dispatch_ip<fnc_paste_ip> paste_ip;
-
-}}}} // ns
-
-#endif
diff --git a/modules/img/base/src/image_state/dispatch_fw.hh b/modules/img/base/src/image_state/dispatch_fw.hh
deleted file mode 100644
index 2d9ca733c6e0b961f522e0ca3fb33254f4a0cb1d..0000000000000000000000000000000000000000
--- a/modules/img/base/src/image_state/dispatch_fw.hh
+++ /dev/null
@@ -1,43 +0,0 @@
-//------------------------------------------------------------------------------
-// This file is part of the OpenStructure project <www.openstructure.org>
-//
-// Copyright (C) 2008-2011 by the OpenStructure authors
-// Copyright (C) 2003-2010 by the IPLT authors
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License as published by the Free
-// Software Foundation; either version 3.0 of the License, or (at your option)
-// any later version.
-// This library is distributed in the hope that it will be useful, but WITHOUT
-// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-// details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this library; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-//------------------------------------------------------------------------------
-
-#ifndef IMG_IMAGE_STATE_DISPATCH_FW_HH
-#define IMG_IMAGE_STATE_DISPATCH_FW_HH
-
-namespace ost { namespace img { namespace image_state { namespace dispatch {
-
-template <template <typename T, class D> class FNC>
-struct unary_dispatch_ip;
-
-template <template <typename T, class D> class FNC>
-struct unary_dispatch_op;
-
-template <template <typename T1, class D1, typename T2, class D2> class FNC>
-struct binary_dispatch_ip;
-
-template <template <typename T1, class D1, typename T2, class D2> class FNC>
-struct binary_dispatch_op;
-
-}}}} // ns
-
-
-
-
-#endif
diff --git a/modules/img/base/src/image_state/image_state_base.cc b/modules/img/base/src/image_state/image_state_base.cc
index 15108e258e451f5a0f07b7847bea1f69af231708..2c96b2f868a3101fe92aadf637c176e7c6138434 100644
--- a/modules/img/base/src/image_state/image_state_base.cc
+++ b/modules/img/base/src/image_state/image_state_base.cc
@@ -23,34 +23,84 @@
 */
 
 #include "image_state_base.hh"
-#include "binop.hh"
+#include "dispatch.hh"
 
 namespace ost { namespace img { namespace image_state {
 
+// define functors to be dispatched
+namespace {
+template<typename T1, class D1, typename T2, class D2>
+struct fnc_add_ip {
+  void operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs)
+  {
+    Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
+    for(ExtentIterator it(ov);!it.AtEnd();++it) {
+      lhs->Value(it)+=Val2Val<T2,T1>(rhs->Value(it));
+    }
+  }
+};
+
+// sub
+template<typename T1, class D1, typename T2, class D2>
+struct fnc_sub_ip {
+  void operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs)
+  {
+    Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
+    for(ExtentIterator it(ov);!it.AtEnd();++it) {
+      lhs->Value(it)-=Val2Val<T2,T1>(rhs->Value(it));
+    }
+  }
+};
+
+// mul
+template<typename T1, class D1, typename T2, class D2>
+struct fnc_mul_ip {
+  void operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs)
+  {
+    Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
+    for(ExtentIterator it(ov);!it.AtEnd();++it) {
+      lhs->Value(it)*=Val2Val<T2,T1>(rhs->Value(it));
+    }
+  }
+};
+
+// div
+template<typename T1, class D1, typename T2, class D2>
+struct fnc_div_ip {
+  void operator()(ImageStateImpl<T1,D1>* lhs, const ImageStateImpl<T2,D2>* rhs)
+  {
+    Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
+    for(ExtentIterator it(ov);!it.AtEnd();++it) {
+      lhs->Value(it)/=Val2Val<T2,T1>(rhs->Value(it));
+    }
+  }
+};
+} // anon ns
+
 ImageStateBase& ImageStateBase::operator+=(const ImageStateBase& b)
 {
-  static image_state::binop::add_ip f_add_ip;
+  static dispatch::binary_dispatch_ip<fnc_add_ip> f_add_ip;
   f_add_ip(this,&b);
   return *this;
 }
 
 ImageStateBase& ImageStateBase::operator-=(const ImageStateBase& b)
 {
-  static image_state::binop::sub_ip f_sub_ip;
+  static dispatch::binary_dispatch_ip<fnc_sub_ip> f_sub_ip;
   f_sub_ip(this,&b);
   return *this;
 }
 
 ImageStateBase& ImageStateBase::operator*=(const ImageStateBase& b)
 {
-  static image_state::binop::mul_ip f_mul_ip;
+  static dispatch::binary_dispatch_ip<fnc_mul_ip> f_mul_ip;
   f_mul_ip(this,&b);
   return *this;
 }
 
 ImageStateBase& ImageStateBase::operator/=(const ImageStateBase& b)
 {
-  static image_state::binop::div_ip f_div_ip;
+  static dispatch::binary_dispatch_ip<fnc_div_ip> f_div_ip;
   f_div_ip(this,&b);
   return *this;
 }
diff --git a/modules/img/base/src/image_state/image_state_inst.hh b/modules/img/base/src/image_state/image_state_inst.hh
index 93c874348c407904006178dd37dc83cbfcb332a2..3d0a8472bab7b3fda21a9f89c8f9a0426b83a544 100644
--- a/modules/img/base/src/image_state/image_state_inst.hh
+++ b/modules/img/base/src/image_state/image_state_inst.hh
@@ -34,7 +34,6 @@
 #include "image_state_impl.cc"
 #include "image_state_algorithm.cc"
 #include "value_holder.cc"
-#include "binop.cc"
 
 #include "image_state_impl.hh"
 #include "image_state_spatial_domain.hh"
diff --git a/modules/img/base/src/paste_impl.cc b/modules/img/base/src/paste_impl.cc
index 77ea06c961347eef137d70f54d32c7c89b4f5943..c3f5840b7ad2999cedfe4b89848f8d504328ec0a 100644
--- a/modules/img/base/src/paste_impl.cc
+++ b/modules/img/base/src/paste_impl.cc
@@ -24,11 +24,40 @@
 
 #include "paste_impl.hh"
 
-#include "image_state/binop.hh"
+#include "image_state/dispatch.hh"
 #include "image.hh"
 
 namespace ost { namespace img { namespace detail {
 
+// define functors to be dispatched
+namespace {
+// paste
+template<typename T1, class D1, typename T2, class D2>
+struct fnc_paste_ip {
+  void operator()(image_state::ImageStateImpl<T1,D1>* lhs,
+                  const image_state::ImageStateImpl<T2,D2>* rhs) {
+    Extent ov=Overlap(lhs->GetExtent(),rhs->GetExtent());
+    for(ExtentIterator it(ov);!it.AtEnd();++it) {
+      lhs->Value(it)=Val2Val<T2,T1>(rhs->Value(it));
+    }
+  }
+};
+
+// partial specialization for half_frequency rhs
+template<typename T1, class D1>
+struct fnc_paste_ip<T1,D1,Complex,image_state::HalfFrequencyDomain> {
+  void operator()(image_state::ImageStateImpl<T1,D1>* lhs,
+                  const image_state::ImageStateImpl<Complex,
+                          image_state::HalfFrequencyDomain>* rhs)
+  {
+    Extent ov=Overlap(lhs->GetExtent(),rhs->GetLogicalExtent());
+    for(ExtentIterator it(ov);!it.AtEnd();++it) {
+      lhs->Value(it)=Val2Val<Complex,T1>(rhs->GetComplex(it));
+    }
+  }
+};
+} // anon ns
+
 PasteFnc::PasteFnc():
   target_()
 {}
@@ -40,7 +69,7 @@ PasteFnc::PasteFnc(const ImageHandle& h):
 template<typename V, class D>
 void PasteFnc::VisitState(const image_state::ImageStateImpl<V,D>& isi)
 {
-  static image_state::binop::paste_ip f_paste_ip;
+  static image_state::dispatch::binary_dispatch_ip<fnc_paste_ip> f_paste_ip;
   f_paste_ip(target_.ImageStatePtr().get(),&isi);
 }
 
diff --git a/modules/io/doc/io.rst b/modules/io/doc/io.rst
index 35e71011fc05d1acbf7831df4620a6c15d321b38..995950ed29fcf6a4c0d22a8606f64463f841ca01 100644
--- a/modules/io/doc/io.rst
+++ b/modules/io/doc/io.rst
@@ -168,6 +168,12 @@ Loading sequence or alignment files
   Load sequence data from disk. If format is set to 'auto', the function guesses 
   the filetype based on the extension of the file. Files ending in '.fasta', 
   '.aln' will automatically be loaded.
+
+  :param filename: The filename
+  :type  filename: string
+  :param format: Name of the format
+  :type  format: string
+  :rtype: :class:`~ost.seq.SequenceHandle`
   
   For files with non-standard extensions, the format can be set explicitly 
   specifying the `format` parameter. 
@@ -197,12 +203,24 @@ Loading sequence or alignment files
   :func:`LoadSequence`. For a list of file formats supported by
   :func:`LoadSequenceList` see :doc:`sequence_formats`.
 
+  :param filename: The filename
+  :type  filename: string
+  :param format: Name of the format
+  :type  format: string
+  :rtype: :class:`~ost.seq.SequenceList`
+
 .. function:: LoadAlignment(filename, format='auto')
 
   For a description of how to use :func:`LoadAlignment` please refer to 
   :func:`LoadSequence`. For a list of file formats supported by 
   :func:`LoadAlignment` see :doc:`sequence_formats`.
 
+  :param filename: The filename
+  :type  filename: string
+  :param format: Name of the format
+  :type  format: string
+  :rtype: :class:`~ost.seq.AlignmentHandle`
+
 .. function:: LoadSequenceProfile(filename, format='auto')
 
   Load sequence profile data from disk. If format is set to 'auto', the function
@@ -226,6 +244,11 @@ Loading sequence or alignment files
     
   For a list of file formats supported by :func:`LoadSequenceProfile` see
   :doc:`sequence_profile_formats`.
+
+  :param filename: The filename
+  :type  filename: string
+  :param format: Name of the format
+  :type  format: string
   
   :rtype: :class:`~ost.seq.ProfileHandle`
 
@@ -236,6 +259,45 @@ Loading sequence or alignment files
       :exc:`~ost.io.IOException` if the import fails due to an erroneous or 
       inexistent file.
 
+.. function:: AlignmentFromString(data, format)
+
+  Load alignment from string.
+
+  The format argument is mandatory. For a list of supported formats,
+  see :doc:`sequence_formats`.
+
+  :param data: The alignment
+  :type  data: string
+  :param format: Name of the format
+  :type  format: string
+  :rtype: :class:`~ost.seq.AlignmentHandle`
+
+.. function:: SequenceFromString(data, format)
+
+  Load sequence from string.
+
+  The format argument is mandatory. For a list of supported formats,
+  see :doc:`sequence_formats`.
+
+  :param data: The sequence
+  :type  data: string
+  :param format: Name of the format
+  :type  format: string
+  :rtype: :class:`~ost.seq.SequenceHandle`
+
+.. function:: SequenceListFromString(data, format)
+
+  Load a list of sequences from string.
+
+  The format argument is mandatory. For a list of supported formats,
+  see :doc:`sequence_formats`.
+
+  :param data: The list of sequences
+  :type  data: string
+  :param format: Name of the format
+  :type  format: string
+  :rtype: :class:`~ost.seq.SequenceList`
+
 Saving Sequence Data
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
@@ -256,7 +318,14 @@ Saving Sequence Data
     
   For a list of file formats supported by :func:`SaveSequence` see
   :doc:`sequence_formats`.
-  
+
+  :param sequence: The sequence
+  :type  sequence: :class:`~ost.seq.SequenceHandle`
+  :param filename: The filename
+  :type  filename: string
+  :param format: Name of the format
+  :type  format: string
+
   :raises: :exc:`~ost.io.IOUnknownFormatException` if the format string supplied 
       is not recognized or the file format can not be detected based on the 
       file extension.
@@ -270,6 +339,13 @@ Saving Sequence Data
   :func:`SaveSequence`. For a list of file formats supported by 
   :func:`SaveSequenceList` see :doc:`sequence_formats`.
 
+  :param seq_list: The sequence list
+  :type  seq_list: :class:`~ost.seq.SequenceList`
+  :param filename: The filename
+  :type  filename: string
+  :param format: Name of the format
+  :type  format: string
+
 .. function:: SaveAlignment(aln, filename, format='auto')
 
   For a desription of how to use :func:`SaveAlignment` please refer to 
@@ -278,6 +354,51 @@ Saving Sequence Data
   For a list of file formats supported by :func:`SaveAlignment` see 
   :doc:`sequence_formats`.
 
+  :param aln: The alignment
+  :type  aln: :class:`~ost.seq.AlignmentHandle`
+  :param filename: The filename
+  :type  filename: string
+  :param format: Name of the format
+  :type  format: string
+
+.. function:: AlignmentToString(ali, format)
+
+  Return alignment as a string.
+
+  The format argument is mandatory. For a list of supported formats
+  see :doc:`sequence_formats`.
+
+  :param ali: The alignment
+  :type  ali: :class:`~ost.seq.AlignmentHandle`
+  :param format: Name of the format
+  :type  format: string
+  :rtype: string
+
+.. function:: SequenceToString(seq, format)
+
+  Return sequence as a string.
+
+  The format argument is mandatory. For a list of supported formats
+  see :doc:`sequence_formats`.
+
+  :param seq: The sequence
+  :type  seq: :class:`~ost.seq.SequenceHandle`
+  :param format: Name of the format
+  :type  format: string
+  :rtype: string
+
+.. function:: SequenceListToString(seq_list, format)
+
+  Return sequence list as a string.
+
+  The format argument is mandatory. For a list of supported formats
+  see :doc:`sequence_formats`.
+
+  :param seq_list: The sequence list
+  :type  seq: :class:`~ost.seq.SequenceList`
+  :param format: Name of the format
+  :type  format: string
+  :rtype: string
 
 .. _img-io: 
 
diff --git a/modules/io/doc/mmcif.rst b/modules/io/doc/mmcif.rst
index fd7b214fb3653d463b7792562ecd1dca00af45a2..0572ce2b9f34d6dd332b131273cd7460cfb80cca 100644
--- a/modules/io/doc/mmcif.rst
+++ b/modules/io/doc/mmcif.rst
@@ -281,7 +281,7 @@ of the annotation available.
     :type cif_chain_id: :class:`str`
     :returns: atom_site.label_entity_id as :class:`str` (empty if no mapping)
 
-  .. method:: AddRevision(num, date, status)
+  .. method:: AddRevision(num, date, status, major=-1, minor=-1)
 
     Add a new iteration to the revision history.
     See :meth:`MMCifInfoRevisions.AddRevision`.
@@ -1089,7 +1089,7 @@ of the annotation available.
 
     :type: :class:`int`
 
-  .. method:: AddRevision(num, date, status)
+  .. method:: AddRevision(num, date, status, major=-1, minor=-1)
 
     Add a new iteration to the history.
 
@@ -1099,6 +1099,10 @@ of the annotation available.
     :type date:  :class:`str`
     :param status: See :meth:`GetStatus`
     :type status:  :class:`str`
+    :param major: See :meth:`GetMajor`
+    :type major:  :class:`int`
+    :param minor: See :meth:`GetMinor`
+    :type minor:  :class:`int`
 
     :raises: Exception if *num* is <= the last added iteration.
 
@@ -1131,11 +1135,37 @@ of the annotation available.
     :rtype:  :class:`str`
     :raises: Exception if *i* out of bounds.
 
+  .. method:: GetMajor(i)
+
+    :param i: Index of revision
+    :type i: :class:`int`
+    :return: The major version of this revision (-1 if not set).
+    :rtype:  :class:`int`
+    :raises: Exception if *i* out of bounds.
+
+  .. method:: GetMinor(i)
+
+    :param i: Index of revision
+    :type i: :class:`int`
+    :return: The minor version of this revision (-1 if not set).
+    :rtype:  :class:`int`
+    :raises: Exception if *i* out of bounds.
+
   .. method:: GetLastDate()
 
     :return: Date of the latest revision ('?' if no revision set).
     :rtype:  :class:`str`
 
+  .. method:: GetLastMajor()
+
+    :return: Major version of the latest revision (-1 if not set).
+    :rtype:  :class:`int`
+
+  .. method:: GetLastMinor()
+
+    :return: Minor version of the latest revision (-1 if not set).
+    :rtype:  :class:`int`
+
   .. method:: SetDateOriginal(date)
               GetDateOriginal()
 
diff --git a/modules/io/doc/sequence_formats.rst b/modules/io/doc/sequence_formats.rst
index f9f77649afe88e22049e0d1c4ef7bfc031066d9c..7429134749c4fb14418a00d8bb46f73581cd86b1 100644
--- a/modules/io/doc/sequence_formats.rst
+++ b/modules/io/doc/sequence_formats.rst
@@ -10,6 +10,9 @@ FASTA
 *Format Name*
   fasta
 
+*Mode*
+  Read/Write
+
 ClustalW
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
@@ -19,7 +22,25 @@ ClustalW
 *Format Name*
   clustal
 
-Promod
+*Mode*
+  Read-only
+
+PIR
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This is the format used by the
+`Protein Information Resource (PIR) <https://proteininformationresource.org/>`_.
+
+*Recognized File Extensions*
+  .pir
+
+*Format Name*
+  pir
+
+*Mode*
+  Read/Write
+
+Promod 2
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 *Recognized File Extensions*
@@ -27,5 +48,6 @@ Promod
   
 *Format Name*
   promod
-  
 
+*Mode*
+  Read-only
diff --git a/modules/io/pymod/__init__.py b/modules/io/pymod/__init__.py
index 98d952269077ef5764290458d9e78aba39966bff..f6aff418323d96e2636e39d631958aa2ec8215c8 100644
--- a/modules/io/pymod/__init__.py
+++ b/modules/io/pymod/__init__.py
@@ -65,8 +65,8 @@ def _override(val1, val2):
 def LoadPDB(filename, restrict_chains="", no_hetatms=None,
             fault_tolerant=None, load_multi=False, quack_mode=None,
             join_spread_atom_records=None, calpha_only=None,
-            profile='DEFAULT', remote=False, dialect=None,
-            seqres=False, bond_feasibility_check=None):
+            profile='DEFAULT', remote=False, remote_repo='pdb',
+            dialect=None, seqres=False, bond_feasibility_check=None):
   """
   Load PDB file from disk and return one or more entities. Several options 
   allow to customize the exact behaviour of the PDB import. For more information 
@@ -90,8 +90,16 @@ def LoadPDB(filename, restrict_chains="", no_hetatms=None,
       :attr:`IOProfile.join_spread_atom_records`.
   
   :param remote: If set to True, the method tries to load the pdb from the 
-     remote pdb repository www.pdb.org. The filename is then interpreted as the 
-     pdb id.
+     remote repository given as *remote_repo*. The filename is then 
+     interpreted as the entry id as further specified for the *remote_repo*
+     parameter.
+
+  :param remote_repo: Remote repository to fetch structure if *remote* is True. 
+                      Must be one in ['pdb', 'smtl', 'pdb_redo']. In case of 
+                      'pdb' and 'pdb_redo', the entry must be given as lower 
+                      case pdb id, which loads the deposited assymetric unit 
+                      (e.g. '1ake'). In case of 'smtl', the entry must also 
+                      specify the desired biounit (e.g. '1ake.1').
      
   :rtype: :class:`~ost.mol.EntityHandle` or a list thereof if `load_multi` is 
       True.
@@ -135,8 +143,10 @@ def LoadPDB(filename, restrict_chains="", no_hetatms=None,
 
   tmp_file = None # avoid getting out of scope
   if remote:
+    if remote_repo not in ['pdb', 'smtl', 'pdb_redo']:
+      raise IOError("remote_repo must be in ['pdb', 'smtl', 'pdb_redo']")
     from ost.io.remote import RemoteGet
-    tmp_file =RemoteGet(filename)
+    tmp_file =RemoteGet(filename, from_repo=remote_repo)
     filename = tmp_file.name
   
   conop_inst=conop.Conopology.Instance()
@@ -280,13 +290,20 @@ def LoadMMCIF(filename, fault_tolerant=None, calpha_only=None, profile='DEFAULT'
      remote pdb repository www.pdb.org. The filename is then interpreted as the 
      pdb id.
 
-  :rtype: :class:`~ost.mol.EntityHandle`.
+  :rtype: :class:`~ost.mol.EntityHandle` (or tuple if *seqres* or *info* are
+          True).
 
-  :param seqres: Whether to read SEQRES records. If set to True, the loaded 
-    entity and seqres entry will be returned as second item.
+  :param seqres: Whether to read SEQRES records. If True, a
+                 :class:`~ost.seq.SequenceList` object is returned as the second
+                 item. The sequences in the list are named according to the
+                 mmCIF chain name.
+                 This feature requires a default
+                 :class:`compound library <ost.conop.CompoundLib>`
+                 to be defined and accessible via
+                 :func:`~ost.conop.GetDefaultLib` or an empty list is returned.
 
   :param info: Whether to return an info container with the other output.
-               Returns a :class:`MMCifInfo` object as last item.
+               If True, a :class:`MMCifInfo` object is returned as last item.
 
   :raises: :exc:`~ost.io.IOException` if the import fails due to an erroneous
            or non-existent file.
diff --git a/modules/io/pymod/export_mmcif_io.cc b/modules/io/pymod/export_mmcif_io.cc
index 806031da6e317f6496775e0f0b0c1ef6d613b5ed..0252c553278b46717c1539d635897e818fdcf8cb 100644
--- a/modules/io/pymod/export_mmcif_io.cc
+++ b/modules/io/pymod/export_mmcif_io.cc
@@ -314,12 +314,18 @@ void export_mmcif_io()
   class_<MMCifInfoRevisions>("MMCifInfoRevisions", init<>())
     .def("SetDateOriginal", &MMCifInfoRevisions::SetDateOriginal)
     .def("GetDateOriginal", &MMCifInfoRevisions::GetDateOriginal)
-    .def("AddRevision", &MMCifInfoRevisions::AddRevision)
+    .def("AddRevision", &MMCifInfoRevisions::AddRevision,
+         (arg("num"), arg("date"), arg("status"), arg("major")=-1,
+          arg("minor")=-1))
     .def("GetSize", &MMCifInfoRevisions::GetSize)
     .def("GetDate", &MMCifInfoRevisions::GetDate)
     .def("GetNum", &MMCifInfoRevisions::GetNum)
     .def("GetStatus", &MMCifInfoRevisions::GetStatus)
+    .def("GetMajor", &MMCifInfoRevisions::GetMajor)
+    .def("GetMinor", &MMCifInfoRevisions::GetMinor)
     .def("GetLastDate", &MMCifInfoRevisions::GetLastDate)
+    .def("GetLastMajor", &MMCifInfoRevisions::GetLastMajor)
+    .def("GetLastMinor", &MMCifInfoRevisions::GetLastMinor)
     .def("GetFirstRelease", &MMCifInfoRevisions::GetFirstRelease)
     .add_property("date_original", &MMCifInfoRevisions::GetDateOriginal,
                   &MMCifInfoRevisions::SetDateOriginal)
@@ -356,7 +362,9 @@ void export_mmcif_io()
     .def("AddMMCifEntityIdTr", &MMCifInfo::AddMMCifEntityIdTr)
     .def("GetMMCifEntityIdTr", &MMCifInfo::GetMMCifEntityIdTr)
     .def("SetRevisionsDateOriginal", &MMCifInfo::SetRevisionsDateOriginal)
-    .def("AddRevision", &MMCifInfo::AddRevision)
+    .def("AddRevision", &MMCifInfo::AddRevision,
+         (arg("num"), arg("date"), arg("status"), arg("major")=-1,
+          arg("minor")=-1))
     .def("GetRevisions", &MMCifInfo::GetRevisions)
     .add_property("citations", make_function(&MMCifInfo::GetCitations,
                                    return_value_policy<copy_const_reference>()))
diff --git a/modules/io/src/mol/mmcif_info.hh b/modules/io/src/mol/mmcif_info.hh
index 68d60318f9fe1328eca94b7fc33daca14236749e..22e3e33a8be233e92a4dc118aa059f6b24581cbe 100644
--- a/modules/io/src/mol/mmcif_info.hh
+++ b/modules/io/src/mol/mmcif_info.hh
@@ -760,28 +760,19 @@ private:
 };
 
 /// \brief Container class for information on file revisions
-/// 
+/// See Python doc
 class DLLEXPORT_OST_IO MMCifInfoRevisions {
 public:
   /// \brief Start recording a revision process.
   MMCifInfoRevisions(): date_original_("?"), first_release_(0) {};
 
-  /// \brief Set date the entry entered PDB.
-  ///
-  /// \param date
+  // original depositon date
   void SetDateOriginal(String date) { date_original_ = date; }
-
-  /// \brief Get date the entry entered PDB.
-  ///
-  /// \return date
   String GetDateOriginal() const { return date_original_; }
 
-  /// \brief Add a revision to history
-  ///
-  /// \param num unique identifier
-  /// \param date date of revision
-  /// \param status status of the revision
-  void AddRevision(int num, String date, String status)
+  // revision history
+  void AddRevision(int num, String date, String status, int major = -1,
+                   int minor = -1)
   {
     if (num_.size() && (num_.back() >= num)) {
       std::stringstream ss;
@@ -792,6 +783,8 @@ public:
     num_.push_back(num);
     date_.push_back(date);
     status_.push_back(status);
+    major_.push_back(major);
+    minor_.push_back(minor);
     // set first release date if not already occupied
     if (first_release_ == 0) {
       if (status == "full release" || status == "Initial release") {
@@ -800,51 +793,39 @@ public:
     }
   }
 
-  /// \brief Get number of revisions stored.
-  ///
-  /// \return number
+  // revision history getters
   size_t GetSize() const { return num_.size(); }
-
-  /// \brief Get revision date by index in list.
-  ///
-  /// \param i position in list
-  /// \return date
   String GetDate(size_t i) const { return date_.at(i); }
-
-  /// \brief Get revision num by index in list.
-  ///
-  /// \param i position in list
-  /// \return num
   int GetNum(size_t i) const { return num_.at(i); }
-
-  /// \brief Get revision status by index in list.
-  ///
-  /// \param i position in list
-  /// \return status
   String GetStatus(size_t i) const { return status_.at(i); }
+  int GetMajor(size_t i) const { return major_.at(i); }
+  int GetMinor(size_t i) const { return minor_.at(i); }
 
-  /// \brief Get date of last revision.
-  ///
-  /// \return date
+  // get info of first and last revision
   String GetLastDate() const {
     if (date_.empty()) return "?";
     else               return date_.back();
   }
-
-  /// \brief Get the index of the full release revision.
-  ///
-  /// \return index
-  size_t GetFirstRelease() const
-  {
+  int GetLastMajor() const {
+    if (major_.empty()) return -1;
+    else                return major_.back();
+  }
+  int GetLastMinor() const {
+    if (minor_.empty()) return -1;
+    else                return minor_.back();
+  }
+  size_t GetFirstRelease() const {
     return first_release_;
   }
 
 private:
   String date_original_;       ///< first time seen in PDB
-  size_t first_release_;          ///< index of full release revision
+  size_t first_release_;       ///< index of full release revision
   std::vector<int> num_;       ///< sequential id of revision (gets larger)
   std::vector<String> date_;   ///< date of revision
   std::vector<String> status_; ///< ststus phrase for this revision
+  std::vector<int> major_;     ///< major version of revision
+  std::vector<int> minor_;     ///< minor version of revision
 };
 
 
@@ -1131,13 +1112,11 @@ public:
   }
 
   /// \brief Add a revision to history
-  ///
-  /// \param num unique identifier
-  /// \param date date of revision
-  /// \param status status of the revision
-  void AddRevision(int num, String date, String status)
+  /// \see MMCifInfoRevisions::AddRevision
+  void AddRevision(int num, String date, String status, int major = -1,
+                   int minor = -1)
   {
-    revisions_.AddRevision(num, date, status);
+    revisions_.AddRevision(num, date, status, major, minor);
   }
 
   /// \brief Get history
diff --git a/modules/io/src/mol/mmcif_reader.cc b/modules/io/src/mol/mmcif_reader.cc
index a232e371128ab5b533197e3db051b73853eb3019..9e84138535372ada46053525af406dcf7f64731d 100644
--- a/modules/io/src/mol/mmcif_reader.cc
+++ b/modules/io/src/mol/mmcif_reader.cc
@@ -87,7 +87,7 @@ void MMCifReader::ClearState()
   bu_assemblies_.clear();
   helix_list_.clear();
   strand_list_.clear();
-  revision_dates_.clear();
+  revisions_.clear();
   revision_types_.clear();
   database_PDB_rev_added_ = false;
 }
@@ -339,6 +339,8 @@ bool MMCifReader::OnBeginLoop(const StarLoopDesc& header)
     category_ = PDBX_AUDIT_REVISION_HISTORY;
     // mandatory items
     this->TryStoreIdx(PARH_ORDINAL, "ordinal", header);
+    this->TryStoreIdx(PARH_MAJOR, "major_revision", header);
+    this->TryStoreIdx(PARH_MINOR, "minor_revision", header);
     this->TryStoreIdx(PARH_REVISION_DATE, "revision_date", header);
     cat_available = true;
   } else if (header.GetCategory()=="pdbx_audit_revision_details") {
@@ -597,7 +599,7 @@ void MMCifReader::ParseAndAddAtom(const std::vector<StringRef>& columns)
     if (me.IsValid()) { // unit test
       try {
         editor.AddAltAtomPos(String(1, alt_loc), me, apos);
-      } catch (Error) {
+      } catch (Error&) {
         LOG_INFO("Ignoring atom alt location since there is already an atom "
                  "with name " << aname << ", but without an alt loc");
         return;
@@ -1423,8 +1425,12 @@ void MMCifReader::ParsePdbxAuditRevisionHistory(
   int num = this->TryGetInt(columns[indices_[PARH_ORDINAL]],
                             "pdbx_audit_revision_history.ordinal");
   StringRef date = columns[indices_[PARH_REVISION_DATE]];
+  int major = this->TryGetInt(columns[indices_[PARH_MAJOR]],
+                              "pdbx_audit_revision_history.major_revision");
+  int minor = this->TryGetInt(columns[indices_[PARH_MINOR]],
+                              "pdbx_audit_revision_history.minor_revision");
   // add to map
-  revision_dates_[num] = date.str();
+  revisions_.push_back(MMCifRevisionDesc(num, date.str(), major, minor));
 }
 
 void MMCifReader::ParsePdbxAuditRevisionDetails(
@@ -1779,17 +1785,16 @@ void MMCifReader::OnEndData()
 
   // add revision history for new style mmCIFs (only if no old data there)
   if (!database_PDB_rev_added_) {
-    std::map<int, String>::const_iterator rd_it;
-    for (rd_it = revision_dates_.begin(); rd_it != revision_dates_.end();
-         ++rd_it) {
+    std::vector<MMCifRevisionDesc>::const_iterator r_it;
+    for (r_it = revisions_.begin(); r_it != revisions_.end(); ++r_it) {
       // look for status
-      const int num = rd_it->first;
-      const String& date = rd_it->second;
+      const int num = r_it->num;
       std::map<int, String>::const_iterator rt_it = revision_types_.find(num);
       if (rt_it != revision_types_.end()) {
-        info_.AddRevision(num, date, rt_it->second);
+        info_.AddRevision(num, r_it->date, rt_it->second, r_it->major,
+                          r_it->minor);
       } else {
-        info_.AddRevision(num, date, "?");
+        info_.AddRevision(num, r_it->date, "?", r_it->major, r_it->minor);
       }
     }
   }
diff --git a/modules/io/src/mol/mmcif_reader.hh b/modules/io/src/mol/mmcif_reader.hh
index 4a58d567b866815f7f27ff3ff720f718dd36ab2f..e7d0e6bcb5d4df7b777712a7265915da9dd1d0d7 100644
--- a/modules/io/src/mol/mmcif_reader.hh
+++ b/modules/io/src/mol/mmcif_reader.hh
@@ -546,6 +546,8 @@ private:
   typedef enum {
     PARH_ORDINAL,         ///< unique identifier
     PARH_REVISION_DATE,   ///< revision date
+    PARH_MAJOR,           ///< major version
+    PARH_MINOR,           ///< minor version
   } PdbxAuditRevisionHistoryItems;
 
   /// \enum categories of the pdbx_audit_revision_details category
@@ -621,6 +623,21 @@ private:
   } MMCifPSAEntry;
   typedef std::map<String, MMCifPSAEntry> MMCifPSAMap;
 
+  /// \struct keeping track of revision information
+  struct MMCifRevisionDesc {
+    // silly GCC note: major() & minor() exist as macros...facepalm
+    MMCifRevisionDesc(int _num, const String& _date, int _major, int _minor)
+                     : date(_date) {
+      num = _num;
+      major = _major;
+      minor = _minor;
+    }
+    int num;      ///< unique identifier
+    String date;  ///< revision date
+    int major;    ///< major version
+    int minor;    ///< minor version
+  };
+
   // members
   MMCifCategory category_;
   int category_counts_[DONT_KNOW+1]; ///< overall no. of atom_site loops
@@ -653,7 +670,7 @@ private:
   MMCifHSVector strand_list_; ///< for storing struct_conf sec.struct. data
   MMCifInfoStructRefs struct_refs_;
   // for storing revisions 
-  std::map<int, String> revision_dates_;
+  std::vector<MMCifRevisionDesc> revisions_;
   std::map<int, String> revision_types_;
   bool database_PDB_rev_added_;
 };
diff --git a/modules/io/src/mol/pdb_reader.cc b/modules/io/src/mol/pdb_reader.cc
index a0a5f3b4f46555674024a8bf4b558f7e7fd733ed..bf0a3a8a004835440cc5da73fa99302041eef262 100644
--- a/modules/io/src/mol/pdb_reader.cc
+++ b/modules/io/src/mol/pdb_reader.cc
@@ -821,7 +821,7 @@ void PDBReader::ParseAndAddAtom(const StringRef& line, int line_num,
     if (me.IsValid()) {
       try {
         editor.AddAltAtomPos(String(1, alt_loc), me, apos, o, b);
-      } catch (Error) {
+      } catch (Error&) {
         LOG_INFO("Ignoring atom alt location since there is already an atom "
                      "with name " << aname << ", but without an alt loc");
         return;
diff --git a/modules/io/tests/test_clustal.cc b/modules/io/tests/test_clustal.cc
index b9ebf221b655b00c6c1a50b23d74685cfd389169..c6cb21c58e51d927510d2b572d7753fcbd61a3a8 100644
--- a/modules/io/tests/test_clustal.cc
+++ b/modules/io/tests/test_clustal.cc
@@ -23,7 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/io/seq/clustal_io_handler.hh>
 #include <ost/io/seq/load.hh>
diff --git a/modules/io/tests/test_exceptions.cc b/modules/io/tests/test_exceptions.cc
index 27d9ea661822b6d4879f6b47a1fc204194fa677f..1a2befe054a8a8f7214e4bb12016f247b3bb8377 100644
--- a/modules/io/tests/test_exceptions.cc
+++ b/modules/io/tests/test_exceptions.cc
@@ -23,7 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/io/img/load_map.hh>
 #include <ost/img/image.hh>
diff --git a/modules/io/tests/test_io_crd.cc b/modules/io/tests/test_io_crd.cc
index 4cde64f327c6a0bcd9710d0468db5399edc7f250..f51d67af15a68defa531106acef59f72cdaf3e7d 100644
--- a/modules/io/tests/test_io_crd.cc
+++ b/modules/io/tests/test_io_crd.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/test_utils/compare_files.hh>
 #include <ost/mol/mol.hh>
diff --git a/modules/io/tests/test_io_dcd.cc b/modules/io/tests/test_io_dcd.cc
index fb95e6e83d3f161ebdbd1ae0e21f4a9e34a860ce..270d371e8034c6edea2a6e2a7ec37984e304b682 100644
--- a/modules/io/tests/test_io_dcd.cc
+++ b/modules/io/tests/test_io_dcd.cc
@@ -19,7 +19,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/io/mol/dcd_io.hh>
 #include <ost/mol/entity_handle.hh>
diff --git a/modules/io/tests/test_io_img.cc b/modules/io/tests/test_io_img.cc
index 9ac75d094c16fb64cddbc5ec231d41a4a5804832..11821e11f06ec1560abe8036c90ef1da2c981850 100644
--- a/modules/io/tests/test_io_img.cc
+++ b/modules/io/tests/test_io_img.cc
@@ -18,7 +18,12 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
+#include <boost/version.hpp>
+#if BOOST_VERSION<105900
+#include <boost/test/floating_point_comparison.hpp>
+#else
+#include <boost/test/tools/floating_point_comparison.hpp>
+#endif
 
 #include <map>
 #include <ost/io/img/load_map.hh>
diff --git a/modules/io/tests/test_io_pdb.cc b/modules/io/tests/test_io_pdb.cc
index ffc6dd286154a33680f950b6c6c47667f9581601..4cfc224927c64c7bc04799fc131a30536489c178 100644
--- a/modules/io/tests/test_io_pdb.cc
+++ b/modules/io/tests/test_io_pdb.cc
@@ -18,8 +18,6 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
 using boost::unit_test_framework::test_suite;
 
 #include <ost/test_utils/compare_files.hh>
diff --git a/modules/io/tests/test_io_sdf.cc b/modules/io/tests/test_io_sdf.cc
index c90b80b30f4efc571412222d4b7ca7e36fdf4f2c..1aa5faf282ca170dc948a0ae2950331e2ce1623f 100644
--- a/modules/io/tests/test_io_sdf.cc
+++ b/modules/io/tests/test_io_sdf.cc
@@ -18,8 +18,6 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/algorithm/string.hpp>
 using boost::unit_test_framework::test_suite;
diff --git a/modules/io/tests/test_io_sequence_profile.cc b/modules/io/tests/test_io_sequence_profile.cc
index 05a02345e2536e50fd976ba941ed80e71126bce3..a99b93c9cc8dcf7c11c51ec8ab2d67149646d8f0 100644
--- a/modules/io/tests/test_io_sequence_profile.cc
+++ b/modules/io/tests/test_io_sequence_profile.cc
@@ -23,7 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <iostream>
 
 #include <ost/seq/profile_handle.hh>
diff --git a/modules/io/tests/test_iomanager.cc b/modules/io/tests/test_iomanager.cc
index b6e79f1fc6cda5ffc73a4990e23def87d2c5c96d..7cc80671bb2eb6b4c824e08370b65008df47c869 100644
--- a/modules/io/tests/test_iomanager.cc
+++ b/modules/io/tests/test_iomanager.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 using boost::unit_test_framework::test_suite;
 #include <ost/io/io_manager.hh>
 
diff --git a/modules/io/tests/test_mmcif_info.cc b/modules/io/tests/test_mmcif_info.cc
index 6707ff930cf29eded775b6f85d3ad57c0dc19cb4..ecd3e3f6706700225a686e6036021461ce6aa5f3 100644
--- a/modules/io/tests/test_mmcif_info.cc
+++ b/modules/io/tests/test_mmcif_info.cc
@@ -19,8 +19,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
 
 #include <ost/io/io_exception.hh>
 #include <ost/io/mol/mmcif_info.hh>
@@ -245,26 +243,37 @@ BOOST_AUTO_TEST_CASE(mmcif_info_revisions)
   BOOST_CHECK(rev.GetFirstRelease() == 0);
   BOOST_CHECK(rev.GetSize() == 0);
   BOOST_CHECK(rev.GetLastDate() == "?");
+  BOOST_CHECK(rev.GetLastMajor() == -1);
+  BOOST_CHECK(rev.GetLastMinor() == -1);
   BOOST_CHECK_THROW(rev.GetDate(0), std::out_of_range);
   BOOST_CHECK_THROW(rev.GetNum(0), std::out_of_range);
   BOOST_CHECK_THROW(rev.GetStatus(0), std::out_of_range);
 
-  rev.SetDateOriginal("2012-05-04");
+  rev.SetDateOriginal("2012-05-03");
   rev.AddRevision(1, "2012-05-04", "in preparation");
-  rev.AddRevision(2, "2012-05-05", "full release");
+  rev.AddRevision(2, "2012-05-05", "full release", 1, 2);
 
   BOOST_CHECK(rev.GetSize() == 2);
-  BOOST_CHECK(rev.GetDateOriginal() == "2012-05-04");
+  BOOST_CHECK(rev.GetDateOriginal() == "2012-05-03");
   BOOST_CHECK(rev.GetDate(0) == "2012-05-04");
   BOOST_CHECK(rev.GetNum(0) == 1);
   BOOST_CHECK(rev.GetStatus(0) == "in preparation");
+  BOOST_CHECK(rev.GetMajor(0) == -1);
+  BOOST_CHECK(rev.GetMinor(0) == -1);
+  BOOST_CHECK(rev.GetDate(1) == "2012-05-05");
   BOOST_CHECK(rev.GetDate(1) == rev.GetLastDate());
   BOOST_CHECK(rev.GetFirstRelease() == 2);
   BOOST_CHECK(rev.GetNum(1) == 2);
-  BOOST_CHECK(rev.GetStatus(1) == "full release");  
+  BOOST_CHECK(rev.GetStatus(1) == "full release");
+  BOOST_CHECK(rev.GetMajor(1) == 1);
+  BOOST_CHECK(rev.GetMinor(1) == 2);
+  BOOST_CHECK(rev.GetMajor(1) == rev.GetLastMajor());
+  BOOST_CHECK(rev.GetMinor(1) == rev.GetLastMinor());
   BOOST_CHECK_THROW(rev.GetDate(2), std::out_of_range);
   BOOST_CHECK_THROW(rev.GetNum(2), std::out_of_range);
   BOOST_CHECK_THROW(rev.GetStatus(2), std::out_of_range);
+  BOOST_CHECK_THROW(rev.GetMajor(2), std::out_of_range);
+  BOOST_CHECK_THROW(rev.GetMinor(2), std::out_of_range);
 
   BOOST_TEST_MESSAGE("  done.");
 }
diff --git a/modules/io/tests/test_mmcif_reader.cc b/modules/io/tests/test_mmcif_reader.cc
index df82b4ec85df1c455da8a5aa09652ac58a4b77b3..b3c9d7c238b3d9b9fd0e1e5b852f19e683181c80 100644
--- a/modules/io/tests/test_mmcif_reader.cc
+++ b/modules/io/tests/test_mmcif_reader.cc
@@ -19,8 +19,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
 
 #include <fstream>
 #include <ost/platform.hh>
@@ -1359,20 +1357,28 @@ BOOST_AUTO_TEST_CASE(mmcif_test_revisions_old)
   const MMCifInfo& info = mmcif_p.GetInfo();
   const MMCifInfoRevisions& revs = info.GetRevisions();
   
-  // check items
+  // check items (note: version numbers only for new mmCIF versions)
   BOOST_CHECK_EQUAL(revs.GetSize(), size_t(3));
   BOOST_CHECK_EQUAL(revs.GetNum(0), 1);
   BOOST_CHECK_EQUAL(revs.GetDate(0), String("2009-11-17"));
   BOOST_CHECK_EQUAL(revs.GetStatus(0), String("full release"));
+  BOOST_CHECK_EQUAL(revs.GetMajor(0), -1);
+  BOOST_CHECK_EQUAL(revs.GetMinor(0), -1);
   BOOST_CHECK_EQUAL(revs.GetNum(1), 2);
   BOOST_CHECK_EQUAL(revs.GetDate(1), String("2011-07-13"));
   BOOST_CHECK_EQUAL(revs.GetStatus(1), String("?"));
+  BOOST_CHECK_EQUAL(revs.GetMajor(1), -1);
+  BOOST_CHECK_EQUAL(revs.GetMinor(1), -1);
   BOOST_CHECK_EQUAL(revs.GetNum(2), 3);
   BOOST_CHECK_EQUAL(revs.GetDate(2), String("2012-12-12"));
   BOOST_CHECK_EQUAL(revs.GetStatus(2), String("?"));
+  BOOST_CHECK_EQUAL(revs.GetMajor(2), -1);
+  BOOST_CHECK_EQUAL(revs.GetMinor(2), -1);
   // check rest
   BOOST_CHECK_EQUAL(revs.GetDateOriginal(), String("2009-08-10"));
   BOOST_CHECK_EQUAL(revs.GetLastDate(), String("2012-12-12"));
+  BOOST_CHECK_EQUAL(revs.GetLastMajor(), -1);
+  BOOST_CHECK_EQUAL(revs.GetLastMinor(), -1);
   BOOST_CHECK_EQUAL(revs.GetFirstRelease(), size_t(1));
 
   BOOST_TEST_MESSAGE("  done.");
@@ -1396,15 +1402,23 @@ BOOST_AUTO_TEST_CASE(mmcif_test_revisions_new)
   BOOST_CHECK_EQUAL(revs.GetNum(0), 1);
   BOOST_CHECK_EQUAL(revs.GetDate(0), String("2009-11-17"));
   BOOST_CHECK_EQUAL(revs.GetStatus(0), String("Initial release"));
+  BOOST_CHECK_EQUAL(revs.GetMajor(0), 1);
+  BOOST_CHECK_EQUAL(revs.GetMinor(0), 0);
   BOOST_CHECK_EQUAL(revs.GetNum(1), 2);
   BOOST_CHECK_EQUAL(revs.GetDate(1), String("2011-07-13"));
   BOOST_CHECK_EQUAL(revs.GetStatus(1), String("?"));
+  BOOST_CHECK_EQUAL(revs.GetMajor(1), 1);
+  BOOST_CHECK_EQUAL(revs.GetMinor(1), 1);
   BOOST_CHECK_EQUAL(revs.GetNum(2), 3);
   BOOST_CHECK_EQUAL(revs.GetDate(2), String("2012-12-12"));
   BOOST_CHECK_EQUAL(revs.GetStatus(2), String("?"));
+  BOOST_CHECK_EQUAL(revs.GetMajor(2), 2);
+  BOOST_CHECK_EQUAL(revs.GetMinor(2), 0);
   // check rest
   BOOST_CHECK_EQUAL(revs.GetDateOriginal(), String("2009-08-10"));
   BOOST_CHECK_EQUAL(revs.GetLastDate(), String("2012-12-12"));
+  BOOST_CHECK_EQUAL(revs.GetLastMajor(), 2);
+  BOOST_CHECK_EQUAL(revs.GetLastMinor(), 0);
   BOOST_CHECK_EQUAL(revs.GetFirstRelease(), size_t(1));
 
   BOOST_TEST_MESSAGE("  done.");
diff --git a/modules/io/tests/test_pir.cc b/modules/io/tests/test_pir.cc
index 946d113bab6f8781be733582e45bfe15f65dc7f7..7c4c67d97148436d7174cffbef97339220e254b2 100644
--- a/modules/io/tests/test_pir.cc
+++ b/modules/io/tests/test_pir.cc
@@ -23,7 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/seq/invalid_sequence.hh>
 #include <ost/io/seq/pir_io_handler.hh>
 #include <ost/io/seq/load.hh>
diff --git a/modules/io/tests/test_star_parser.cc b/modules/io/tests/test_star_parser.cc
index c4e40fdbda137d74293282a592884fb5aa7e8305..86edfe272ad6ed327d5c222baaff51743f1ffe71 100644
--- a/modules/io/tests/test_star_parser.cc
+++ b/modules/io/tests/test_star_parser.cc
@@ -21,8 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
 
 #include <fstream>
 #include <math.h>
diff --git a/modules/io/tests/testfiles/mmcif/3IMJ_rev_new.cif b/modules/io/tests/testfiles/mmcif/3IMJ_rev_new.cif
index bbc66a30194ce5ff62fd84dd7a758728bc35ff29..47ca475fcf2a4a7b39f9618efb06754136bbf70b 100644
--- a/modules/io/tests/testfiles/mmcif/3IMJ_rev_new.cif
+++ b/modules/io/tests/testfiles/mmcif/3IMJ_rev_new.cif
@@ -25,7 +25,7 @@ _pdbx_audit_revision_history.minor_revision
 _pdbx_audit_revision_history.revision_date 
 1 'Structure model' 1 0 2009-11-17 
 2 'Structure model' 1 1 2011-07-13 
-3 'Structure model' 1 2 2012-12-12 
+3 'Structure model' 2 0 2012-12-12 
 # 
 _pdbx_audit_revision_details.ordinal             1 
 _pdbx_audit_revision_details.revision_ordinal    1 
diff --git a/modules/io/tests/tests.cc b/modules/io/tests/tests.cc
index 85c0f12e22ce3afe219d727fcd687ee35d33a7a6..faa6774fc478a3bf696a7105461792447f9fff7a 100644
--- a/modules/io/tests/tests.cc
+++ b/modules/io/tests/tests.cc
@@ -18,6 +18,4 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE ost_io
-#define BOOST_AUTO_TEST_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
diff --git a/modules/mol/alg/pymod/qsscoring.py b/modules/mol/alg/pymod/qsscoring.py
index 3ed23ae9ea8bbb6bcedc65cdaa132e1c24de8834..3a793310a3c6deb4116c6033c6e443f2283997e0 100644
--- a/modules/mol/alg/pymod/qsscoring.py
+++ b/modules/mol/alg/pymod/qsscoring.py
@@ -525,6 +525,8 @@ class QSscorer:
   def GetOligoLDDTScorer(self, settings, penalize_extra_chains=True):
     """
     :return: :class:`OligoLDDTScorer` object, setup for this QS scoring problem.
+             The scorer is set up with :attr:`qs_ent_1` as the reference and
+             :attr:`qs_ent_2` as the model.
     :param settings: Passed to :class:`OligoLDDTScorer` constructor.
     :param penalize_extra_chains: Passed to :class:`OligoLDDTScorer` constructor.
     """
diff --git a/modules/mol/alg/tests/test_consistency_checks.cc b/modules/mol/alg/tests/test_consistency_checks.cc
index b7e3d3e4cc4742fb7df7bf28ec87287396b93a4a..927b9d1efacbc4d5a56a411c7ab421cec327f1bb 100644
--- a/modules/mol/alg/tests/test_consistency_checks.cc
+++ b/modules/mol/alg/tests/test_consistency_checks.cc
@@ -22,7 +22,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/mol.hh>
 #include <ost/mol/alg/consistency_checks.hh>
diff --git a/modules/mol/alg/tests/test_partial_sec_struct_assignment.cc b/modules/mol/alg/tests/test_partial_sec_struct_assignment.cc
index b6a9915608edd7858af045686a93e8df8b740369..56d247515b06a0dc3e54692641f1aaa8fcc7c469 100644
--- a/modules/mol/alg/tests/test_partial_sec_struct_assignment.cc
+++ b/modules/mol/alg/tests/test_partial_sec_struct_assignment.cc
@@ -21,7 +21,6 @@
 #include <ost/mol/alg/sec_struct.hh>
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 #include <ost/io/mol/pdb_reader.hh>
 #include <ost/mol/builder.hh>
diff --git a/modules/mol/alg/tests/test_superposition.cc b/modules/mol/alg/tests/test_superposition.cc
index e3c88d647141532e5b782e50011971a0aca73b62..ba35aa122831036ab00fadeca2beb469750d5ca5 100644
--- a/modules/mol/alg/tests/test_superposition.cc
+++ b/modules/mol/alg/tests/test_superposition.cc
@@ -23,7 +23,6 @@
 #include <ost/mol/alg/svd_superpose.hh>
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 #include <ost/mol/builder.hh>
 #include <ost/message.hh>
diff --git a/modules/mol/alg/tests/tests.cc b/modules/mol/alg/tests/tests.cc
index fb9a32714d45fb72999e591145120f97a809923d..4308786c168fa90c76c2b7e0417e86407509efe8 100644
--- a/modules/mol/alg/tests/tests.cc
+++ b/modules/mol/alg/tests/tests.cc
@@ -22,6 +22,4 @@
  */
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE ost_mol_alg
-#define BOOST_AUTO_TEST_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
diff --git a/modules/mol/base/pymod/export_entity_view.cc b/modules/mol/base/pymod/export_entity_view.cc
index 19781a94f2ae3e6019d7e57b0eb55e6119b3d1e2..fb969ce46c695932f3c73e3632aff535add1dcce 100644
--- a/modules/mol/base/pymod/export_entity_view.cc
+++ b/modules/mol/base/pymod/export_entity_view.cc
@@ -18,6 +18,7 @@
 //------------------------------------------------------------------------------
 #include <boost/python.hpp>
 #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
+#include <boost/version.hpp>
 #if BOOST_VERSION<103400
 #include <boost/python/detail/api_placeholder.hpp>
 #endif
diff --git a/modules/mol/base/tests/test_atom_groups.cc b/modules/mol/base/tests/test_atom_groups.cc
index 7514f57acfd0242a20ecfb64aba55cb6f9b79e3f..71898da71126d8d9324c01975d2e1deb89421a7a 100644
--- a/modules/mol/base/tests/test_atom_groups.cc
+++ b/modules/mol/base/tests/test_atom_groups.cc
@@ -21,7 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 #include <ost/message.hh>
 #include "dummy_ent.hh"
diff --git a/modules/mol/base/tests/test_builder.cc b/modules/mol/base/tests/test_builder.cc
index f9128bca409ca2df578c9829eb1acb2fea99615a..30e8bdcdd8137a8f95e5f2123de5b7fd2c87fb2f 100644
--- a/modules/mol/base/tests/test_builder.cc
+++ b/modules/mol/base/tests/test_builder.cc
@@ -23,7 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 using namespace ost;
 using namespace ost::mol;
diff --git a/modules/mol/base/tests/test_chain.cc b/modules/mol/base/tests/test_chain.cc
index 8f60804014d25459af7671965556b1e48e45bf9e..c1442dd457995e06ed4ca6cb77e7b2fe023b85e7 100644
--- a/modules/mol/base/tests/test_chain.cc
+++ b/modules/mol/base/tests/test_chain.cc
@@ -21,7 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/mol.hh>
 #include <ost/message.hh>
diff --git a/modules/mol/base/tests/test_conn.cc b/modules/mol/base/tests/test_conn.cc
index be08f357a89b718027fbd4039d8719489b8cbbb5..14068218212c762993970b7cdc18d672113f3377 100644
--- a/modules/mol/base/tests/test_conn.cc
+++ b/modules/mol/base/tests/test_conn.cc
@@ -21,7 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 
 using namespace ost;
diff --git a/modules/mol/base/tests/test_coord_group.cc b/modules/mol/base/tests/test_coord_group.cc
index a26f2e2bd7dcfb296a62922792408e4b4c2c4b97..39be2c38ce1563be161fa34cc1f0559767a4d09c 100644
--- a/modules/mol/base/tests/test_coord_group.cc
+++ b/modules/mol/base/tests/test_coord_group.cc
@@ -21,7 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/mol.hh>
 #include <ost/mol/coord_group.hh>
diff --git a/modules/mol/base/tests/test_delete.cc b/modules/mol/base/tests/test_delete.cc
index 2d5f2339ce7f6d0072d654840d3fed814e7301b1..4f7b8dbb204670d1601372411801cabd586c29e8 100644
--- a/modules/mol/base/tests/test_delete.cc
+++ b/modules/mol/base/tests/test_delete.cc
@@ -21,7 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 #include <ost/log.hh>
 #include <ost/message.hh>
diff --git a/modules/mol/base/tests/test_entity.cc b/modules/mol/base/tests/test_entity.cc
index cab0efe6948fada6faeeeaa85f99ba57d1715856..7d8ea348573d6037a699ab2f44dde05dbf6e5b58 100644
--- a/modules/mol/base/tests/test_entity.cc
+++ b/modules/mol/base/tests/test_entity.cc
@@ -22,7 +22,6 @@
  
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/geom/vec_mat_predicates.hh>
 #include <ost/mol/chem_class.hh>
 #include <ost/mol/mol.hh>
diff --git a/modules/mol/base/tests/test_ics.cc b/modules/mol/base/tests/test_ics.cc
index 231df43cd79d7d4b8217a83eaa91f24b8213ed76..73358b98dca23c8256522458475c186efe8d2557 100644
--- a/modules/mol/base/tests/test_ics.cc
+++ b/modules/mol/base/tests/test_ics.cc
@@ -21,8 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 #include <ost/log.hh>
 #include <ost/message.hh>
diff --git a/modules/mol/base/tests/test_iterators.cc b/modules/mol/base/tests/test_iterators.cc
index 47b24bb11f6f002dded9b8e3a15fbb2899d82898..cfd61c5099faf4dca8ea02c754d1b0c68e4065d2 100644
--- a/modules/mol/base/tests/test_iterators.cc
+++ b/modules/mol/base/tests/test_iterators.cc
@@ -21,7 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 #include <ost/message.hh>
 #include <iostream>
diff --git a/modules/mol/base/tests/test_query.cc b/modules/mol/base/tests/test_query.cc
index 5f8865ae5b71d48e0247615b106ce34525f192bf..185b0f16812ef4bc9470d593876243bf6ecc5f05 100644
--- a/modules/mol/base/tests/test_query.cc
+++ b/modules/mol/base/tests/test_query.cc
@@ -21,7 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/query.hh>
 #include <ost/mol/mol.hh>
 #include <ost/mol/entity_view.hh>
diff --git a/modules/mol/base/tests/test_residue.cc b/modules/mol/base/tests/test_residue.cc
index d828544b7eba1ef47d5c995b4341b438e68e8c9d..a06c6a6cf82630a304d1522ae7485b9cd9eae360 100644
--- a/modules/mol/base/tests/test_residue.cc
+++ b/modules/mol/base/tests/test_residue.cc
@@ -21,7 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 
 #include <ost/message.hh>
diff --git a/modules/mol/base/tests/test_surface.cc b/modules/mol/base/tests/test_surface.cc
index d48b79843a88f80ce5f69cdf957c5c05fd3a3492..ecc8d40b1c56c9c0f2f31b84a1f19a25af0a5fee 100644
--- a/modules/mol/base/tests/test_surface.cc
+++ b/modules/mol/base/tests/test_surface.cc
@@ -19,7 +19,6 @@
  
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/surface_handle.hh>
 #include <cmath>
diff --git a/modules/mol/base/tests/test_transfer_connectivity.cc b/modules/mol/base/tests/test_transfer_connectivity.cc
index 2f5dff1439bf64099a9e109d6336ac6dc54b8737..1bb37feed3c729dc2a8ab9f65b350f55770d2324 100644
--- a/modules/mol/base/tests/test_transfer_connectivity.cc
+++ b/modules/mol/base/tests/test_transfer_connectivity.cc
@@ -25,7 +25,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 using namespace ost;
 using namespace ost::mol;
diff --git a/modules/mol/base/tests/test_view.cc b/modules/mol/base/tests/test_view.cc
index 9a72c9d16dcf879f2fa4fe2bb569e4156aa847c9..2aee173d32a45769f696fa448bf486ba812e7edd 100644
--- a/modules/mol/base/tests/test_view.cc
+++ b/modules/mol/base/tests/test_view.cc
@@ -21,7 +21,6 @@
  */
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 
 
diff --git a/modules/mol/base/tests/test_view_op.cc b/modules/mol/base/tests/test_view_op.cc
index abe84f3baa65d356bcc2989245084c605f21f672..f61f5d5bc6502a37279fd1e2e2f4f622d6db64bb 100644
--- a/modules/mol/base/tests/test_view_op.cc
+++ b/modules/mol/base/tests/test_view_op.cc
@@ -21,7 +21,6 @@
  */
  #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mol.hh>
 #include <ost/mol/view_op.hh>
 
diff --git a/modules/mol/base/tests/tests.cc b/modules/mol/base/tests/tests.cc
index 8fb5bbd47707615b1702765ff363cf8525716942..117985fd0151606c9216e483616d93d180396b01 100644
--- a/modules/mol/base/tests/tests.cc
+++ b/modules/mol/base/tests/tests.cc
@@ -18,7 +18,4 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE ost_mol_base
-#define BOOST_AUTO_TEST_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-
diff --git a/modules/mol/mm/src/ff_reader.cc b/modules/mol/mm/src/ff_reader.cc
index 54d09bd205a2b9b4ccbe7f7879c9689d53fd1fdc..c7cb9244dabb4e970fed1293fde44b55bafedac4 100644
--- a/modules/mol/mm/src/ff_reader.cc
+++ b/modules/mol/mm/src/ff_reader.cc
@@ -389,32 +389,32 @@ void FFReader::ReadResidueDatabase(const String& basename){
   try{
     data = preprocessor_.Process(basename+".arn");
     this->ParseARN(data);
-  }catch(ost::io::IOException e) { }
+  }catch(ost::io::IOException& e) { }
 
   try{
     data = preprocessor_.Process(basename+".hdb");
     this->ParseHDB(data);
-  }catch(ost::io::IOException e) { }
+  }catch(ost::io::IOException& e) { }
 
   try{
     data = preprocessor_.Process(basename+".n.tdb");
     this->ParseNTDB(data);
-  }catch(ost::io::IOException e) { }
+  }catch(ost::io::IOException& e) { }
 
   try{
     data = preprocessor_.Process(basename+".c.tdb");
     this->ParseCTDB(data);
-  }catch(ost::io::IOException e) { }
+  }catch(ost::io::IOException& e) { }
 
   try{
     data = preprocessor_.Process(basename+".vsd");
     this->ParseVSD(data);
-  }catch(ost::io::IOException e) { }
+  }catch(ost::io::IOException& e) { }
 
   try{
     data = preprocessor_.Process(basename+".r2b");
     this->ParseRtoB(data);
-  }catch(ost::io::IOException e) { }
+  }catch(ost::io::IOException& e) { }
 }
 
 void FFReader::ReadCHARMMPRM(const String& filename){
diff --git a/modules/mol/mm/tests/test_block.cc b/modules/mol/mm/tests/test_block.cc
index 20aaf2a7328779ae52cf2c6e7b0626b3f94e78e7..93826f8256a738256f22fe8192f0728f5bbbd983 100644
--- a/modules/mol/mm/tests/test_block.cc
+++ b/modules/mol/mm/tests/test_block.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mm/interaction.hh>
 #include <ost/mol/mm/buildingblock.hh>
 #include <ost/mol/mol.hh>
diff --git a/modules/mol/mm/tests/test_block_modifiers.cc b/modules/mol/mm/tests/test_block_modifiers.cc
index 0c60dd268b4f06b02204c6eae8c075d650701685..46b9c03c645cd7824187148ea871c593d36bfc7f 100644
--- a/modules/mol/mm/tests/test_block_modifiers.cc
+++ b/modules/mol/mm/tests/test_block_modifiers.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mm/interaction.hh>
 #include <ost/mol/mm/buildingblock.hh>
 #include <ost/mol/mol.hh>
diff --git a/modules/mol/mm/tests/test_forcefield.cc b/modules/mol/mm/tests/test_forcefield.cc
index cda6b18df4a8c38e315aef5e3849642e083d0c18..45b658a1df29b4f81bffb788323ce2c17a5ccd9c 100644
--- a/modules/mol/mm/tests/test_forcefield.cc
+++ b/modules/mol/mm/tests/test_forcefield.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mm/settings.hh>
 #include <ost/mol/mm/forcefield.hh>
 #include <ost/mol/mm/interaction.hh>
diff --git a/modules/mol/mm/tests/test_interaction.cc b/modules/mol/mm/tests/test_interaction.cc
index d021c5e711cfdc8b876b1d3a42a52310d8eb0db0..5c198079039c4bece741c5c45026c3703866d77c 100644
--- a/modules/mol/mm/tests/test_interaction.cc
+++ b/modules/mol/mm/tests/test_interaction.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mm/interaction.hh>
 #include <ost/mol/mol.hh>
 #include <ost/mol/builder.hh>
diff --git a/modules/mol/mm/tests/test_simulation.cc b/modules/mol/mm/tests/test_simulation.cc
index cfe2b608136a315fd89aa72bf0685f2bcfc8c3ee..4836f2f2a76f878ec4502d3bc6cebd3a2ffef103 100644
--- a/modules/mol/mm/tests/test_simulation.cc
+++ b/modules/mol/mm/tests/test_simulation.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mm/settings.hh>
 #include <ost/mol/mm/forcefield.hh>
 #include <ost/mol/mm/interaction.hh>
diff --git a/modules/mol/mm/tests/test_topology.cc b/modules/mol/mm/tests/test_topology.cc
index d10bd05e6427ab64da9b54adb2fd076dd05370d6..e74b79a4b194febe06c24519ed5d61bc77c562a8 100644
--- a/modules/mol/mm/tests/test_topology.cc
+++ b/modules/mol/mm/tests/test_topology.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <ost/mol/mm/topology.hh>
 #include <ost/mol/mm/topology_creator.hh>
 #include <ost/mol/mm/settings.hh>
@@ -560,7 +559,7 @@ BOOST_AUTO_TEST_CASE(test_topology_merge){
   geom::Vec3 v0;
 
   top_eight->GetHarmonicBondParameters(harmonic_bond_indices[0],ui0,ui1,r0,r1);
-  BOOST_CHECK(r0 = 42.0 && r1 == 42000.0);
+  BOOST_CHECK(r0 == 42.0 && r1 == 42000.0);
 
   top_eight->GetHarmonicAngleParameters(harmonic_angle_indices[0],ui0,ui1,ui2,r0,r1);
   BOOST_CHECK(r0 == 24.0 && r1 == 24000.0);
diff --git a/modules/mol/mm/tests/tests.cc b/modules/mol/mm/tests/tests.cc
index 6a7e493fad5d292938130abacbe3c60511b5729e..973da7b137ef0990ea16d0b634201b24bf44a4ab 100644
--- a/modules/mol/mm/tests/tests.cc
+++ b/modules/mol/mm/tests/tests.cc
@@ -19,7 +19,4 @@
 
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE ost_mol_base
-#define BOOST_AUTO_TEST_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-
diff --git a/modules/seq/alg/doc/seqalg.rst b/modules/seq/alg/doc/seqalg.rst
index 8f1abfd84218c42b3a66235616cf4038374b3666..265892530eb97227216348523af3a1830c656c7e 100644
--- a/modules/seq/alg/doc/seqalg.rst
+++ b/modules/seq/alg/doc/seqalg.rst
@@ -46,6 +46,42 @@ Algorithms for Alignments
      considered as aligned. There is no information in the pairwise alignment to 
      guide the merging, the result is undefined.
 
+
+     **Example:**
+
+     .. code-block:: python
+
+       ref_seq = ost.seq.CreateSequence('ref', 'acdefghiklmn')
+       seq_a1 = seq.CreateSequence('A1', 'acdefghikl-mn')
+       seq_a2 = seq.CreateSequence('A2', 'atd-fghikllmn')
+       seq_b1 = seq.CreateSequence('B1', 'acdefg-hiklmn')
+       seq_b2 = seq.CreateSequence('B2', 'acd---qhirlmn')
+
+       aln_a = seq.CreateAlignment()
+       aln_a.AddSequence(seq_a1)
+       aln_a.AddSequence(seq_a2)
+       print aln_a
+       # >>> A1  acdefghikl-mn
+       # >>> A2  atd-fghikllmn
+
+       aln_b = seq.CreateAlignment()
+       aln_b.AddSequence(seq_b1)
+       aln_b.AddSequence(seq_b2)
+       print aln_b
+       # >>> B1  acdefg-hiklmn
+       # >>> B2  acd---qhirlmn
+
+       aln_list = ost.seq.AlignmentList()
+       aln_list.append(aln_a)
+       aln_list.append(aln_b)
+
+       merged_aln = ost.seq.alg.MergePairwiseAlignments(aln_list, ref_seq)
+       print merged_aln
+       # >>> ref  acdefg-hikl-mn
+       # >>> A2   atd-fg-hikllmn
+       # >>> B2   acd---qhirl-mn
+
+
 .. autofunction:: ValidateSEQRESAlignment
 
 .. autofunction:: AlignToSEQRES
diff --git a/modules/seq/alg/pymod/__init__.py b/modules/seq/alg/pymod/__init__.py
index 44fa50acf5584119845f501ed28ac3b580468cec..27582d340c88a966e9d737b11b6af863c3f42e24 100644
--- a/modules/seq/alg/pymod/__init__.py
+++ b/modules/seq/alg/pymod/__init__.py
@@ -3,13 +3,15 @@ from ost.seq.alg.mat import *
 
 def ValidateSEQRESAlignment(aln, chain=None):
   """
-  Checks a sequence aligned to a SEQRES sequence to be free of strand breaks.
-  Residues divided by gaps are not considered as breakage but may also not be
-  connected.
+  Checks if sequence in alignment has same connectivity as residues in chain.
+  This looks for connected stretches in both the sequence and the chain and
+  returns False if they don't match. This uses the connectivity of the protein
+  backbone.
 
-  :param aln: Alignment
+  :param aln: Alignment of two sequences with second one expected to map to
+              residues in *chain*.
   :type aln: :class:`~ost.seq.AlignmentHandle`
-  :param chain: Source of the sequence
+  :param chain: Source of the sequence.
   :type chain: :class:`~ost.mol.ChainHandle`
 
   :returns: True if all residues (beside gapped ones) are connected, False
@@ -66,20 +68,20 @@ def AlignToSEQRES(chain, seqres, try_resnum_first=False, validate=True):
   SEQRES. If there are any additional residues in the chain, the function
   raises a ValueError.
 
-  If 'try_resnum_first' is set, building the alignment following residue numbers
-  is tried first.
-
-  If 'validate' is set (default), the alignment is checked using
-  :func:`~ost.seq.alg.ValidateSEQRESAlignment`.
-
   :param chain: Source of the sequence
   :type chain: :class:`~ost.mol.ChainHandle`
   :param seqres: SEQRES sequence
   :type seqres: :class:`str`
-  :param try_resnum_first: Try to align by residue number
+  :param try_resnum_first: If set to True, this first builds an alignment using
+                           residue numbers and checks if the one-letter-codes
+                           match. If they all match, this alignment is used
+                           (and possibly validated). Otherwise, it displays a
+                           warning and falls back to the connectivity-based
+                           alignment.
   :type try_resnum_first: :class:`bool`
-  :param validate: Validate alignment by
-                   :func:`~ost.seq.alg.ValidateSEQRESAlignment`
+  :param validate: If set to True, the alignment is additionally checked by
+                   :func:`~ost.seq.alg.ValidateSEQRESAlignment` and raises
+                   a ValueError if the validation failed.
   :type validate: :class:`bool`
 
   :returns: The alignment of the residues in the chain and the SEQRES entries.
diff --git a/modules/seq/alg/tests/test_distance_analysis.cc b/modules/seq/alg/tests/test_distance_analysis.cc
index e8b41e819329c2c6adcf60e6f241154bc740f186..928c00ead3741f43be5f763823f15b1e235a0273 100644
--- a/modules/seq/alg/tests/test_distance_analysis.cc
+++ b/modules/seq/alg/tests/test_distance_analysis.cc
@@ -23,7 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/atom_view.hh>
 #include <ost/mol/xcs_editor.hh>
diff --git a/modules/seq/alg/tests/test_merge_pairwise_alignments.cc b/modules/seq/alg/tests/test_merge_pairwise_alignments.cc
index 5c23b1f65873aefba0cb99c9dbf1a6ca2cc89708..bcdca910fd34a4a01a35a41397b8b6c2ae09a9e5 100644
--- a/modules/seq/alg/tests/test_merge_pairwise_alignments.cc
+++ b/modules/seq/alg/tests/test_merge_pairwise_alignments.cc
@@ -22,7 +22,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/seq/alg/merge_pairwise_alignments.hh>
 #include <ost/integrity_error.hh>
diff --git a/modules/seq/alg/tests/test_sequence_identity.cc b/modules/seq/alg/tests/test_sequence_identity.cc
index 7173ff8c2920ce4665fbe379a8e35c204bca79b2..87bd3f33e2d4bb8b210a62a7a99c06bc8562ab48 100644
--- a/modules/seq/alg/tests/test_sequence_identity.cc
+++ b/modules/seq/alg/tests/test_sequence_identity.cc
@@ -22,8 +22,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-#include <boost/test/floating_point_comparison.hpp>
 #include <ost/seq/alg/sequence_identity.hh>
 
 
diff --git a/modules/seq/alg/tests/tests.cc b/modules/seq/alg/tests/tests.cc
index 6203808c24decbbfc2ebe5aee2ce74cdf78ad659..5a9ec9d000e545ebf3036f5c08a5e01b1f73ef89 100644
--- a/modules/seq/alg/tests/tests.cc
+++ b/modules/seq/alg/tests/tests.cc
@@ -18,7 +18,4 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE ost_seq_alg
-#define BOOST_AUTO_TEST_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
-
diff --git a/modules/seq/base/pymod/export_sequence.cc b/modules/seq/base/pymod/export_sequence.cc
index 1919290e7f90f9cee97b19fcdcecccc007090c64..e8331c7fc198eca9ab1cd4befcf136811543b4ae 100644
--- a/modules/seq/base/pymod/export_sequence.cc
+++ b/modules/seq/base/pymod/export_sequence.cc
@@ -62,7 +62,7 @@ T do_slice(const T& t, slice& sl) {
     if (start<0) {
       start=t.GetCount()+start;
     }    
-  } catch(error_already_set) {
+  } catch(error_already_set&) {
     PyErr_Clear();
   }
   try {
@@ -70,7 +70,7 @@ T do_slice(const T& t, slice& sl) {
     if (end<0) {
       end=t.GetCount()+end;
     }    
-  } catch(error_already_set) {
+  } catch(error_already_set&) {
     PyErr_Clear();
   }
   return t.Slice(start, end-start);
@@ -96,7 +96,7 @@ String slice_seq(const ConstSequenceHandle& sh, slice& sl) {
     if (start<0) {
       start=sh.GetLength()+start;
     }    
-  } catch(error_already_set) {
+  } catch(error_already_set&) {
     PyErr_Clear();
   }
   try {
@@ -104,7 +104,7 @@ String slice_seq(const ConstSequenceHandle& sh, slice& sl) {
     if (end<0) {
       end=sh.GetLength()+end;
     }
-  } catch(error_already_set) {
+  } catch(error_already_set&) {
     PyErr_Clear();
   }
   String s=sh.GetString();
@@ -118,7 +118,7 @@ AlignedRegion slice_aln(const AlignmentHandle& aln, slice sl) {
     if (start<0) {
       start=aln.GetLength()+start;
     }    
-  } catch(error_already_set) {
+  } catch(error_already_set&) {
     PyErr_Clear();
   }
   try {
@@ -126,7 +126,7 @@ AlignedRegion slice_aln(const AlignmentHandle& aln, slice sl) {
     if (end<0) {
       end=aln.GetLength()+end;
     }
-  } catch(error_already_set) {
+  } catch(error_already_set&) {
     PyErr_Clear();
   }
   return aln.MakeRegion(start, end-start);
diff --git a/modules/seq/base/tests/test_aligned_column.cc b/modules/seq/base/tests/test_aligned_column.cc
index d934cefb0d930ed167367d583ced4e9dcf6f4b3c..73e75310ca7d71f111a19e4eb8b35adc3107563b 100644
--- a/modules/seq/base/tests/test_aligned_column.cc
+++ b/modules/seq/base/tests/test_aligned_column.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/mol.hh>
 
diff --git a/modules/seq/base/tests/test_aligned_region.cc b/modules/seq/base/tests/test_aligned_region.cc
index 118c8d09fd843b94c4cec8551d50ac968892e961..27ddc299b5b9939a94cab31b9a292d07b213983c 100644
--- a/modules/seq/base/tests/test_aligned_region.cc
+++ b/modules/seq/base/tests/test_aligned_region.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/mol.hh>
 
diff --git a/modules/seq/base/tests/test_alignment.cc b/modules/seq/base/tests/test_alignment.cc
index 52da21684c6dfc2f68e6788b36fce28bad85e65e..05a405b37378fec6af5a7a932bf0752a2eace60a 100644
--- a/modules/seq/base/tests/test_alignment.cc
+++ b/modules/seq/base/tests/test_alignment.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/invalid_handle.hh>
 #include <ost/mol/mol.hh>
diff --git a/modules/seq/base/tests/test_profile.cc b/modules/seq/base/tests/test_profile.cc
index c48e65f36258baebbf1d1b829ce07f3e1fb7c741..252add767447ae29a6f97585bf5227de787fa749 100644
--- a/modules/seq/base/tests/test_profile.cc
+++ b/modules/seq/base/tests/test_profile.cc
@@ -23,7 +23,6 @@
 
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 #include <iostream>
 
 #include <ost/seq/profile_handle.hh>
diff --git a/modules/seq/base/tests/test_sequence.cc b/modules/seq/base/tests/test_sequence.cc
index 309939db0d715aa4b8dce5256bac8176117bc07a..b18855bdd95c38e5d87fe5cfb37fd60e29914a47 100644
--- a/modules/seq/base/tests/test_sequence.cc
+++ b/modules/seq/base/tests/test_sequence.cc
@@ -18,7 +18,6 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
 
 #include <ost/mol/mol.hh>
 
diff --git a/modules/seq/base/tests/tests.cc b/modules/seq/base/tests/tests.cc
index 8d2205011a3c18953a65922d8a8e851ef6f6fd52..4d3b8b161269ae40f50241b4d1643f03117d9ddd 100644
--- a/modules/seq/base/tests/tests.cc
+++ b/modules/seq/base/tests/tests.cc
@@ -18,6 +18,4 @@
 //------------------------------------------------------------------------------
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_MODULE ost_seq_base
-#define BOOST_AUTO_TEST_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/test/auto_unit_test.hpp>
diff --git a/singularity/Singularity b/singularity/Singularity
index 429cb86a501f77822f52648490f7cf89e8a6ad61..584c643d5c1b6898ae4cac18f4243f9cd4f5467c 100644
--- a/singularity/Singularity
+++ b/singularity/Singularity
@@ -17,7 +17,7 @@ export CPUS_FOR_MAKE=8
 export PYTHONPATH="/usr/local/lib64/python2.7/site-packages:${PYTHONPATH}"
 # When changing OPENSTRUCTURE_VERSION make sure to change it also in the
 # environment section of singularity recipe (this file).
-export OPENSTRUCTURE_VERSION="1.10.0"
+export OPENSTRUCTURE_VERSION="1.11.0"
 export OPENSTRUCTURE_SHARE="/usr/local/share/ost"
 export MSMS_VERSION="2.6.1"
 export OPENMM_VERSION="7.1.1"
@@ -83,7 +83,8 @@ virtualenv --system-site-packages $VIRTUALENV_DIR
 # INSTALL REQUIRED PYTHON PACKAGES
 ##################################
 pip install jupyter==1.0.0 \
-            nglview==1.1.6
+            nglview==1.1.6 \
+            six==1.13.0
 
 # DOWNLOAD AND INSTALL MSMS
 ##############
@@ -214,7 +215,7 @@ cd /home
 # ENVIRONMENT
 ##############################################################################
 export OST_ROOT="/usr/local"
-export OPENSTRUCTURE_VERSION="1.10.0"
+export OPENSTRUCTURE_VERSION="1.11.0"
 export OPENMM_LIB_PATH=/usr/local/openmm/lib/
 export PYTHONPATH="/usr/local/lib64/python2.7/site-packages:${PYTHONPATH}"
 export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib64:${OPENMM_LIB_PATH}"