diff --git a/.clang-format b/.clang-format
index a0f9288611ef971d55b7cae7b1220524add11df9..4f4e3965be439651cc176cb60d2b3f7d1c91ee1e 100644
--- a/.clang-format
+++ b/.clang-format
@@ -147,7 +147,7 @@ SpacesInContainerLiterals: true
 SpacesInCStyleCastParentheses: false
 SpacesInParentheses: false
 SpacesInSquareBrackets: false
-Standard:        c++11
+Standard:        c++17
 StatementMacros:
   - Q_UNUSED
   - QT_REQUIRE_VERSION
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 66df115bbbf3145033e23b1f6a3defe8d88e461f..7dc3cf51b04f6306b90403b9aaa96de6eaeb854c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -65,7 +65,7 @@ else()
   endif()
 endif()
 
-set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED YES)
 set(CMAKE_CXX_EXTENSIONS OFF)
 
diff --git a/ddecal/SolutionWriter.cc b/ddecal/SolutionWriter.cc
index cbdb1ae6a212c483486717a9109980ff3363efae..48c1c30cf82372f8bec9bfcdc7a989499e70ce31 100644
--- a/ddecal/SolutionWriter.cc
+++ b/ddecal/SolutionWriter.cc
@@ -107,12 +107,12 @@ void SolutionWriter::Write(
     assert(contiguous_solutions.size() == n_solutions);
 
     std::vector<schaapcommon::h5parm::AxisInfo> axes;
-    axes.emplace_back(schaapcommon::h5parm::AxisInfo("time", n_times));
-    axes.emplace_back(schaapcommon::h5parm::AxisInfo("freq", n_channel_blocks));
-    axes.emplace_back(schaapcommon::h5parm::AxisInfo("ant", n_antennas));
-    axes.emplace_back(schaapcommon::h5parm::AxisInfo("dir", n_directions));
+    axes.push_back({"time", static_cast<unsigned>(n_times)});
+    axes.push_back({"freq", static_cast<unsigned>(n_channel_blocks)});
+    axes.push_back({"ant", static_cast<unsigned>(n_antennas)});
+    axes.push_back({"dir", static_cast<unsigned>(n_directions)});
     if (n_pol > 1) {
-      axes.emplace_back(schaapcommon::h5parm::AxisInfo("pol", n_pol));
+      axes.push_back({"pol", static_cast<unsigned>(n_pol)});
     }
 
     int n_soltabs = 1;
@@ -182,12 +182,13 @@ void SolutionWriter::Write(
             common::stringtools::tokenize(first_result.axes, ",");
 
         std::vector<schaapcommon::h5parm::AxisInfo> axes;
-        axes.emplace_back(schaapcommon::h5parm::AxisInfo(
-            "time", constraint_solutions.size()));
+        axes.push_back(
+            {"time", static_cast<unsigned>(constraint_solutions.size())});
         for (size_t axis_index = 0; axis_index < firstaxesnames.size();
              ++axis_index) {
-          axes.emplace_back(schaapcommon::h5parm::AxisInfo(
-              firstaxesnames[axis_index], first_result.dims[axis_index]));
+          axes.push_back(
+              {firstaxesnames[axis_index],
+               static_cast<unsigned>(first_result.dims[axis_index])});
         }
 
         // Put solutions in a contiguous piece of memory
@@ -279,4 +280,4 @@ void SolutionWriter::Write(
 }
 
 }  // namespace ddecal
-}  // namespace dp3
\ No newline at end of file
+}  // namespace dp3
diff --git a/docker/ubuntu_20_04_base b/docker/ubuntu_20_04_base
index 000ce6528e8a0328ade5f6f7b813fc686ada9829..4167505b3e08c0fce0156b0fbe285948d055c171 100644
--- a/docker/ubuntu_20_04_base
+++ b/docker/ubuntu_20_04_base
@@ -2,9 +2,9 @@ FROM ubuntu:20.04
 
 # TODO: needs to be bumped before next DP3 release
 # ENV IDG_VERSION=0.8
-ENV EVERYBEAM_VERSION=v0.3.0
-ENV IDG_VERSION=6e9165fa48659485fb41a45220a0a80e70935ad4
-ENV AOFLAGGER_VERSION=0018b06a61ed202fd88dfbf2b4e0dfdfec018d7f
+ENV EVERYBEAM_VERSION=a8ba1fb71d55b7a3afcd71876ad726b779dd0ff9
+ENV IDG_VERSION=6b61c038883ad3f807d20047c4f9e1a1f0b8d98a
+ENV AOFLAGGER_VERSION=65d5fba4f4c12797386d3fd9cd76734956a8b233
 
 RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && \
     apt-get install -y \
@@ -13,45 +13,43 @@ RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && \
     libboost-filesystem-dev libboost-system-dev libboost-date-time-dev \
     libboost-program-options-dev libboost-test-dev \
     libpng-dev pkg-config \
-    libgtkmm-3.0-dev git libfftw3-dev \
+    libgtkmm-3.0-dev git libfftw3-dev libgsl-dev \
     gfortran flex bison wcslib-dev \
     liblua5.3-dev \
     casacore-dev casacore-tools pybind11-dev python3-pip \
-    doxygen ninja-build clang-format-12 \
-# The formatter needs a binary named 'clang-format', not 'clang-format-12'
-    && ln -sf clang-format-12 /usr/bin/clang-format \
+    doxygen ninja-build
 # Build aoflagger3
-    && mkdir /aoflagger && cd /aoflagger \
+RUN mkdir /aoflagger && cd /aoflagger \
     && git clone https://gitlab.com/aroffringa/aoflagger.git src \
     && ( cd src/ && git checkout ${AOFLAGGER_VERSION} ) \
     && mkdir build && cd build \
     && cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr ../src \
     && ninja install \
-    && cd / && rm -rf aoflagger \
+    && cd / && rm -rf aoflagger
 # Build IDG
-    && mkdir /idg && cd /idg \
+RUN mkdir /idg && cd /idg \
     && git clone https://git.astron.nl/RD/idg.git src \
     && ( cd src/ && git checkout ${IDG_VERSION} ) \
     && mkdir build && cd build \
     && cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr ../src \
     && ninja install \
-    && cd / && rm -rf idg \
+    && cd / && rm -rf idg
 # Build EveryBeam
-    && mkdir /everybeam && cd /everybeam \
+RUN mkdir /everybeam && cd /everybeam \
     && git clone https://git.astron.nl/RD/EveryBeam.git src \
     && ( cd src/ && git checkout ${EVERYBEAM_VERSION} ) \
     && mkdir build && cd build \
     && cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr ../src -DPYTHON_EXECUTABLE=/usr/bin/python3 \
     && ninja install \
-    && cd / && rm -rf everybeam \
+    && cd / && rm -rf everybeam
 # Install WSRT Measures (extra casacore data, for integration tests)
 # Note: The file on the ftp site is updated daily. When warnings regarding leap
 # seconds appear, ignore them or regenerate the docker image.
-    && wget -nv -O /WSRT_Measures.ztar ftp://ftp.astron.nl/outgoing/Measures/WSRT_Measures.ztar \
+RUN wget -nv -O /WSRT_Measures.ztar ftp://ftp.astron.nl/outgoing/Measures/WSRT_Measures.ztar \
     && cd /var/lib/casacore/data \
     && tar xfz /WSRT_Measures.ztar \
-    && rm /WSRT_Measures.ztar \
+    && rm /WSRT_Measures.ztar
 # Install pip dependencies
-    && pip3 install gcovr cmake-format h5py \
+RUN pip3 install gcovr h5py \
     # build-doc dependencies
     autosemver==0.5.5 jsonschema2rst==0.1.0 sphinx sphinx-rtd-theme
diff --git a/docker/ubuntu_22_04_base b/docker/ubuntu_22_04_base
index abdbd9fb5bf9628a50afdc8b7be5fb343f0507cf..5e45c60391e6b63b9513659d2218918b20994b09 100644
--- a/docker/ubuntu_22_04_base
+++ b/docker/ubuntu_22_04_base
@@ -2,9 +2,9 @@ FROM ubuntu:22.04
 
 # TODO: needs to be bumped before next DP3 release
 # ENV IDG_VERSION=0.8
-ENV EVERYBEAM_VERSION=v0.3.0
-ENV IDG_VERSION=6e9165fa48659485fb41a45220a0a80e70935ad4
-ENV AOFLAGGER_VERSION=0018b06a61ed202fd88dfbf2b4e0dfdfec018d7f
+ENV EVERYBEAM_VERSION=a8ba1fb71d55b7a3afcd71876ad726b779dd0ff9
+ENV IDG_VERSION=6b61c038883ad3f807d20047c4f9e1a1f0b8d98a
+ENV AOFLAGGER_VERSION=65d5fba4f4c12797386d3fd9cd76734956a8b233
 
 RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && \
     apt-get install -y \
@@ -13,7 +13,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && \
     libboost-filesystem-dev libboost-system-dev libboost-date-time-dev \
     libboost-program-options-dev libboost-test-dev \
     libpng-dev pkg-config \
-    libgtkmm-3.0-dev git libfftw3-dev \
+    libgtkmm-3.0-dev git libfftw3-dev libgsl-dev \
     gfortran flex bison wcslib-dev \
     liblua5.3-dev \
     casacore-dev casacore-tools pybind11-dev python3-pip \
diff --git a/external/aocommon b/external/aocommon
index 87aacb1fb494503ccb03aa20c5015e03e2e3a641..415a44c78bc23509e74930f318a495ac3e4dd0ab 160000
--- a/external/aocommon
+++ b/external/aocommon
@@ -1 +1 @@
-Subproject commit 87aacb1fb494503ccb03aa20c5015e03e2e3a641
+Subproject commit 415a44c78bc23509e74930f318a495ac3e4dd0ab
diff --git a/external/schaapcommon b/external/schaapcommon
index 5522a63af55b1a8224c8d7e8775c20cdadc40868..f62867e3e52bbccd0a1dbf059f829d8a9947e968 160000
--- a/external/schaapcommon
+++ b/external/schaapcommon
@@ -1 +1 @@
-Subproject commit 5522a63af55b1a8224c8d7e8775c20cdadc40868
+Subproject commit f62867e3e52bbccd0a1dbf059f829d8a9947e968
diff --git a/steps/GainCal.cc b/steps/GainCal.cc
index b499707ed6deb2a54453e2bbf7f602803fffba39..bb919ce08e395ddf74416f9e3ed89f8247ccfca9 100644
--- a/steps/GainCal.cc
+++ b/steps/GainCal.cc
@@ -954,11 +954,11 @@ void GainCal::writeSolutionsH5Parm(double) {
   }
 
   std::vector<AxisInfo> axes;
-  axes.push_back(AxisInfo("time", itsSols.size()));
-  axes.push_back(AxisInfo("freq", nSolFreqs));
-  axes.push_back(AxisInfo("ant", info().antennaUsed().size()));
+  axes.push_back({"time", static_cast<unsigned>(itsSols.size())});
+  axes.push_back({"freq", nSolFreqs});
+  axes.push_back({"ant", static_cast<unsigned>(info().antennaUsed().size())});
   if (nPol > 1) {
-    axes.push_back(AxisInfo("pol", nPol));
+    axes.push_back({"pol", nPol});
   }
 
   std::vector<SolTab> soltabs = makeSolTab(h5parm, itsMode, axes);
diff --git a/steps/test/unit/tApplyCalH5.cc b/steps/test/unit/tApplyCalH5.cc
index d37b3c9d83d8dfd7ea5ef77177402d1df00bacea..d937d4f25bb6c6951631ee2ea3771d0fc557ceb7 100644
--- a/steps/test/unit/tApplyCalH5.cc
+++ b/steps/test/unit/tApplyCalH5.cc
@@ -351,13 +351,13 @@ void createH5Parm(vector<double> times, vector<double> freqs,
   }
   h5parm.AddAntennas(antNames, antPositions);
 
-  vector<schaapcommon::h5parm::AxisInfo> axes;
-  axes.push_back(schaapcommon::h5parm::AxisInfo("ant", nAntennas));
+  std::vector<schaapcommon::h5parm::AxisInfo> axes;
+  axes.push_back({"ant", static_cast<unsigned>(nAntennas)});
   if (!times.empty()) {
-    axes.push_back(schaapcommon::h5parm::AxisInfo("time", times.size()));
+    axes.push_back({"time", static_cast<unsigned>(times.size())});
   }
   if (!freqs.empty()) {
-    axes.push_back(schaapcommon::h5parm::AxisInfo("freq", freqs.size()));
+    axes.push_back({"freq", static_cast<unsigned>(freqs.size())});
   }
 
   SolTab soltab = h5parm.CreateSolTab("myampl", "amplitude", axes);