diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f38951c68cf8f2824f0ff0f0b72d634b83651030..3abfbcc6fe6bd586416819dd9de473e8c447afd6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -177,35 +177,13 @@ build-spack-env-on-runner:
   image: $GITLAB_BUILD_ENV_DOCKER_IMAGE
   variables:
     SPACK_DEV_ENV: ebrains-dev
-    SPACK_DEV_PATH: $CI_PROJECT_DIR/spack
-    SPACK_USER_CACHE_PATH: $CI_PROJECT_DIR/.spack
-    SPACK_USER_CONFIG_PATH: $CI_PROJECT_DIR/.spack
   script:
-    - git clone --depth 1 -c advice.detachedHead=false -c feature.manyFiles=true --branch $SPACK_VERSION https://github.com/spack/spack $SPACK_DEV_PATH
-    # SPACK PATCH: the post-build logs on install-time-test-logs.txt gets ovewritten by the post-install logs.
-    # quick fix for that: (TODO: investigate more and open PR)
-    - sed -i "s/self.file_like, \"w\"/self.file_like, \"a\"/g" $SPACK_DEV_PATH/lib/spack/llnl/util/tty/log.py
-    - |
-      cat <<EOF > $SPACK_DEV_PATH/etc/spack/defaults/upstreams.yaml
-      upstreams:
-        ebrains-gitlab-spack-instance:
-          install_tree: $SPACK_PATH_GITLAB/spack/opt/spack
-      EOF
-    - . $SPACK_DEV_PATH/share/spack/setup-env.sh
-    - spack find
-    - spack load gcc@10.3.0
-    - spack compiler find
-    - spack repo add .
-    - spack env create $SPACK_DEV_ENV
-    - spack env activate $SPACK_DEV_ENV
-    - rm -rf $SPACK_ENV/site-config && cp -r site-config $SPACK_ENV
-    - spack-python site-config/ymerge.py spack.yaml site-config/$SYSTEMNAME/spack.yaml > /tmp/spack.yaml
-    - cp /tmp/spack.yaml $SPACK_ENV/
-    - spack install -y -j2 --fresh --test root
+    # run installation script
+    - . install_spack_env.sh $CI_PROJECT_DIR $SPACK_VERSION $CI_PROJECT_DIR $SPACK_DEV_ENV $SPACK_PATH_GITLAB
   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=$SPACK_DEV_PATH/opt/spack/linux-ubuntu20.04-x86_64/gcc-10.3.0
+    - PKG_DIR=$CI_PROJECT_DIR/spack/opt/spack/linux-ubuntu20.04-x86_64/gcc-10.3.0
     - if cd $PKG_DIR; then find . \( -name ".spack" -o -name ".build" -o -name ".spack_test_results" \) -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" -exec cp --parents "{}" $CI_PROJECT_DIR/spack_logs/not_installed \;; fi
@@ -217,12 +195,6 @@ build-spack-env-on-runner:
   except:
     variables:
       - $CI_PIPELINE_SOURCE == "schedule"
-  # cache:
-  #   key: spack-cache-$CI_COMMIT_REF_SLUG
-  #   paths:
-  #     - "$SPACK_DEV_PATH"
-  #     - "$SPACK_USER_CONFIG_PATH"
-  #   when: always
 
 sync-gitlab-spack-instance:
   stage: build
@@ -232,51 +204,17 @@ sync-gitlab-spack-instance:
   image: $GITLAB_BUILD_ENV_DOCKER_IMAGE
   variables:
     SPACK_NFS_ENV: ebrains-runner-build
-    SPACK_PATH: $SPACK_PATH_GITLAB
-    SPACK_USER_CACHE_PATH: $SPACK_PATH/spack/.spack
-    SPACK_USER_CONFIG_PATH: $SPACK_PATH/spack/.spack
-    SPACK_REPO_PATH: $SPACK_PATH/ebrains-spack-builds
+    SPACK_REPO_PATH: $SPACK_PATH_GITLAB/ebrains-spack-builds
   script:
-    # clone spack if it doesn't exist
-    - |
-      if [ ! -d $SPACK_PATH/spack ]; then
-        git clone --depth 1 -c advice.detachedHead=false -c feature.manyFiles=true --branch $SPACK_VERSION https://github.com/spack/spack $SPACK_PATH/spack
-      fi
-    # SPACK PATCH: the post-build logs on install-time-test-logs.txt gets ovewritten by the post-install logs.
-    # quick fix for that: (TODO: investigate more and open PR)
-    - sed -i "s/self.file_like, \"w\"/self.file_like, \"a\"/g" $SPACK_PATH/spack/lib/spack/llnl/util/tty/log.py
-    # activate spack
-    - . $SPACK_PATH/spack/share/spack/setup-env.sh
     # get latest state of EBRAINS repo
-    - rm -rf $SPACK_REPO_PATH && mkdir $SPACK_REPO_PATH && cp -r -t $SPACK_REPO_PATH $CI_PROJECT_DIR/{packages,repo.yaml}
-    - spack repo list | grep -q ebrains-spack-builds && echo "Repository registered already" || spack repo add $SPACK_REPO_PATH
-    - spack repo list
-    # install compiler (if not already installed)
-    - EBRAINS_SPACK_COMPILER=$(grep 'compiler' $CI_PROJECT_DIR/site-config/$SYSTEMNAME/packages.yaml | awk -F'[][]' '{ print $2 }')
-    - spack compiler find
-    - spack install $EBRAINS_SPACK_COMPILER
-    - spack load $EBRAINS_SPACK_COMPILER
-    - spack compiler find
-    - spack compiler list
-    # create environment, if it doesn't exist
-    - spack env list | grep -q $SPACK_NFS_ENV && echo "Environment created already" || spack env create $SPACK_NFS_ENV
-    # update environment site-configs
-    - rm -rf $SPACK_ROOT/var/spack/environments/$SPACK_NFS_ENV/site-config && cp -r site-config $SPACK_ROOT/var/spack/environments/$SPACK_NFS_ENV
-    # update spack.yaml: merge top-level and site-specific spack.yaml files
-    - spack-python site-config/ymerge.py spack.yaml site-config/$SYSTEMNAME/spack.yaml > /tmp/spack.yaml
-    - cp /tmp/spack.yaml $SPACK_ROOT/var/spack/environments/$SPACK_NFS_ENV
-    # There is a known spack bug (https://github.com/spack/spack/issues/29447) in installing test dependencies for installation tests. The workaround suggested
-    # in the issue is to NOT concretize separately, but simply remove the .lock file and let the enironment be concretized by the spack install command:
-    - rm $SPACK_ROOT/var/spack/environments/$SPACK_NFS_ENV/spack.lock || echo "No spack.lock file"
-    # then activate environment
-    - spack env activate $SPACK_NFS_ENV
-    - spack install -y -j2 --fresh --test root
-    - spack reindex
+    - rm -rf $SPACK_REPO_PATH && cp -r $CI_PROJECT_DIR $SPACK_REPO_PATH
+    # run installation script
+    - . install_spack_env.sh $SPACK_PATH_GITLAB $SPACK_VERSION $SPACK_REPO_PATH $SPACK_NFS_ENV
   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
       # (we use repo.yaml, that is modified at each start of the pipeline, as a reference file)
-    - PKG_DIR=$SPACK_PATH/spack/opt/spack/linux-ubuntu20.04-x86_64/gcc-10.3.0
+    - PKG_DIR=$SPACK_PATH_GITLAB/spack/opt/spack/linux-ubuntu20.04-x86_64/gcc-10.3.0
     - if cd $PKG_DIR; then find . -newer $SPACK_REPO_PATH/repo.yaml \( -name ".spack" -o -name ".spack_test_results" -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" -exec cp --parents "{}" $CI_PROJECT_DIR/spack_logs/not_installed \;; fi
diff --git a/install_spack_env.sh b/install_spack_env.sh
index f4ba7847e58de8655f006259f107097d0a1a5b5a..758b7b5e90d7000b5c74007c614faf666fd2f35c 100644
--- a/install_spack_env.sh
+++ b/install_spack_env.sh
@@ -1,16 +1,17 @@
 #!/bin/bash
 
-# ===========================================================================================================
+# ===============================================================================================================================
 # title         : install_spack_env.sh
-# usage         : ./install_spack_env.sh $INSTALLATION_ROOT $SPACK_VERSION $EBRAINS_REPO $EBRAINS_SPACK_ENV
+# usage         : ./install_spack_env.sh $INSTALLATION_ROOT $SPACK_VERSION $EBRAINS_REPO $EBRAINS_SPACK_ENV $UPSTREAM_INSTANCE
 # description   : installs or updates the spack environment defined in the EBRAINS spack repo
 #                 (if the specified spack instance doesn't exist, it also creates it)
-# ===========================================================================================================
+# ===============================================================================================================================
 
 INSTALLATION_ROOT=$1  # where to set up the installation
 SPACK_VERSION=$2      # which spack version to use
 EBRAINS_REPO=$3       # location of ebrains-spack-builds repository
 EBRAINS_SPACK_ENV=$4  # name of EBRAINS Spack environment to be created/updated
+UPSTREAM_INSTANCE=$5  # path to Spack instance to use as upstream (optional)
 
 # specify location of .spack dir (by default in ~)
 # this is where cache and configuration settings are stored
@@ -29,26 +30,34 @@ then
   sed -i "s/self.file_like, \"w\"/self.file_like, \"a\"/g" $INSTALLATION_ROOT/spack/lib/spack/llnl/util/tty/log.py
 fi
 
+if [[ $UPSTREAM_INSTANCE ]]
+then
+  cat <<EOF > $INSTALLATION_ROOT/spack/etc/spack/defaults/upstreams.yaml
+upstreams:
+  upstream-spack-instance:
+    install_tree: $UPSTREAM_INSTANCE/spack/opt/spack
+EOF
+fi
+
 # activate Spack
 source $INSTALLATION_ROOT/spack/share/spack/setup-env.sh
 
+# add repo if it does not exist
+if [[ ! $(spack repo list | grep ebrains-spack-builds$) ]]
+then
+  spack repo add $EBRAINS_REPO
+fi
+
 # install platform compiler (extract version from packages.yaml)
 if [ $SYSTEMNAME == ebrainslab ]
 then
   EBRAINS_SPACK_COMPILER=$(grep 'compiler' $EBRAINS_REPO/site-config/$SYSTEMNAME/packages.yaml | awk -F'[][]' '{ print $2 }')
   spack compiler find
-  spack install $EBRAINS_SPACK_COMPILER
-  spack load $EBRAINS_SPACK_COMPILER
+  spack load $EBRAINS_SPACK_COMPILER || (spack install $EBRAINS_SPACK_COMPILER; spack load $EBRAINS_SPACK_COMPILER)
 fi
 
 spack compiler find
 
-# add repo if it does not exist
-if [[ ! $(spack repo list | grep $EBRAINS_REPO) ]]
-then
-  spack repo add $EBRAINS_REPO
-fi
-
 # create environment if it does not exist
 if [ ! -d "$SPACK_ROOT/var/spack/environments/$EBRAINS_SPACK_ENV" ]
 then
diff --git a/packages/acpype/package.py b/packages/acpype/package.py
index 39982da7209fdb0e1f020b97fa4f7d8033fe71d8..c19248710d4ea10d2c3b221243bd9b7245617339 100644
--- a/packages/acpype/package.py
+++ b/packages/acpype/package.py
@@ -7,12 +7,14 @@ class Acpype(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/alanwilter/acpype"
     git = 'https://github.com/alanwilter/acpype.git'
+    url = 'https://github.com/alanwilter/acpype/archive/refs/tags/2022.7.21.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('2022.7.21', branch='master')
+    version('master', branch='master')
+    version('2022.7.21', sha256='5f7e6162d9a0aed2f770b9ccf5617ac1398a423cca815ae37cbf66d4cd62ea2f')
 
     # Dependencies
     depends_on('python@3.8:', type=('build', 'run'))
diff --git a/packages/biobb-analysis/package.py b/packages/biobb-analysis/package.py
index bc47a809d5f135e96c286018061403feb846daa4..f67ab8af6a80a6871d94b8a477ba74b3abff1d4c 100644
--- a/packages/biobb-analysis/package.py
+++ b/packages/biobb-analysis/package.py
@@ -7,12 +7,14 @@ class BiobbAnalysis(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/bioexcel/biobb_analysis"
     git = 'https://github.com/bioexcel/biobb_analysis.git'
+    url = 'https://github.com/bioexcel/biobb_analysis/archive/refs/tags/v4.0.1.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('4.0.1', branch='master')
+    version('master', branch='master')
+    version('4.0.1', sha256='3d7190d0cae6af42b2e7c0ecf073930a609b699ef311e8b74afc1634958e09b0')
 
     # Dependencies
     depends_on('python@3.8:', type=('build', 'run'))
diff --git a/packages/biobb-chemistry/package.py b/packages/biobb-chemistry/package.py
index 47286633d74b9cf036141a1963d49b2e346215d7..13a412de3751d649a0fa7b941e7e4756468b7818 100644
--- a/packages/biobb-chemistry/package.py
+++ b/packages/biobb-chemistry/package.py
@@ -7,12 +7,14 @@ class BiobbChemistry(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/bioexcel/biobb_chemistry"
     git = 'https://github.com/bioexcel/biobb_chemistry.git'
+    url = 'https://github.com/bioexcel/biobb_chemistry/archive/refs/tags/v4.0.0.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('4.0.0', branch='master')
+    version('master', branch='master')
+    version('4.0.0', sha256='40f65b4a93dff24e19995265e41fd6821f5ac2f35199d938f1d00fa035883e64')
 
     # Dependencies
     depends_on('python@3.8:', type=('build', 'run'))
diff --git a/packages/biobb-common/package.py b/packages/biobb-common/package.py
index 10e8cc1965177b637c38fa11ca325d6bed38ee13..ae3ffc96dc544716100cdbe7fc544f4b55471768 100644
--- a/packages/biobb-common/package.py
+++ b/packages/biobb-common/package.py
@@ -6,12 +6,14 @@ class BiobbCommon(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/bioexcel/biobb_common"
     git = 'https://github.com/bioexcel/biobb_common.git'
+    url = 'https://github.com/bioexcel/biobb_common/archive/refs/tags/v4.0.0.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('4.0.0', branch='master')
+    version('master', branch='master')
+    version('4.0.0', sha256='fff990dce42ded2af3d587567dbf5321b1498f12f24d04d62003f9869d6eb8fe')
 
     # Dependencies
     depends_on('py-setuptools')
diff --git a/packages/biobb-gromacs/package.py b/packages/biobb-gromacs/package.py
index c60afef13ff1559aebf227d626991c5afd765a04..f6003f6d2aa2762afd62ad2d9bbc6090ac334a13 100644
--- a/packages/biobb-gromacs/package.py
+++ b/packages/biobb-gromacs/package.py
@@ -7,12 +7,14 @@ class BiobbGromacs(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/bioexcel/biobb_gromacs"
     git = 'https://github.com/bioexcel/biobb_gromacs.git'
+    url = 'https://github.com/bioexcel/biobb_gromacs/archive/refs/tags/v4.0.0.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('4.0.0', branch='master')
+    version('master', branch='master')
+    version('4.0.0', sha256='87f9079ec8b72ff43cd1b388a06fee5b1f64bb4080ffab110941f3c6d155ef0b')
 
     # Dependencies
     depends_on('python@3.8:', type=('build', 'run'))
diff --git a/packages/biobb-io/package.py b/packages/biobb-io/package.py
index a4f089d4e9d0c199f46baf075ae38ad812dc7c48..23f351992f76162aeecffbe6bb5d8e67f5ed7574 100644
--- a/packages/biobb-io/package.py
+++ b/packages/biobb-io/package.py
@@ -7,12 +7,14 @@ class BiobbIo(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/bioexcel/biobb_io"
     git = 'https://github.com/bioexcel/biobb_io.git'
+    url = 'https://github.com/bioexcel/biobb_io/archive/refs/tags/v4.0.0.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('4.0.0', branch='master')
+    version('master', branch='master')
+    version('4.0.0', sha256='600a30f14b1a0e21f57775ba1be695e1595f5702237415fe90d7c531b5a0408a')
 
     # Dependencies
     depends_on('biobb-common')
diff --git a/packages/biobb-model/package.py b/packages/biobb-model/package.py
index 877be433c85b0f28e2c0fedadde38b7508c66efa..8e0147d86b7777e9bef34d5f99a1709b28ac49b3 100644
--- a/packages/biobb-model/package.py
+++ b/packages/biobb-model/package.py
@@ -7,12 +7,14 @@ class BiobbModel(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/bioexcel/biobb_model"
     git = 'https://github.com/bioexcel/biobb_model.git'
+    url = 'https://github.com/bioexcel/biobb_model/archive/refs/tags/v4.0.0.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('4.0.0', branch='master')
+    version('master', branch='master')
+    version('4.0.0', sha256='92387725b7ccd3f40d18c1d3e30a6169ca4204ba498ac72e25c9e701b1a89d91')
 
     # Dependencies
     depends_on('python@3.8:', type=('build', 'run'))
diff --git a/packages/biobb-structure-checking/package.py b/packages/biobb-structure-checking/package.py
index 8c528fd728f64192922fce64f25f38ae592d8649..4cb782e79f4f2af6b9d17e3b52edcb7fd674440e 100644
--- a/packages/biobb-structure-checking/package.py
+++ b/packages/biobb-structure-checking/package.py
@@ -8,12 +8,14 @@ class BiobbStructureChecking(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/bioexcel/biobb_structure_checking"
     git = 'https://github.com/bioexcel/biobb_structure_checking.git'
+    url = 'https://github.com/bioexcel/biobb_structure_checking/archive/refs/tags/v3.12.1.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('3.12.1', branch='master')
+    version('master', branch='master')
+    version('3.12.1', sha256='ef3e6fe5f7763e534c91fac00bf873c3d88bcca18be7a63c63608dceb36f3d40')
 
     # Dependencies
     depends_on('py-setuptools')
diff --git a/packages/biobb-structure-utils/package.py b/packages/biobb-structure-utils/package.py
index 9dd06b981ff0c9bf8fc1c3b587849c0887d4036f..ab132e9721965d0645e535387ff80782dc19f2e3 100644
--- a/packages/biobb-structure-utils/package.py
+++ b/packages/biobb-structure-utils/package.py
@@ -7,12 +7,14 @@ class BiobbStructureUtils(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/bioexcel/biobb_structure_utils"
     git = 'https://github.com/bioexcel/biobb_structure_utils.git'
+    url = 'https://github.com/bioexcel/biobb_structure_utils/archive/refs/tags/v4.0.0.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('4.0.0', branch='master')
+    version('master', branch='master')
+    version('4.0.0', sha256='f328eee2166631e1cc514118eb41187620c358c8024431ce2a0b0e4547692c47')
 
     # Dependencies
     depends_on('python@3.8:', type=('build', 'run'))
diff --git a/packages/nest/package.py b/packages/nest/package.py
index a14f74cd96ac63cf3212e09be7bc6127890a7fae..3f571164da86fe7c344afb81e96af35b4cee649f 100644
--- a/packages/nest/package.py
+++ b/packages/nest/package.py
@@ -28,7 +28,7 @@ class Nest(CMakePackage):
     maintainers = ['terhorst']
 
     version('master', branch='master')
-    version('3.6_rc1',sha256='8a8693933180bd5f64e0032c175997bbe7ee3bc6b0d73a7a4a394c97fc93969d')
+    version('3.6-rc2',sha256='8508a9590ad49e6657809d1acfd02aa612b70fa8e5e7791a2ea261d891f181f7')
     version('3.5',    sha256='3cdf5720854a4d8a7d359f9de9d2fb3619a0be2e36932028d6940360741547bd')
     version('3.4',    sha256='c56699111f899045ba48e55e87d14eca8763b48ebbb3648beee701a36aa3af20')
     version('3.3',    sha256='179462b966cc61f5785d2fee770bc36f86745598ace9cd97dd620622b62043ed')
diff --git a/packages/nglview/package.py b/packages/nglview/package.py
index a6dd6510e68c3ff0d7baf89cddb08766786f2121..17f1208471b51ff1de53ad8ce09ff96eaf2ef1fe 100644
--- a/packages/nglview/package.py
+++ b/packages/nglview/package.py
@@ -7,12 +7,14 @@ class Nglview(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/nglviewer/nglview"
     git = 'https://github.com/nglviewer/nglview.git'
+    url = 'https://github.com/nglviewer/nglview/archive/refs/tags/v3.0.4.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('3.0.4', branch='master')
+    version('master', branch='master')
+    version('3.0.4', sha256='78b4413b796965a94045df0d584ec51e256c3dca5f366020439fe7e9744ce61b')
 
     # Dependencies
     depends_on('python@3.8:', type=('build', 'run'))
diff --git a/packages/py-bsb-hdf5/package.py b/packages/py-bsb-hdf5/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..bd50769da23633e89ecba2c7ba4663f8d2bec3c7
--- /dev/null
+++ b/packages/py-bsb-hdf5/package.py
@@ -0,0 +1,22 @@
+# Copyright 2013-2023 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 PyBsbHdf5(PythonPackage):
+    """An HDF-5 based storage engine for the BSB framework."""
+
+    homepage = "https://github.com/dbbs-lab/bsb-hdf5"
+    url = "https://pypi.org/packages/py3/b/bsb_hdf5/bsb_hdf5-0.8.3-py3-none-any.whl"
+
+    maintainers = ["helveg"]
+
+    version('0.8.3', sha256="38162bfe9470b87cb30a2bff78dce68fc1b97f2df7d7e3b288c16b671f7579e5", expand=False)
+
+    depends_on("py-setuptools", type="build")
+    # depends_on("py-bsb@4.0.0a57:")
+    depends_on("py-shortuuid")
+    depends_on("py-h5py@3.0:")
diff --git a/packages/py-bsb/package.py b/packages/py-bsb/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..fad71af2ccb4cd0c653c7334fee9f33250b742c6
--- /dev/null
+++ b/packages/py-bsb/package.py
@@ -0,0 +1,51 @@
+# Copyright 2013-2023 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 PyBsb(PythonPackage):
+    """
+    The BSB is a component framework for neural modeling, which focuses on component
+    declarations to piece together a model.
+    """
+
+    homepage = "https://bsb.readthedocs.io"
+    url = "https://pypi.org/packages/py3/b/bsb/bsb-4.0.0a57-py3-none-any.whl"
+
+    maintainers = ["helveg"]
+
+    version("4.0.0a57", sha256="5da15799aa8994894ff5371561d534b43beffaa79461189c94080071359f4076", expand=False)
+
+    depends_on("python@3.8:", type=("build", "run"))
+    depends_on("py-setuptools", type="build")
+    depends_on("py-numpy@1.19:")
+    depends_on("py-scipy@1.5:")
+    depends_on("py-scikit-learn@1.0:")
+    depends_on("py-plotly")
+    depends_on("py-rtree@1.0:")
+    depends_on("py-psutil@5.8:")
+    depends_on("py-pynrrd@1.0:")
+    depends_on("py-toml")
+    depends_on("py-requests")
+    depends_on("py-appdirs@1.4:")
+    depends_on("py-neo")
+    depends_on("py-tqdm@4.50:")
+    depends_on("py-shortuuid")
+    depends_on("py-quantities")
+    depends_on("py-pyyaml@6.0:")
+    depends_on("py-morphio@3.3:")
+    depends_on("py-bsb-hdf5@0.8.3:")
+    depends_on("py-errr@1.2.0:")
+    depends_on("py-colour@0.1.5:")
+
+    def setup_build_environment(self, env):
+        env.set("SPATIALINDEX_C_LIBRARY", self.spec["libspatialindex"].libs[0])
+
+    def setup_run_environment(self, env):
+        self.setup_build_environment(env)
+
+    skip_modules = ['bsb.simulators.arbor', 'bsb.simulators.arbor.devices']
+    
diff --git a/packages/py-colour/package.py b/packages/py-colour/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..5a55b8f94bf8c43b75746c9a272bb4bfd43071c9
--- /dev/null
+++ b/packages/py-colour/package.py
@@ -0,0 +1,18 @@
+# Copyright 2013-2023 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 PyColour(PythonPackage):
+    """Python color representations manipulation library (RGB, HSL, web, ...)"""
+
+    homepage = "https://github.com/vaab/colour"
+    pypi = "colour/colour-0.1.5.tar.gz"
+
+    maintainers = ["vaab"]
+
+    version("0.1.5", sha256="af20120fefd2afede8b001fbef2ea9da70ad7d49fafdb6489025dae8745c3aee")
+    depends_on("py-setuptools", type="build")
diff --git a/packages/py-ebrains-kg-core/package.py b/packages/py-ebrains-kg-core/package.py
index c6eff2c94b78870eba090b3ae6584775943c1b42..cfe76f490abd501b0e14565e1f6bf3520dc6eefd 100644
--- a/packages/py-ebrains-kg-core/package.py
+++ b/packages/py-ebrains-kg-core/package.py
@@ -15,6 +15,7 @@ class PyEbrainsKgCore(PythonPackage):
 
     maintainers = ["ioannistsanaktsidis", "olinux"]
 
+    version('0.9.15', sha256='c672815ebcd6968f090620f68d85f0fbf282a83636c3a1845b078ef5ac5a06be')
     version('0.9.14', sha256='e898761abb999b09e5da49b25d13ffcadebaec7acd87ed079abe23f3bb12a5e7')
     version('0.9.13', sha256='25e155e9eb6c516dd33e29d9ff433c996630989a0f017c5920b66fe5334f2d82')
     version('0.9.12', sha256='244e52dffaec425bf65cf2d3d697969ec9036aaa028bf47fdddfb4911282f484')
diff --git a/packages/py-errr/package.py b/packages/py-errr/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..1c699d0cbcce9a8c502669c85095f793af0363f5
--- /dev/null
+++ b/packages/py-errr/package.py
@@ -0,0 +1,19 @@
+# Copyright 2013-2023 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 PyErrr(PythonPackage):
+    """Elegant Python exception factories"""
+
+    homepage = "https://github.com/Helveg/errr"
+    pypi = "errr/errr-1.2.0.tar.gz"
+
+    maintainers = ["helveg"]
+
+    version("1.2.0", sha256="2824b83edbd1f61d354c60e36400b2e31ab83e2094acb837b86686892b866e76")
+
+    depends_on("py-setuptools", type="build")
diff --git a/packages/py-hbp-neuromorphic-platform/package.py b/packages/py-hbp-neuromorphic-platform/package.py
index ef2ce85f842e01bd7da2291f93564570dff853ea..f68b345fd2f732f1809985b730f46533053a65d3 100644
--- a/packages/py-hbp-neuromorphic-platform/package.py
+++ b/packages/py-hbp-neuromorphic-platform/package.py
@@ -17,6 +17,7 @@ class PyHbpNeuromorphicPlatform(PythonPackage):
 
     maintainers = ['apdavison']
 
+    version('0.10.2', sha256='3e29175636385f2f561b8095e6225edc41be7f05c6a21232872ef662e6b7ce56')
     version('0.10.1', sha256='76b3acdbc63c901d158bad6d74e26f8a4ad7b10a261c1d51f1e9bf482766bae7')
     
     depends_on('python@3.5:')
diff --git a/packages/py-libsonata/package.py b/packages/py-libsonata/package.py
index 7478f1d63e166e3e63795f427da0b5a8641b8b55..ed0644c33bb131b431d9cf0aaa833a975d278d6f 100644
--- a/packages/py-libsonata/package.py
+++ b/packages/py-libsonata/package.py
@@ -18,6 +18,7 @@ class PyLibsonata(PythonPackage):
     submodules = True
 
     version("develop", branch="master", get_full_repo=True)
+    version("0.1.23", sha256="815aac5bdaa5d025b5f3558ac4d3acb9ebcb070594109af4c0844f47ec701c1d")
     version("0.1.22", sha256="4adbb32ed2fac5d3c74bde03a5e2adb319724d324318a2a7dc2ef3c30f817b2c")
     version("0.1.21", sha256="5b280d82cb21a745d9cdb736c00446e0209494c21d2d17a2c878fabf23a08b68")
     version("0.1.20", sha256="f2e63a26dcf045bb7424e236e12f9b9ef8c46c356e953d26555f313f5763651e")
diff --git a/packages/py-morph-tool/package.py b/packages/py-morph-tool/package.py
index f639ba217f767de0cd13367ae8b69825080652fa..dbe42d14c6490c7328e7b8ac5bf90b067bd33671 100644
--- a/packages/py-morph-tool/package.py
+++ b/packages/py-morph-tool/package.py
@@ -13,11 +13,14 @@ class PyMorphTool(PythonPackage):
 
     homepage = "https://github.com/BlueBrain/morph-tool"
     git = "https://github.com/BlueBrain/morph-tool.git"
-    pypi = "morph-tool/morph-tool-2.4.1.tar.gz"
+    pypi = "morph-tool/morph-tool-2.9.1.tar.gz"
 
     version("develop", branch="master")
+    version("2.9.1", sha256="305e9456c8047726588b23dfa070eb95ccbe5573e9fea3e0a83dc93eacdf61dc")
     version("2.9.0", sha256="c60d4010e17ddcc3f53c864c374fffee05713c8f8fd2ba4eed7706041ce1fa47")
 
+    variant("neuron", default=False, description="Enable additional neuron support")
+
     depends_on("py-setuptools", type=("build", "run"))
 
     depends_on("py-click@6.7:", type=("build", "run"))
@@ -28,9 +31,10 @@ class PyMorphTool(PythonPackage):
     depends_on("py-xmltodict@0.12:", type=("build", "run"))
 
     depends_on("py-plotly@4.1:", type=("build", "run"))
-    depends_on("py-dask+bag@2.19:", type=("build", "run"))
+    depends_on("py-dask@2.19:", type=("build", "run"))
     depends_on("neuron+python@7.8:", type=("build", "run"))
-    depends_on("py-bluepyopt@1.9.37:", type=("build", "run"))
+    depends_on("py-bluepyopt@1.9.37:", type=("build", "run"), when="+neuron")
 
     depends_on("py-neurom@3.0:3.999,develop", type=("build", "run"))
-    depends_on("py-morphio@3.0:3.999,develop", type=("build", "run"))
+    depends_on("py-morphio@3.3.6:3,develop", type=("build", "run"), when="@2.9.1:")
+    depends_on("py-morphio@3.0:3,develop", type=("build", "run"), when="@2.9.0")
diff --git a/packages/py-morphio/package.py b/packages/py-morphio/package.py
index 5a08dfe86cd4d14b5fa96af724ea937da59bcbea..f1c6141484b924bacbee3c263351171efd044a49 100644
--- a/packages/py-morphio/package.py
+++ b/packages/py-morphio/package.py
@@ -18,6 +18,7 @@ class PyMorphio(PythonPackage):
     version("develop", branch="master", submodules=True)
     version("unifurcation", branch="unifurcation", submodules=True)
 
+    version("3.3.6", sha256="0f2e55470d92a3d89f2141ae905ee104fd16257b93dafb90682d90171de2f4e6")
     version("3.3.5", sha256="9e6cfebaea32080131b2b08a4a32dfbe92b18427a3e557861e27c4131f7542ac")
     version("3.3.4", sha256="b70c6884e9b835560501f798c75c9cc7eaf3162cba1d930b5a9b854bb9ea60dc")
     version("3.3.3", sha256="f6d91970cfd734b2e5fb8f9239a0bfa00519fe082dd8e403e4cc204dbdf0a9fa")
diff --git a/packages/py-nestml/package.py b/packages/py-nestml/package.py
index 48dc4f845c1004260c345083a75194b1e97d94b3..7e3329d55ce4e0f73848a1b3d955cb1381d3f16a 100644
--- a/packages/py-nestml/package.py
+++ b/packages/py-nestml/package.py
@@ -18,6 +18,7 @@ class PyNestml(PythonPackage):
 
     maintainers = ['clinssen', 'pnbabu', 'jougs']
 
+    version('5.3.0', sha256='8de543d7d3a166cd4d6a0d536a2d4e769513bbf8d7aeaf64458e9d9c21fe546e', expand=False)
     version('5.2.0', sha256='acb703bf9c7f70304bd5d547dccd6a6a219f8acb298a6412df779b808241eb14', expand=False)
 
     depends_on('python@3.8:', type=('build', 'run'))
diff --git a/packages/py-neuror/package.py b/packages/py-neuror/package.py
index b9273ee334a89cc84c867a93a420a377100da4f8..d84d202d063b5189676bf3d5159b048d32e07b1e 100644
--- a/packages/py-neuror/package.py
+++ b/packages/py-neuror/package.py
@@ -5,6 +5,7 @@
 #
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 
+
 from spack.package import *
 
 
@@ -16,17 +17,18 @@ class PyNeuror(PythonPackage):
     pypi = "neuror/NeuroR-1.2.3.tar.gz"
 
     version("develop", branch="master")
-    version("1.4.2", sha256="f5e18ebddf59a60ce650c24eb49042057cf97990d63aee3ceb58b7acff823255")
+    version("1.6.4", sha256="a65c0e1814c38326a344f03c1f5f92ab4db721c5541888b2acb9ffc5a7adac50")
 
     depends_on("py-setuptools", type=("build", "run"))
 
     depends_on("py-click@6.7:", type=("build", "run"))
+    depends_on("py-jsonschema", type=("build", "run"))
     depends_on("py-matplotlib@2.2.3:", type=("build", "run"))
     depends_on("py-morph-tool@2.9.0:2.999", type=("build", "run"))
-    depends_on("py-morphio@3.0:3.999", type=("build", "run"))
-    depends_on("py-neurom@3.0:3.999", type=("build", "run"))
+    depends_on("py-morphio@3.0.0:3.999", type=("build", "run"))
+    depends_on("py-neurom@3.0.1:3.999", type=("build", "run"))
     depends_on("py-numpy@1.19.2:", type=("build", "run"))
-    depends_on("py-nptyping@1.3.0:", type=("build", "run"))
+    depends_on("py-nptyping@2:", type=("build", "run"))
     depends_on("py-pandas@0.24.2:", type=("build", "run"))
     depends_on("py-pyquaternion@0.9.2:", type=("build", "run"))
     depends_on("py-scipy@1.2.0:", type=("build", "run"))
diff --git a/packages/py-pynrrd/package.py b/packages/py-pynrrd/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..99093c34d46e6e8a116842e9db56449cfe0238fe
--- /dev/null
+++ b/packages/py-pynrrd/package.py
@@ -0,0 +1,21 @@
+# Copyright 2013-2023 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 PyPynrrd(PythonPackage):
+    """Python library for reading and writing NRRD files into and from numpy arrays"""
+
+    homepage = "https://github.com/mhe/pynrrd"
+    pypi = "pynrrd/pynrrd-0.4.0.tar.gz"
+
+    version("1.0.0", sha256="4eb4caba03fbca1b832114515e748336cb67bce70c7f3ae36bfa2e135fc990d2")
+
+    depends_on("py-setuptools", type="build")
+    depends_on("py-numpy@1.11.1:", type=("build", "run"))
+    depends_on("py-nptyping", type=("build", "run"))
+    depends_on("py-typing-extensions", type=("build", "run"))
+
diff --git a/packages/py-ray/package.py b/packages/py-ray/package.py
index d17b5557ec416d5c6bacbba99e2f76cc80008c85..c687d7eef4d8bc9379de9f63218967b1db4118f8 100644
--- a/packages/py-ray/package.py
+++ b/packages/py-ray/package.py
@@ -46,6 +46,11 @@ class PyRay(PythonPackage):
     depends_on("py-typing-extensions", when="@2.0.1 ^python@:3.7", type=("build", "run"))
     depends_on("py-virtualenv", when="@2.0.1", type=("build", "run"))
 
+    # needed to fix import errors
+    depends_on("py-setproctitle", type=("build", "run"))
+    depends_on("py-colorama", type=("build", "run"))
+    depends_on("py-psutil", type=("build", "run"))
+
     with when("+default"):
         depends_on("py-aiohttp@3.7:", type=("build", "run"))
         depends_on("py-aiohttp-cors", type=("build", "run"))
diff --git a/packages/py-siibra/package.py b/packages/py-siibra/package.py
index a64b177390a7170a7c6057c0a45dda3becc684ff..b68c20d488289196052ade9fd8ed56b0f4e84a65 100644
--- a/packages/py-siibra/package.py
+++ b/packages/py-siibra/package.py
@@ -9,6 +9,13 @@ class PySiibra(PythonPackage):
 
     maintainers = ['x.gui@fz-juelich.de', 's.koehnen@fz-juelich.de', 't.dickscheid@fz-juelich.de']
 
+    version("0.4a66", sha256="75bd925159d2c4bc904b97824ab8d48a4162f07c11ae0ee4d358427bd3badccb")
+    version("0.4a64", sha256="651f3382c7e3407261ca71921614e3bf64f3205c1b7072ce0bb482d65fa73be3")
+    version("0.4a63", sha256="225c2cbf98ec57bee4063176f868a2a10ab153ac917e162843d8a26a38ba78b4")
+    version("0.4a62", sha256="4ff6f36e7bd12878d71c148cdf50ac3434c50248abe61d610cb01adad129eb52")
+    version("0.4a61", sha256="9ebb3402a4789935c3f75e7a812d8d2500c183187d4ae99cac9b554f4dbe84f3")
+    version("0.4a59", sha256="e878b424dfece6c379146674c2fe0875ec290811aa6a8323ef1404d25c0a9010")
+    version("0.4a58", sha256="f24660f094932628f088ef3f9575b196fd360bd74a1e1c8e2627d985ed35e210")
     version("0.4a57", sha256="53983c4baab84abe5dd6928c320ce87433cab02b5ed992995f0a17661c93dbff")
     version("0.4a56", sha256="4c03d8a94c73a233e216103fa7090d057db03b1806027fabde38e8f83b852d78")
     version("0.4a54", sha256="114765afe906383c7e6b930f1df7e26ddc15a6f295e2eab83a861eaba6d8f57f")
diff --git a/packages/r-rgsl/package.py b/packages/r-rgsl/package.py
index cd5549867a3afaae2c23eca25772c6a2d344f6e3..d7796805ea3fc29606fb33805b450d4d9efb31d7 100644
--- a/packages/r-rgsl/package.py
+++ b/packages/r-rgsl/package.py
@@ -15,7 +15,8 @@ class RRgsl(RPackage):
 
     maintainers = ["akramer", "oliviaeriksson"]
 
-    version("0.1", sha256="dd6a14dda8731f4cf32149c8a9842e4e2ba424c8404f4d6839108153b20e4c3e")
+    version("0.1.1", sha256="a2d8fdbbb6c4f9937d6abaa56d912418b42931ae67067357e9bf5a032cc1a833")
+    version("0.1",   sha256="dd6a14dda8731f4cf32149c8a9842e4e2ba424c8404f4d6839108153b20e4c3e")
 
     # GNU Scientific Library: https://www.gnu.org/software/gsl
     # spack: https://spack.readthedocs.io/en/latest/package_list.html#gsl
diff --git a/packages/simpletraj/package.py b/packages/simpletraj/package.py
index 54d1ec72c94c3b0ecf44316b0fed272141ff5abd..d49811474a736557f3c4b7ff961c5553325fe36b 100644
--- a/packages/simpletraj/package.py
+++ b/packages/simpletraj/package.py
@@ -6,12 +6,14 @@ class Simpletraj(PythonPackage):
     # Homepage and download url
     homepage = "https://github.com/arose/simpletraj"
     git = 'https://github.com/arose/simpletraj.git'
+    url = 'https://github.com/arose/simpletraj/archive/refs/tags/v0.3.tar.gz'
 
     # Set the gitlab accounts of this package maintainers
     maintainers = ['dbeltran']
 
     # Versions
-    version('0.3', branch='master')
+    version('master', branch='master')
+    version('0.3', sha256='9ee9b5f3e387f8f8eb74b11f5c5d60bab6f601d190b40e38a7b31afddc3574d0')
 
     # Dependencies
     depends_on('python@3.8:', type=('build', 'run'))
diff --git a/packages/wf-protein-association-rates/package.py b/packages/wf-protein-association-rates/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..a6a708839cab1fc2862ed788431cc996686002b9
--- /dev/null
+++ b/packages/wf-protein-association-rates/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+
+class WfProteinAssociationRates(BundlePackage):
+    """Meta-package to collect all dependencies for the "Molecular Tools: protein
+    association rates and binding sites" demos/workflows."""
+
+    homepage="https://wiki.ebrains.eu/bin/view/Collabs/computation-of-protein-association-rates/"
+
+    maintainers = ['thielblz', 'richtesn']
+
+    version("0.1")
+
+    depends_on("apbs")
+    depends_on("py-pdb2pqr")
diff --git a/spack.yaml b/spack.yaml
index 3a3ab1aa20e992670e2de2ff6b1d7719ee1a6e8c..4f60b56f167c129c368de90b05d7b2ad27d59604 100644
--- a/spack.yaml
+++ b/spack.yaml
@@ -14,35 +14,36 @@ spack:
     - biobb-structure-checking@3.12.1
     - biobb-structure-utils@4.0.0
     - hxtorch@7.0-rc1
-    - nest@3.6_rc1 +sonata
+    - nest@3.6-rc2 +sonata
     - neuron@8.2.3 +mpi
     - py-bluepyefe@2.2.18
     - py-bluepymm@0.7.65
     - py-bluepyopt@1.13.86
+    - py-bsb@4.0.0a57
     - py-ebrains-drive@0.5.1
-    - py-ebrains-kg-core@0.9.14
+    - py-ebrains-kg-core@0.9.15
     - py-efel@4.0.4
     - py-elephant@0.13.0
     - py-fairgraph@0.11.1
     - py-frites@0.4.4
     - py-hbp-archive@1.1.1
-    - py-hbp-neuromorphic-platform@0.10.1
+    - py-hbp-neuromorphic-platform@0.10.2
     - py-hbp-validation-client@0.8.2
     - py-hippounit@1.3.6
     - py-lfpy@2.3
     - py-lfpykit@0.5.1
-    - py-libsonata@0.1.22
+    - py-libsonata@0.1.23
     - py-neo@0.12.0
-    - py-nestml@5.2.0
+    - py-nestml@5.3.0
     - py-netpyne@1.0.5
     - py-neurom@3.2.2
-    - py-neuror@1.4.2
+    - py-neuror@1.6.4
     - py-pdb2pqr@3.5.2
     - py-pynn@0.11.0 +mpi
     - py-pyunicore@0.15.0
     - py-quantities-scidash@0.12.4.3
     - py-quantities@0.14.1
-    - py-siibra@0.4a57
+    - py-siibra@0.4a66
     - py-snudda@1.4.71
     - py-spynnaker@7.0.0
     - py-tvb-contrib@2.8.2
@@ -54,13 +55,14 @@ spack:
     - py-tvb-storage@2.8.1
     - py-viziphant@0.3.0
     - pynn-brainscales@7.0-rc1
-    - r-rgsl@0.1
+    - 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
+    - wf-protein-association-rates@0.1
     - wf-multi-area-model@v1.1.0
     - wf-uq-akar4@0.1
     #- py-cerebstats