diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 410af1a105b4eaa2f104b14f385368dfa05394eb..c6f74696afd9a90b33463423a443f1ed72189972 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -37,6 +37,22 @@ dev images:
     - poetry run ogscm compiler.py ogs.py -B --ogs off --cpu-target $CPU_TARGET
     - poetry run ogscm compiler.py ogs.py ogs_jupyter.py -B -R --build_args ' --progress=plain' --cvode --ccache --cpmcache --mfront --cpu-target $CPU_TARGET --cmake_args ' -DOGS_CPU_ARCHITECTURE=OFF -DOGS_BUILD_TESTING=OFF -DOGS_BUILD_PROCESSES=SteadyStateDiffusion' --runtime_base_image 'registry.opengeosys.org/ogs/ogs/jupyter/base-notebook-ubuntu:22.04_3.10'
 
+build ogs:
+  tags: ["envinf23", "shell"]
+  stage: build
+  rules:
+    - if: $CI_COMMIT_TAG
+      when: never
+    - if: $CI_PIPELINE_SOURCE == "web"
+      when: never
+    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+  script:
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+    - black --check ogscm
+    - poetry install
+    - poetry run ogscm compiler.py mpi.py ogs.py -B --ogs ogs/ogs@master --build_args ' --progress=plain' --cvode --ccache --cpmcache --mfront --mkl --cmake_args ' -DOGS_BUILD_PROCESSES=SteadyStateDiffusion'
+    - poetry run ogscm compiler.py mpi.py ogs.py -B --ogs ogs/ogs@master --build_args ' --progress=plain' --cvode --ccache --cpmcache --mfront --pm off --cmake_args ' -DOGS_BUILD_PROCESSES=SteadyStateDiffusion'
+
 release:
   stage: release
   image: registry.gitlab.com/gitlab-org/release-cli:latest
diff --git a/ogscm/building_blocks/ogs.py b/ogscm/building_blocks/ogs.py
index 01437fcffe54b1bf1612d03774f2c26fa3bd9e45..51f74e2afb8e674d4ca0674d50ce3c324359414b 100644
--- a/ogscm/building_blocks/ogs.py
+++ b/ogscm/building_blocks/ogs.py
@@ -136,6 +136,8 @@ class ogs(bb_base, hpccm.templates.CMakeBuild, hpccm.templates.rm):
         )
 
         # Configure and build
+        if "-DOGS_USE_MKL=ON" in self.__cmake_args:
+            self.__commands.append(". /opt/intel/oneapi/setvars.sh")
         self.__commands.append(
             self.configure_step(
                 directory="{}/src".format(self.__prefix),
diff --git a/ogscm/recipes/ogs.py b/ogscm/recipes/ogs.py
index dcbcb5c9470733956221a98a9be4d1717682adb8..558c1e2c25e7ad5124c5be16f9765e4ff78fc6f1 100644
--- a/ogscm/recipes/ogs.py
+++ b/ogscm/recipes/ogs.py
@@ -13,7 +13,6 @@ from hpccm.building_blocks import (
     generic_autotools,
     generic_cmake,
     hdf5,
-    mkl,
     packages,
     pip,
 )
@@ -332,9 +331,22 @@ versions_master = json.loads(
 )
 
 if local_args.mkl:
-    Stage0 += mkl(eula=True, mklvars=False)
-    # For 32-bit mkl_link_tool:
-    Stage0 += packages(apt=["lib32stdc++6"], yum=["libstdc++.i686"])
+    Stage0 += packages(ospackages=["ca-certificates", "gnupg", "wget"])
+    mkl_version = "2021.4.0"
+    Stage0 += packages(
+        apt_keys=[
+            "https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB"
+        ],
+        apt_repositories=["deb https://apt.repos.intel.com/oneapi all main"],
+        ospackages=[f"intel-oneapi-mkl-devel-{mkl_version}"],
+    )
+    Stage1 += packages(
+        apt_keys=[
+            "https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB"
+        ],
+        apt_repositories=["deb https://apt.repos.intel.com/oneapi all main"],
+        ospackages=[f"intel-oneapi-mkl-{mkl_version}"],
+    )
     cmake_args.append("-DOGS_USE_MKL=ON")
 
 if local_args.ogs != "clean":
@@ -497,20 +509,14 @@ if local_args.ogs != "clean":
                 "--CXXFLAGS='-O3'",
                 "--FFLAGS='-O3'",
                 "--with-debugging=no",
-                "--download-f2cblaslapack=./f2cblaslapack-3.4.2.q4.tar.gz",
+                "--download-f2cblaslapack=1",
             ]
-            # TODO: remove last line and wget in preconfigure when upgrading
-            # to PETSc > 3.18
             petsc_configure_opts.extend(petsc_args)
             Stage0 += generic_autotools(
                 configure_opts=petsc_configure_opts,
                 devel_environment={"CMAKE_PREFIX_PATH": "/usr/local/petsc"},
                 directory=f"petsc-{petsc_version}",
                 ldconfig=True,
-                preconfigure=[
-                    "wget http://ftp.mcs.anl.gov/pub/petsc/externalpackages/f2cblaslapack-3.4.2.q4.tar.gz",
-                    "sed -i -- 's/python/python3/g' configure",
-                ],
                 prefix="/usr/local/petsc",
                 toolchain=toolchain,
                 url=f"http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-{petsc_version}.tar.gz",