diff --git a/CMakeLists.txt b/CMakeLists.txt
index e07c53d6b51fecf1fb22a25ed10dec2cb1a9eb33..a50fff8e7004f5255bdaaf9b1555b3bc3150691b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@
 # Author: Marco Biasini
 #-------------------------------------------------------------------------------
 
-cmake_minimum_required(VERSION 3.12.1 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.25 FATAL_ERROR)
 
 # Set CMake policies
 # Behaviour of target_link_libraries, always link by full path. CMP0060 can
@@ -22,6 +22,15 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.31.0")
   cmake_policy(SET CMP0177 NEW)
 endif()
 
+if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30.0")
+  # See CMP0167 for more information
+  # to summarize: Starting from boost 1.70, boost comes with a package
+  # configuration file BoostConfig.cmake. Starting from cmake 3.30,
+  # this is the way to go and users get warned if the old FindBoost module
+  # gets used.
+  cmake_policy(SET CMP0167 NEW)
+endif()
+
 project(OpenStructure CXX C)
 set (CMAKE_EXPORT_COMPILE_COMMANDS 1)
 set (OST_VERSION_MAJOR 2)
@@ -194,11 +203,22 @@ find_package(Python 3.6 REQUIRED COMPONENTS Interpreter Development)
 # where Python modules live
 set(PYTHON_MODULE_PATH "python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/")
 
+set(_BOOST_MIN_VERSION 1.70)
+
 if(BOOST_VERSION)
   message(STATUS "forcing boost to version ${BOOST_VERSION}")
   set(_BOOST_MIN_VERSION ${BOOST_VERSION})
 endif()
-setup_boost()
+find_package(Boost ${_BOOST_MIN_VERSION} 
+             COMPONENTS unit_test_framework
+                        filesystem
+                        system
+                        iostreams
+                        program_options
+                        regex
+                        thread
+                        python
+             REQUIRED)
 if (WIN32)
    ADD_DEFINITIONS("-DBOOST_ALL_NO_LIB")
 endif()
diff --git a/cmake_support/OST.cmake b/cmake_support/OST.cmake
index 273cda3aa3a77ce2e3e4932553d5a75b5a074717..840d0f6a0717054d1388bd2412a779855b6f60cc 100644
--- a/cmake_support/OST.cmake
+++ b/cmake_support/OST.cmake
@@ -542,7 +542,7 @@ macro(pymod)
       set(_PARENT_LIB_NAME "${_PARENT_NAME}")
     endif()
     target_link_libraries("_${_LIB_NAME}" ${_PARENT_LIB_NAME} 
-                          ${Python_LIBRARIES} ${BOOST_PYTHON_LIBRARIES})
+                          ${Python_LIBRARIES} Boost::python)
 
     set_target_properties("_${_LIB_NAME}"
                           PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PYMOD_STAGE_DIR})
@@ -657,7 +657,7 @@ macro(ost_unittest)
       set_target_properties(${_test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/tests"  )
       set_target_properties(${_test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/tests"  )
 
-      target_link_libraries(${_test_name} ${BOOST_UNIT_TEST_LIBRARIES} "${_ARG_PREFIX}_${_ARG_MODULE}")
+      target_link_libraries(${_test_name} Boost::unit_test_framework "${_ARG_PREFIX}_${_ARG_MODULE}")
       if (WIN32)
         set(TEST_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${_test_name}.exe || echo)
         message(${TEST_COMMAND})
@@ -794,7 +794,7 @@ macro(ost_match_boost_python_version)
   # this variable may either be a simple library path or list that contains
   # different libraries for different build-options. For example:
   # optimized;<lib1>;debug;<lib2>
-  set(_BOOST_PYTHON_LIBRARY ${BOOST_PYTHON_LIBRARIES})
+  set(_BOOST_PYTHON_LIBRARY Boost::python)
   list(LENGTH _BOOST_PYTHON_LIBRARY _BP_LENGTH)
   if (_BP_LENGTH GREATER 1)
     list(FIND _BOOST_PYTHON_LIBRARY optimized _OPTIMIZED_INDEX)
@@ -903,58 +903,6 @@ macro(setup_compiler_flags)
     endif()
   endif()
 endmacro()
-set(_BOOST_MIN_VERSION 1.31)
-
-macro(setup_boost)
-  #set (Boost_NO_BOOST_CMAKE TRUE)
-  # starting with CMake 3.11 we could use the following instead of the foreach
-  # find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS
-  #              python${Python_VERSION_MAJOR}${Python_VERSION_MINOR} REQUIRED)
-  # set(BOOST_PYTHON_LIBRARIES ${Boost_LIBRARIES})
-  # see https://cmake.org/cmake/help/v3.11/module/FindBoost.html
-  foreach(_python_lib_name python${Python_VERSION_MAJOR}${Python_VERSION_MINOR}
-                           python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}
-                           python${Python_VERSION_MAJOR}
-                           python)
-    find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS ${_python_lib_name} QUIET)
-    if(Boost_FOUND)
-      message(STATUS "Found Boost package: " ${_python_lib_name})
-      set(BOOST_PYTHON_LIBRARIES ${Boost_LIBRARIES})
-      break()
-    else()
-      message(STATUS "Boost package not found: " ${_python_lib_name}
-                     ". Trying alternative names!")
-    endif()
-  endforeach(_python_lib_name)
-  if(NOT BOOST_PYTHON_LIBRARIES)
-    message(FATAL_ERROR "Failed to find any Boost Python library!")
-  endif()
-  set(Boost_LIBRARIES)
-  find_package(Boost ${_BOOST_MIN_VERSION}
-               COMPONENTS unit_test_framework REQUIRED)
-  set(BOOST_UNIT_TEST_LIBRARIES ${Boost_LIBRARIES})
-  set(Boost_LIBRARIES)
-  if (ENABLE_STATIC)
-    set(Boost_USE_STATIC_LIBS ON)
-  endif()
-  find_package(Boost ${_BOOST_MIN_VERSION}
-               COMPONENTS filesystem system REQUIRED)
-  set(BOOST_LIBRARIES ${Boost_LIBRARIES})
-  set(Boost_LIBRARIES)
-  find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS iostreams REQUIRED)
-  set(BOOST_IOSTREAM_LIBRARIES ${Boost_LIBRARIES})
-  set(Boost_LIBRARIES)
-  find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS program_options REQUIRED)
-  set(BOOST_PROGRAM_OPTIONS ${Boost_LIBRARIES})
-  set(Boost_LIBRARIES)
-  find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS regex REQUIRED)
-  set(BOOST_REGEX_LIBRARIES ${Boost_LIBRARIES})
-  set(Boost_LIBRARIES)
-  find_package(Boost ${_BOOST_MIN_VERSION} COMPONENTS thread REQUIRED)
-  set(BOOST_THREAD ${Boost_LIBRARIES})
-  set(Boost_LIBRARIES)
-endmacro()
-
 
 #-------------------------------------------------------------------------------
 # Synopsis:
diff --git a/modules/base/src/CMakeLists.txt b/modules/base/src/CMakeLists.txt
index 2ad8088a217df565ea8ec83e52fbc0b53e7c5c68..c027225ef850e08d10c411b45a2b8d2cb306fba8 100644
--- a/modules/base/src/CMakeLists.txt
+++ b/modules/base/src/CMakeLists.txt
@@ -44,5 +44,6 @@ module(NAME base SOURCES ${OST_BASE_SOURCES}
        HEADERS ${OST_EXPORT_HELPERS} IN_DIR export_helper 
        compare_files.hh IN_DIR test_utils ${OST_BASE_HEADERS}
        DEPENDS_ON ost_geom
-       HEADER_OUTPUT_DIR ost)
+       HEADER_OUTPUT_DIR ost
+       LINK Boost::filesystem)
 
diff --git a/modules/doc/install.rst b/modules/doc/install.rst
index 3bc926de82a785a530659a0f7797812c5227ab94..2ccfb04e83c74b33b0268a5ed247b424fb4e20f9 100644
--- a/modules/doc/install.rst
+++ b/modules/doc/install.rst
@@ -30,7 +30,7 @@ a bunch of open-source libraries. If you haven't already installed them, please
 install them now! Where appropriate, the preferred version is given in 
 parentheses.
 
-* `CMake <http://cmake.org>`_ (3.23.1)
+* `CMake <http://cmake.org>`_ (3.25)
 * `Python3 <http://python.org>`_ (3.9.5)
 * `Boost <http://boost.org>`_ (1.76.0)
 * `zlib <https://zlib.net/>`_ (usually comes with Boost or system)
diff --git a/modules/geom/src/CMakeLists.txt b/modules/geom/src/CMakeLists.txt
index 40f33282a196138eda009046a886606702360a9f..87d4749499dc9055058870eda6c132fba566ea15 100644
--- a/modules/geom/src/CMakeLists.txt
+++ b/modules/geom/src/CMakeLists.txt
@@ -54,7 +54,6 @@ vector.hh
 
 module(NAME geom
        HEADERS ${OST_GEOM_EXPORT_HELPERS} IN_DIR export_helper ${OST_GEOM_HEADERS}
-       SOURCES ${OST_GEOM_SOURCES}
-       LINK ${BOOST_LIBRARIES})
+       SOURCES ${OST_GEOM_SOURCES})
 add_dependencies(ost_geom ost_config)
 
diff --git a/modules/gui/src/CMakeLists.txt b/modules/gui/src/CMakeLists.txt
index e475fbdde390af650934b2ca89714911ecfd13c0..5c2fd044ee6e83ae5ac20a358af83cc91cab2b06 100644
--- a/modules/gui/src/CMakeLists.txt
+++ b/modules/gui/src/CMakeLists.txt
@@ -453,7 +453,7 @@ module(NAME gui SOURCES ${OST_GUI_MOCS} ${OST_GUI_SOURCES}
        DEPENDS_ON ost_gfx ost_io ost_mol_alg ost_seq_alg
        LINK ${QT_LIBRARIES}
             ${Python_LIBRARIES} 
-            ${BOOST_PYTHON_LIBRARIES}
+            Boost::python
             ${SPNAV_LIBRARIES}
         NO_STATIC)
 
@@ -469,7 +469,7 @@ qt5_wrap_cpp(OST_GOSTY_MOC "gosty.hh"
              OPTIONS -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
                      -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
 
-set(LINK LINK ${QT_LIBRARIES} ${BOOST_PROGRAM_OPTIONS_LIBRARIES})
+set(LINK LINK ${QT_LIBRARIES} Boost::program_options)
 
 executable_libexec(NAME gosty SOURCES gosty.cc ${OST_GOSTY_MOC}
                    ${OST_QT_RESOURCE} DEPENDS_ON ost_gui ${LINK})
diff --git a/modules/info/src/CMakeLists.txt b/modules/info/src/CMakeLists.txt
index 9242a005d85b2b483bcd8fc2a15070088341d88b..208b0d5e156e2637eeca394ebe4c8ca965b2aea3 100644
--- a/modules/info/src/CMakeLists.txt
+++ b/modules/info/src/CMakeLists.txt
@@ -31,5 +31,5 @@ set(QT_USE_QTXML 1)
 
 module(NAME info SOURCES ${OST_INFO_SOURCES}
        HEADERS ${OST_INFO_HEADERS}
-       DEPENDS_ON ost_base LINK ${BOOST_REGEX_LIBRARIES} ${QT_LIBRARIES})
+       DEPENDS_ON ost_base LINK Boost::regex ${QT_LIBRARIES})
 
diff --git a/modules/io/src/CMakeLists.txt b/modules/io/src/CMakeLists.txt
index 40edd5ce7d53c42594254fbc7679fbc3abce1dae..23c3c657bf29af3b9a802db865022b9ab8058d9f 100644
--- a/modules/io/src/CMakeLists.txt
+++ b/modules/io/src/CMakeLists.txt
@@ -67,7 +67,12 @@ module(NAME io SOURCES "${OST_IO_SOURCES}"
                ${OST_IO_IMG_HEADERS} IN_DIR img
                ${OST_IO_SEQ_HEADERS} IN_DIR seq            
                ${OST_IO_HEADERS} 
-       DEPENDS_ON ${OST_IO_DEPENDENCIES})
-target_link_libraries(ost_io ${BOOST_IOSTREAM_LIBRARIES})
-target_link_libraries(ost_io ${TIFF_LIBRARIES} ${PNG_LIBRARIES})
+       DEPENDS_ON ${OST_IO_DEPENDENCIES}
+       LINK Boost::filesystem
+            Boost::iostreams
+            ${TIFF_LIBRARIES}
+            ${PNG_LIBRARIES})
+#target_link_libraries(ost_io Boost::filesystem)
+#target_link_libraries(ost_io Boost::iostreams)
+#target_link_libraries(ost_io ${TIFF_LIBRARIES} ${PNG_LIBRARIES})
 
diff --git a/modules/mol/alg/src/CMakeLists.txt b/modules/mol/alg/src/CMakeLists.txt
index 20d0161758fc440787ca4f2a2ac9504dc60b5b65..065853de4fac203929fa665641240c498314c6de 100644
--- a/modules/mol/alg/src/CMakeLists.txt
+++ b/modules/mol/alg/src/CMakeLists.txt
@@ -66,7 +66,7 @@ module(NAME mol_alg SOURCES ${OST_MOL_ALG_SOURCES}
        HEADERS ${OST_MOL_ALG_HEADERS}
        HEADER_OUTPUT_DIR ost/mol/alg
        DEPENDS_ON ${MOL_ALG_DEPS}
-       LINK ${BOOST_PROGRAM_OPTIONS} ${BOOST_THREAD})
+       LINK Boost::program_options Boost::thread)
 
 copy_if_different("${CMAKE_CURRENT_SOURCE_DIR}" "${STAGE_DIR}/share/openstructure"
                   "atom_scattering_properties.txt" "ATOM_SCATTERING_PROPS"
diff --git a/modules/mol/mm/src/CMakeLists.txt b/modules/mol/mm/src/CMakeLists.txt
index 21da031198800411cc09856a2978bb243c97cccd..51083bd8cd15d9e5f2c1862f2c49ce4e31cf9425 100644
--- a/modules/mol/mm/src/CMakeLists.txt
+++ b/modules/mol/mm/src/CMakeLists.txt
@@ -48,7 +48,7 @@ module(NAME mol_mm SOURCES ${OST_MOL_MM_SOURCES}
        HEADERS ${OST_MOL_MM_HEADERS}
        HEADER_OUTPUT_DIR ost/mol/mm
        DEPENDS_ON ${MOL_MM_DEPS}
-       LINK ${BOOST_PROGRAM_OPTIONS})
+       LINK Boost::program_options)
 
 target_link_libraries(ost_mol_mm ${OPEN_MM_LIBRARIES})
 
diff --git a/modules/mol/mm/tests/test.ff b/modules/mol/mm/tests/test.ff
index a9dfffe15ebe5915d3daba9c199e01cef5645e0c..adc824ba50b8e6c3a58c3a1afcc9b94e02396b07 100644
Binary files a/modules/mol/mm/tests/test.ff and b/modules/mol/mm/tests/test.ff differ
diff --git a/modules/seq/base/src/CMakeLists.txt b/modules/seq/base/src/CMakeLists.txt
index ff359c8ad8dba949f3f0bfbf1aab122b973d4bd9..d722d8e06d0f6ddf8f02fb171dddd3eb75c4d446 100644
--- a/modules/seq/base/src/CMakeLists.txt
+++ b/modules/seq/base/src/CMakeLists.txt
@@ -40,5 +40,5 @@ endif()
 module(NAME seq SOURCES ${OST_SEQ_SOURCES} 
          HEADERS ${OST_SEQ_IMPL_HEADERS} IN_DIR impl
                  ${OST_SEQ_HEADERS}
-         LINK ${BOOST_IOSTREAM_LIBRARIES}
-         DEPENDS_ON ost_mol ${INFO_DEPS})
\ No newline at end of file
+         LINK Boost::iostreams
+         DEPENDS_ON ost_mol ${INFO_DEPS})