diff --git a/ci/gitlab-cscs.yml b/ci/gitlab-cscs.yml
index e8d461515080510d9c610920fa79b25c9161a3ff..39392368a5c8a6759250a2aad943386eeaf9be77 100644
--- a/ci/gitlab-cscs.yml
+++ b/ci/gitlab-cscs.yml
@@ -1,5 +1,3 @@
-include:
-  - remote: 'https://gitlab.com/cscs-ci/recipes/-/raw/master/templates/v2/.cscs.yml'
 
 stages:
   - build
@@ -8,6 +6,54 @@ stages:
   - upload_reports
   - cleanup
 
+# instead of including parameters from here:
+#       https://gitlab.com/cscs-ci/recipes/-/raw/master/templates/v2/.cscs.yml
+# hard code them here, to make it easier to also use runners on other systems
+## Piz Daint slurm stuff
+
+.daint:
+  tags:
+    - daint-container
+  variables:
+    CRAY_CUDA_MPS: 1
+    USE_MPI: 'YES'
+    DISABLE_AFTER_SCRIPT: 'YES'
+    PULL_IMAGE: 'NO'
+    SLURM_CONSTRAINT: gpu
+    SLURM_JOB_NUM_NODES: 2
+    SLURM_PARTITION: normal
+    SLURM_TIMELIMIT: '15:00'
+    SLURM_EXCLUSIVE: '' # make sure resources are not shared
+
+.daint_alloc:
+  extends: .daint
+  variables:
+    ONLY_ALLOCATE: 1
+    GIT_STRATEGY: none
+  script: nothing
+
+.daint_dealloc:
+  extends: .daint
+  variables:
+    ONLY_DEALLOCATE: 1
+    GIT_STRATEGY: none
+  script: nothing
+  when: always
+
+## Kubernetes for building docker images
+.dind:
+  variables:
+    DOCKER_DRIVER: overlay2
+    DOCKER_HOST: tcp://localhost:2375
+    DOCKER_TLS_CERTDIR: ""
+    DOCKER_BUILDKIT: 1
+    BUILDKIT_PROGRESS: plain
+  image: docker:19.03.12
+  tags:
+    - kubernetes
+  services:
+    - docker:19.03.12-dind
+
 # Builds a docker image on kubernetes
 .build_docker_images:
   extends: .dind
@@ -22,7 +68,7 @@ stages:
     - docker build -f $DEPLOY_DOCKERFILE --network=host --build-arg BUILD_ENV=$BUILD_IMAGE -t $DEPLOY_IMAGE .
     - docker push $DEPLOY_IMAGE
 
-build release:
+build_release:
   extends: .build_docker_images
   variables:
     BUILD_DOCKERFILE: ci/release/build.Dockerfile
@@ -39,20 +85,8 @@ notify_github_start:
   script: ./ci/set_github_status.sh pending
 
 
-# Some variables used for running on daint
-variables:
-  CRAY_CUDA_MPS: 1
-  USE_MPI: 'YES'
-  DISABLE_AFTER_SCRIPT: 'YES'
-  PULL_IMAGE: 'NO'
-  SLURM_CONSTRAINT: gpu
-  SLURM_JOB_NUM_NODES: 2
-  SLURM_PARTITION: normal
-  SLURM_TIMELIMIT: '15:00'
-  SLURM_EXCLUSIVE: '' # make sure resources are not shared
-
 ### Release tests ###
-allocate release:
+allocate_release:
   stage: allocate
   image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA
   only: ['master', 'staging', 'trying']
@@ -61,7 +95,7 @@ allocate release:
     PULL_IMAGE: 'YES'
     ALLOCATION_NAME: arbor-ci-release-$CI_PIPELINE_ID
 
-single node release:
+single_node_release:
   extends: .daint
   image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA
   only: ['master', 'staging', 'trying']
@@ -75,7 +109,7 @@ single node release:
     SLURM_NTASKS: 1
     ALLOCATION_NAME: arbor-ci-release-$CI_PIPELINE_ID
 
-multi node release:
+multi_node_release:
   extends: .daint
   image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA
   only: ['master', 'staging', 'trying']
@@ -87,7 +121,16 @@ multi node release:
     SLURM_NTASKS: 2
     ALLOCATION_NAME: arbor-ci-release-$CI_PIPELINE_ID
 
-deallocate release:
+test_ault_fujitsu:
+    needs: []
+    tags:
+        - arm-a64fx
+    stage: test
+    script:
+        - chmod +x ci/test-ault-fujitsu.sh
+        - srun --partition=a64fx -c48 ci/test-ault-fujitsu.sh "$(pwd)"
+
+deallocate_release:
   only: ['master', 'staging', 'trying']
   image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA
   stage: cleanup
diff --git a/ci/test-ault-fujitsu.sh b/ci/test-ault-fujitsu.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cdfb081c780b2f0291474384d48d0159bf87c09a
--- /dev/null
+++ b/ci/test-ault-fujitsu.sh
@@ -0,0 +1,24 @@
+#! /bin/bash
+
+base_path="$1"
+host="$(hostname)"
+echo "=== path: $base_path"
+echo "=== host: $host"
+
+echo "=== loading environment"
+source /users/bcumming/a64fx/env.sh
+spack load git gcc@11.1.0 cmake ninja
+
+build_path="$base_path/build"
+echo "=== building: $build_path"
+mkdir "$build_path"
+cd "$build_path"
+echo "=== CC=gcc CXX=g++ cmake .. -DARB_USE_BUNDLED_LIBS=on -DARB_ARCH=armv8.2-a+sve -DARB_VECTORIZE=on -G Ninja"
+CC=gcc CXX=g++ cmake .. -DARB_USE_BUNDLED_LIBS=on -DARB_ARCH=armv8.2-a+sve -DARB_VECTORIZE=on -G Ninja
+ninja -j48 unit
+
+bin_path="$build_path/bin"
+echo "=== running unit tests: $bin_path/unit"
+cd "$bin_path"
+./unit
+
diff --git a/cmake/CompilerOptions.cmake b/cmake/CompilerOptions.cmake
index d91786e660c90712ec7bb621049a7b38e8cd9dd4..086726857dc5cd015e4bd825e73c7bba8a47973c 100644
--- a/cmake/CompilerOptions.cmake
+++ b/cmake/CompilerOptions.cmake
@@ -6,12 +6,6 @@ include(CMakePushCheckState)
 set(CXXOPT_DEBUG "-g")
 set(CXXOPT_CXX11 "-std=c++11")
 
-if(CMAKE_CXX_COMPILER_ID MATCHES "XL")
-    # CMake, bless its soul, likes to insert this unsupported flag. Hilarity ensues.
-    string(REPLACE "-qhalt=e" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-endif()
-
-
 if(${ARBDEV_COLOR})
     set(colorflags
         $<IF:$<CXX_COMPILER_ID:Clang>,-fcolor-diagnostics,>
@@ -83,6 +77,12 @@ set(CXXOPT_WALL
 
     $<IF:$<CXX_COMPILER_ID:GNU>,-Wno-maybe-uninitialized,>
 
+    # * Disable comments that point out that an ABI bug has been patched, which
+    #   could lead to bugs when linking against code compiled an older compiler,
+    #   because there is nothing to fix on our side.
+
+    $<IF:$<CXX_COMPILER_ID:GNU>,-Wno-psabi,>
+
     # Intel:
     #
     # Disable warning for unused template parameter