diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1c7d117092a1f5e8e25ad823e6b666adb096bf34..83c3f3d9dbd3fee1acd700338dd269d2f31cdb56 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -21,15 +21,15 @@ variables:
   DUNECI_CMAKE_FLAGS: '-DDUNE_RUNNING_IN_CI=TRUE'
   DUNE_LOG_LEVEL:     DEBUG
 
-ubuntu:20.04 gcc-9-17-expensive:
+debian:11 gcc-10-20-expensive:
   extends: .common
   # This image has Vc
-  image: registry.dune-project.org/docker/ci/ubuntu:20.04
+  image: registry.dune-project.org/docker/ci/debian:11
   # allow expensive tests
   variables:
     DUNECI_CXXFLAGS: -mavx
     DUNECI_TEST_LABELS: ""
-    DUNECI_TOOLCHAIN: gcc-9-17
+    DUNECI_TOOLCHAIN: gcc-10-20
     DUNE_TEST_EXPECTED_VC_IMPLEMENTATION: AVX
   # require AVX to properly test Vc
   tags: [duneci, "iset:avx"]
@@ -37,20 +37,6 @@ ubuntu:20.04 gcc-9-17-expensive:
   # is unavailable
   allow_failure: true
 
-ubuntu:20.04 gcc-9-17-nopython:
-  extends: .common
-  image: registry.dune-project.org/docker/ci/ubuntu:20.04
-  variables:
-    DUNECI_TOOLCHAIN:  gcc-9-17
-    DUNECI_CMAKE_FLAGS: '-DCMAKE_DISABLE_FIND_PACKAGE_Python3=TRUE'
-
-debian:11 clang-11-20-nobindings:
-  extends: .common
-  image: registry.dune-project.org/docker/ci/debian:11
-  variables:
-    DUNECI_TOOLCHAIN: clang-11-20
-    DUNECI_CMAKE_FLAGS: '-DDUNE_ENABLE_PYTHONBINDINGS=OFF'
-
 core-modules-test:
   stage: downstream
   variables:
diff --git a/INSTALL b/INSTALL
index 2a0d67c6c92a2236df04c73b2b88864e43f1b32c..5250023f924822319eb4db89548ffd73a231d6c8 100644
--- a/INSTALL
+++ b/INSTALL
@@ -67,11 +67,11 @@ by the --opts=<file> option. Specify the options via the variable
 
 An example of an options file is
 
-  # use a special compiler (g++ version 5.0),
+  # use a special compiler (g++ version 14.0),
   # install to a custom directory, default is /usr/local/bin,
   # disable the external library SuperLU,
   # and use Ninja-build instead of make as the build-tool
-  CMAKE_FLAGS="-DCMAKE_CXX_COMPILER=g++-5 -DCMAKE_INSTALL_PREFIX='/tmp/HuHu' -DCMAKE_DISABLE_FIND_PACKAGE_SuperLU=true -GNinja"
+  CMAKE_FLAGS="-DCMAKE_CXX_COMPILER=g++-14 -DCMAKE_INSTALL_PREFIX='/tmp/HuHu' -DCMAKE_DISABLE_FIND_PACKAGE_SuperLU=true -GNinja"
 
 Links
 -----
diff --git a/README.md b/README.md
index efc232851c9125d2feea2a2acfa2a28f592b4a52..4af3ecd0bc7784d6205f204e4fe5d0127cf4a289 100644
--- a/README.md
+++ b/README.md
@@ -28,10 +28,13 @@ Dependencies
 dune-common depends on the following software packages
 
 - CMake >= 3.16
-- Compiler (C, C++): GNU >= 9 or Clang >= 10
+- Compiler (C, C++): GNU >= 10 or Clang >= 13
+- Library: GNU libstdc++ >= 10 or Clang libc++ >= 13
 
-  Other compilers might work too, they need to support C++17 to the extent the
-  ones above do.
+Other compilers may also work, but they must support C++20 to the same extent as
+the above. For an overview of the C++20 features supported by these versions, see
+https://en.cppreference.com/w/cpp/compiler_support. For compiling the Python
+bindings, libc++ is not currently supported.
 
 The following software is recommended but optional:
 
diff --git a/bin/duneproject b/bin/duneproject
index eb073981a35ddb6a5b89cfbf422c0f5ee4d4169f..989bd5059313ade506b3455e5b0df7aac974dd20 100755
--- a/bin/duneproject
+++ b/bin/duneproject
@@ -375,9 +375,9 @@ An example options file might look like this:
 
 #use this options to configure and make if no other options are given
 CMAKE_FLAGS=" \\
--DCMAKE_CXX_COMPILER=g++-5 \\
+-DCMAKE_CXX_COMPILER=g++-14 \\
 -DCMAKE_CXX_FLAGS='-Wall -pedantic' \\
--DCMAKE_INSTALL_PREFIX=/install/path" #Force g++-5 and set compiler flags
+-DCMAKE_INSTALL_PREFIX=/install/path" #Force g++-14 and set compiler flags
 
 If you save this information into example.opts you can pass the opts file to
 dunecontrol via the --opts option, e. g.
diff --git a/doc/dunecontrol.1 b/doc/dunecontrol.1
index 350cb4d2c7256f983ab0c497b63120c3139b93b6..79b350331b32acfeaafe8ff2ac3c31d2d8ffa5c8 100644
--- a/doc/dunecontrol.1
+++ b/doc/dunecontrol.1
@@ -195,7 +195,7 @@ Set options for \fICOMMAND\fP, e.g. CMAKE_FLAGS, to specify parameters
 passed to the specific command. In case of cmake this might look as
 follows
 
-CMAKE_FLAGS="-DCMAKE_CXX_COMPILER=g++-11 -DCMAKE_CXX_FLAGS='-fPIC -g -O3' -DFOO_PREFIX=/path/to/libfoo"
+CMAKE_FLAGS="-DCMAKE_CXX_COMPILER=g++-14 -DCMAKE_CXX_FLAGS='-fPIC -g -O3' -DFOO_PREFIX=/path/to/libfoo"
 
 In case of make a common use case is to enable concurrency, e.g.
 
@@ -206,7 +206,7 @@ MAKE_FLAGS="-j4"
 .HP
 .B DUNE_CONTROL_PATH
 .IP
-Colon-separated list to specify where 
+Colon-separated list to specify where
 .B dunecontrol
 searches for Dune modules.
 Entries are either directories, which are then used recursively for