diff --git a/Code/Mantid/Build/Jenkins/buildscript b/Code/Mantid/Build/Jenkins/buildscript
index bf9df07b22372756d094a2184f3d54b6f09eda26..3a8cefa43ff4ae41be2228307a31ba31296e2c68 100755
--- a/Code/Mantid/Build/Jenkins/buildscript
+++ b/Code/Mantid/Build/Jenkins/buildscript
@@ -19,6 +19,46 @@ BUILDPKG=true
 cmake --version
 echo "SHA1=${sha1}"
 
+###############################################################################
+# Check job requirements from the name
+###############################################################################
+if [[ ${JOB_NAME} == *clean* ]]; then
+  CLEANBUILD=true
+fi
+
+if [[ ${JOB_NAME} == *debug* ]]; then
+  BUILD_CONFIG="Debug"
+elif [[ ${JOB_NAME} == *relwithdbg* ]]; then
+  BUILD_CONFIG="RelWithDbg"
+else
+  BUILD_CONFIG="Release"
+fi
+
+###############################################################################
+# Setup the build directory
+# For a clean build the entire thing is removed to guarantee it is clean. All
+# other build types are assumed to be incremental and the following items
+# are removed to ensure stale build objects don't interfere with each other:
+#   - build/bin/**: if libraries are removed from cmake they are not deleted
+#                   from bin and can cause random failures
+#   - build/ExternalData/**: data files will change over time and removing
+#                            the links helps keep it fresh
+###############################################################################
+BUILD_DIR=$WORKSPACE/build
+if [ -z "$BUILD_DIR" ]; then
+  echo "Build directory not set. Cannot continue"
+  exit 1
+fi
+
+if [[ "$CLEANBUILD" == true ]]; then
+  rm -rf $BUILD_DIR
+fi
+if [ -d $BUILD_DIR ]; then
+  rm -rf $BUILD_DIR/bin $BUILD_DIR/ExternalData
+else
+  mkdir $BUILD_DIR
+fi
+
 ###############################################################################
 # Setup clang
 ###############################################################################
@@ -38,11 +78,11 @@ if [[ $USE_CLANG ]]; then
   export CXX=clang++
   #check if CMakeCache.txt exists and if so that the cxx compiler is clang++
   #only needed with incremental builds. Clean builds delete this directory in a later step. 
-  if [[ -e $WORKSPACE/build/CMakeCache.txt ]] && [[ ${JOB_NAME} != *clean* ]]; then
-    COMPILERFILEPATH=`grep 'CMAKE_CXX_COMPILER:FILEPATH' $WORKSPACE/build/CMakeCache.txt` 
+  if [[ -e $BUILD_DIR/CMakeCache.txt ]] && [[ ${JOB_NAME} != *clean* ]]; then
+    COMPILERFILEPATH=`grep 'CMAKE_CXX_COMPILER:FILEPATH' $BUILD_DIR/CMakeCache.txt` 
     if [[ $COMPILERFILEPATH != *clang++* ]]; then 
       # Removing the build directory entirely guarantees clang is used.
-      rm -rf $WORKSPACE/build
+      rm -rf $BUILD_DIR
     fi
   fi 
 fi
@@ -89,21 +129,6 @@ if [[ ${NODE_LABELS} == *rhel7* ]]; then
   ON_RHEL7=true
 fi
 
-###############################################################################
-# Check job requirements from the name
-###############################################################################
-if [[ ${JOB_NAME} == *clean* ]]; then
-  CLEANBUILD=true
-fi
-
-if [[ -e $WORKSPACE/build/CMakeCache.txt ]]; then
-  # Temporary while the builds flick between old & new TestingTools locations
-  TESTINGTOOLS_DIR=$(grep 'Code/Mantid/TestingTools/cxxtest' $WORKSPACE/build/CMakeCache.txt || true)
-  if [ ! -z "$TESTINGTOOLS_DIR"  ]; then
-    rm -fr $WORKSPACE/build
-  fi
-fi
-
 ###############################################################################
 # Packaging options
 ###############################################################################
@@ -125,13 +150,9 @@ if [[ "$BUILDPKG" == true ]]; then
 fi
 
 ###############################################################################
-# Setup the build directory
+# Work in the build directory
 ###############################################################################
-if [[ "$CLEANBUILD" == true ]]; then
-  rm -rf $WORKSPACE/build
-fi
-[ -d $WORKSPACE/build ] || mkdir $WORKSPACE/build
-cd $WORKSPACE/build
+cd $BUILD_DIR
 
 ###############################################################################
 # Clean up any artifacts from last build so that if it fails
@@ -139,17 +160,6 @@ cd $WORKSPACE/build
 ###############################################################################
 rm -f *.dmg *.rpm *.deb *.tar.gz
 
-###############################################################################
-## Check the required build configuration
-###############################################################################
-if [[ ${JOB_NAME} == *debug* ]]; then
-  BUILD_CONFIG="Debug"
-elif [[ ${JOB_NAME} == *relwithdbg* ]]; then
-  BUILD_CONFIG="RelWithDbg"
-else
-  BUILD_CONFIG="Release"
-fi
-
 ###############################################################################
 # CMake configuration
 ###############################################################################
diff --git a/Code/Mantid/Build/Jenkins/buildscript.bat b/Code/Mantid/Build/Jenkins/buildscript.bat
index cda8a6cb7d61c4189aaa12233f29907bd068db90..36552dbb9a40fc5bd22f2c2f7a1e02f4a306adc9 100755
--- a/Code/Mantid/Build/Jenkins/buildscript.bat
+++ b/Code/Mantid/Build/Jenkins/buildscript.bat
@@ -39,16 +39,31 @@ if not "%JOB_NAME%" == "%JOB_NAME:clean=%" (
   set BUILDPKG=yes
 )
 
-if EXIST %WORKSPACE%\build\CMakeCache.txt (
-  FINDSTR "Code/Mantid/TestingTools/cxxtest" %WORKSPACE%\build\CMakeCache.txt && (
-    rmdir /S /Q %WORKSPACE%\build
-  )
-)
-
 if not "%JOB_NAME%" == "%JOB_NAME:pull_requests=%" (
   set BUILDPKG=yes
 )
 
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:: Setup the build directory
+:: For a clean build the entire thing is removed to guarantee it is clean. All
+:: other build types are assumed to be incremental and the following items
+:: are removed to ensure stale build objects don't interfere with each other:
+::   - build/bin: if libraries are removed from cmake they are not deleted
+::                   from bin and can cause random failures
+::   - build/ExternalData/**: data files will change over time and removing
+::                            the links helps keep it fresh
+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+set BUILD_DIR=%WORKSPACE%\build
+if "%CLEANBUILD%" == "yes" (
+  rmdir /S /Q %BUILD_DIR%
+)
+
+if EXIST %BUILD_DIR% (
+  rmdir /S /Q %BUILD_DIR%\bin %BUILD_DIR%\ExternalData
+) else (
+  md %BUILD_DIR%
+)
+
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :: Packaging options
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@@ -57,14 +72,7 @@ if "%BUILDPKG%" == "yes" (
   set PACKAGE_DOCS=-DPACKAGE_DOCS=ON
 )
 
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:: Setup the build directory
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-if "%CLEANBUILD%" == "yes" (
-  rmdir /S /Q %WORKSPACE%\build
-)
-md %WORKSPACE%\build
-cd %WORKSPACE%\build
+cd %BUILD_DIR%
 
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :: Clean up any artifacts from last build so that if it fails
@@ -132,7 +140,7 @@ if "%BUILDPKG%" == "yes" (
 if not "%JOB_NAME%"=="%JOB_NAME:pull_requests=%" (
   :: Install package
   set SYSTEMTESTS_DIR=%WORKSPACE%\Code\Mantid\Testing\SystemTests
-  python !SYSTEMTESTS_DIR!\scripts\mantidinstaller.py install %WORKSPACE%\build
+  python !SYSTEMTESTS_DIR!\scripts\mantidinstaller.py install %BUILD_DIR%
 
   ::Remove user properties, disable instrument updating & usage reports and add data paths
   del /Q C:\MantidInstall\bin\Mantid.user.properties
@@ -144,13 +152,13 @@ if not "%JOB_NAME%"=="%JOB_NAME:pull_requests=%" (
   echo datasearch.directories = !DATA_ROOT!/UnitTest;!DATA_ROOT!/DocTest;!WORKSPACE_UNIX_STYLE!/Code/Mantid/instrument >> C:\MantidInstall\bin\Mantid.user.properties
 
   :: Run tests
-  cd %WORKSPACE%\build\docs
+  cd %BUILD_DIR%\docs
   C:\MantidInstall\bin\MantidPlot.exe -xq runsphinx_doctest.py
   set RETCODE=!ERRORLEVEL!
 
   :: Remove Mantid
-  cd %WORKSPACE%\build
-  python !SYSTEMTESTS_DIR!\scripts\mantidinstaller.py uninstall %WORKSPACE%\build
+  cd %BUILD_DIR%
+  python !SYSTEMTESTS_DIR!\scripts\mantidinstaller.py uninstall %BUILD_DIR%
   if !RETCODE! NEQ 0 exit /B 1
 )