diff --git a/Projects/AnalysisBase/externals.txt b/Projects/AnalysisBase/externals.txt
index e2bad52dc1cedeee3cb1709266e15c62ed8cc00c..9831462d7550ae30383cd1ba48b63f17c0bba865 100644
--- a/Projects/AnalysisBase/externals.txt
+++ b/Projects/AnalysisBase/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AnalysisBaseExternalsVersion = 2.0.45
+AnalysisBaseExternalsVersion = 2.0.46
diff --git a/Projects/AnalysisTop/externals.txt b/Projects/AnalysisTop/externals.txt
index c73c82e7411c48218500750e6adf91e7483b52fe..f8e7d55087d954b95f8b3e8df8f8915b4d961fec 100644
--- a/Projects/AnalysisTop/externals.txt
+++ b/Projects/AnalysisTop/externals.txt
@@ -1,4 +1,4 @@
 # Versions of the various externals to build before starting the build of
 # this project, when doing a full stack nightly build.
 
-AnalysisBaseExternalsVersion = 2.0.45
+AnalysisBaseExternalsVersion = 2.0.46
diff --git a/Projects/AthDataQuality/externals.txt b/Projects/AthDataQuality/externals.txt
index c90085796f93feb03c21d29d4d0ed39b5af1f5ee..699c63be349b13dee1fe322f74f589ee6b4a4420 100644
--- a/Projects/AthDataQuality/externals.txt
+++ b/Projects/AthDataQuality/externals.txt
@@ -5,4 +5,4 @@
 # an "origin/" prefix before it. For tags however this is explicitly
 # forbidden.
 
-AtlasExternalsVersion = 2.0.45
+AtlasExternalsVersion = 2.0.46
diff --git a/Projects/AthSimulation/build_externals.sh b/Projects/AthSimulation/build_externals.sh
index 1548b155d9b1d5163c8713a0914ef352f586a57a..63b9fee3d296e73088828e9747b6f5d14e078ec6 100755
--- a/Projects/AthSimulation/build_externals.sh
+++ b/Projects/AthSimulation/build_externals.sh
@@ -57,9 +57,12 @@ while getopts ":t:b:x:fch" opt; do
     esac
 done
 
-# Stop on errors from here on out:
-set -e
-set -o pipefail
+# Only stop on errors if we are in the CI. Otherwise just count them.
+if [ "$CI" = "1" ]; then
+    set -e
+    set -o pipefail
+fi
+ERROR_COUNT=0
 
 # We are in BASH, get the path of this script in a simple way:
 thisdir=$(dirname ${BASH_SOURCE[0]})
@@ -118,7 +121,7 @@ ${scriptsdir}/build_atlasexternals.sh \
     -b ${BUILDDIR}/build/AthSimulationExternals \
     -i ${BUILDDIR}/install/AthSimulationExternals/${NICOS_PROJECT_VERSION} \
     -p AthSimulationExternals ${RPMOPTIONS} -t ${BUILDTYPE} \
-    ${EXTRACMAKE[@]/#/-x } -v ${NICOS_PROJECT_VERSION}
+    ${EXTRACMAKE[@]/#/-x } -v ${NICOS_PROJECT_VERSION} || ((ERROR_COUNT++))
 
 # Get the "platform name" from the directory created by the AthSimulationExternals
 # build:
@@ -140,4 +143,10 @@ ${scriptsdir}/build_Gaudi.sh \
     -i ${BUILDDIR}/install/GAUDI/${NICOS_PROJECT_VERSION} \
     -e ${BUILDDIR}/install/AthSimulationExternals/${NICOS_PROJECT_VERSION}/InstallArea/${platform} \
     -p AthSimulationExternals -f ${platform} ${EXTRACMAKE[@]/#/-x } \
-    ${RPMOPTIONS} -t ${BUILDTYPE}
+    ${RPMOPTIONS} -t ${BUILDTYPE} || ((ERROR_COUNT++))
+
+# Exit with the error count taken into account.
+if [ ${ERROR_COUNT} -ne 0 ]; then
+    echo "AthSimulation externals build encountered ${ERROR_COUNT} error(s)"
+fi
+exit ${ERROR_COUNT}
diff --git a/Projects/AthSimulation/externals.txt b/Projects/AthSimulation/externals.txt
index 5ab3323cc28dfd7bf1effb2208c338ce524648c0..29f2719381dedc5137bf664c6ba5808d5ed6022a 100644
--- a/Projects/AthSimulation/externals.txt
+++ b/Projects/AthSimulation/externals.txt
@@ -6,7 +6,7 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AthSimulationExternalsVersion = 2.0.45
+AthSimulationExternalsVersion = 2.0.46
 
 # The version of atlas/Gaudi to use:
 GaudiVersion = v32r2.002
diff --git a/Projects/Athena/build_externals.sh b/Projects/Athena/build_externals.sh
index 01404b17391bb4b9c097403309b7e1603bbc27bc..38ff7afb4344ebf1e3b3e37f08c14c9d74b6b83f 100755
--- a/Projects/Athena/build_externals.sh
+++ b/Projects/Athena/build_externals.sh
@@ -57,9 +57,12 @@ while getopts ":t:b:x:fch" opt; do
     esac
 done
 
-# Stop on errors from here on out
-set -e
-set -o pipefail
+# Only stop on errors if we are in the CI. Otherwise just count them.
+if [ "$CI" = "1" ]; then
+    set -e
+    set -o pipefail
+fi
+ERROR_COUNT=0
 
 # We are in BASH, get the path of this script in a simple way:
 thisdir=$(dirname ${BASH_SOURCE[0]})
@@ -143,7 +146,7 @@ ${scriptsdir}/build_atlasexternals.sh \
     -i ${BUILDDIR}/install/AthenaExternals/${NICOS_PROJECT_VERSION} \
     -p AthenaExternals ${RPMOPTIONS} -t ${BUILDTYPE} \
     -v ${NICOS_PROJECT_VERSION} \
-    ${EXTRACMAKE[@]/#/-x }
+    ${EXTRACMAKE[@]/#/-x } || ((ERROR_COUNT++))
 
 {
  test "X${NIGHTLY_STATUS}" != "X" && {
@@ -182,7 +185,7 @@ ${scriptsdir}/build_Gaudi.sh \
     -i ${BUILDDIR}/install/GAUDI/${NICOS_PROJECT_VERSION} \
     -e ${BUILDDIR}/install/AthenaExternals/${NICOS_PROJECT_VERSION}/InstallArea/${platform} \
     -p AthenaExternals -f ${platform} ${RPMOPTIONS} -t ${BUILDTYPE} \
-    ${EXTRACMAKE[@]/#/-x }
+    ${EXTRACMAKE[@]/#/-x } || ((ERROR_COUNT++))
 
 {
  test "X${NIGHTLY_STATUS}" != "X" && {
@@ -192,3 +195,9 @@ ${scriptsdir}/build_Gaudi.sh \
    )
  } || true
 }
+
+# Exit with the error count taken into account.
+if [ ${ERROR_COUNT} -ne 0 ]; then
+    echo "Athena externals build encountered ${ERROR_COUNT} error(s)"
+fi
+exit ${ERROR_COUNT}
diff --git a/Projects/Athena/externals.txt b/Projects/Athena/externals.txt
index b0c9477a58a9a06da7d3fe22f3b5a55d767fd32f..4070585e651506f109b0a318cd33bc2596a6cb0b 100644
--- a/Projects/Athena/externals.txt
+++ b/Projects/Athena/externals.txt
@@ -6,7 +6,7 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AthenaExternalsVersion = 2.0.45
+AthenaExternalsVersion = 2.0.46
 
 # The version of atlas/Gaudi to use:
 GaudiVersion = v32r2.002
diff --git a/Projects/VP1Light/externals.txt b/Projects/VP1Light/externals.txt
index ca2c4b2aaa5cb30f5a88d6370d2f1c4ef290dccf..6e95ae01e63eca13c065403a4daeafa13ff2fb06 100644
--- a/Projects/VP1Light/externals.txt
+++ b/Projects/VP1Light/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-VP1LightExternalsVersion = 2.0.45
+VP1LightExternalsVersion = 2.0.46