diff --git a/build_all.sh b/build_all.sh
old mode 100644
new mode 100755
index b4be6dae405202e59fdf27426cb593a4477510f1..238b758664dd9da334ced6f56c0f6726c70586bc
--- a/build_all.sh
+++ b/build_all.sh
@@ -19,19 +19,30 @@
 
 set -o nounset                              # Treat unset variables as an error
 
-BUILD=./build
-if [ -e ${BUILD} ];
-then
-  echo BUILD-dir ${BUILD} already exist, Aborting...
-else
-  TEMP_FILE=$(mktemp)
-  COMBINED_FILE=${BUILD}/SLUB_mediaconch_policy_all.xml
-  mkdir $BUILD
+RED="\\e[31m"
+WHITE="\\e[0m"
+ERROR="${RED}[ERROR]\t${WHITE}"
+INFO="[INFO]\t"
+
+BUILD="./build"
+REQUIREMENTS="mktemp xsltproc"              # list external required binaries here (space separated)
+
+for REQUIREMENT in ${REQUIREMENTS}; do
+  command -v "${REQUIREMENT}" >/dev/null 2>&1 || { echo >&2 "${ERROR}${REQUIREMENT} required but not installed. Aborting."; exit 1; }
+done
+
+if [ -d ${BUILD} ]; then
+  echo "${INFO}BUILD-dir '${BUILD}' already exists. It will be removed and recreated for a fresh build."
+  rm -rf "${BUILD}" || { echo >&2 "${ERROR}Could not remove pre-existing build directory at '${BUILD}'. Aborting."; exit 1; }
+fi
+
+  TEMP_FILE="$(mktemp)"
+  COMBINED_FILE="${BUILD}/SLUB_mediaconch_policy_all.xml"
+  mkdir -p "${BUILD}" || { echo >&2 "${ERROR}Could not create build directory at '${BUILD}'. Aborting."; exit 1; }
   echo '<?xml version="1.0" encoding="UTF-8"?>' > "${TEMP_FILE}"
   echo '<policy />' >> "${TEMP_FILE}"
-  xsltproc SLUB_mediaconch_policy_all.xsl "${TEMP_FILE}" > "${COMBINED_FILE}" 
+  xsltproc "SLUB_mediaconch_policy_all.xsl" "${TEMP_FILE}" > "${COMBINED_FILE}"
   rm -f "${TEMP_FILE}"
   ls -lh "${COMBINED_FILE}"
-  echo "finished."
-fi
+  echo "${INFO}finished."