diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9056284f3a40ae463c0c93cde02a3558f8ab73db..19d9eb7b9bc2d00ecc9121aadf08bae5d9801444 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,7 +1,7 @@
 .env:
   variables:
-    GHC_VERSION_BUILD: "9.6.2"
-    CABAL_VERSION_BUILD: "3.10.1.0"
+    GHC_VERSION_BUILD: "9.4.7"
+    CABAL_VERSION_BUILD: "3.8.1.0"
     STACK_VERSION: "2.11.1"
     HLS_VERSION: "2.1.0.0"
     BUILD_GHC: "true"
@@ -223,6 +223,13 @@ 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: $BUILD_GHC == "true" && $CI_COMMIT_BRANCH == "freeze-version"
       changes:
@@ -373,6 +380,13 @@ build-package-hls-manifest:version-linux-multiarch:
           $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8
       fi
       docker manifest push $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION
+    - |
+      docker manifest create $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION $CI_MANIFEST_LIST
+      if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then
+        docker manifest annotate --variant v8 $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION \
+          $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8
+      fi
+      docker manifest push $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION
   rules:
     - if: $BUILD_HLS == "true" && $CI_COMMIT_BRANCH == "freeze-version"
       changes:
diff --git a/prior/9.4.7.Dockerfile b/prior/9.4.7.Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..6c211df62d5cca39b33d33ac2dbc8d1e9b3dd770
--- /dev/null
+++ b/prior/9.4.7.Dockerfile
@@ -0,0 +1,138 @@
+ARG GHC_VERSION_BUILD=9.4.7
+ARG CABAL_VERSION_BUILD=3.8.1.0
+ARG STACK_VERSION=2.11.1
+
+FROM glcr.b-data.ch/ghc/ghc-musl:9.2.8 as bootstrap
+
+ARG GHC_VERSION_BUILD
+ARG CABAL_VERSION_BUILD
+
+ENV GHC_VERSION=${GHC_VERSION_BUILD} \
+    CABAL_VERSION=${CABAL_VERSION_BUILD}
+
+RUN apk upgrade --no-cache \
+  && apk add --no-cache \
+    autoconf \
+    automake \
+    binutils-gold \
+    build-base \
+    coreutils \
+    cpio \
+    curl \
+    gnupg \
+    linux-headers \
+    libffi-dev \
+    llvm12 \
+    ncurses-dev \
+    perl \
+    python3 \
+    xz \
+    zlib-dev
+
+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 \
+  && gpg --verify "ghc-$GHC_VERSION-src.tar.xz.sig" "ghc-$GHC_VERSION-src.tar.xz" \
+  && tar -xJf "ghc-$GHC_VERSION-src.tar.xz" \
+  && cd "ghc-$GHC_VERSION" \
+  && ./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 \
+  && 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 --constraint 'Cabal-syntax<3.9' "cabal-install-$CABAL_VERSION"
+
+FROM alpine:3.18 as builder
+
+LABEL org.opencontainers.image.licenses="MIT" \
+      org.opencontainers.image.source="https://gitlab.b-data.ch/ghc/ghc-musl" \
+      org.opencontainers.image.vendor="Olivier Benz" \
+      org.opencontainers.image.authors="Olivier Benz <olivier.benz@b-data.ch>"
+
+ARG GHC_VERSION_BUILD
+ARG CABAL_VERSION_BUILD
+
+ENV GHC_VERSION=${GHC_VERSION_BUILD} \
+    CABAL_VERSION=${CABAL_VERSION_BUILD}
+
+RUN apk add --no-cache \
+    bash \
+    build-base \
+    bzip2 \
+    bzip2-dev \
+    bzip2-static \
+    curl \
+    curl-static \
+    dpkg \
+    fakeroot \
+    git \
+    gmp-dev \
+    libcurl \
+    libffi \
+    libffi-dev \
+    llvm14 \
+    ncurses-dev \
+    ncurses-static \
+    openssl-dev \
+    openssl-libs-static \
+    pcre \
+    pcre-dev \
+    pcre2 \
+    pcre2-dev \
+    perl \
+    shadow \
+    wget \
+    xz \
+    xz-dev \
+    zlib \
+    zlib-dev \
+    zlib-static
+
+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/local/bin/cabal
+
+RUN cd /tmp \
+  && tar -xJf ghc-"$GHC_VERSION"-*-alpine-linux.tar.xz \
+  && cd ghc-"$GHC_VERSION"-*-alpine-linux \
+  && ./configure --disable-ld-override \
+  && make install \
+  && rm -rf /tmp/*
+
+FROM builder as tester
+
+WORKDIR /usr/local/src
+
+COPY Main.hs Main.hs
+
+RUN ghc -static -optl-pthread -optl-static Main.hs \
+  && file Main \
+  && ./Main \
+  # Test cabal workflow
+  && mkdir cabal-test \
+  && cd cabal-test \
+  && cabal update \
+  && cabal init -n --is-executable -p tester -l MIT \
+  && cabal run
+
+FROM glcr.b-data.ch/commercialhaskell/ssi:${STACK_VERSION} as ssi
+
+FROM builder as final
+
+ARG STACK_VERSION
+
+ENV STACK_VERSION=${STACK_VERSION}
+
+COPY --from=ssi /usr/local/bin/stack /usr/local/bin/stack
+
+CMD ["ghci"]