diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index d555dbf5163fbd73ad4b63f5bddb64d591ff0c61..e4dc33b71ddb60cfe556fd3af0db400734b354d8 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,10 @@
+Changes in Release 2.3.1
+--------------------------------------------------------------------------------
+
+ * Simplify Dockerfile - remove MSMS
+ * Enable OpenMM 7.7.0
+ * Resolve segfault in DNG observed in Python 3.9
+
 Changes in Release 2.3.0
 --------------------------------------------------------------------------------
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c118d3d0a100c940124a48699f21918d43dc815a..5f81621413811bd35930ff6507a3ddfd39e9e359 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,7 @@ project(OpenStructure CXX C)
 set (CMAKE_EXPORT_COMPILE_COMMANDS 1)
 set (OST_VERSION_MAJOR 2)
 set (OST_VERSION_MINOR 3)
-set (OST_VERSION_PATCH 0)
+set (OST_VERSION_PATCH 1)
 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)
 include(OST)
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 0711b1a5aad8bf01ebfc501c57bf0f2f77269d6a..4a1a9bd26ead4670ec8ab8791ed0648c70b23971 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -2,10 +2,9 @@ FROM ubuntu:20.04
 
 # ARGUMENTS
 ###########
-ARG OPENSTRUCTURE_VERSION="2.3.0"
+ARG OPENSTRUCTURE_VERSION="2.3.1"
 ARG SRC_FOLDER="/usr/local/src"
 ARG CPUS_FOR_MAKE=2
-ARG MSMS_VERSION="2.6.1"
 ARG OPENMM_VERSION="7.1.1"
 ARG OPENMM_INCLUDE_PATH="/usr/local/openmm/include/"
 ARG OPENMM_LIB_PATH="/usr/local/openmm/lib/"
@@ -36,18 +35,6 @@ RUN apt-get update -y && apt-get install -y cmake \
                                             # CLEANUP
                                             rm -rf /var/lib/apt/lists/*
 
-# INSTALL MSMS
-##############
-RUN cd ${SRC_FOLDER} && \
-    mkdir -p msms && \
-    cd ${SRC_FOLDER}/msms && \
-    wget http://mgltools.scripps.edu/downloads/tars/releases/MSMSRELEASE/REL${MSMS_VERSION}/msms_i86_64Linux2_${MSMS_VERSION}.tar.gz && \
-    tar -xvzf msms_i86_64Linux2_${MSMS_VERSION}.tar.gz && \
-    cp -v ${SRC_FOLDER}/msms/msms.x86_64Linux2.${MSMS_VERSION} /usr/local/bin/msms && \
-    cp -v ${SRC_FOLDER}/msms/pdb_to_xyzr /usr/local/bin/pdb_to_xyzr && \
-    cp -v ${SRC_FOLDER}/msms/pdb_to_xyzrn /usr/local/bin/pdb_to_xyzrn && \
-    rm -rf ${SRC_FOLDER}/msms
-
 # INSTALL OPENMM
 ################
 RUN cd ${SRC_FOLDER} && \
diff --git a/docker/README.rst b/docker/README.rst
index 10656dce5a40881ee2eb2045300480cdb4cd137b..4267e29f0ef349a734164966c1bdab52e4625bfc 100644
--- a/docker/README.rst
+++ b/docker/README.rst
@@ -16,7 +16,10 @@ image for the latest stable version of OST. You can import it by
 
   docker pull registry.scicore.unibas.ch/schwede/openstructure:<TAG>
 
-and just start using it without the overhead to build it yourself.
+and just start using it without the overhead to build it yourself. A list of
+available tags can be found on our
+`GitLab registry page <https://git.scicore.unibas.ch/schwede/openstructure/container_registry/>`_.
+A tag named ``latest`` is always available, pointing to the current stable OST release.
 
 
 Build Docker image
diff --git a/modules/doc/install.rst b/modules/doc/install.rst
index f65321de98fffaa15affbde2ec71933d6103b154..d840eeab2f2084f5eba8ba5e57e2afe3faa41baf 100644
--- a/modules/doc/install.rst
+++ b/modules/doc/install.rst
@@ -323,22 +323,25 @@ OpenStructure.
 
 
 
-**macOS (Catalina) with Homebrew**
+
+**macOS (Catalina/ Big Sur/ Monterey) with Homebrew**
 
 .. note::
 
-  When switching the Qt version used to compile OST with support for the
+  When switching the Qt version used for compiling OST with support for the
   graphical user interface, dng may start behaving weird. Symptoms are that the
   user interface starts being unresponsive to mouse clicks. An easy solution
   may be to close dng and remove
-  $HOME/Library/Preferences/org.openstructure.dng.plist and start dng again.
+  ``$HOME/Library/Preferences/org.openstructure.dng.plist`` and start dng again.
 
 `Homebrew <https://brew.sh/>`_ can be used to conveniently install all
 dependencies. The current Python version, as of writing these instructions, is
-3.9.0 but works so far. Boost comes as 1.74.0 which seems to be OK. Do not
-forget to also install `boost-python3` (your system may have a lower version of
-Python than 3.9.0 but it seems like `boost-python3` was compiled for 3.9.0).
-Eigen and SQLite also seem to be unproblematic concerning higher version numbers.
+3.9.10 but works so far. Boost comes as 1.76.0 which seems to be OK. Do not
+forget to also install boost-python3 (your system may have a lower version of
+Python than 3.9.10 but it seems like boost-python3 was compiled for 3.9.10).
+Eigen and SQLite also seem to be unproblematic concerning higher version
+numbers. To build the graphical user interface, use Qt version 5 by installing
+packages qt@5 and pyqt@5 from Homebrew.
 
 If you want to build the info module or the graphical user interface, make sure
 you have the Xcode app installed. Just the Xcode command line tools which are
@@ -357,13 +360,12 @@ binaries in your Path for CMake to determine its configuration:
 
 .. code-block:: bash
 
-  export PATH="/usr/local/opt/qt/bin:$PATH"
+  export PATH="/usr/local/opt/qt@5/bin:$PATH"
 
 Homebrew installs all the software under /usr/local. Thus we have to tell cmake
-where to find Boost and Python. Also the Python headers and libraries are not
-located as they are on Linux and hence they must be specified too. To get rid of
-a ton of compilation warnings from third party software, we add some dedicated
-C flags:
+where to find Python. Also the Python headers and libraries are not located as
+they are on Linux and hence they must be specified too. To get rid of a ton of
+compilation warnings from third party software, we add some dedicated C flags:
 
 .. code-block:: bash
 
@@ -378,19 +380,19 @@ C flags:
           -DCMAKE_C_FLAGS="-isystem /Applications/Xcode.app/Contents/\
   Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/\
   Library/Frameworks/OpenGL.framework/Headers/ -isystem /usr/local/opt/\
-  qt/lib/QtCore.framework/Headers/ -isystem /usr/local/opt/qt/lib/\
+  qt@5/lib/QtCore.framework/Headers/ -isystem /usr/local/opt/qt@5/lib/\
   QtWidgets.framework/Headers/ -isystem /Applications/Xcode.app/\
   Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/\
   MacOSX.sdk/System/Library/Frameworks/Security.framework/ \
-  -isystem /usr/local/opt/qt/lib/QtGui.framework/Headers/" \
-          -DCMAKE_CXX_FLAGS="-isystem /Applications/Xcode.app/Contents/\
-  Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/\
-  Library/Frameworks/OpenGL.framework/Headers/ -isystem /usr/local/opt/\
-  qt/lib/QtCore.framework/Headers/ -isystem /usr/local/opt/qt/lib/\
+  -isystem /usr/local/opt/qt@5/lib/QtGui.framework/Headers/" \
+         -DCMAKE_CXX_FLAGS="-isystem /Applications/Xcode.app/\
+  Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/\
+  System/Library/Frameworks/OpenGL.framework/Headers/ -isystem /usr/local/opt/\
+  qt@5/lib/QtCore.framework/Headers/ -isystem /usr/local/opt/qt@5/lib/\
   QtWidgets.framework/Headers/ -isystem /Applications/Xcode.app/\
   Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/\
   MacOSX.sdk/System/Library/Frameworks/Security.framework/ \
-  -isystem /usr/local/opt/qt/lib/QtGui.framework/Headers/"
+  -isystem /usr/local/opt/qt@5/lib/QtGui.framework/Headers/"
 
 Building the Project
 --------------------------------------------------------------------------------
@@ -430,7 +432,8 @@ To get the newest changes from the central git repository, enter
 in your terminal. This will fetch the newest changes.
 
 
-..  LocalWords:  Homebrew cmake CMake zlib SQLite FFTW libtiff libpng PyQt
-..  LocalWords:  SSL macOS Makefiles PDB qmake PNG libz libsqlite OPTIMIZE
+..  LocalWords:  Homebrew cmake CMake zlib SQLite FFTW libtiff libpng PyQt OST
+..  LocalWords:  SSL macOS Makefiles PDB qmake PNG libz libsqlite OPTIMIZE dng
 ..  LocalWords:  DNDEBUG RPATH rpath SHADER shader SPNAV DConnexion profiler
-..  LocalWords:  DOPTIMIZE DENABLE DOPEN DPYTHON DBOOST DSYS Xcode Eigen
+..  LocalWords:  DOPTIMIZE DENABLE DOPEN DPYTHON DBOOST DSYS Xcode Eigen Sur
+..  LocalWords:  Monterey SDKROOT DPython DIRS DCMAKE isystem CXX
diff --git a/modules/gui/src/python_shell/python_interpreter.cc b/modules/gui/src/python_shell/python_interpreter.cc
index 93c9af99b92f7b246aa41acbe1c7d63402faf1cd..4c2afae419b13f7e3fa264e1782ac66a7e797638 100644
--- a/modules/gui/src/python_shell/python_interpreter.cc
+++ b/modules/gui/src/python_shell/python_interpreter.cc
@@ -66,6 +66,9 @@ PythonInterpreter::~PythonInterpreter()
 
 PythonInterpreter& PythonInterpreter::Instance()
 {
+  if(!Py_IsInitialized()){
+    Py_InitializeEx(1);
+  }
   static PythonInterpreter instance;
   return instance;
 }
diff --git a/modules/gui/src/python_shell/python_interpreter_worker.cc b/modules/gui/src/python_shell/python_interpreter_worker.cc
index c65a6d002815d9b894cc3b2400334ccc711807e3..272f018a43aa53a18a729e5f7592dded20fdc5cc 100644
--- a/modules/gui/src/python_shell/python_interpreter_worker.cc
+++ b/modules/gui/src/python_shell/python_interpreter_worker.cc
@@ -55,7 +55,6 @@ PythonInterpreterWorker::PythonInterpreterWorker():
   current_id_(),
   awake_(false)
 {
-  Py_InitializeEx(1);
   parse_expr_cmd_=bp::import("parser").attr("expr");
   main_namespace_ = bp::extract<bp::dict>(bp::import("__main__").attr("__dict__"));
   repr_=bp::import("__main__").attr("__builtins__").attr("repr");
diff --git a/modules/mol/mm/tests/test_simulation.cc b/modules/mol/mm/tests/test_simulation.cc
index 4e46c5fc5b2666aabd0a122eee45791536441dac..7d92dbfce5b57353c313ab783dd67bf441f5223d 100644
--- a/modules/mol/mm/tests/test_simulation.cc
+++ b/modules/mol/mm/tests/test_simulation.cc
@@ -54,8 +54,8 @@ BOOST_AUTO_TEST_CASE(test_simulation_basics){
 
   TopologyPtr top = TopologyCreator::Create(test_ent,settings);
   //lets add interactions, that are not set when using charmm
-  top->AddHarmonicAngle(1,2,3,10.0,10.0);
-  top->AddPeriodicImproper(1,2,3,4,2,10.0,10.0);
+  top->AddHarmonicAngle(1,2,3,1.0,10.0);
+  top->AddPeriodicImproper(1,2,3,4,2,1.0,10.0);
   top->AddDistanceConstraint(1,2,10.0);
   top->AddHarmonicPositionRestraint(1,geom::Vec3(0.0,0.0,0.0),10.0);
   top->AddHarmonicDistanceRestraint(1,2,10.0,10.0);
@@ -68,11 +68,11 @@ BOOST_AUTO_TEST_CASE(test_simulation_basics){
   //we check, wether the reset functions have the desired effect on the topology
   //we cannot really check the effect on the openmm system...
   sim.ResetHarmonicBond(42,5.0,6.0);
-  sim.ResetHarmonicAngle(0,8.0,9.0);
-  sim.ResetUreyBradleyAngle(42,5.0,6.0,7.0,8.0);
-  sim.ResetPeriodicDihedral(42,4,5.0,6.0);
-  sim.ResetPeriodicImproper(0,5,8.0,9.0);
-  sim.ResetHarmonicImproper(42,5.0,6.0);
+  sim.ResetHarmonicAngle(0,2.0,9.0);
+  sim.ResetUreyBradleyAngle(42,2.0,6.0,7.0,8.0);
+  sim.ResetPeriodicDihedral(42,4,2.0,6.0);
+  sim.ResetPeriodicImproper(0,5,2.0,9.0);
+  sim.ResetHarmonicImproper(42,2.0,6.0);
   sim.ResetLJPair(42,5.0,6.0);
   sim.ResetDistanceConstraint(0,10.0);
   sim.ResetHarmonicPositionRestraint(0,geom::Vec3(1.0,1.0,1.0),5.0);
@@ -92,16 +92,16 @@ BOOST_AUTO_TEST_CASE(test_simulation_basics){
   BOOST_CHECK(r1 == 5.0 && r2 == 6.0);
 
   top->GetHarmonicAngleParameters(0,ui1,ui2,ui3,r1,r2);
-  BOOST_CHECK(r1 == 8.0 && r2 == 9.0);
+  BOOST_CHECK(r1 == 2.0 && r2 == 9.0);
 
   top->GetUreyBradleyAngleParameters(42,ui1,ui2,ui3,r1,r2,r3,r4);
-  BOOST_CHECK(r1 == 5.0 && r2 == 6.0 && r3 == 7.0 && r4 == 8.0);
+  BOOST_CHECK(r1 == 2.0 && r2 == 6.0 && r3 == 7.0 && r4 == 8.0);
 
   top->GetPeriodicDihedralParameters(42,ui1,ui2,ui3,ui4,i1,r1,r2);
-  BOOST_CHECK(i1 == 4 && r1 == 5.0 && r2 == 6.0);
+  BOOST_CHECK(i1 == 4 && r1 == 2.0 && r2 == 6.0);
 
   top->GetPeriodicImproperParameters(0,ui1,ui2,ui3,ui4,i1,r1,r2);
-  BOOST_CHECK(i1 == 5 && r1 == 8.0 && r2 == 9.0);
+  BOOST_CHECK(i1 == 5 && r1 == 2.0 && r2 == 9.0);
 
   top->GetLJPairParameters(42,ui1,ui2,r1,r2);
   BOOST_CHECK(r1 == 5.0 && r2 == 6.0);
diff --git a/singularity/Singularity b/singularity/Singularity
index dd26e2a39ff55ef5417c5f215ffc0bdcc5775a69..09f83f356b95ceeee34cf0ebbf34d4e38660cc4d 100644
--- a/singularity/Singularity
+++ b/singularity/Singularity
@@ -1,5 +1,5 @@
 BootStrap: docker
-From: registry.scicore.unibas.ch/schwede/openstructure:2.3.0-focal
+From: registry.scicore.unibas.ch/schwede/openstructure:2.3.1-focal
 %post
 ##############################################################################
 # POST