diff --git a/gitlab/functions.sh b/gitlab/functions.sh
index 5556c3173857b94923a425f72a4cc9993a8d4ed6..2438e200920c0fb9e82a8018b2a98a77441df2f4 100644
--- a/gitlab/functions.sh
+++ b/gitlab/functions.sh
@@ -17,6 +17,26 @@ visibility() {
 }
 
 
+# Determines if we're on the master branch or not
+is_master() {
+  local retval="${CI_COMMIT_REF_NAME}"
+  if [[ -n "${CI_COMMIT_TAG}" ]]; then
+    # we're building a tag, check it is available on the master branch
+    local count=`git branch -a --contains "tags/${CI_COMMIT_TAG}" | grep master | wc -l`
+    if [[ "${count}" -gt "0" ]]; then #tag is on master
+      retval="master"
+    else
+      retval="it-is-not-master"
+    fi
+  fi
+  if [[ "${retval}" == "master" ]]; then
+    return "true"
+  else
+    return "false"
+  fi
+}
+
+
 # Functions for coloring echo commands
 log_debug() {
   echo -e "(`date +%T`) \033[1;32m${@}\033[0m"
@@ -313,8 +333,7 @@ check_env CI_PROJECT_URL
 check_env CI_PROJECT_DIR
 check_env CI_PROJECT_PATH
 check_env CI_PROJECT_NAME
-check_env CI_BUILD_REF
-check_env CI_BUILD_REF_NAME
+check_env CI_COMMIT_REF_NAME
 check_pass PYPIUSER
 check_pass PYPIPASS
 check_pass DOCUSER
@@ -323,6 +342,7 @@ check_pass DOCPASS
 # Sets up variables
 OSNAME=`osname`
 VISIBILITY=`visibility`
+IS_MASTER=`is_master`
 
 if [ -z "${CONDA_FOLDER}" ]; then
   CONDA_FOLDER=/opt/conda
@@ -330,8 +350,8 @@ fi
 
 PYVER=py$(echo ${PYTHON_VERSION} | tr -d '.')
 if [ -z "${CONDA_ENV}" ]; then
-  if [ -d "${CONDA_FOLDER}/envs/bob-devel-${PYVER}-${CI_BUILD_REF_NAME}" ]; then
-    CONDA_ENV=bob-devel-${PYVER}-${CI_BUILD_REF_NAME}
+  if [ -d "${CONDA_FOLDER}/envs/bob-devel-${PYVER}-${CI_COMMIT_REF_NAME}" ]; then
+    CONDA_ENV=bob-devel-${PYVER}-${CI_COMMIT_REF_NAME}
   else
     CONDA_ENV=bob-devel-${PYVER}
   fi
@@ -355,6 +375,7 @@ TESTSERVER=https://testpypi.python.org/pypi
 
 check_env OSNAME
 check_env VISIBILITY
+check_env IS_MASTER
 check_env PYVER
 check_env PREFIX
 export_env PREFIX
@@ -366,7 +387,7 @@ check_env CONDA_ENV
 export_env BOB_PREFIX_PATH
 
 # Setup default documentation server
-if [ -z "${CI_BUILD_TAG}" ]; then
+if [ -z "${CI_COMMIT_TAG}" ]; then
  DEFSRV="${DOCSERVER}/software/bob/docs/latest/bob/%s/master/"
 else
   DEFSRV="http://pythonhosted.org/%s/"
@@ -383,8 +404,35 @@ fi
 unset DEFSRV
 export_env BOB_DOCUMENTATION_SERVER
 
-# sets up certificates for curl and openssl
+# Sets up certificates for curl and openssl
 CURL_CA_BUNDLE="${SCRIPTS_DIR}/cacert.pem"
 export_env CURL_CA_BUNDLE
 SSL_CERT_FILE="${CURL_CA_BUNDLE}"
 export_env SSL_CERT_FILE
+
+# Sets up upload folders for documentation (just in case we need them)
+# See: https://gitlab.idiap.ch/bob/bob.admin/issues/2
+
+# Prefix differs between private & public repos
+DOC_SERVER_PREFIX="-upload/${CI_PROJECT_PATH}/docs"
+if [[ "${VISIBILITY}" == "public" ]]; then
+  DOCS_SERVER_PREFIX="public${DOCS_SERVER_PREFIX}
+else
+  DOCS_SERVER_PREFIX="private${DOCS_SERVER_PREFIX}
+fi
+
+DOC_UPLOADS=()
+
+if [[ "${IS_MASTER} == "true" ]]; then
+  DOC_UPLOADS+=("$DOCS_SERVER_PREFIX/master/")
+fi
+
+if [[ -n "${CI_COMMIT_TAG}" ]]; then
+  DOC_UPLOADS+=("$DOCS_SERVER_PREFIX/$CI_COMMIT_TAG/")
+fi
+
+if [[ -n "${CI_COMMIT_TAG}" && "${IS_MASTER}" == "true" ]]; then
+  DOC_UPLOADS+=("$DOCS_SERVER_PREFIX/stable/")
+fi
+unset DOCS_SERVER_PREFIX
+check_env DOC_UPLOADS