diff --git a/.gitlab-ci.common.yml b/.gitlab-ci.common.yml
index a9fc8d55a19b45ef01772ebe14f7238bbdad5609..e50cb42c3e64852c6715fcbea9e2c4f238d3ad7c 100644
--- a/.gitlab-ci.common.yml
+++ b/.gitlab-ci.common.yml
@@ -25,8 +25,10 @@ versioning:
     # Unshallowing ensures that 'git log' works
     - git fetch --unshallow
     - echo BASE_IMAGE=${CI_REGISTRY_IMAGE}/base:$(git log -n 1 --pretty=format:%H -- docker/Dockerfile-base) > versions.env
+    - echo BASE_IMAGE_2204=${CI_REGISTRY_IMAGE}/base_2204:$(git log -n 1 --pretty=format:%H -- docker/Dockerfile-base-2204) >> versions.env
     # Tag the Everybeam image with the commit id, since it uses the Everybeam source code.
     - echo EVERYBEAM_IMAGE=${CI_REGISTRY_IMAGE}/everybeam:${CI_COMMIT_SHORT_SHA} >> versions.env
+    - echo EVERYBEAM_IMAGE_2204=${CI_REGISTRY_IMAGE}/everybeam_2204:${CI_COMMIT_SHORT_SHA} >> versions.env
     - echo FORMAT_IMAGE=${CI_REGISTRY_IMAGE}/format:$(git log -n 1 --pretty=format:%H -- docker/Dockerfile-format) >> versions.env
     - cat versions.env
   artifacts:
@@ -61,6 +63,12 @@ prepare-base:
     DOCKER_IMAGE: $BASE_IMAGE
     DOCKER_FILE: ./docker/Dockerfile-base
 
+prepare-base-2204:
+  extends: .prepare
+  variables:
+    DOCKER_IMAGE: $BASE_IMAGE_2204
+    DOCKER_FILE: ./docker/Dockerfile-base-2204
+
 # Template for jobs that depend on the optional prepare-base job.
 .needs-base:
   needs:
@@ -68,6 +76,12 @@ prepare-base:
     - job: prepare-base
       optional: true
 
+.needs-base-2204:
+  needs:
+    - job: versioning
+    - job: prepare-base-2204
+      optional: true
+
 # Create and push the format image to the gitlab registry, if it does not exist.
 prepare-format:
   extends: .prepare
@@ -134,6 +148,17 @@ build-everybeam:
   rules: # Override 'changes' rule from .prepare
     - when: always
 
+build-everybeam-2204:
+  extends: [.prepare,.needs-base-2204]
+  stage: build
+  variables:
+    DOCKER_IMAGE: $EVERYBEAM_IMAGE_2204
+    DOCKER_FILE: ./docker/Dockerfile-everybeam
+    DOCKER_BUILD_ARG: --build-arg BASE_IMAGE=${BASE_IMAGE_2204}
+  rules: # Override 'changes' rule from .prepare
+    - when: always
+
+
 build-doc:
   extends: .needs-base
   stage: build
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d804a981c8e91a70280e526be19fd3ebeb2d89bd..7f81f6dcee3994f7fac349cb8f3fce27ea97597b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,7 @@ cmake_minimum_required(VERSION 3.7)
 
 #------------------------------------------------------------------------------
 # Set version name and project number
-set(EVERYBEAM_VERSION 0.3.0)
+set(EVERYBEAM_VERSION 0.3.1)
 if(EVERYBEAM_VERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)")
   set(EVERYBEAM_VERSION_MAJOR "${CMAKE_MATCH_1}")
   set(EVERYBEAM_VERSION_MINOR "${CMAKE_MATCH_2}")
diff --git a/docker/Dockerfile-base-2204 b/docker/Dockerfile-base-2204
new file mode 100644
index 0000000000000000000000000000000000000000..a585f1031f3317239ad6e28b16ec2651a614b858
--- /dev/null
+++ b/docker/Dockerfile-base-2204
@@ -0,0 +1,24 @@
+# Copyright (C) 2022 ASTRON (Netherlands Institute for Radio Astronomy)
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+# base
+FROM ubuntu:22.04
+RUN export DEBIAN_FRONTEND="noninteractive" && apt-get update && apt-get upgrade -y && \
+# install astronomy packages
+    apt-get -y install casacore-dev \
+        libcfitsio-dev wcslib-dev python3-pip
+# install misc packages
+RUN apt-get update && \
+    apt-get -y install wget git make cmake g++ doxygen graphviz ninja-build \
+# install dependencies
+        libboost-all-dev libhdf5-dev libfftw3-dev \
+        libblas-dev liblapack-dev libgsl-dev libxml2-dev \
+        libpng-dev libgtkmm-3.0-dev libpython3.9-dev && \
+# Install python dependencies
+    pip3 install gcovr pytest pytest-lazy-fixture \
+    # Install python requirements for the OSKAR "integration" test
+        numpy scipy h5py astropy tqdm matplotlib pandas lofarantpos \
+    # Install python requirements for building documentation
+        sphinx sphinx_rtd_theme breathe myst-parser \
+    # Install python requirements for packaging
+        aptly-api-client
\ No newline at end of file
diff --git a/external/aocommon b/external/aocommon
index cdb618b1ab0320b226be18464a851104b501a0fe..415a44c78bc23509e74930f318a495ac3e4dd0ab 160000
--- a/external/aocommon
+++ b/external/aocommon
@@ -1 +1 @@
-Subproject commit cdb618b1ab0320b226be18464a851104b501a0fe
+Subproject commit 415a44c78bc23509e74930f318a495ac3e4dd0ab
diff --git a/external/schaapcommon b/external/schaapcommon
index 3f75e530ef7efaefc26df208f682f162a960dc16..1f048294a3547b933925f20e1222e83a576f2bfd 160000
--- a/external/schaapcommon
+++ b/external/schaapcommon
@@ -1 +1 @@
-Subproject commit 3f75e530ef7efaefc26df208f682f162a960dc16
+Subproject commit 1f048294a3547b933925f20e1222e83a576f2bfd