diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index beb4aa328fff9504acedf655e1647b810ad0d118..449c20c87486ed7f9cc32e76ae3163db1a9b0bfa 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,12 +1,21 @@
 image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:$JUGGLER_TAG
 
 default:
+  before_script:
+    - source .local/bin/env.sh
   artifacts:
     expire_in: 3 days
     paths:
-      - results/
+      - .local/detector
+      - .local/lib
+      - .local/bin
+      - .local/include
+      - .local/share
+      - results
+      - config
 
 stages:
+  - config
   - initialize
   - run
   - benchmarks1
@@ -15,30 +24,22 @@ stages:
   - collect
   - finish
 
-detector:
+common:setup:
+  stage: config
+  before_script:
+    - git clone https://eicweb.phy.anl.gov/EIC/benchmarks/common_bench.git setup 
+  script:
+    - source setup/bin/env.sh && ./setup/bin/install_common.sh
+
+common:detector:
   stage: initialize
-  needs: []
-  timeout: 1 hours
-  cache:
-    key:
-      files:
-        - config/env.sh
-        - util/build_detector.sh
-      prefix: "$CI_COMMIT_REF_SLUG"
-    paths:
-      - .local/detector
-      - .local/lib
-  artifacts:
-    paths:
-      - .local/detector
-      - .local/lib
-      - results
-      - config
+  needs: ["common:setup"]
   script:
-    - ./util/print_env.sh
-    - ./util/build_detector.sh
+    - source .local/bin/env.sh && build_detector.sh
+    - mkdir_local_data_link sim_output
     - mkdir -p results
     - mkdir -p config
+    - print_env.sh
 
 include: 
   - local: 'benchmarks/ecal/config.yml'
@@ -49,7 +50,7 @@ include:
 
 final_report:
   stage: finish
-  needs: ["ecal_1_emcal_crystal_electrons", "tracking_central_electrons"]
+  needs: ["ecal_1_emcal_crystal_electrons", "tracking_central_electrons","clustering:results"]
   script:
     - mkdir -p results/views && cd results/views && bash ../../bin/download_views
     - echo "It was a success!"
diff --git a/benchmarks/clustering/config.yml b/benchmarks/clustering/config.yml
index f4223df743f5ba3180fe9f960d0b7a0a492e9146..70e88ca42260c582faa0d836d0611c39e06dd506 100644
--- a/benchmarks/clustering/config.yml
+++ b/benchmarks/clustering/config.yml
@@ -1,11 +1,7 @@
 clustering:process :
   stage: process
   timeout: 8 hour
-  needs: ["detector"]
-  artifacts:
-    expire_in: 20 weeks
-    paths:
-      - results/
+  needs: ["common:detector"]
   script:
     - bash benchmarks/clustering/barrel_clusters.sh
 
@@ -15,8 +11,4 @@ clustering:results:
   script:
     - ls -lrth
       #- python dvcs/scripts/merge_results.py
-  artifacts:
-    paths:
-      - results
-        #  reports:
 
diff --git a/benchmarks/ecal/config.yml b/benchmarks/ecal/config.yml
index 814f77c70b99a68203626a8144c7e3a29d6df0c3..f4171a0c565630ad2c2902c60e48f1054fc05bed 100644
--- a/benchmarks/ecal/config.yml
+++ b/benchmarks/ecal/config.yml
@@ -1,7 +1,7 @@
 ecal_1_emcal_crystal_electrons:
   image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:$JUGGLER_TAG
   stage: process
-  needs: ["detector"]
+  needs: ["common:detector"]
   timeout: 8 hours
   artifacts:
     expire_in: 20 weeks
@@ -12,7 +12,7 @@ ecal_1_emcal_crystal_electrons:
 
 ecal_2_emcal_crystal_pi0s:
   image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:$JUGGLER_TAG
-  needs: ["detector"]
+  needs: ["common:detector"]
   timeout: 12 hours
   artifacts:
     expire_in: 20 weeks
@@ -24,7 +24,7 @@ ecal_2_emcal_crystal_pi0s:
 
 ecal_3_emcal_barrel_electrons:
   image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:$JUGGLER_TAG
-  needs: ["detector"]
+  needs: ["common:detector"]
   timeout: 48 hours
   artifacts:
     expire_in: 20 weeks
@@ -36,7 +36,7 @@ ecal_3_emcal_barrel_electrons:
 
 ecal_4_emcal_barrel_pions:
   image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:$JUGGLER_TAG
-  needs: ["detector"]
+  needs: ["common:detector"]
   timeout: 48 hours
   artifacts:
     expire_in: 20 weeks
@@ -49,7 +49,7 @@ ecal_4_emcal_barrel_pions:
 ## Not fully yet...
 full_emcal_barrel_electrons:
   image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:$JUGGLER_TAG
-  needs: ["detector"]
+  needs: ["common:detector"]
   timeout: 48 hours
   artifacts:
     expire_in: 20 weeks
diff --git a/benchmarks/ecal/emcal_electrons.sh b/benchmarks/ecal/emcal_electrons.sh
index 717b68b56241c2e52da60bb2658b435d5b688d83..de2e3bbc7e7d071766447d296af96864e06373b2 100644
--- a/benchmarks/ecal/emcal_electrons.sh
+++ b/benchmarks/ecal/emcal_electrons.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-./util/print_env.sh
+print_env.sh
 
 ## To run the reconstruction, we need the following global variables:
 ## - JUGGLER_INSTALL_PREFIX:   Install prefix for Juggler (simu/recon)
diff --git a/benchmarks/ecal/emcal_pi0s.sh b/benchmarks/ecal/emcal_pi0s.sh
index 6dac4a0d4c1048abb8aa8620db59d7ea50a4d743..fd09b8d823df3f790e6cab6c3943565c23f2c7cd 100644
--- a/benchmarks/ecal/emcal_pi0s.sh
+++ b/benchmarks/ecal/emcal_pi0s.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # Based on emcal_electrons.sh script
 
-./util/print_env.sh
+print_env.sh
 
 ## To run the reconstruction, we need the following global variables:
 ## - JUGGLER_INSTALL_PREFIX:   Install prefix for Juggler (simu/recon)
@@ -9,10 +9,8 @@
 ## - JUGGLER_DETECTOR_VERSION: the detector package we want to use for this benchmark
 ## - DETECTOR_PATH:            full path to the detector definitions
 ##
-## You can ready options/env.sh for more in-depth explanations of the variables
+## You can read .local/bin/env.sh for more in-depth explanations of the variables
 ## and how they can be controlled.
-source options/env.sh
-export JUGGLER_DETECTOR_PATH=${DETECTOR_PATH}
 
 if [[ ! -n  "${JUGGLER_N_EVENTS}" ]] ; then 
   export JUGGLER_N_EVENTS=100
@@ -42,10 +40,10 @@ fi
 
 echo "CHECK POINT FOR GEANT4 SIMULATION"
 
-echo "JUGGLER_N_EVENTS = ${JUGGLER_N_EVENTS}"
-echo "JUGGLER_DETECTOR = ${JUGGLER_DETECTOR}"
+echo "JUGGLER_N_EVENTS      = ${JUGGLER_N_EVENTS}"
+echo "JUGGLER_DETECTOR      = ${JUGGLER_DETECTOR}"
 echo "JUGGLER_FILE_NAME_TAG = ${JUGGLER_FILE_NAME_TAG}"
-echo "JUGGLER_SIM_FILE = ${JUGGLER_SIM_FILE}"
+echo "JUGGLER_SIM_FILE      = ${JUGGLER_SIM_FILE}"
 # run geant4 simulations
 npsim --runType batch \
       --part.minimalKineticEnergy 1000*GeV  \
diff --git a/benchmarks/ecal/full_emcal_electrons.sh b/benchmarks/ecal/full_emcal_electrons.sh
index 68ad868808adca255e1dfd154c3fa44a8d5b2726..e30364abf6ab762d37104a45f35f673aa828368b 100644
--- a/benchmarks/ecal/full_emcal_electrons.sh
+++ b/benchmarks/ecal/full_emcal_electrons.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-./util/print_env.sh
+print_env.sh
 
 ## To run the reconstruction, we need the following global variables:
 ## - JUGGLER_INSTALL_PREFIX:   Install prefix for Juggler (simu/recon)
diff --git a/benchmarks/ecal/options/crystal_calorimeter_reco.py b/benchmarks/ecal/options/crystal_calorimeter_reco.py
index 218ccc8479b563dbbd0ebd5445f751fe39ae225d..7892b0fb5c30b8f3bb7ba6dbde026addab030af7 100644
--- a/benchmarks/ecal/options/crystal_calorimeter_reco.py
+++ b/benchmarks/ecal/options/crystal_calorimeter_reco.py
@@ -9,8 +9,9 @@ detector_name = "topside"
 if "JUGGLER_DETECTOR" in os.environ :
   detector_name = str(os.environ["JUGGLER_DETECTOR"])
 
-if "JUGGLER_DETECTOR_PATH" in os.environ :
-  detector_name = str(os.environ["JUGGLER_DETECTOR_PATH"])+"/"+detector_name 
+detector_path = "topside"
+if "DETECTOR_PATH" in os.environ :
+  detector_path = str(os.environ["DETECTOR_PATH"]) 
 
 # todo add checks
 input_sim_file = "jug_input.root"
@@ -30,7 +31,7 @@ n_events = 100
 if "JUGGLER_N_EVENTS" in os.environ :
   n_events = str(os.environ["JUGGLER_N_EVENTS"])
 
-geo_service  = GeoSvc("GeoSvc", detectors=["{}.xml".format(detector_name)])
+geo_service  = GeoSvc("GeoSvc", detectors=["{}/{}.xml".format(detector_path,detector_name)])
 podioevent   = EICDataSvc("EventDataSvc", inputs=[input_sim_file], OutputLevel=DEBUG)
 
 from Configurables import PodioInput
diff --git a/benchmarks/ecal/run_emcal_barrel_electrons.sh b/benchmarks/ecal/run_emcal_barrel_electrons.sh
index 95b7e270f522fdd9e248312481a7dbb3acb54ade..c4482b21ed84272a47a00ca95e973f6838a3d564 100755
--- a/benchmarks/ecal/run_emcal_barrel_electrons.sh
+++ b/benchmarks/ecal/run_emcal_barrel_electrons.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-./util/print_env.sh
+print_env.sh
 
 ## To run the reconstruction, we need the following global variables:
 ## - JUGGLER_INSTALL_PREFIX:   Install prefix for Juggler (simu/recon)
diff --git a/benchmarks/ecal/run_emcal_barrel_pions.sh b/benchmarks/ecal/run_emcal_barrel_pions.sh
index 05d3db92f89cdc2c8192132a9592c903ec6ad6c8..da4091333fd1c6c49d9281a5654f0eb82a68d4c4 100755
--- a/benchmarks/ecal/run_emcal_barrel_pions.sh
+++ b/benchmarks/ecal/run_emcal_barrel_pions.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-./util/print_env.sh
+print_env.sh
 
 ## To run the reconstruction, we need the following global variables:
 ## - JUGGLER_INSTALL_PREFIX:   Install prefix for Juggler (simu/recon)
diff --git a/benchmarks/rich/config.yml b/benchmarks/rich/config.yml
index e76e89d0b4b774146f5d31ad49d23cba1e28ce1b..dae1855d8d04b68a3f40530f8eee3519480ad4e5 100644
--- a/benchmarks/rich/config.yml
+++ b/benchmarks/rich/config.yml
@@ -1,6 +1,6 @@
 rich_job_x:
   image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:$JUGGLER_TAG
-  needs: ["detector"]
+  needs: ["common:detector"]
   timeout: 24 hours
   artifacts:
     expire_in: 20 weeks
diff --git a/benchmarks/tracking/config.yml b/benchmarks/tracking/config.yml
index f8abdc0e30f2a0b46e1c44f8868afedeea3ae0b4..0d63dc390a6472c4738fe891e4e8f7dd1c604e28 100644
--- a/benchmarks/tracking/config.yml
+++ b/benchmarks/tracking/config.yml
@@ -1,6 +1,6 @@
 tracking_central_electrons:
   image: eicweb.phy.anl.gov:4567/eic/juggler/juggler:$JUGGLER_TAG
-  needs: ["detector"]
+  needs: ["common:detector"]
   timeout: 24 hours
   artifacts:
     expire_in: 20 weeks
diff --git a/options/env.sh b/options/env.sh
deleted file mode 100755
index c65d9f20e0fae381156d00fc3deae6d7dbed7f92..0000000000000000000000000000000000000000
--- a/options/env.sh
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/bin/bash
-
-## =============================================================================
-## Global configuration variables for the benchmark scripts
-## The script defines the following environment variables that are meant to
-## be overriden by the Gitlab continuous integration (CI)
-##
-##  - JUGGLER_DETECTOR:       detector package to be used for the benchmark
-##  - JUGGLER_N_EVENTS:       #events processed by simulation/reconstruction
-##  - JUGGLER_INSTALL_PREFIX: location where Juggler (digi/recon) is installed
-##  - JUGGLER_N_THREADS:      Number of threads/processes to spawn in parallel
-##  - JUGGLER_RNG_SEED:       Random seed for the RNG
-##
-## It also defines the following additional variables for internal usage
-##  - LOCAL_PREFIX:           prefix for packages installed during the benchmark
-##  - DETECTOR_PREFIX:        prefix for the detector definitions
-##  - DETECTOR_PATH:          actual path with the detector definitions
-##
-## Finally, it makes sure LOCAL_PREFIX and JUGGLER_PREFIX are added to PATH
-## and LD_LIBRARY_PATH
-## =============================================================================
-
-echo "Setting up the Physics Benchmarks environment"
-
-## =============================================================================
-## Default variable definitions, normally these should be set
-## by the CI. In case of local development you may want to change these
-## in case you would like to modify the detector package or
-## number of events to be analyzed during the benchmark
-
-## Detector package to be used during the benchmark process
-if [ ! -n  "${JUGGLER_DETECTOR}" ] ; then 
-  export JUGGLER_DETECTOR="topside"
-fi
-
-if [ ! -n  "${JUGGLER_DETECTOR_VERSION}" ] ; then 
-  export JUGGLER_DETECTOR_VERSION="master"
-fi
-
-
-## Number of events that will be processed by the reconstruction
-if [ ! -n  "${JUGGLER_N_EVENTS}" ] ; then 
-  export JUGGLER_N_EVENTS=100
-fi
-
-## Maximum number of threads or processes a single pipeline should use
-## (this is not enforced, but the different pipeline scripts should use
-##  this to guide the number of parallel processes or threads they 
-##  spawn).
-if [ ! -n "${JUGGLER_N_THREADS}" ]; then
-  export JUGGLER_N_THREADS=10
-fi
-
-## Random seed for event generation, should typically not be changed for
-## reproductability.
-if [ ! -n "${JUGGLER_RNG_SEED}" ]; then
-  export JUGGLER_RNG_SEED=1
-fi
-
-## Install prefix for juggler, needed to locate the Juggler xenv files.
-## Also used by the CI as install prefix for other packages where needed.
-## You should not have to touch this. Note that for local usage a different 
-## prefix structure is automatically used.
-if [ ! -n  "${JUGGLER_INSTALL_PREFIX}" ] ; then 
-  export JUGGLER_INSTALL_PREFIX="/usr/local"
-fi
-## Ensure the juggler prefix is an absolute path
-export JUGGLER_INSTALL_PREFIX=`realpath ${JUGGLER_INSTALL_PREFIX}`
-
-
-## =============================================================================
-## Other utility variables that govern how some of the dependent packages
-## are built and installed. You should not have to change these.
-
-## local prefix to be used for local storage of packages
-## downloaded/installed during the benchmark process
-LOCAL_PREFIX=".local"
-mkdir -p ${LOCAL_PREFIX}
-export LOCAL_PREFIX=`realpath ${LOCAL_PREFIX}`
-
-## detector prefix: prefix for the detector definitions
-export DETECTOR_PREFIX="${LOCAL_PREFIX}/detector"
-mkdir -p ${DETECTOR_PREFIX}
-
-## detector path: actual detector definition path
-export DETECTOR_PATH="${DETECTOR_PREFIX}/${JUGGLER_DETECTOR}"
-
-## build dir for ROOT to put its binaries etc.
-export ROOT_BUILD_DIR=$LOCAL_PREFIX/root_build
-
-echo "JUGGLER_DETECTOR:           ${JUGGLER_DETECTOR}"
-echo "JUGGLER_DETECTOR_VERSION:   ${JUGGLER_DETECTOR_VERSION}"
-echo "JUGGLER_N_EVENTS:           ${JUGGLER_N_EVENTS}"
-echo "JUGGLER_N_THREADS:          ${JUGGLER_N_THREADS}"
-echo "JUGGLER_RNG_SEED:           ${JUGGLER_RNG_SEED}"
-echo "JUGGLER_INSTALL_PREFIX:     ${JUGGLER_INSTALL_PREFIX}"
-echo "LOCAL_PREFIX:               ${LOCAL_PREFIX}"
-echo "DETECTOR_PREFIX:            ${DETECTOR_PREFIX}"
-echo "DETECTOR_PATH:              ${DETECTOR_PATH}"
-echo "ROOT_BUILD_DIR:             ${ROOT_BUILD_DIR}"
-
-## =============================================================================
-## Setup PATH and LD_LIBRARY_PATH to include our prefixes
-echo "Adding JUGGLER_INSTALL_PREFIX and LOCAL_PREFIX to PATH and LD_LIBRARY_PATH"
-export PATH=${JUGGLER_INSTALL_PREFIX}/bin:${LOCAL_PREFIX}/bin:${PATH}
-export LD_LIBRARY_PATH=${JUGGLER_INSTALL_PREFIX}/lib:${LOCAL_PREFIX}/lib:${LD_LIBRARY_PATH}
-
-## =============================================================================
-## That's all!
-echo "Environment setup complete."