diff --git a/.ci/Jenkinsfile b/.ci/Jenkinsfile
index feec019e5df158c7cf4860ad1915a55cec8474a8..0dceb1c8de665016198a1f79a02ed7f51a431094 100755
--- a/.ci/Jenkinsfile
+++ b/.ci/Jenkinsfile
@@ -123,7 +123,7 @@ pipeline {
 			post {
 				failure {
 					script {
-						cache_failed = sh(script: "bash lib/yashchiki/create_temporary_build_cache_after_failure.sh", returnStdout: true).trim()
+						cache_failed = sh(script: "bash bin/yashchiki_create_temporary_build_cache_after_failure.sh", returnStdout: true).trim()
 						if (isTriggeredByGerrit()) {
 							sh "bash bin/yashchiki_notify_gerrit.sh -v -1 -t Build -m \"Successfully built packages stored in cache. Resume by issuing:\nWITH_CACHE_NAME=${cache_failed}\n\nIn your next gerrit comment, NOT commit message!\""
 						}
diff --git a/.ci/Jenkinsfile_asic b/.ci/Jenkinsfile_asic
index 84edfcb425980ac2070f3feba5ae1f17a3859d7e..9fd0e7eda932a51a7951c65c7af2b43b094db7bf 100755
--- a/.ci/Jenkinsfile_asic
+++ b/.ci/Jenkinsfile_asic
@@ -124,7 +124,7 @@ pipeline {
 			post {
 				failure {
 					script {
-						cache_failed = sh(script: "lib/yashchiki/create_temporary_build_cache_after_failure.sh", returnStdout: true).trim()
+						cache_failed = sh(script: "bin/yashchiki_create_temporary_build_cache_after_failure.sh", returnStdout: true).trim()
 						if (isTriggeredByGerrit()) {
 							sh "bash bin/yashchiki_notify_gerrit.sh -v -1 -t Build -m \"Successfully built packages stored in cache. Resume by issuing:\nWITH_CACHE_NAME=${cache_failed}\n\nIn your next gerrit comment, NOT commit message!\""
 						}
diff --git a/lib/yashchiki/create_temporary_build_cache_after_failure.sh b/bin/yashchiki_create_temporary_build_cache_after_failure.sh
similarity index 69%
rename from lib/yashchiki/create_temporary_build_cache_after_failure.sh
rename to bin/yashchiki_create_temporary_build_cache_after_failure.sh
index 376a181400c1e9c89135f1bb63c28f83d99aad42..c9c28799ca03e2e6ccef5d257b8811fe5873690b 100755
--- a/lib/yashchiki/create_temporary_build_cache_after_failure.sh
+++ b/bin/yashchiki_create_temporary_build_cache_after_failure.sh
@@ -13,13 +13,13 @@ if [ "${CONTAINER_BUILD_TYPE}" = "stable" ]; then
     exit 1
 fi
 
-SOURCE_DIR="$(dirname "$(readlink -m "${BASH_SOURCE[0]}")")"
-source "${SOURCE_DIR}/commons.sh"
+ROOT_DIR="$(dirname "$(dirname "$(readlink -m "${BASH_SOURCE[0]}")")")"
+source "${ROOT_DIR}/lib/yashchiki/get_change_name.sh"
 
 build_num=1
 change_num="$(get_change_name)"
 
-while [ -d "${PRESERVED_PACKAGES_OUTSIDE}/${change_num}_${build_num}" ]; do
+while [ -d "${YASHCHIKI_CACHES_ROOT}/preserved_packages/${change_num}_${build_num}" ]; do
     (( build_num++ ))
 done
 # `build_num` is used to indicate if no preserved packages were found: After
@@ -29,8 +29,8 @@ done
 # store in the failed cache.
 (( build_num-- ))
 
-preserved_packages="${PRESERVED_PACKAGES_OUTSIDE}/${change_num}_${build_num}"
-failed_build_cache="${BASE_BUILD_CACHE_FAILED_OUTSIDE}/${change_num}_${build_num}"
+preserved_packages="${YASHCHIKI_CACHES_ROOT}/preserved_packages/${change_num}_${build_num}"
+failed_build_cache="${YASHCHIKI_CACHES_ROOT}/build_caches/failed/${change_num}_${build_num}"
 
 # expects input to be \0-printed
 link_into_failed_buildcache() {
@@ -41,7 +41,7 @@ link_into_failed_buildcache() {
 # ensure that we have preserved packages and that these packages have not
 # already been pushed to a failed build cache
 if (( build_num > 0 )) && \
-    [ ! -d "${BASE_BUILD_CACHE_FAILED_OUTSIDE}/${change_num}_${build_num}" ]; then
+    [ ! -d "${YASHCHIKI_CACHES_ROOT}/build_caches/failed/${change_num}_${build_num}" ]; then
 
     mkdir -vp "${failed_build_cache}" >&2
 
@@ -50,10 +50,10 @@ if (( build_num > 0 )) && \
     find "${preserved_packages}" -name "*.tar.gz" -print0 | link_into_failed_buildcache
 
     # link everything not present in preserved packages that is in build cache
-    find "${BUILD_CACHE_OUTSIDE}" -name "*.tar.gz" -print0 | link_into_failed_buildcache
+    find "${YASHCHIKI_CACHES_ROOT}/build_caches/${BUILD_CACHE_NAME}" -name "*.tar.gz" -print0 | link_into_failed_buildcache
 
     # echo created failed buildcache
-    echo "${failed_build_cache#${BASE_BUILD_CACHE_OUTSIDE}/}"
+    echo "${failed_build_cache#${YASHCHIKI_CACHES_ROOT}/build_caches/}"
 else
     echo "<no preserved packages found>"
 fi
diff --git a/lib/yashchiki/get_change_name.sh b/lib/yashchiki/get_change_name.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ac8f64addda8f5079d09fe974ec84ac2a02c3f28
--- /dev/null
+++ b/lib/yashchiki/get_change_name.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+set -euo pipefail
+shopt -s inherit_errexit 2>/dev/null || true
+
+get_change_name() {
+    local change_num
+    local patch_level
+
+    local gerrit_change_number
+    local gerrit_patchset_number
+    local gerrit_refspec
+
+    gerrit_change_number="${GERRIT_CHANGE_NUMBER}"
+    gerrit_patchset_number="${GERRIT_PATCHSET_NUMBER}"
+    gerrit_refspec="${GERRIT_REFSPEC}"
+
+    if [ -z "${gerrit_change_number:-}" ]; then
+        if [ -n "${gerrit_refspec:-}" ]; then
+            # extract gerrit change number from refspec
+            change_num="$(echo "${gerrit_refspec}" | cut -f 4 -d / )"
+            patch_level="$(echo "${gerrit_refspec}" | cut -f 5 -d / )"
+        fi
+    else
+        change_num="${gerrit_change_number}"
+        patch_level="${gerrit_patchset_number}"
+    fi
+    echo -n "c${change_num}p${patch_level}"
+}