diff --git a/clone.sh b/clone.sh
index 2c4667e..064eed1 100755
--- a/clone.sh
+++ b/clone.sh
@@ -32,41 +32,19 @@
 . $(dirname $0)/utils/util_git.sh
 . $(dirname $0)/utils/util_parse_version.sh
 
-# Take into consideration non-CI runs where SHARE_FOLDER variable
-# may not be present
-if [ -z "${SHARE_FOLDER}" ]; then
-    # Default Jenkins values
-    SHARE_VOLUME="${SHARE_VOLUME:-$PWD}"
-    JOB_NAME="${JOB_NAME:-local}"
-    BUILD_NUMBER="${BUILD_NUMBER:-0}"
-    SHARE_FOLDER=${SHARE_VOLUME}/${JOB_NAME}/${BUILD_NUMBER}
-fi
+function clone_repo_to_share_folder() {
+    REPO_URL=$1
+    REPO_NAME=$2
+    REPO_REFSPEC=$3
 
-echo "Share Folder path: ${SHARE_FOLDER}"
-echo
-
-# Must projects
-if [ -n "${GERRIT_EVENT_HASH}" ]; then
-    # If triggered by Gerrit, use its variables
-    TFM_PROJECT="https://${GERRIT_HOST}/${GERRIT_PROJECT}"
-else
-    TFM_PROJECT="${CODE_REPO:?}"
-fi
-TFM_REFSPEC="${GERRIT_REFSPEC:?}"
-TFM_NAME="trusted-firmware-m"
-
-# Array containing "<repo url>;"<repo name>;<refspec>" elements
-must_repos=(
-    "${TFM_PROJECT};${TFM_NAME};${TFM_REFSPEC}"
-)
-
-for repo in ${must_repos[@]}; do
-    # Parse the repo elements
-    REPO_URL="$(echo "${repo}" | awk -F ';' '{print $1}')"
-    REPO_NAME="$(echo "${repo}" | awk -F ';' '{print $2}')"
-    REPO_REFSPEC="$(echo "${repo}" | awk -F ';' '{print $3}')"
     echo "Repo: $REPO_URL $REPO_NAME $REPO_REFSPEC"
 
+    # In case repository is not defined, just skip it
+    if [ -z "${REPO_URL}" ]; then
+        echo "Repo ${REPO_NAME} not needed in this job. Skip download."
+        return 0
+    fi
+
     if [ ! -d "${SHARE_FOLDER}/${REPO_NAME}" ]; then
         git_clone $REPO_URL "${SHARE_FOLDER}/${REPO_NAME}"
         git_checkout "${SHARE_FOLDER}/${REPO_NAME}" $REPO_REFSPEC
@@ -79,7 +57,36 @@
     # Copy repos into pwd dir (workspace in CI), so each job would work
     # on its own workspace
     cp -a -f "${SHARE_FOLDER}/${REPO_NAME}" "${WORKSPACE}/${REPO_NAME}"
-done
+}
+
+# Take into consideration non-CI runs where SHARE_FOLDER variable
+# may not be present
+if [ -z "${SHARE_FOLDER}" ]; then
+    # Default Jenkins values
+    SHARE_VOLUME="${SHARE_VOLUME:-$PWD}"
+    JOB_NAME="${JOB_NAME:-local}"
+    BUILD_NUMBER="${BUILD_NUMBER:-0}"
+    SHARE_FOLDER=${SHARE_VOLUME}/${JOB_NAME}/${BUILD_NUMBER}
+fi
+
+echo "Share Folder path: ${SHARE_FOLDER}"
+echo
+
+# TF-M project
+if [ -n "${GERRIT_EVENT_HASH}" ]; then
+    # If triggered by Gerrit, use its variables
+    TFM_PROJECT="https://${GERRIT_HOST}/${GERRIT_PROJECT}"
+else
+    TFM_PROJECT="${CODE_REPO:?}"
+fi
+TFM_REFSPEC="${GERRIT_REFSPEC:?}"
+TFM_NAME="trusted-firmware-m"
+
+clone_repo_to_share_folder "${TFM_PROJECT}" "${TFM_NAME}" "${TFM_REFSPEC}"
+if [ ! -d "${SHARE_FOLDER}/${TFM_NAME}" ]; then
+    echo "Fatal error: ${TFM_NAME} not downloaded!"
+    exit 1
+fi
 
 # Dependency projects
 TFM_TESTS_PROJECT="${TFM_TESTS_URL:-}"
@@ -126,23 +133,6 @@
     REPO_URL="$(echo "${repo}" | awk -F ';' '{print $1}')"
     REPO_NAME="$(echo "${repo}" | awk -F ';' '{print $2}')"
     REPO_REFSPEC="$(echo "${repo}" | awk -F ';' '{print $3}')"
-    echo "Repo: $REPO_URL $REPO_NAME $REPO_REFSPEC"
 
-    # In case repository is not defined, just skip it
-    if [ -z "${REPO_URL}" ]; then
-        continue
-    fi
-
-    if [ ! -d "${SHARE_FOLDER}/${REPO_NAME}" ]; then
-        git_clone $REPO_URL "${SHARE_FOLDER}/${REPO_NAME}"
-        git_checkout "${SHARE_FOLDER}/${REPO_NAME}" $REPO_REFSPEC
-    else
-        cd "${SHARE_FOLDER}/${REPO_NAME}"
-        echo -e "Share Folder ${REPO_NAME} $(git rev-parse --short HEAD)\n"
-        cd $OLDPWD
-    fi
-
-    # Copy repos into pwd dir (workspace in CI), so each job would work
-    # on its own workspace
-    cp -a -f "${SHARE_FOLDER}/${REPO_NAME}" "${WORKSPACE}/${REPO_NAME}"
+    clone_repo_to_share_folder "${REPO_URL}" "${REPO_NAME}" "${REPO_REFSPEC}"
 done
