diff --git a/.rootlogon.C b/.rootlogon.C
index bc835ddb588932bd588d4bbf0462ffb8831fec05..025be51bcca847232897930f3689e12612539c23 100644
--- a/.rootlogon.C
+++ b/.rootlogon.C
@@ -7,9 +7,9 @@ void _rootlogon() {
 
   // check if we requested a special build directory through the environment,
   const char*       build_dir_from_env = gSystem->Getenv("ROOT_BUILD_TMPDIR");
-  const std::string build_dir = build_dir_from_env ? build_dir_from_env : "$HOME/.root_build_dir";
+  const std::string build_dir = build_dir_from_env ? build_dir_from_env : "$PWD/.root_build_dir";
 
-  // ensure the build directory exists to avoid crashes due a directory
+  // ensure the build directory exists to avoid crashes due to it missing
   // note: in principle this allows us to execute arbitrary code, but seeing
   //       as this can only be manipulated through the shell environment in the
   //       first place this should not be a safety concern.
@@ -18,7 +18,12 @@ void _rootlogon() {
 
   // Communicate what build directory we are using
   std::cout << "---> Setting ACLiC build directory to: " << build_dir << "\n\n";
-  gSystem->SetBuildDir(build_dir.c_str());
+  // Make the ROOT build process use a flat build directory by setting
+  // second arg to kTRUE.  This avoids an apparent race condition in ROOT
+  // associated with child directory creation in the default 'kFALSE' mode.
+  // The default mode will work correctly on the 2nd execution.  OK for
+  // interactive use, but not great for the Farm environment.
+  gSystem->SetBuildDir(build_dir.c_str(), kTRUE);
 
   // Ensure we have our environment setup
   gROOT->ProcessLine(".include /usr/local/include/hcana");