diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 81a0e3f6dc6a6daa31413aa95972fe9d9d38452a..bba6a5e7fd5e42f7897deed3e70bd7a1faa21a85 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -276,6 +276,95 @@ sync-esd-image:
     - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH == "experimental_rel" || $CI_COMMIT_BRANCH =~ /^ebrains/) && $CI_PROJECT_PATH =~ /platform\/esd\/ebrains-spack-builds/ && $CI_PIPELINE_SOURCE == "push"
       when: manual
 
+# build test on JUSUF login node
+build-esd-image_JUSUF:
+  stage: build
+  tags:
+    - esd_image_JUSUF
+  variables:
+    CI_SPACK_ENV: esd
+    SPACK_JOBS: 8
+    # no OCI caching for JUSUF builds, we rely on shared fs
+    OCI_CACHE_PREFIX: ""
+    UPDATE_SPACK_OCI_CACHES: false
+    OCI_IMAGE_PREFIX: ""
+    # for now, we directly push to a local buildcache
+    UPDATE_SPACK_LOCAL_CACHE: true
+    FINALFLUSH_SPACK_LOCAL_CACHE: false
+    INSTALLATION_ROOT: /esd
+    SANDBOX_ROOT_RELATIVE: esd_image
+    TMPDIR: /dev/shm/ecm_gitlab_ci
+    SANDBOX_ROOT: ${TMPDIR}/${SANDBOX_ROOT_RELATIVE}
+    SYSTEMNAME: image-jusuf
+    SPACK_CACHE_SOURCE: /p/usersoftware/ebrains-sw-stack/ecm/test_mr_cache
+    SPACK_CACHE_BUILD: /p/usersoftware/ebrains-sw-stack/ecm/test_mr_cache
+    IMAGE_ROOT: /p/usersoftware/ebrains-sw-stack/images/jusuf
+  script:
+    # create a sandbox/image for performing an spack install inside based on some base image/install
+    - rm -rf $TMPDIR
+    - mkdir $TMPDIR || true
+    - |
+      cat <<EOF >image.def
+      Bootstrap: scratch
+      
+      %setup
+          mkdir \${APPTAINER_ROOTFS}/bin
+          # /etc exists
+          touch \${APPTAINER_ROOTFS}/etc/passwd
+          touch \${APPTAINER_ROOTFS}/etc/group
+          touch \${APPTAINER_ROOTFS}/etc/localtime
+          mkdir \${APPTAINER_ROOTFS}/lib
+          mkdir \${APPTAINER_ROOTFS}/lib64
+          mkdir \${APPTAINER_ROOTFS}/usr
+          mkdir -p \${APPTAINER_ROOTFS}/${INSTALLATION_ROOT}
+          # JUSUF speciale
+          mkdir \${APPTAINER_ROOTFS}/p
+          mkdir -p \${APPTAINER_ROOTFS}/etc/FZJ
+          mkdir -p \${APPTAINER_ROOTFS}/etc/pki
+          # /var exists
+      EOF
+    - cat image.def
+    - apptainer build --fix-perms --force --sandbox ${SANDBOX_ROOT}/ image.def
+    # run installation script inside future container environment
+    #   => DAG concretization, subsequent cache access + fetching and actual build should be separate steps
+    # begin of fixup for JUSUF
+    # end of fixup for JUSUF
+    - export APPTAINER_BIND="/bin,/lib,/lib64,/usr,/p,/etc/FZJ,/etc/pki"
+    - apptainer exec --writable --bind ${CI_PROJECT_DIR}:${INSTALLATION_ROOT} --cwd ${INSTALLATION_ROOT} ${SANDBOX_ROOT} bash ./install_spack_env.sh $SPACK_JOBS $INSTALLATION_ROOT ${INSTALLATION_ROOT} $CI_SPACK_ENV "" $UPDATE_SPACK_OCI_CACHES $OCI_CACHE_PREFIX
+    - echo "export SYSTEMNAME=${SYSTEMNAME}" >> ${SANDBOX_ROOT}/.singularity.d/env/90-environment.sh
+    - echo ". ${INSTALLATION_ROOT}/vendor/spack/var/spack/environments/${CI_SPACK_ENV}/load_env.sh" >> ${SANDBOX_ROOT}/.singularity.d/env/90-environment.sh
+    # begin of fixup for JUSUF
+    - rm -rf ${SANDBOX_ROOT}/p
+    - rm -rf ${SANDBOX_ROOT}/etc/FZJ
+    # end of fixup for JUSUF
+    # preparing to assemble the image: move in the CI project contents...
+    - shopt -s dotglob
+    - find . -maxdepth 1 -and -not -name "." -and -not -name "${SANDBOX_ROOT_RELATIVE}" -exec mv -t ${SANDBOX_ROOT}/${INSTALLATION_ROOT} {} \;
+    # convert to SIF image file
+    - apptainer build latest.sif "${SANDBOX_ROOT}"
+    - du -sh latest.sif
+    - mkdir -p ${IMAGE_ROOT}
+    - export TMP_IMAGE=$(mktemp ${IMAGE_ROOT}/latest.sif.XXXXXX)
+    - cp latest.sif ${TMP_IMAGE}
+    - mv ${TMP_IMAGE} ${IMAGE_ROOT}/latest.sif
+  after_script:
+    - mkdir -p $CI_PROJECT_DIR/spack_logs/installed $CI_PROJECT_DIR/spack_logs/not_installed
+      # for succesfully installed packages: keep the spack logs for any package modified during this CI job
+    - PKG_DIR=${SANDBOX_ROOT}/${INSTALLATION_ROOT}/spack/opt/spack/**/linux-ubuntu20.04-x86_64/gcc-10.3.0
+    - if cd $PKG_DIR; then find . \( -name ".spack" -o -name ".build" \) -exec cp -r --parents "{}" $CI_PROJECT_DIR/spack_logs/installed \;; fi
+      # for not succesfully installed packages: also keep the spack logs for any packages that failed
+    - if cd /tmp/$(whoami)/spack-stage/; then find . -maxdepth 2 \( -name "*.txt" -o -name ".install_time_tests" \) -exec cp -r --parents "{}" $CI_PROJECT_DIR/spack_logs/not_installed \;; fi
+  artifacts:
+    paths:
+      - spack_logs
+    when: always
+  timeout: 2 days
+  rules:
+    # branches that update the gitlab-runner upstream (read-only) installation and the spack OCI caches
+    - if: $CI_PIPELINE_SOURCE != "schedule" && $CI_PIPELINE_SOURCE != "merge_request_event"
+    #- if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH == "experimental_rel" || $CI_COMMIT_BRANCH =~ /^ebrains/) && $CI_PROJECT_PATH =~ /platform\/esd\/ebrains-spack-builds/ && $CI_PIPELINE_SOURCE != "schedule"
+    #  when: manual
+
 # update gitlab-runner upstream (read-only) installation
 sync-gitlab-spack-instance:
   stage: build
diff --git a/install_spack_env.sh b/install_spack_env.sh
index a0ed1f67a75ffc4d7f740871259abbf95f5ae258..3f719f18c358ddb9ba0c87c215e65a5676e6849e 100644
--- a/install_spack_env.sh
+++ b/install_spack_env.sh
@@ -23,6 +23,7 @@ export CI_SPACK_ROOT=${INSTALLATION_ROOT}/spack
 
 # disable local configuration and cache directories
 export SPACK_DISABLE_LOCAL_CONFIG=true
+export SPACK_USER_CONFIG_PATH=/dev/null
 export SPACK_USER_CACHE_PATH=/tmp/spack
 
 # define SYSTEMNAME variable in sites where it's not already defined
@@ -38,6 +39,11 @@ if [ ! -d ${INSTALLATION_ROOT} ]; then
     mkdir -p ${INSTALLATION_ROOT}
 fi
 
+# site-specific environment modifications
+if [ -e site-config/${SYSTEMNAME}/build_env.sh ]; then
+    . site-config/${SYSTEMNAME}/build_env.sh
+fi
+
 # initial setup: use spack submodule if spack dir doesn't already exist
 SPACK_ROOT_EXISTED=1
 if [ ! -d ${CI_SPACK_ROOT} ]; then
@@ -66,6 +72,10 @@ then
   spack repo add $EBRAINS_REPO
 fi
 
+spack bootstrap status || true
+spack bootstrap now # FIXME: --insecure was needed on JUSUF when /etc/pki wasn't available?
+# FIXME JUSUF:    spack config add config:verify_ssl:false ? maybe not needed
+
 # make sure all fetching/clingo stuff happens before anything else
 spack spec aida
 
@@ -130,12 +140,13 @@ spack-python -c "exit(not len(spack.environment.active_environment().uninstalled
     else
         echo "Updating of the source cache disabled."
     fi
+    # FIXME: local source cache update?
     if [ "$ret" -ne 0 ]; then
         (exit $ret)
     fi
 )
 
-if [ -n "${OCI_CACHE_PREFIX}" ]; then
+if [ -n "${UPDATE_SPACK_LOCAL_CACHES}" ]; then
     # record the state of installed/uninstalled packages before actually installing them
     dag_hashes_pre_install=$(spack-python ${YASHCHIKI_HOME}/specfile_dag_hash.py ${CACHE_SPECFILE})
 fi
@@ -145,7 +156,7 @@ fi
 spack install --no-check-signature -y -j$SPACK_JOBS --fresh --test root && spack_install_ret=$? || spack_install_ret=$?
 
 # no need to update the local cache nor the remote cache if we don't want to update
-if [ -n "${OCI_CACHE_PREFIX}" ] && [ "${UPDATE_SPACK_OCI_CACHES:-false}" = "true" ]; then
+if [ -n "${UPDATE_SPACK_LOCAL_CACHE}" ]; then
     # push previously missing (but now installed) packages to the local cache
     for dag_hash in $dag_hashes_pre_install; do
         spack buildcache create --unsigned --only package ${SPACK_CACHE_BUILD} /${dag_hash} && ret=$? || ret=$?
@@ -155,15 +166,19 @@ if [ -n "${OCI_CACHE_PREFIX}" ] && [ "${UPDATE_SPACK_OCI_CACHES:-false}" = "true
         fi
     done
 
-    # upload packages from local to remote cache
-    echo "Performing update of the build cache"
-    python3 ${YASHCHIKI_HOME}/update_cached_buildresults.py \
-        --local-cache=${SPACK_CACHE_BUILD}/build_cache \
-        --remote-cache-type=oci \
-        --remote-cache=${OCI_CACHE_PREFIX}/build_cache \
-        /tmp/missing_paths_buildresults.dat
+    if [ -n "${OCI_CACHE_PREFIX}" ] && [ "${UPDATE_SPACK_OCI_CACHES:-false}" = "true" ]; then
+        # upload packages from local to remote cache
+        echo "Performing update of the build cache"
+        python3 ${YASHCHIKI_HOME}/update_cached_buildresults.py \
+            --local-cache=${SPACK_CACHE_BUILD}/build_cache \
+            --remote-cache-type=oci \
+            --remote-cache=${OCI_CACHE_PREFIX}/build_cache \
+            /tmp/missing_paths_buildresults.dat
+    else
+        echo "Updating of remote build cache disabled."
+    fi
 else
-    echo "Updating of the build cache disabled."
+    echo "Updating of the local build cache disabled."
 fi
 
 # propagate spack install exit code
@@ -172,7 +187,7 @@ if [ $spack_install_ret -ne 0 ]; then
 fi
 
 # remove local cache content
-if [ -d ${SPACK_CACHE_BUILD} ]; then
+if [ "${FINALFLUSH_SPACK_LOCAL_CACHE:-false}" = "true" ] && [ -d ${SPACK_CACHE_BUILD} ]; then
     spack mirror destroy --mirror-name local_cache
 fi
 
diff --git a/packages/arbor/package.py b/packages/arbor/package.py
index 8cf2887bb0005b43585d65f10ab10092722ce472..49fba43f2ff082008504fbeba0f3de54f380ed00 100644
--- a/packages/arbor/package.py
+++ b/packages/arbor/package.py
@@ -17,6 +17,7 @@ class Arbor(CMakePackage, CudaPackage):
 
     version("master", branch="master", submodules=True)
     version("develop", branch="master", submodules=True)
+    version("jusuf-benchmark", commit="c4ff08ceef2760796538c4117a259fd2104442ed", submodules=True)
     version(
         "0.10.0",
         sha256="72966b7a2f45ce259b8ba167ca3e4f5ab9f212136a300267aaac0c04ed3fe3fc",
@@ -107,6 +108,11 @@ class Arbor(CMakePackage, CudaPackage):
     # end EBRAINS (modified)
     depends_on("py-mpi4py", when="+mpi+python", type=("build", "run"))
 
+    # begin EBRAINS (modified: added build dep)
+    depends_on("py-pybind11-stubgen", when="@0.11:", type="build")
+    depends_on("py-pybind11-stubgen", when="@jusuf-benchmark", type="build")
+    # end EBRAINS (modified)
+
     # python (bindings)
     with when("+python"):
         extends("python")
@@ -140,6 +146,10 @@ class Arbor(CMakePackage, CudaPackage):
         if "+cuda" in self.spec:
             args.append("-DARB_GPU=cuda")
             args.append(self.define_from_variant("ARB_USE_GPU_RNG", "gpu_rng"))
+            # begin EBRAINS (modified: set cuda arch)
+            cuda_arch = self.spec.variants["cuda_arch"].value
+            args.append("-DCMAKE_CUDA_ARCHITECTURES=%s" % cuda_arch)
+            # end EBRAINS
 
         # query spack for the architecture-specific compiler flags set by its wrapper
         args.append("-DARB_ARCH=none")
@@ -154,6 +164,10 @@ class Arbor(CMakePackage, CudaPackage):
 
         return args
 
+    @on_package_attributes(when="+cuda")
+    def check(self):
+        pass
+
     @run_after("install", when="+python")
     @on_package_attributes(run_tests=True)
     def install_test(self):
diff --git a/packages/bm-arbor-euhpc/fix_install.patch b/packages/bm-arbor-euhpc/fix_install.patch
new file mode 100644
index 0000000000000000000000000000000000000000..98af113177686763f9b4126b752d098bbf2a4eea
--- /dev/null
+++ b/packages/bm-arbor-euhpc/fix_install.patch
@@ -0,0 +1,11 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8f2adbd..aac57ab 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -17,3 +17,6 @@ set(JSON_Install OFF CACHE INTERNAL "")
+ add_subdirectory(ext/json)
+ 
+ target_link_libraries(busyring PRIVATE arbor::arbor arbor::arborio arbor::arborenv nlohmann_json::nlohmann_json)
++
++install(TARGETS busyring)
++install(FILES gen-inputs.py TYPE BIN)
diff --git a/packages/bm-arbor-euhpc/fix_post-010-api.patch b/packages/bm-arbor-euhpc/fix_post-010-api.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d3498795a62371331cc7e96e0bbb9fb6edbc0d5d
--- /dev/null
+++ b/packages/bm-arbor-euhpc/fix_post-010-api.patch
@@ -0,0 +1,33 @@
+diff --git a/ring.cpp b/ring.cpp
+index d331449..1ae8882 100644
+--- a/ring.cpp
++++ b/ring.cpp
+@@ -168,7 +168,7 @@ struct ring_recipe: public arb::recipe {
+         event_weight_(params.event_weight),
+         params_(params) {
+         gprop.default_parameters = arb::neuron_parameter_defaults;
+-        gprop.catalogue.import(arb::global_allen_catalogue(), "");
++        gprop.catalogue.extend(arb::global_allen_catalogue(), "");
+ 
+         if (params.cell.complex_cell) {
+             gprop.default_parameters.reversal_potential_method["ca"] = "nernst/ca";
+@@ -443,9 +443,7 @@ arb::cable_cell complex_cell(arb::cell_gid_type gid, const cell_parameters& para
+ 
+     decor.place(cntr, arb::threshold_detector{-20.0*U::mV}, "d");
+ 
+-    decor.set_default(arb::cv_policy_every_segment());
+-
+-    return {arb::morphology(tree), decor};
++    return {arb::morphology(tree), decor, {}, arb::cv_policy_every_segment()};
+ }
+ 
+ arb::cable_cell branch_cell(arb::cell_gid_type gid, const cell_parameters& params) {
+@@ -475,7 +473,5 @@ arb::cable_cell branch_cell(arb::cell_gid_type gid, const cell_parameters& param
+     }
+ 
+     // Make a CV between every sample in the sample tree.
+-    decor.set_default(arb::cv_policy_every_segment());
+-
+-    return {arb::morphology(tree), decor};
++    return {arb::morphology(tree), decor, {}, arb::cv_policy_every_segment()};
+ }
diff --git a/packages/bm-arbor-euhpc/fix_stdcxx.patch b/packages/bm-arbor-euhpc/fix_stdcxx.patch
new file mode 100644
index 0000000000000000000000000000000000000000..1a58fbc9df3ac1a782881ff21aec220355a7778c
--- /dev/null
+++ b/packages/bm-arbor-euhpc/fix_stdcxx.patch
@@ -0,0 +1,15 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index aac57ab..1fe4039 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -3,8 +3,8 @@ cmake_minimum_required(VERSION 3.19)
+ project(busyring)
+ 
+ enable_language(CXX)
+-set(CMAKE_CXX_STANDARD 17)
+-set(CMAKE_CUDA_STANDARD 17)
++set(CMAKE_CXX_STANDARD 20)
++set(CMAKE_CUDA_STANDARD 20)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ set(CMAKE_CXX_EXTENSIONS OFF)
+ 
diff --git a/packages/bm-arbor-euhpc/package.py b/packages/bm-arbor-euhpc/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..ceebc8f01455c229a95bf07678c3e1953ff87e91
--- /dev/null
+++ b/packages/bm-arbor-euhpc/package.py
@@ -0,0 +1,37 @@
+# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class BmArborEuhpc(CMakePackage, CudaPackage):
+    """Arbor EUHPC Mini-Benchmark"""
+
+    homepage = "https://github.com/thorstenhater"
+    url = "https://github.com/thorstenhater/euhpc-arbor-benchmark"
+    git = "https://github.com/thorstenhater/euhpc-arbor-benchmark.git"
+
+    maintainers = ("thorstenhater")
+
+    version("main", branch="main", submodules=True)
+    version("jusuf-benchmark", commit="0adb4ae9ff03a2158c1284634e9163665997506a", submodules=True)
+
+    depends_on("arbor")
+    depends_on("arbor@jusuf-benchmark", when="@jusuf-benchmark")
+
+    patch("fix_install.patch")
+    patch("fix_stdcxx.patch")
+    patch("fix_post-010-api.patch")
+
+    def cmake_args(self):
+        args = [
+            "-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON",
+        ]
+
+        if "+cuda" in self.spec:
+            cuda_arch = self.spec.variants["cuda_arch"].value
+            args.append("-DCMAKE_CUDA_ARCHITECTURES=%s" % cuda_arch)
+
+        return args
diff --git a/site-config/image-jusuf/build_env.sh b/site-config/image-jusuf/build_env.sh
new file mode 100644
index 0000000000000000000000000000000000000000..5b5372aa7ce7e55b75c1a1b6463a3a79bff49afa
--- /dev/null
+++ b/site-config/image-jusuf/build_env.sh
@@ -0,0 +1,6 @@
+module list
+module --force purge
+module load Stages/2025
+module load StdEnv/2025
+module load Python
+module list
diff --git a/site-config/image-jusuf/config.yaml b/site-config/image-jusuf/config.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8e58bc0377128adb64c3c25f790da18e19cd3316
--- /dev/null
+++ b/site-config/image-jusuf/config.yaml
@@ -0,0 +1,2 @@
+config:
+  test_stage: /tmp/spack_tests
diff --git a/site-config/image-jusuf/packages.yaml b/site-config/image-jusuf/packages.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1c380553b4f1311cc649fd74172e4735c05ac28a
--- /dev/null
+++ b/site-config/image-jusuf/packages.yaml
@@ -0,0 +1,110 @@
+packages:
+#  all:
+#    compiler: ["gcc@13.3.0"]
+#    variants: +mpi +cuda cuda_arch=75
+  gmake:
+    #buildable: False
+    externals:
+    - spec: gmake@4.3
+      prefix: /usr
+  subversion:
+    buildable: False
+    externals:
+    - spec: subversion@1.10.2
+      prefix: /usr
+  intel-tbb:
+#    compiler: ["gcc@13.3"]  # Prefer GCC 13.3 for intel-tbb
+    variants: +shared        # Enable shared libraries
+    version: [2021.9.0]        # Use version 2021.9.0 (compatible with GCC 13.3)
+    buildable: true          # Allow Spack to build intel-tbb if not found externally
+#  suitparse:
+#    compiler: ["gcc@13.3"]  # Force suite-sparse to use gcc@13.3
+  cuda:
+    buildable: False
+    externals:
+    - spec: cuda@12.6.0
+      prefix: /p/software/jusuf/stages/2025/software/CUDA/12/
+      modules:
+      - Stages/2025
+      - CUDA/12
+  cudnn:
+    buildable: False
+    externals:
+    - spec: cudnn@9.5.0.50-12
+      prefix: /p/software/jusuf/stages/2025/software/cuDNN/9.5.0.50-CUDA-12/
+      modules:
+      - Stages/2025
+      - cuDNN/9.5.0.50-CUDA-12
+  mpi:
+    buildable: False
+  mpich:
+    buildable: False
+    externals:
+    - spec: "mpich@4.1.5%gcc@13.3.0 arch=linux-rocky9-zen2"
+      prefix: /p/software/jusuf/stages/2025/software/psmpi/5.10.0-1-GCC-13.3.0/
+      modules:
+      - Stages/2025
+      - GCC/13.3.0
+      - ParaStationMPI/5.10.0-1
+  llvm:
+    variants: ~cuda
+  binutils:
+    buildable: False
+    externals:
+    - spec: binutils@2.42
+      prefix: /p/software/jusuf/stages/2025/software/binutils/2.42-GCCcore-13.3.0
+  numactl:
+    buildable: False
+    externals:
+    - spec: numactl@2.0.18
+      prefix: /p/software/jusuf/stages/2025/software/numactl/2.0.18-GCCcore-13.3.0
+      modules:
+      - numactl/2.0.18
+  ucx:
+    buildable: False
+    externals:
+    - spec: ucx@1.17.0
+      prefix: /p/software/jusuf/stages/2025/software/UCX/default-GCCcore-13.3.0
+      modules:
+      - UCX/default
+  xz:
+    buildable: False
+    externals:
+    - spec: xz@5.4.5
+      prefix: /p/software/jusuf/stages/2025/software/XZ/5.4.5-GCCcore-13.3.0
+  libxml2:
+    buildable: False
+    externals:
+    - spec: libxml2@2.12.7
+      prefix: /p/software/jusuf/stages/2025/software/libxml2/2.12.7-GCCcore-13.3.0
+  libevent:
+    buildable: False
+    externals:
+    - spec: libevent@2.1.12
+      prefix: /p/software/jusuf/stages/2025/software/libevent/2.1.12-GCCcore-13.3.0
+  libpciaccess:
+    buildable: False
+    externals:
+    - spec: libpciaccess@0.18.1
+      prefix: /p/software/jusuf/stages/2025/software/libpciaccess/0.18.1-GCCcore-13.3.0
+  hwloc:
+    buildable: False
+    externals:
+    - spec: hwloc@2.10.0
+      prefix: /p/software/jurecadc/stages/2025/software/hwloc/2.10.0-GCCcore-13.3.0
+      modules:
+      - Stages/2025
+      - GCC/13.3.0
+      - hwloc/2.10.0
+  pmix:
+    buildable: False
+    externals:
+    - spec: pmix@5.0.3
+      prefix: /p/software/jusuf/stages/2025/software/PMIx/5.0.3-GCCcore-13.3.0
+      modules:
+      - GCC/13.3.0
+      - PMIx/5.0.3
+  arbor:
+    variants: +python +mpi +cuda cuda_arch=70 +vectorize
+  bm-arbor-euhpc:
+    variants: +cuda cuda_arch=70
diff --git a/spack.yaml b/spack.yaml
index da2a6fb26a1173f4bda40ceb4bc7397673e7b13e..f5bc8fb17b433c893ab73c53d072c8a0a79127b7 100644
--- a/spack.yaml
+++ b/spack.yaml
@@ -3,82 +3,83 @@ spack:
     - site-config/$SYSTEMNAME
   specs:
     # EBRAINS tools
-    - arbor@0.10.0 +python +mpi
-    - py-biobb-analysis@4.1.0
-    - py-biobb-chemistry@4.1.0
-    - py-biobb-common@4.1.0
-    - py-biobb-gromacs@4.1.1
-    - py-biobb-io@4.1.0
-    - py-biobb-model@4.1.0
-    - py-biobb-structure-checking@3.13.4
-    - py-biobb-structure-utils@4.1.0
-    - hxtorch@10.0-a1
+    - arbor@jusuf-benchmark +python +mpi
+    - bm-arbor-euhpc@jusuf-benchmark
+#    - py-biobb-analysis@4.1.0
+#    - py-biobb-chemistry@4.1.0
+#    - py-biobb-common@4.1.0
+#    - py-biobb-gromacs@4.1.1
+#    - py-biobb-io@4.1.0
+#    - py-biobb-model@4.1.0
+#    - py-biobb-structure-checking@3.13.4
+#    - py-biobb-structure-utils@4.1.0
+#    - hxtorch@10.0-a1
     - nest@3.8 +sonata
     - neuron@8.2.3 +mpi
-    - jaxsnn@10.0-a1
-    - py-bluepyefe@2.3.6
-    - py-bluepymm@0.8.7
-    - py-bluepyopt@1.14.18
-    - py-bsb-core@5.0.2
-    - py-bsb-hdf5@5.0.2
-    - py-bsb-yaml@4.2.2
-    - py-bsb-json@4.2.2
-    - py-bsb-nest@4.3.2
-    - py-bsb-neuron@4.2.2
-    - py-cobrawap@0.2.1
-    - py-ebrains-drive@0.6.0
-    - py-ebrains-kg-core@0.9.15
-    - py-ebrains-validation-client@0.9.1
-    - py-efel@5.2.0
-    - py-elephant@1.1.1
-    - py-fairgraph@0.12.1
-    - py-frites@0.4.4
-    - py-hbp-archive@1.1.1
-    - py-hbp-neuromorphic-platform@0.11.2
-    - py-hbp-validation-client@0.9.0
-    - py-hippounit@1.4.1
-    - py-lfpy@2.3
-    - py-lfpykit@0.5.1
-    - py-libneuroml@0.4.1
-    - py-libsonata@0.1.23
-    - py-neo@0.13.3
-    - py-nestml@8.0.0
-    - py-netpyne@1.0.6
-    - py-neurom@3.2.4
-    - py-neuror@1.6.4
-    - py-pynn@0.12.3 +mpi
-    - py-pyunicore@1.1.1
-    - py-quantities-scidash@0.12.4.3
-    - py-quantities@0.16.0
-    - py-siibra@1.0a9
-    - py-snudda@2.1.10
-    - py-spynnaker@7.3.0
-    - py-tvb-framework@2.9
-    - py-tvb-contrib@2.9.1
-    - py-tvb-library@2.9.2
-    - py-tvb-multiscale@2.1.0.ebrains
-    - py-tvb-widgets@2.1.0
-    - py-tvb-ext-bucket
-    - py-tvb-ext-unicore
-    - py-tvb-ext-xircuits@1.1.0
-    - py-viziphant@0.4.0
-    - py-vbi@0.1.3.3
-    - pynn-brainscales@10.0-a1
-    - r-rgsl@0.1.1
-    - r-sbtabvfgen@0.1
-    - r-uqsa@2.2
-    - sda@7.3.3d
-    # Workflows (meta-packages)
-    - wf-biobb
-    - wf-brainscales2-demos@10.0-a1
-    - wf-bsb@4.4 +nest +neuron
-    - wf-protein-association-rates@0.1
-    - wf-multi-area-model@1.2.0
-    - wf-human-multi-area-model@2.0.1
-    - wf-uq-akar4@0.1
-    - wf-custom-python@0.1
-    #- py-cerebstats
-    #- py-cerebunit
-    #- py-morphounit@1.0.4
+#    - jaxsnn@10.0-a1
+#    - py-bluepyefe@2.3.6
+#    - py-bluepymm@0.8.7
+#    - py-bluepyopt@1.14.18
+#    - py-bsb-core@5.0.2
+#    - py-bsb-hdf5@5.0.2
+#    - py-bsb-yaml@4.2.2
+#    - py-bsb-json@4.2.2
+#    - py-bsb-nest@4.3.2
+#    - py-bsb-neuron@4.2.2
+#    - py-cobrawap@0.2.1
+#    - py-ebrains-drive@0.6.0
+#    - py-ebrains-kg-core@0.9.15
+#    - py-ebrains-validation-client@0.9.1
+#    - py-efel@5.2.0
+#    - py-elephant@1.1.1
+#    - py-fairgraph@0.12.1
+#    - py-frites@0.4.4
+#    - py-hbp-archive@1.1.1
+#    - py-hbp-neuromorphic-platform@0.11.2
+#    - py-hbp-validation-client@0.9.0
+#    - py-hippounit@1.4.1
+#    - py-lfpy@2.3
+#    - py-lfpykit@0.5.1
+#    - py-libneuroml@0.4.1
+#    - py-libsonata@0.1.23
+#    - py-neo@0.13.3
+#    - py-nestml@8.0.0
+#    - py-netpyne@1.0.6
+#    - py-neurom@3.2.4
+#    - py-neuror@1.6.4
+#    - py-pynn@0.12.3 +mpi
+#    - py-pyunicore@1.1.1
+#    - py-quantities-scidash@0.12.4.3
+#    - py-quantities@0.16.0
+#    - py-siibra@1.0a9
+#    - py-snudda@2.1.10
+#    - py-spynnaker@7.3.0
+#    - py-tvb-framework@2.9
+#    - py-tvb-contrib@2.9.1
+#    - py-tvb-library@2.9.2
+#    - py-tvb-multiscale@2.1.0.ebrains
+#    - py-tvb-widgets@2.1.0
+#    - py-tvb-ext-bucket
+#    - py-tvb-ext-unicore
+#    - py-tvb-ext-xircuits@1.1.0
+#    - py-viziphant@0.4.0
+#    - py-vbi@0.1.3.3
+#    - pynn-brainscales@10.0-a1
+#    - r-rgsl@0.1.1
+#    - r-sbtabvfgen@0.1
+#    - r-uqsa@2.2
+#    - sda@7.3.3d
+#    # Workflows (meta-packages)
+#    - wf-biobb
+#    - wf-brainscales2-demos@10.0-a1
+#    - wf-bsb@4.4 +nest +neuron
+#    - wf-protein-association-rates@0.1
+#    - wf-multi-area-model@1.2.0
+#    - wf-human-multi-area-model@2.0.1
+#    - wf-uq-akar4@0.1
+#    - wf-custom-python@0.1
+#    #- py-cerebstats
+#    #- py-cerebunit
+#    #- py-morphounit@1.0.4
   concretizer:
     unify: true