diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 88b494041abe2eeccea6e0ec926f06051a9f4413..e650e4a086cdc957cf54bb9747fdf1f6154e7f2b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -6,7 +6,7 @@ stages:
   - main
   - singularity
 
-builder_stable:
+builder:stable:
   stage: builder
   tags:
      - silicon
@@ -19,7 +19,7 @@ builder_stable:
      - head Dockerfile
      - make login
      - make release-cached
-builder_unstable:
+builder:unstable:
   stage: builder
   tags:
      - silicon
@@ -35,7 +35,7 @@ builder_unstable:
 
 ## I wish there were a simple way to transfer the "latest/unstable" strings
 ## between jobs...
-config_stable:
+config:stable:
   image: eicweb.phy.anl.gov:4567/containers/eic_container/eic_builder:latest
   stage: config
   tags:
@@ -44,6 +44,7 @@ config_stable:
      - tags
      - master
      - staging
+  needs: ["builder:stable"]
   script:
     - bash containers/release/configure_release.sh
   artifacts:
@@ -51,7 +52,7 @@ config_stable:
       - config/spack-env.sh
       - config/eic-env.sh
       - config/Dockerfile
-config_unstable:
+config:unstable:
   image: eicweb.phy.anl.gov:4567/containers/eic_container/eic_builder:unstable
   stage: config
   tags:
@@ -60,6 +61,7 @@ config_unstable:
      - tags
      - master
      - staging
+  needs: ["builder:unstable"]
   script:
     - bash containers/release/configure_release.sh
   artifacts:
@@ -68,7 +70,7 @@ config_unstable:
       - config/eic-env.sh
       - config/Dockerfile
       
-release_stable:
+release:stable:
   stage: main
   tags:
      - silicon
@@ -76,13 +78,14 @@ release_stable:
      - tags
      - master
      - staging
+  needs: ["config:stable"]
   script:
      - cp config/Dockerfile containers/release/Dockerfile
      - cp config/eic-env.sh containers/release/eic-env.sh
      - cd containers/release
      - make login
      - make release-cached
-release_unstable:
+release:unstable:
   stage: main
   tags:
      - silicon
@@ -90,6 +93,7 @@ release_unstable:
      - tags
      - master
      - staging
+  needs: ["config:unstable"]
   script:
      - cp config/Dockerfile containers/release/Dockerfile
      - cp config/eic-env.sh containers/release/eic-env.sh
@@ -97,13 +101,14 @@ release_unstable:
      - make login
      - make develop-cached
 
-builder_singularity:
+builder:singularity:
   stage: singularity
   tags:
      - singularity
   only:
      - staging
      - tags
+  needs: ["builder:stable"]
   when: manual
   script:
      - cp containers/builder/eic_builder.def .
@@ -117,13 +122,14 @@ builder_singularity:
         - build/eic_builder.sif
         - build/eic_builder.def
 
-release_singularity:
+release:singularity:
   stage: singularity
   tags:
      - singularity
   only:
      - staging
      - tags
+  needs: ["release:stable"]
   script:
      - cp containers/release/eic.def .
      - /bin/bash .gitlabci/setup.sh
diff --git a/README.md b/README.md
index 21bd852a4d94bb103bf70b4e0ff24e63cd6edc6b..9167e063c66689b046dcc56749fa8b8220a2c832 100644
--- a/README.md
+++ b/README.md
@@ -15,9 +15,9 @@ cd eic_container
    modeuefile will be installed to `$PREFIX/../../etc/modulefiles`. 
    You can use the `-v` flag to select the version you want to deploy, or omit the 
    flag if you want to install the master build. The recommended stable 
-   release version is `v2.1.3`.
+   release version is `v2.2.0`.
 ```bash
-./deploy.py -v 2.1.3 <PREFIX>
+./deploy.py -v 2.2.0 <PREFIX>
 ```
 
    Available flags:
@@ -101,15 +101,15 @@ $PREFIX/bin/eic-shell
 Included software:
 ------------------
   - Included software:
-    - gcc@9.3.0
-    - cmake@3.17.3
+    - gcc@10.2.0
+    - cmake@3.18.1
     - fmt@6.1.2
     - spdlog@1.5.0
     - nlohmann-json
     - heppdt@3.04.01
     - clhep@2.4.1.3
     - eigen@3.3.7
-    - python@3.7.7 with pip, numpy, pyyaml, pyafp,  matplotlib, ipython, scipy
+    - python@3.7.8 with pip, numpy, pyyaml, pyafp,  matplotlib, ipython, scipy
     - xrootd@4.12.3
     - root@6.22.00
     - pythia8@8244
@@ -117,8 +117,10 @@ Included software:
     - podio@master
     - geant4@10.6.2
     - dd4hep@1.13.1
-    - acts@0.31.0
+    - acts@1.00.0
     - gaudi@34.0
+    - dawn@3.91a
+    - dawncut@1.54a
   - The singularity build exports the following applications:
     - eic_shell: a development shell in the image
     - container_dev: same as EIC shell
diff --git a/VERSION b/VERSION
index cd57a8b95d6d1de42ed8ae15fa6c449ed7c9863c..ccbccc3dc62631f22ff358ac418e52401ec770b4 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.1.5
+2.2.0
diff --git a/containers/builder/Dockerfile b/containers/builder/Dockerfile
index c9428663b2d530e26a03770155201b33978f41e6..697eaf47fbb4df7fdbf7a9e5ab9a553e805575a6 100644
--- a/containers/builder/Dockerfile
+++ b/containers/builder/Dockerfile
@@ -1,28 +1,36 @@
 # Builder with Argonne EIC software
 #
-FROM eicweb.phy.anl.gov:4567/containers/image_recipes/ubuntu_spack:0.15.3
+FROM eicweb.phy.anl.gov:4567/containers/image_recipes/debian_spack:snapshot-20200922
 
 LABEL maintainer="Sylvester Joosten <sjoosten@anl.gov>" \
       name="eic_builder" \
       group="eic_builder" \
       march="native" \
-      basedist="ubuntu" \
-      base="ubuntu"
+      basedist="debian" \
+      base="debian"
 
-ENV DOCKERFILE_BASE=ubuntu            \
-    DOCKERFILE_DISTRO=ubuntu          \
-    DOCKERFILE_DISTRO_VERSION=20.04   \
+ENV DOCKERFILE_BASE=debian            \
+    DOCKERFILE_DISTRO=debian          \
+    DOCKERFILE_DISTRO_VERSION=20200908-testing \
     SPACK_ROOT=/opt/spack             \
     DEBIAN_FRONTEND=noninteractive    \
     CURRENTLY_BUILDING_DOCKER_IMAGE=1 \
     container=docker
 
+## install ghostview/ghostscript needed by some of the tools
+RUN apt-get -yqq update \
+ && apt-get -yqq install --no-install-recommends \
+        ghostscript \
+        gv \
+ && rm -rf /var/lib/apt/lists/*
+
 ## Ensure an up-to-date custom package list
 RUN rm -rf $SPACK_ROOT/np-spack \
- && echo "Update spack for v2.1.3" \
  && git clone https://eicweb.phy.anl.gov/EIC/np-spack.git $SPACK_ROOT/np-spack \
- && cd $SPACK_ROOT/np-spack && git checkout v`spack --version` && cd - \
- && rm -rf $SPACK_ROOT/np-spack/.git \
+ && cd $SPACK_ROOT/np-spack \
+ && git checkout snapshot-`echo $(spack --version) | cut -d- -f3` \
+ && cd - \
+ && echo "DISABLED: rm -rf $SPACK_ROOT/np-spack/.git" \
  && echo "repos:" > $SPACK_ROOT/etc/spack/repos.yaml \
  && echo " - $SPACK_ROOT/np-spack" >> $SPACK_ROOT/etc/spack/repos.yaml
 
@@ -33,7 +41,7 @@ COPY spack.yaml /opt/spack-environment/spack.yaml
 ## as this is a raw builder image
 RUN cd /opt/spack-environment \
  && spack env activate . \
- && spack install -j32 \
+ && spack install -j64 \
  && spack clean -a
 
 ## Install additional python packages
@@ -73,7 +81,7 @@ RUN cd /opt/spack-environment \
  && spack env activate . \
  && export PODIO=`spack find -p podio | grep software | awk '{print $2}'` \
  && echo "export PODIO=${PODIO};" >> /etc/profile.d/z10_spack_environment.sh \
- && echo "export BINARY_TAG=x86_64-linux-gcc9-opt" >> /etc/profile.d/z10_spack_environment.sh
+ && echo "export BINARY_TAG=x86_64-linux-gcc10-opt" >> /etc/profile.d/z10_spack_environment.sh
 
 ## make sure we have the entrypoints setup correctly
 ENTRYPOINT []
diff --git a/containers/builder/spack.yaml b/containers/builder/spack.yaml
index 532e2add5589c06be29d15a0cfe82ac029fc3bea..afcd7cf54e90d4ab97f97af26d77a5192a7b48ca 100644
--- a/containers/builder/spack.yaml
+++ b/containers/builder/spack.yaml
@@ -1,26 +1,29 @@
 spack:
   specs:
-    - cmake@3.17.3
+    - cmake@3.18.1
     - fmt@6.1.2 cxxstd=17
     - spdlog@1.5.0
     - nlohmann-json
     - heppdt@3.04.01
     - clhep@2.4.1.3 cxxstd=17
+    - cairo+fc+ft+X+pdf+gobject
     - eigen@3.3.7
-    - python@3.7.7
+    - python@3.7.8
     - py-pip
     - py-numpy
     - py-pyyaml
     - xrootd@4.12.3 cxxstd=17 +python
-    - root@6.22.00 cxxstd=17 +dataframe +fftw +fortran +gdml +http +mlp +pythia8 +root7 +tmva +vc +xrootd +ssl ^mesa+opengl -llvm -osmesa
+    - root@6.22.00 cxxstd=17 +fftw +fortran +gdml +http +mlp +pythia8 +root7 +tmva +vc +xrootd +ssl ^mesa+opengl -llvm -osmesa
     - pythia8@8244
     - hepmc3@3.2.2 +python +rootio 
     - stow@2.2.2
     - podio@master
     - geant4@10.6.2 cxxstd=17 +opengl +vecgeom +x11 +qt ^qt +opengl
     - dd4hep@1.13.1 +geant4 +assimp +hepmc3
-    - acts@0.31.0 +dd4hep +digitization +identification +json +tgeo
+    - acts@1.00.0 +dd4hep +digitization +identification +json +tgeo
     - gaudi@34.0
+    - dawn@3_91a
+    - dawncut@1_54a
   concretization: together
   config:
     install_tree: /opt/software
diff --git a/containers/release/Dockerfile.in b/containers/release/Dockerfile.in
index 9c347f59bb50af47e307251ac9cca332afd8e06a..490ed179f67c2b67b832fdc457b2755774717b6b 100644
--- a/containers/release/Dockerfile.in
+++ b/containers/release/Dockerfile.in
@@ -11,18 +11,18 @@ RUN find -L /usr/local/* -type f -exec readlink -f '{}' \; | \
     grep 'x-executable\|x-archive\|x-sharedlib' | \
     awk -F: '{print $1}' | xargs strip -s
 
-FROM eicweb.phy.anl.gov:4567/containers/image_recipes/ubuntu_minimal:20.04
+FROM eicweb.phy.anl.gov:4567/containers/image_recipes/debian_minimal:testing-20200908
 LABEL maintainer="Sylvester Joosten <sjoosten@anl.gov>" \
-      name="eic_container" \
-      group="eic_container" \
+      name="eic" \
+      group="eic" \
       march="native" \
-      basedist="ubuntu" \
-      base="ubuntu"
+      basedist="debian" \
+      base="debian"
 
 ## @ENV@ will be automatically expanded to auto-load the 
 ## runtime environment
 ENV DOCKERFILE_DISTRO=ubuntu          \
-    DOCKERFILE_DISTRO_VERSION=20.04   \
+    DOCKERFILE_DISTRO_VERSION=20200908-testing   \
     DEBIAN_FRONTEND=noninteractive    \
 @ENV@
 
@@ -31,6 +31,8 @@ ENV DOCKERFILE_DISTRO=ubuntu          \
 RUN apt-get -yqq update \
  && apt-get -yqq install --no-install-recommends \
         openssh-client \
+        ghostscript \
+        gv \
  && locale-gen en_US.UTF-8 \
  && rm -rf /var/lib/apt/lists/*
 
diff --git a/containers/release/bashrc b/containers/release/bashrc
index 307c4da3fbae2c10be41c940d1fbed8f1a66d47b..4d1c1f3487e728bb91c447e29c966138ef8ddedb 100644
--- a/containers/release/bashrc
+++ b/containers/release/bashrc
@@ -60,8 +60,8 @@ alias snano='sedit'
 export CLICOLOR=1
 export LS_COLORS='no=00:fi=00:di=00;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:*.xml=00;31:'
 #export GREP_OPTIONS='--color=auto' #deprecated
-alias grep="`which grep` $GREP_OPTIONS"
-unset GREP_OPTIONS
+#alias grep="/usr/bin/grep $GREP_OPTIONS"
+#unset GREP_OPTIONS
 
 # Color for manpages in less makes manpages a little easier to read
 export LESS_TERMCAP_mb=$'\E[01;31m'
@@ -72,39 +72,9 @@ export LESS_TERMCAP_so=$'\E[01;44;33m'
 export LESS_TERMCAP_ue=$'\E[0m'
 export LESS_TERMCAP_us=$'\E[01;32m'
 
-#######################################################
-# MACHINE SPECIFIC ALIAS'S
-#######################################################
-
-# Alias's for SSH
-# alias SERVERNAME='ssh YOURWEBSITE.com -l USERNAME -p PORTNUMBERHERE'
-
-# Alias's to change the directory
-#alias web='cd /var/www/html'
-
-# Alias's to mount ISO files
-# mount -o loop /home/NAMEOFISO.iso /home/ISOMOUNTDIR/
-# umount /home/NAMEOFISO.iso
-# (Both commands done as root only.)
-
 #######################################################
 # GENERAL ALIAS'S
 #######################################################
-# To temporarily bypass an alias, we preceed the command with a \
-# EG: the ls command is aliased, but to use the normal ls command you would type \ls
-
-# Add an "alert" alias for long running commands.  Use like so:
-#   sleep 10; alert
-alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
-
-# Edit this .bashrc file
-#alias ebrc='edit ~/.bashrc'
-
-# Show help for this .bashrc file
-#alias hlp='less ~/.bashrc_help'
-
-# alias to show the date
-alias da='date "+%Y-%m-%d %A %T %Z"'
 
 # Alias's to modified commands
 alias cp='cp -i'
@@ -175,32 +145,6 @@ alias countfiles="for t in files links directories; do echo \`find . -type \${t:
 # To see if a command is aliased, a file, or a built-in command
 alias checkcommand="type -t"
 
-# Show current network connections to the server
-alias ipview="netstat -anpl | grep :80 | awk {'print \$5'} | cut -d\":\" -f1 | sort | uniq -c | sort -n | sed -e 's/^ *//' -e 's/ *\$//'"
-
-# Show open ports
-alias openports='netstat -nape --inet'
-
-# Alias's for safe and forced reboots
-alias rebootsafe='sudo shutdown -r now'
-alias rebootforce='sudo shutdown -r -n now'
-
-# Alias's to show disk space and space used in a folder
-alias diskspace="du -S | sort -n -r |more"
-alias folders='du -h --max-depth=1'
-alias folderssort='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
-alias tree='tree -CAhF --dirsfirst'
-alias treed='tree -CAFd'
-alias mountedinfo='df -hT'
-
-# Alias's for archives
-alias mktar='tar -cvf'
-alias mkbz2='tar -cvjf'
-alias mkgz='tar -cvzf'
-alias untar='tar -xvf'
-alias unbz2='tar -xvjf'
-alias ungz='tar -xvzf'
-
 # Show all logs in /var/log
 alias logs="sudo find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f"
 
@@ -328,47 +272,6 @@ pwdtail ()
 	pwd|awk -F/ '{nlast = NF -1;print $nlast"/"$NF}'
 }
 
-# Show the current distribution
-distribution ()
-{
-	local dtype
-	# Assume unknown
-	dtype="unknown"
-	
-	# First test against Fedora / RHEL / CentOS / generic Redhat derivative
-	if [ -r /etc/rc.d/init.d/functions ]; then
-		source /etc/rc.d/init.d/functions
-		[ zz`type -t passed 2>/dev/null` == "zzfunction" ] && dtype="redhat"
-	
-	# Then test against SUSE (must be after Redhat,
-	# I've seen rc.status on Ubuntu I think? TODO: Recheck that)
-	elif [ -r /etc/rc.status ]; then
-		source /etc/rc.status
-		[ zz`type -t rc_reset 2>/dev/null` == "zzfunction" ] && dtype="suse"
-	
-	# Then test against Debian, Ubuntu and friends
-	elif [ -r /lib/lsb/init-functions ]; then
-		source /lib/lsb/init-functions
-		[ zz`type -t log_begin_msg 2>/dev/null` == "zzfunction" ] && dtype="debian"
-	
-	# Then test against Gentoo
-	elif [ -r /etc/init.d/functions.sh ]; then
-		source /etc/init.d/functions.sh
-		[ zz`type -t ebegin 2>/dev/null` == "zzfunction" ] && dtype="gentoo"
-	
-	# For Mandriva we currently just test if /etc/mandriva-release exists
-	# and isn't empty (TODO: Find a better way :)
-	elif [ -s /etc/mandriva-release ]; then
-		dtype="mandriva"
-
-	# For Slackware we currently just test if /etc/slackware-version exists
-	elif [ -s /etc/slackware-version ]; then
-		dtype="slackware"
-
-	fi
-	echo $dtype
-}
-
 # Show the current version of the operating system
 ver ()
 {
@@ -402,129 +305,6 @@ ver ()
 	fi
 }
 
-# Automatically install the needed support files for this .bashrc file
-install_bashrc_support ()
-{
-	local dtype
-	dtype=$(distribution)
-
-	if [ $dtype == "redhat" ]; then
-		sudo yum install multitail tree joe
-	elif [ $dtype == "suse" ]; then
-		sudo zypper install multitail
-		sudo zypper install tree
-		sudo zypper install joe
-	elif [ $dtype == "debian" ]; then
-		sudo apt-get install multitail tree joe
-	elif [ $dtype == "gentoo" ]; then
-		sudo emerge multitail
-		sudo emerge tree
-		sudo emerge joe
-	elif [ $dtype == "mandriva" ]; then
-		sudo urpmi multitail
-		sudo urpmi tree
-		sudo urpmi joe
-	elif [ $dtype == "slackware" ]; then
-		echo "No install support for Slackware"
-	else
-		echo "Unknown distribution"
-	fi
-}
-
-# Show current network information
-netinfo ()
-{
-	echo "--------------- Network Information ---------------"
-	/sbin/ifconfig | awk /'inet addr/ {print $2}'
-	echo ""
-	/sbin/ifconfig | awk /'Bcast/ {print $3}'
-	echo ""
-	/sbin/ifconfig | awk /'inet addr/ {print $4}'
-
-	/sbin/ifconfig | awk /'HWaddr/ {print $4,$5}'
-	echo "---------------------------------------------------"
-}
-
-# IP address lookup
-alias whatismyip="whatsmyip"
-function whatsmyip ()
-{
-	# Dumps a list of all IP addresses for every device
-	# /sbin/ifconfig |grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }';
-
-	# Internal IP Lookup
-	echo -n "Internal IP: " ; /sbin/ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
-
-	# External IP Lookup
-	echo -n "External IP: " ; wget http://smart-ip.net/myip -O - -q
-}
-
-# View Apache logs
-apachelog ()
-{
-	if [ -f /etc/httpd/conf/httpd.conf ]; then
-		cd /var/log/httpd && ls -xAh && multitail --no-repeat -c -s 2 /var/log/httpd/*_log
-	else
-		cd /var/log/apache2 && ls -xAh && multitail --no-repeat -c -s 2 /var/log/apache2/*.log
-	fi
-}
-
-# Edit the Apache configuration
-apacheconfig ()
-{
-	if [ -f /etc/httpd/conf/httpd.conf ]; then
-		sedit /etc/httpd/conf/httpd.conf
-	elif [ -f /etc/apache2/apache2.conf ]; then
-		sedit /etc/apache2/apache2.conf
-	else
-		echo "Error: Apache config file could not be found."
-		echo "Searching for possible locations:"
-		sudo updatedb && locate httpd.conf && locate apache2.conf
-	fi
-}
-
-# Edit the PHP configuration file
-phpconfig ()
-{
-	if [ -f /etc/php.ini ]; then
-		sedit /etc/php.ini
-	elif [ -f /etc/php/php.ini ]; then
-		sedit /etc/php/php.ini
-	elif [ -f /etc/php5/php.ini ]; then
-		sedit /etc/php5/php.ini
-	elif [ -f /usr/bin/php5/bin/php.ini ]; then
-		sedit /usr/bin/php5/bin/php.ini
-	elif [ -f /etc/php5/apache2/php.ini ]; then
-		sedit /etc/php5/apache2/php.ini
-	else
-		echo "Error: php.ini file could not be found."
-		echo "Searching for possible locations:"
-		sudo updatedb && locate php.ini
-	fi
-}
-
-# Edit the MySQL configuration file
-mysqlconfig ()
-{
-	if [ -f /etc/my.cnf ]; then
-		sedit /etc/my.cnf
-	elif [ -f /etc/mysql/my.cnf ]; then
-		sedit /etc/mysql/my.cnf
-	elif [ -f /usr/local/etc/my.cnf ]; then
-		sedit /usr/local/etc/my.cnf
-	elif [ -f /usr/bin/mysql/my.cnf ]; then
-		sedit /usr/bin/mysql/my.cnf
-	elif [ -f ~/my.cnf ]; then
-		sedit ~/my.cnf
-	elif [ -f ~/.my.cnf ]; then
-		sedit ~/.my.cnf
-	else
-		echo "Error: my.cnf file could not be found."
-		echo "Searching for possible locations:"
-		sudo updatedb && locate my.cnf
-	fi
-}
-
 # For some reason, rot13 pops up everywhere
 rot13 () {
 	if [ $# -eq 0 ]; then