diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 25b2b56449de2b1c38141738a3c32e45717a5b16..9a81b14bc55375cc45d10c54214e0847c05af08b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,8 +33,8 @@
   variables:
     DOCKER_DRIVER: overlay2
     DOCKER_TLS_CERTDIR: "/certs"
-    GHC_VERSION_BUILD: "9.2.4"
-    CABAL_VERSION_BUILD: "3.6.2.0"
+    GHC_VERSION_BUILD: "9.4.1"
+    CABAL_VERSION_BUILD: "3.8.1.0"
   before_script:
     - *before-script-build
 
@@ -168,13 +168,6 @@ build-manifest:version-linux-multiarch:
           $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
       fi
       docker manifest push $CI_APP_REPO:$CI_APP_TAG
-    - |
-      docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST
-      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
-        docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \
-          $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8
-      fi
-      docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN
   rules:
     - if: $CI_COMMIT_BRANCH == "freeze-version"
       changes:
diff --git a/latest.Dockerfile b/latest.Dockerfile
index f5417f1b5ed1e73433aa1626c0bde773ac2ea69b..cb6cb14688390cef3611a15a2cc629fc71b190e7 100644
--- a/latest.Dockerfile
+++ b/latest.Dockerfile
@@ -1,7 +1,7 @@
 ARG GHC_VERSION_BUILD
 ARG CABAL_VERSION_BUILD
 
-FROM registry.gitlab.b-data.ch/ghc/ghc4pandoc:9.0.2 as bootstrap
+FROM registry.gitlab.b-data.ch/ghc/ghc4pandoc:9.2.4 as bootstrap
 
 ARG GHC_VERSION_BUILD
 ARG CABAL_VERSION_BUILD
@@ -32,31 +32,23 @@ RUN cd /tmp \
   && curl -sSLO https://downloads.haskell.org/~ghc/$GHC_VERSION/ghc-$GHC_VERSION-src.tar.xz \
   && curl -sSLO https://downloads.haskell.org/~ghc/$GHC_VERSION/ghc-$GHC_VERSION-src.tar.xz.sig \
   && gpg --keyserver hkps://keyserver.ubuntu.com:443 \
-    --receive-keys 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 \
+    --receive-keys FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD \
   && gpg --verify ghc-$GHC_VERSION-src.tar.xz.sig ghc-$GHC_VERSION-src.tar.xz \
   && tar xf ghc-$GHC_VERSION-src.tar.xz \
   && cd ghc-$GHC_VERSION \
-  # Use the LLVM backend
-  && cp mk/build.mk.sample mk/build.mk \
-  && echo 'BuildFlavour=perf-llvm' >> mk/build.mk \
-  && echo 'BeConservative=YES' >> mk/build.mk \
-  && echo 'SplitSections=YES' >> mk/build.mk \
-  && echo 'HADDOCK_DOCS=NO' >> mk/build.mk \
-  && echo 'HSCOLOUR_SRCS=NO' >> mk/build.mk \
-  && echo 'BUILD_SPHINX_HTML=NO' >> mk/build.mk \
-  && echo 'BUILD_SPHINX_PS=NO' >> mk/build.mk \
-  && echo 'BUILD_SPHINX_PDF=NO' >> mk/build.mk \
-  && ./boot \
+  && ./boot.source \
   && ./configure --disable-ld-override LD=ld.gold \
+  # Use the LLVM backend
   # Switch llvm-targets from unknown-linux-gnueabihf->alpine-linux
   # so we can match the llvm vendor string alpine uses
   && sed -i -e 's/unknown-linux-gnueabihf/alpine-linux/g' llvm-targets \
   && sed -i -e 's/unknown-linux-gnueabi/alpine-linux/g' llvm-targets \
   && sed -i -e 's/unknown-linux-gnu/alpine-linux/g' llvm-targets \
-  # See https://unix.stackexchange.com/questions/519092/what-is-the-logic-of-using-nproc-1-in-make-command
-  && make -j$((`nproc`+1)) \
-  && make binary-dist \
   && cabal update \
+  # See https://unix.stackexchange.com/questions/519092/what-is-the-logic-of-using-nproc-1-in-make-command
+  && hadrian/build binary-dist -j$((`nproc`+1)) \
+    --flavour=perf+llvm+split_sections \
+    --docs=none \
   # See https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history
   && cabal install --allow-newer cabal-install-$CABAL_VERSION
 
@@ -105,16 +97,19 @@ RUN apk upgrade --no-cache \
     zlib-dev \
     zlib-static
 
-COPY --from=bootstrap /tmp/ghc-$GHC_VERSION/ghc-$GHC_VERSION-*-alpine-linux.tar.xz /tmp/
+COPY --from=bootstrap /tmp/ghc-$GHC_VERSION/_build/bindist/ghc-$GHC_VERSION-*-alpine-linux.tar.xz /tmp/
 COPY --from=bootstrap /root/.cabal/bin/cabal /usr/bin/cabal
 
 RUN cd /tmp \
   && tar -xJf ghc-$GHC_VERSION-*-alpine-linux.tar.xz \
-  && cd ghc-$GHC_VERSION \
-  && ./configure --disable-ld-override --prefix=/usr \
+  && cd ghc-$GHC_VERSION-*-alpine-linux \
+  && ./configure --disable-ld-override \
   && make install \
   && cd / \
-  && rm -rf /tmp/*
+  && rm -rf /tmp/* \
+  ## Somehow /tmp/ghc-$GHC_VERSION-*-alpine-linux
+  ## ends up at /usr/local/share/doc/ghc-$GHC_VERSION
+  && rm -rf /usr/local/share/doc/ghc-$GHC_VERSION/*
 
 FROM builder as tester
 
@@ -131,3 +126,5 @@ RUN ghc -static -optl-pthread -optl-static Main.hs \
   && cabal run
 
 FROM builder as final
+
+CMD ["ghci"]