diff --git a/packages/build-brainscales/package.py b/packages/build-brainscales/package.py
index 4fc13e349aa7e27945cf41898cf10f7eb084ce42..a919b94921988b4b76bfe16b3cdeef0c47a8c5fb 100644
--- a/packages/build-brainscales/package.py
+++ b/packages/build-brainscales/package.py
@@ -18,9 +18,6 @@ class BuildBrainscales(WafPackage):
     depends_on('git', type=('build', 'link'))
     depends_on('py-git-review', type=('build', 'link'))
 
-    # hack to provide genpybind PATH in all brainscales-style builds
-    depends_on('genpybind@ebrains', type=('build', 'link'))
-
     def do_fetch(self, mirror_only=False):
         """Setup the project."""
 
diff --git a/packages/hxtorch/package.py b/packages/hxtorch/package.py
index 4e4652dc0476168af5e98c4a3697585ae8dd9a94..e8c3bbaec65c8d690a2501b114a39e88fab722ac 100644
--- a/packages/hxtorch/package.py
+++ b/packages/hxtorch/package.py
@@ -30,49 +30,55 @@ class Hxtorch(build_brainscales.BuildBrainscales):
     version('7.0-rc1-fixup2', tag='hxtorch-7.0-rc1-fixup2')
     version('7.0-rc1-fixup1', branch='waf')
 
-    # compiler for the BrainScaleS-2 embedded processor ("PPU"); needed for
-    # building/linking, at runtime and for testing
-    depends_on('oppulance@8.0-a3', when='@8.0-a3', type=('build', 'link', 'run', 'test'))
-    depends_on('oppulance@8.0-a2', when='@8.0-a2', type=('build', 'link', 'run', 'test'))
-    depends_on('oppulance@8.0-a1', when='@8.0-a1', type=('build', 'link', 'run', 'test'))
-    depends_on('oppulance@7.0-rc1-fixup3', when='@7.0-rc1-fixup3', type=('build', 'link', 'run', 'test'))
-    depends_on('oppulance@7.0-rc1-fixup2', when='@7.0-rc1-fixup2', type=('build', 'link', 'run', 'test'))
-    depends_on('oppulance@7.0-rc1-fixup1', when='@7.0-rc1-fixup1', type=('build', 'link', 'run', 'test'))
+    deps_hxtorch_core = [
+        # compiler for the BrainScaleS-2 embedded processor ("PPU"); needed for
+        # building/linking, at runtime and for testing
+        ('oppulance@8.0-a3', { "when":'@8.0-a3', "type": ('build', 'link', 'run', 'test') } ),
+        ('oppulance@8.0-a2', { "when":'@8.0-a2', "type": ('build', 'link', 'run', 'test') } ),
+        ('oppulance@8.0-a1', { "when":'@8.0-a1', "type": ('build', 'link', 'run', 'test') } ),
+        ('oppulance@7.0-rc1-fixup3', { "when":'@7.0-rc1-fixup3', "type": ('build', 'link', 'run', 'test') } ),
+        ('oppulance@7.0-rc1-fixup2', { "when":'@7.0-rc1-fixup2', "type": ('build', 'link', 'run', 'test') } ),
+        ('oppulance@7.0-rc1-fixup1', { "when":'@7.0-rc1-fixup1', "type": ('build', 'link', 'run', 'test') } ),
+
+        # host software dependencies
+        ('bitsery', { "type": ('build', 'link', 'run', 'test') } ),
+        ('binutils+gold+ld+plugins', { "type": ('build', 'link', 'run') } ), # specialize
+        ('boost@1.69.0: +graph+icu+mpi+numpy+coroutine+context+filesystem+python+serialization+system+thread+program_options cxxstd=17', { "type": ('build', 'link', 'run', 'test') } ),
+        ('cereal', { "type": ('build', 'link', 'run', 'test') } ),
+        ('cppcheck', { "type": ('build', 'link', 'run') } ),
+        ('genpybind@ebrains', { "type": ('build', 'link') } ),
+        ('gflags', { "type": ('build', 'link', 'run') } ),
+        ('googletest@1.11.0:+gmock', { "type": ('build', 'link', 'run') } ), # variadic templates needed
+        ('inja', { "type": ('build', 'link', 'run', 'test')  } ),# template engine for PPU source jit generation
+        ('intel-tbb', { "type": ('build', 'link', 'run') } ), # ppu gdbserver
+        ('libelf', { "type": ('build', 'link', 'run') } ),
+        ('liblockfile', { "type": ('build', 'link', 'run') } ),
+        ('log4cxx@0.12.1:', { "type": ('build', 'link', 'run') } ),
+        ('pkgconfig', { "type": ('build', 'link', 'run') } ),
+        ('psmisc', { "type": ('run', 'test') } ),
+        ('python@3.7.0:', { "type": ('build', 'link', 'run') } ), # BrainScaleS-2 only supports Python >= 3.7
+        ('py-h5py', { "type": ('build', 'link', 'run') } ), # PyNN tests need it
+        ('py-matplotlib', { "type": ('build', 'link', 'run') } ),
+        ('py-networkx', { "type": ('build', 'link', 'run') } ),
+        ('py-nose', { "type": ('build', 'link', 'run') } ),
+        ('py-numpy', { "type": ('build', 'link', 'run') } ),
+        ('py-pybind11', { "type": ('build', 'link', 'run') } ),
+        ('py-pybind11-stubgen', { "type": ('build', 'link', 'run') } ),
+        ('py-pycodestyle', { "type": ('build', 'link', 'run') } ),
+        ('py-pyelftools', { "type": ('build', 'link', 'run') } ),
+        ('py-pylint', { "type": ('build', 'link', 'run') } ),
+        ('py-torch@1.9.1:', { "type": ('build', 'link', 'run', 'test') } ),
+        ('py-torchvision', { "type": ('run') } ), # for demos
+        ('py-pyyaml', { "type": ('build', 'link', 'run') } ),
+        ('py-scipy', { "type": ('build', 'link', 'run') } ),
+        ('py-sqlalchemy', { "type": ('build', 'link', 'run') } ),
+        ('util-linux', { "type": ('build', 'link', 'run') } ),
+        ('yaml-cpp+shared', { "type": ('build', 'link', 'run') } ),
+    ]
+
+    for dep, dep_kw in deps_hxtorch_core:
+        depends_on(dep, **dep_kw)
 
-    # host software dependencies
-    depends_on('bitsery', type=('build', 'link', 'run', 'test'))
-    depends_on('binutils+gold+ld+plugins', type=('build', 'link', 'run')) # specialize
-    depends_on('boost@1.69.0: +graph+icu+mpi+numpy+coroutine+context+filesystem+python+serialization+system+thread+program_options cxxstd=17', type=('build', 'link', 'run', 'test'))
-    depends_on('cereal', type=('build', 'link', 'run', 'test'))
-    depends_on('cppcheck', type=('build', 'link', 'run'))
-    depends_on('genpybind@ebrains', type=('build', 'link'))
-    depends_on('gflags', type=('build', 'link', 'run'))
-    depends_on('googletest@1.11.0:+gmock', type=('build', 'link', 'run')) # variadic templates needed
-    depends_on('inja', type=('build', 'link', 'run', 'test')) # template engine for PPU source jit generation
-    depends_on('intel-tbb', type=('build', 'link', 'run'))  # ppu gdbserver
-    depends_on('libelf', type=('build', 'link', 'run'))
-    depends_on('liblockfile', type=('build', 'link', 'run'))
-    depends_on('log4cxx@0.12.1:', type=('build', 'link', 'run'))
-    depends_on('pkgconfig', type=('build', 'link', 'run'))
-    depends_on('psmisc', type=('run', 'test'))
-    depends_on('python@3.7.0:', type=('build', 'link', 'run')) # BrainScaleS-2 only supports Python >= 3.7
-    depends_on('py-h5py', type=('build', 'link', 'run')) # PyNN tests need it
-    depends_on('py-matplotlib', type=('build', 'link', 'run'))
-    depends_on('py-networkx', type=('build', 'link', 'run'))
-    depends_on('py-nose', type=('build', 'link', 'run'))
-    depends_on('py-numpy', type=('build', 'link', 'run'))
-    depends_on('py-pybind11', type=('build', 'link', 'run'))
-    depends_on('py-pybind11-stubgen', type=('build', 'link', 'run'))
-    depends_on('py-pycodestyle', type=('build', 'link', 'run'))
-    depends_on('py-pyelftools', type=('build', 'link', 'run'))
-    depends_on('py-pylint', type=('build', 'link', 'run'))
-    depends_on('py-torch@1.9.1:', type=('build', 'link', 'run', 'test'))
-    depends_on('py-torchvision', type=('run')) # for demos
-    depends_on('py-pyyaml', type=('build', 'link', 'run'))
-    depends_on('py-scipy', type=('build', 'link', 'run'))
-    depends_on('py-sqlalchemy', type=('build', 'link', 'run'))
-    depends_on('util-linux', type=('build', 'link', 'run'))
-    depends_on('yaml-cpp+shared', type=('build', 'link', 'run'))
     extends('python')
 
     def install_test(self):
diff --git a/packages/jaxsnn/package.py b/packages/jaxsnn/package.py
index cd66a37746f6c30760e1818e278a51e751fc2709..3fe246b417b13f5c949ab08bed70225697d3d486 100644
--- a/packages/jaxsnn/package.py
+++ b/packages/jaxsnn/package.py
@@ -12,7 +12,7 @@ import spack.build_environment
 
 import importlib
 build_brainscales = importlib.import_module("spack.pkg.ebrains-spack-builds.build_brainscales")
-
+hxtorch = importlib.import_module("spack.pkg.ebrains-spack-builds.hxtorch")
 
 class Jaxsnn(build_brainscales.BuildBrainscales):
     """jaxsnn is an event-based approach to machine-learning-inspired training
@@ -29,10 +29,9 @@ class Jaxsnn(build_brainscales.BuildBrainscales):
     version('8.0-a2', tag='jaxsnn-8.0-a2')
     version('8.0-a1', tag='jaxsnn-8.0-a1')
 
-    # for now, this is still "on top" of hxtorch…
-    depends_on('hxtorch@8.0-a3', when='@8.0-a3', type=('build', 'link', 'run', 'test'))
-    depends_on('hxtorch@8.0-a2', when='@8.0-a2', type=('build', 'link', 'run', 'test'))
-    depends_on('hxtorch@8.0-a1', when='@8.0-a1', type=('build', 'link', 'run', 'test'))
+    # dependencies inherited from hxtorch.core
+    for dep, dep_kw in hxtorch.Hxtorch.deps_hxtorch_core:
+        depends_on(dep, **dep_kw)
 
     # main dependencies w/o hxtorch.core dependencies (those come via hxtorch above)
     depends_on('py-jax@0.4.13:', type=('build', 'link', 'run'))