diff --git a/dedal/configuration/SpackConfig.py b/dedal/configuration/SpackConfig.py
index 98a70a412575d3afe95c297f480baabf88740694..bb71f162042077b31f0074c44f0a3fc15177e47f 100644
--- a/dedal/configuration/SpackConfig.py
+++ b/dedal/configuration/SpackConfig.py
@@ -30,12 +30,14 @@ class SpackConfig:
                  concretization_dir: Path = None, buildcache_dir: Path = None, gpg: GpgConfig = None,
                  use_spack_global=False, cache_version_concretize='v1',
                  cache_version_build='v1', view=SpackViewEnum.VIEW, override_cache=True, bashrc_path=os.path.expanduser("~/.bashrc"),
-                 spack_cache_storage_type: SpackCacheStorageEnum = SpackCacheStorageEnum.OCI):
+                 spack_cache_storage_type: SpackCacheStorageEnum = SpackCacheStorageEnum.OCI,
+                 spack_dir: Path = None):
         self.env = env
         if repos is None:
             self.repos = []
         else:
             self.repos = repos
+        self.spack_dir = spack_dir
         self.upstream_instance = upstream_instance
         self.system_name = system_name
         self.concretization_dir = concretization_dir if concretization_dir is None else resolve_path(concretization_dir)
diff --git a/dedal/spack_factory/SpackOperation.py b/dedal/spack_factory/SpackOperation.py
index b112ed285e3f72313a6d0eda2835f3e2ff24b94e..0337fb8298de6a52feca325567a731815f8d87b5 100644
--- a/dedal/spack_factory/SpackOperation.py
+++ b/dedal/spack_factory/SpackOperation.py
@@ -20,8 +20,7 @@ import subprocess
 from pathlib import Path
 from dedal.configuration.SpackConfig import SpackConfig
 from dedal.enum.SpackConfigCommand import SpackConfigCommand
-from dedal.error_handling.exceptions import SpackInstallPackagesException, SpackConcertizeException, SpackGpgException, \
-    SpackReindexException
+from dedal.error_handling.exceptions import SpackInstallPackagesException, SpackConcertizeException
 from dedal.logger.logger_builder import get_logger
 from dedal.spack_factory.SpackCacheOperation import SpackCacheOperation
 from dedal.spack_factory.SpackEnvOperation import SpackEnvOperation
@@ -50,9 +49,10 @@ class SpackOperation:
         self.logger = logger
         self.spack_config.install_dir = spack_config.install_dir
         os.makedirs(self.spack_config.install_dir, exist_ok=True)
-        self.spack_dir = self.spack_config.install_dir / 'spack'
+        if self.spack_config.spack_dir is None:
+            self.spack_config.spack_dir = self.spack_config.install_dir / 'spack'
         self.env_path = None
-        self.spack_setup_script = "" if self.spack_config.use_spack_global else f"source {self.spack_dir / 'share' / 'spack' / 'setup-env.sh'}"
+        self.spack_setup_script = "" if self.spack_config.use_spack_global else f"source {self.spack_config.spack_dir / 'share' / 'spack' / 'setup-env.sh'}"
         self.spack_config.concretization_dir = spack_config.concretization_dir
         if self.spack_config.concretization_dir:
             os.makedirs(self.spack_config.concretization_dir, exist_ok=True)
@@ -71,7 +71,7 @@ class SpackOperation:
             self.spack_config.env.path.mkdir(parents=True, exist_ok=True)
         self.spack_tool_operation = SpackToolOperation(spack_config=spack_config,
                                                        spack_setup_script=self.spack_setup_script,
-                                                       spack_dir=self.spack_dir)
+                                                       spack_dir=self.spack_config.spack_dir)
         self.spack_env_operation = SpackEnvOperation(spack_config=spack_config,
                                                      spack_setup_script=self.spack_setup_script,
                                                      env_path=self.env_path,
@@ -79,7 +79,7 @@ class SpackOperation:
         self.spack_cache_operation = SpackCacheOperation(spack_config=spack_config,
                                                          spack_setup_script=self.spack_setup_script,
                                                          spack_command_on_env=self.spack_command_on_env,
-                                                         spack_dir=self.spack_dir)
+                                                         spack_dir=self.spack_config.spack_dir)
 
     def setup_spack_env(self):
         """
@@ -89,14 +89,14 @@ class SpackOperation:
             set_bashrc_variable('SYSTEMNAME', self.spack_config.system_name, self.spack_config.bashrc_path,
                                 logger=self.logger)
             os.environ['SYSTEMNAME'] = self.spack_config.system_name
-        if self.spack_dir.exists() and self.spack_dir.is_dir():
-            set_bashrc_variable('SPACK_USER_CACHE_PATH', str(self.spack_dir / ".spack"), self.spack_config.bashrc_path,
+        if self.spack_config.spack_dir.exists() and self.spack_config.spack_dir.is_dir():
+            set_bashrc_variable('SPACK_USER_CACHE_PATH', str(self.spack_config.spack_dir / ".spack"), self.spack_config.bashrc_path,
                                 logger=self.logger)
-            set_bashrc_variable('SPACK_USER_CONFIG_PATH', str(self.spack_dir / ".spack"), self.spack_config.bashrc_path,
+            set_bashrc_variable('SPACK_USER_CONFIG_PATH', str(self.spack_config.spack_dir / ".spack"), self.spack_config.bashrc_path,
                                 logger=self.logger)
             self.logger.debug('Added env variables SPACK_USER_CACHE_PATH and SPACK_USER_CONFIG_PATH')
         else:
-            self.logger.error(f'Invalid installation path: {self.spack_dir}')
+            self.logger.error(f'Invalid installation path: {self.spack_config.spack_dir}')
         # Restart the bash after adding environment variables
         if self.spack_config.env:
             self.spack_env_operation.setup_spack_environment()