diff --git a/vars/asfMavenTlpStdBuild.groovy b/vars/asfMavenTlpStdBuild.groovy
index ac3ce61..aed3d8c 100644
--- a/vars/asfMavenTlpStdBuild.groovy
+++ b/vars/asfMavenTlpStdBuild.groovy
@@ -33,12 +33,13 @@
 
     // now determine the matrix of parallel builds
     def oses = params.containsKey('os') ? params.os : ['linux', 'windows']
-	// minimum, LTS, current and next ea
+    // minimum, LTS, current and next ea
     def jdks = params.containsKey('jdks') ? params.jdks : params.containsKey('jdk') ? params.jdk : ['7','8','11'] //['7','8','11','14','15']
     def maven = params.containsKey('maven') ? params.maven : '3.x.x'
     // def failFast = params.containsKey('failFast') ? params.failFast : true
     // Just temporarily
     def failFast = false;
+    def tmpWs = params.containsKey('tmpWs') ? params.tmpWs : false
     Map tasks = [failFast: failFast]
     boolean first = true
     for (String os in oses) {
@@ -75,33 +76,38 @@
         String stageId = "${os}-jdk${jdk}"
         tasks[stageId] = {
           node("${label}") {
-            stage("Checkout ${stageId}") {
-              echo "NODE_NAME = ${env.NODE_NAME}"
-              try {
-                dir('m') {
-                  checkout scm
-                }
-              } catch (Throwable e) {
-                // First step to keep the workspace clean and safe disk space
-                cleanWs()
-                if (!failFast) {
-                  throw e
-                } else if (failingFast == null) {
-                  failingFast = stageId
-                  echo "[FAIL FAST] This is the first failure and likely root cause"
-                  throw e
-                } else {
-                  echo "[FAIL FAST] ${failingFast} had first failure, ignoring ${e.message}"
-                }
-              } 
+            def wsDir = pwd()
+            if (os == 'windows' && taskContext.tmpWs) {
+              wsDir = 'F:\\short\\' + "$BUILD_TAG".replaceAll(/(.+)maven-box_maven-(.+)/) { "m-${it[2]}" }
             }
-            stage("Build ${stageId}") {
-              if (failingFast != null) {
-                cleanWs()
-                echo "[FAIL FAST] ${failingFast} has failed. Skipping ${stageId}."
-              } else try {
-                // mavenSettingsConfig: 'simple-deploy-settings-no-mirror',
-                withMaven(jdk:jdkName, maven:mvnName, mavenLocalRepo:'.repository', 
+            ws( dir : "$wsDir" )
+              stage("Checkout ${stageId}") {
+                echo "NODE_NAME = ${env.NODE_NAME}"
+                try {
+                  dir('m') {
+                    checkout scm
+                  }
+                } catch (Throwable e) {
+                  // First step to keep the workspace clean and safe disk space
+                  cleanWs()
+                  if (!failFast) {
+                    throw e
+                  } else if (failingFast == null) {
+                    failingFast = stageId
+                    echo "[FAIL FAST] This is the first failure and likely root cause"
+                    throw e
+                  } else {
+                    echo "[FAIL FAST] ${failingFast} had first failure, ignoring ${e.message}"
+                  }
+                } 
+              }
+              stage("Build ${stageId}") {
+                if (failingFast != null) {
+                  cleanWs()
+                  echo "[FAIL FAST] ${failingFast} has failed. Skipping ${stageId}."
+                } else try {
+                  // mavenSettingsConfig: 'simple-deploy-settings-no-mirror',
+                  withMaven(jdk:jdkName, maven:mvnName, mavenLocalRepo:'.repository', 
                           options: [
                             artifactsPublisher(disabled: disablePublishers),
                             junitPublisher(ignoreAttachments: false),
@@ -111,34 +117,35 @@
 // DISABLED DUE TO INFRA-17514 invokerPublisher(),
                             pipelineGraphPublisher(disabled: disablePublishers)
                           ], publisherStrategy: 'EXPLICIT') {
-                dir ('m') {
-                    if (isUnix()) {
-                      sh cmd.join(' ')
-                    } else {
-                      bat cmd.join(' ')
+                  dir ('m') {
+                      if (isUnix()) {
+                        sh cmd.join(' ')
+                      } else {
+                        bat cmd.join(' ')
+                      }
                     }
                   }
-                }
-              } catch (Throwable e) {
-                echo "[FAILURE-004] ${e}"
-                // First step to keep the workspace clean and safe disk space
-                cleanWs()
-                if (!failFast) {
-                  throw e
-                } else if (failingFast == null) {
-                  failingFast = stageId
-                  echo "[FAIL FAST] This is the first failure and likely root cause"
-                  throw e
-                } else {
-                  echo "[FAIL FAST] ${failingFast} had first failure, ignoring ${e.message}"
-                }
-              } finally {
-                try {
+                } catch (Throwable e) {
+                  echo "[FAILURE-004] ${e}"
+                  // First step to keep the workspace clean and safe disk space
                   cleanWs()
-		} catch(IOException e) {
-		  echo "Failed to clean up workspace: ${e}"
-		}
-              }
+                  if (!failFast) {
+                    throw e
+                  } else if (failingFast == null) {
+                    failingFast = stageId
+                    echo "[FAIL FAST] This is the first failure and likely root cause"
+                    throw e
+                  } else {
+                    echo "[FAIL FAST] ${failingFast} had first failure, ignoring ${e.message}"
+                  }
+                } finally {
+                  try {
+                    cleanWs()
+                  } catch(IOException e) {
+                    echo "Failed to clean up workspace: ${e}"
+                  }
+                }
+              }                
             }
           }
         }
@@ -179,7 +186,7 @@
       echo "***** FAST FAILURE *****\n\nFast failure triggered by ${failingFast}\n\n***** FAST FAILURE *****"
     }
     stage("Notifications") {
-	  jenkinsNotify()
+      jenkinsNotify()
     }
   }
 }
