diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1a90c2db8aa7c46b288535172aca89334765f8af..c4331fcb4f9f3cc4e31eeeed87d8c1133632df72 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,8 +24,8 @@ include(PROMOD3)
 
 # versioning info
 set(PROMOD3_VERSION_MAJOR 3)
-set(PROMOD3_VERSION_MINOR 3)
-set(PROMOD3_VERSION_PATCH 1)
+set(PROMOD3_VERSION_MINOR 4)
+set(PROMOD3_VERSION_PATCH 0)
 set(PROMOD3_VERSION_STRING ${PROMOD3_VERSION_MAJOR}.${PROMOD3_VERSION_MINOR})
 set(PROMOD3_VERSION_STRING ${PROMOD3_VERSION_STRING}.${PROMOD3_VERSION_PATCH})
 
diff --git a/container/Dockerfile b/container/Dockerfile
index bab75e94add97ed6b33f6bc0441f7bb996edd59a..e50c7956cd7f63dc590a7581eb97055e06b403fb 100644
--- a/container/Dockerfile
+++ b/container/Dockerfile
@@ -1,9 +1,9 @@
-ARG OPENSTRUCTURE_IMAGE_TAG="2.5.0-jammy"
+ARG OPENSTRUCTURE_IMAGE_TAG="2.6.0-jammy"
 FROM registry.scicore.unibas.ch/schwede/openstructure:${OPENSTRUCTURE_IMAGE_TAG}
 
 # ARGUMENTS
 ###########
-ARG PROMOD_VERSION="3.3.1"
+ARG PROMOD_VERSION="3.4.0"
 ARG SRC_FOLDER="/usr/local/src"
 
 
diff --git a/container/Singularity b/container/Singularity
index b7cdd9c18899372ab521e848d9d39ffc3f80b3cb..21a1b71afbd39dd34c782e1df68e01d00378acf5 100644
--- a/container/Singularity
+++ b/container/Singularity
@@ -1,5 +1,5 @@
 BootStrap: docker
-From: registry.scicore.unibas.ch/schwede/promod3:3.3.1-OST2.5.0-jammy
+From: registry.scicore.unibas.ch/schwede/promod3:3.4.0-OST2.6.0-jammy
 %post
 ##############################################################################
 # POST
diff --git a/doc/conf.py.in b/doc/conf.py.in
index c132f0eb3b03ddbb875e37b840497cacd498e417..d81787575eca8e01e159a5c8dc8cf5e4b3ce82e3 100644
--- a/doc/conf.py.in
+++ b/doc/conf.py.in
@@ -286,7 +286,7 @@ rst_epilog = """
 .. |cmake| replace:: CMake
 .. |ost_l| replace:: OpenStructure
 .. |ost_s| replace:: OST
-.. |ost_version| replace:: 2.5.0
+.. |ost_version| replace:: 2.6.0
 .. |python| replace:: Python
 .. |sphinx| replace:: Sphinx
 .. _sphinx: http://sphinx-doc.org/
diff --git a/doc/dev_setup.rst b/doc/dev_setup.rst
index 04d8450744dee2c1b26dd37b061527cc0919ee24..7506314c0141aa27825ec1a49bd2b4f9f700fb3b 100644
--- a/doc/dev_setup.rst
+++ b/doc/dev_setup.rst
@@ -251,4 +251,4 @@ modules from there, use the binaries from :file:`stage/bin`, etc..
 
 
 .. |pylint| replace:: Pylint
-.. _pylint: https://www.pylint.org
+.. _pylint: https://pylint.readthedocs.io
diff --git a/doc/tests/test_doctests.py b/doc/tests/test_doctests.py
index 1fc04d24085b237adcf42e03ed0b639f78ee583f..862efe8f26adbe9c31fd496077dee59f88abc49a 100644
--- a/doc/tests/test_doctests.py
+++ b/doc/tests/test_doctests.py
@@ -153,7 +153,7 @@ class DocTests(unittest.TestCase):
                          "Place the description of your script right in the file and import")
         self.assertEqual(out_lines[3].strip(),
                          "it via '__doc__' as description to the parser ('-h', '--help').")
-        self.assertEqual(out_lines[5].strip(), "optional arguments:")
+        self.assertTrue(out_lines[5].strip() in ["optional arguments:", "options:"])
         self.assertGreater(len(out_lines), 5)
 
     def testCoreMsgError(self):
diff --git a/extras/data_generation/afdb_modelling/afdb_proteom_to_data_chunks.py b/extras/data_generation/afdb_modelling/afdb_proteom_to_data_chunks.py
index 895d7e44c8a83c012606e2d465ccb32e6041f88a..9107df01cb0bb8a902bb5f6bd1d505bcf5396e68 100644
--- a/extras/data_generation/afdb_modelling/afdb_proteom_to_data_chunks.py
+++ b/extras/data_generation/afdb_modelling/afdb_proteom_to_data_chunks.py
@@ -53,7 +53,7 @@ def iterate_proteom(tarball):
                                                           process=True)
             yield (tar_info.name, ent, mmcif_info, seqres)
 
-def process_proteom(tarball, ca_only=False):
+def process_proteom(tarball, ca_only=False, omf_max_error=0.0):
     """ Helper: Creates list of entries for one proteom
 
     :param tarball: Path to proteom tarball
@@ -63,7 +63,7 @@ def process_proteom(tarball, ca_only=False):
     :returns: :class: list of :class:`tuple` in format required by
               :func:`FromDataChunks`
     """
-    omf_opts = io.OMFOption.DEFAULT_PEPLIB | io.OMFOption.LOSSY | \
+    omf_opts = io.OMFOption.DEFAULT_PEPLIB | \
                io.OMFOption.AVG_BFACTORS | io.OMFOption.ROUND_BFACTORS | \
                io.OMFOption.SKIP_SS | io.OMFOption.INFER_PEP_BONDS
 
@@ -80,7 +80,7 @@ def process_proteom(tarball, ca_only=False):
             ent = mol.CreateEntityFromView(ent, False)
         ent_name = f"{uniprot_ac} {fragment} {version}"
         ent.SetName(ent_name)
-        omf = io.OMF.FromMMCIF(ent, entry[2], omf_opts)
+        omf = io.OMF.FromEntity(ent, max_error=omf_max_error, options=omf_opts)
         omf = gzip.compress(omf.ToBytes())
         entries.append([uniprot_ac, fragment, version, omf])
     return entries
diff --git a/loop/tests/test_all_atom_positions.cc b/loop/tests/test_all_atom_positions.cc
index e25b4a217714c21b9e233b78f2a2b88bd5066d83..d7011d083f5143e32c0d82c60b9cb3ad548fc1ec 100644
--- a/loop/tests/test_all_atom_positions.cc
+++ b/loop/tests/test_all_atom_positions.cc
@@ -315,21 +315,21 @@ BOOST_AUTO_TEST_CASE(test_aap_torsions) {
     if (!n_ter) {
       tor = res_list[i].GetPhiTorsion();
       if (tor.IsValid()) {
-        BOOST_CHECK_EQUAL(atoms.GetPhiTorsion(i), tor.GetAngle());
+        BOOST_CHECK_CLOSE(atoms.GetPhiTorsion(i), tor.GetAngle(), 1e-5);
       }
     }
     // psi
     if (!c_ter) {
       tor = res_list[i].GetPsiTorsion();
       if (tor.IsValid()) {
-        BOOST_CHECK_EQUAL(atoms.GetPsiTorsion(i), tor.GetAngle());
+        BOOST_CHECK_CLOSE(atoms.GetPsiTorsion(i), tor.GetAngle(), 1e-5);
       }
     }
     // omega
     if (!n_ter) {
       tor = res_list[i].GetOmegaTorsion();
       if (tor.IsValid()) {
-        BOOST_CHECK_EQUAL(atoms.GetOmegaTorsion(i), tor.GetAngle());
+        BOOST_CHECK_CLOSE(atoms.GetOmegaTorsion(i), tor.GetAngle(), 1e-5);
       }
     }
   }
diff --git a/loop/tests/test_mm_system_creator.cc b/loop/tests/test_mm_system_creator.cc
index 6cda3263bc2269edb62050dd4d8cce8f67573533..7a180a1fd5395a72077b61178ba1f3079fe99b24 100644
--- a/loop/tests/test_mm_system_creator.cc
+++ b/loop/tests/test_mm_system_creator.cc
@@ -240,7 +240,7 @@ void CompareFullSimulation(const AllAtomPositions& all_pos,
   for (uint i = 0; i < pos_ref.size(); ++i) {
     BOOST_CHECK(geom::Distance(pos[mapping[i]], pos_ref[i]) < 1e-5);
     BOOST_CHECK(geom::Distance(vel[mapping[i]], vel_ref[i]) < 1e-5);
-    BOOST_CHECK(geom::Distance(forces[mapping[i]], forces_ref[i]) < 1e-5);
+    BOOST_CHECK(geom::Distance(forces[mapping[i]], forces_ref[i]) < 1e-3);
   }
 
   // check mm_sim features (NOTE: DIFFs non-zero but that's expected...)