diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5a4c3f59d5f87ad8cbb3a92ea09811a0e177cdf5..f2a648a02a5dac8d6a7833e2b564a59e8ae8378f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -7,7 +7,7 @@ before_script:
 
 compile:
   stage: build
-  image: gitlab-registry.cern.ch/atlas/athena/analysisbase:22.2.113
+  image: gitlab-registry.cern.ch/atlas/athena/analysisbase:24.2.3
   variables:
     GIT_SUBMODULE_STRATEGY: recursive
   script:
@@ -21,10 +21,10 @@ compile:
 
 run:
   stage: test
-  image: gitlab-registry.cern.ch/atlas/athena/analysisbase:22.2.113
+  image: gitlab-registry.cern.ch/atlas/athena/analysisbase:24.2.3
   before_script:
     - source /release_setup.sh
-    - python3 -m venv .venv
+    - bash <(curl -sL https://raw.githubusercontent.com/matthewfeickert/cvmfs-venv/v0.0.4/cvmfs-venv.sh) .venv
     - . .venv/bin/activate
     - python -m pip install --upgrade --requirement requirements.txt
     - python -m pip list
diff --git a/.gitmodules b/.gitmodules
index 2bbc1de025a6173a4be988623a5d385f90e83a6d..52c3bc65c4144016f4f0562465eb44cdcace34e1 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,5 +1,5 @@
 [submodule "src/columnarprototype"]
-	path = src/columnarprototype
+	path = src/ColumnarPrototype
 	url = ../../krumnack/columnarprototype
 [submodule "src/nanobind"]
 	path = src/nanobind
diff --git a/README.md b/README.md
index 9ef61d1ad7b3477dd642fd6d420fa368563af22d..024cf5c74984d9c5b72fed757702a242120e0230 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ bash build_local.sh
 which is doing something similar to
 
 ```
-asetup AnalysisBase,22.2.113
+asetup AnalysisBase,24.2.3
 cmake -S src -B build
 cmake --build build --clean-first
 PYTHONPATH="$(dirname $(find . -type f -iname "PyColumnarPrototype*.so")):${PYTHONPATH}" python3 -c 'import PyColumnarPrototype; print(f"{PyColumnarPrototype.column_maker()=}")'
diff --git a/build_local.sh b/build_local.sh
index 7872e1b42bc8eac5bba96bc6eb148271b3323200..480407f6aa1900874b795d449a5c58b962a7cddb 100644
--- a/build_local.sh
+++ b/build_local.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-_ANALYSISBASE_VERSION=22.2.113
+_ANALYSISBASE_VERSION=24.2.3
 if [ -d "/cvmfs/atlas.cern.ch" ]; then
     if [ "$(basename -- $0)" = "$(basename ${BASH_SOURCE})" ]; then
         # running in subshell
@@ -24,7 +24,7 @@ fi
 python3 -c 'import awkward' &> /dev/null
 if [ $? -eq 1 ]; then
     if [ ! -d .venv ]; then
-        python3 -m venv --system-site-packages .venv
+        bash <(curl -sL https://raw.githubusercontent.com/matthewfeickert/cvmfs-venv/v0.0.4/cvmfs-venv.sh) .venv
     fi
     . .venv/bin/activate
     python3 -m pip install --upgrade --requirement requirements.txt
diff --git a/run_docker_env.sh b/run_docker_env.sh
index 2d1bb5c83ecb18f8948651745f07aa76562ae6ca..9ad2328a02dfc3d22e693c9495d963a4f3937df9 100644
--- a/run_docker_env.sh
+++ b/run_docker_env.sh
@@ -1,12 +1,12 @@
 #!/bin/bash
 
-RUNNER_IMAGE="gitlab-registry.cern.ch/atlas/athena/analysisbase:22.2.113"
+RUNNER_IMAGE="gitlab-registry.cern.ch/atlas/athena/analysisbase:24.2.3"
 
 docker pull "${RUNNER_IMAGE}"
 
 # As default user 'atlas' is uid 1000
 # ```
-# $ docker run --rm gitlab-registry.cern.ch/atlas/athena/analysisbase:22.2.113 /bin/bash -c 'id'
+# $ docker run --rm gitlab-registry.cern.ch/atlas/athena/analysisbase:24.2.3 /bin/bash -c 'id'
 # uid=1000(atlas) gid=1000(atlas) groups=1000(atlas),0(root),10(wheel)
 # ```
 # match it with `--user 1000:1000`` to ensure that output files from bindmount are under user control
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 561fd8b0aeb066a338eba424ab00e109b9763c3b..a2520afdd7edef58b274ad6654c4c90bffcb4250 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -23,7 +23,7 @@ cmake_minimum_required( VERSION 3.18...3.22 )
 project( PyColumnarPrototypeDemo VERSION 1.0.0 LANGUAGES CXX )
 
 # Find the base project.
-find_package( AnalysisBase 22.2 REQUIRED )
+find_package( AnalysisBase 24.2 REQUIRED )
 
 # Set up the project's custom CMake code.
 list( PREPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" )
@@ -50,7 +50,7 @@ add_subdirectory(bindings)
 message(STATUS "${Python_LIBRARIES}")
 
 # Set the ATLAS project, for building all packages in the repository.
-atlas_project( USE AnalysisBase 22.2 )
+atlas_project( USE AnalysisBase 24.2 )
 
 # Set up the runtime environment setup script(s).
 lcg_generate_env( SH_FILE ${CMAKE_BINARY_DIR}/${ATLAS_PLATFORM}/env_setup.sh )
diff --git a/src/columnarprototype b/src/ColumnarPrototype
similarity index 100%
rename from src/columnarprototype
rename to src/ColumnarPrototype