diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d66ce83d335670d30136aaec4e9618617edfff47..4fd9b717eee5c95779695155a226679ef3ac8d30 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,7 +5,7 @@ include:
 
 variables:
   VERSION: ${CI_COMMIT_TAG}
-  CI_VERSION: v2.2.15
+  CI_VERSION: v2.2.17
 
 before_script:
   - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
diff --git a/run/scripts/dir b/run/scripts/dir
index 801a8ff14f8543b03fb3c3c131e2992128bcb5e9..4860dc9d23514e347252110fc3169104805c91ef 100755
--- a/run/scripts/dir
+++ b/run/scripts/dir
@@ -1,5 +1,5 @@
 #!/bin/bash
 
 if [[ -n $1 ]]; then
-  docker inspect ${1}_l3d | jq -r .[0].Config.Env | grep L3DHOSTDIR | cut -d'=' -f 2 | cut -d'"' -f 1
+  docker inspect ${1}_${USERNAME}_l3d | jq -r .[0].Config.Env | grep L3DHOSTDIR | cut -d'=' -f 2 | cut -d'"' -f 1
 fi
diff --git a/run/scripts/start b/run/scripts/start
index c49a7a0e59763f6f016ba4723438cf1b32328a5e..3f65ed3c8248ddab09e9b98f746f3f48c5f3eb19 100755
--- a/run/scripts/start
+++ b/run/scripts/start
@@ -1,6 +1,11 @@
 #!/bin/bash
 
 function getConfig() {
+  if [[ "$L3D_COMPOSE" != "[]" ]]; then
+    COMPOSE_PROJECT_NAME=$(yq .name $L3D_COMPOSE)
+    PHP_VERSION=$(yq .services.php.image $L3D_COMPOSE | cut -d':' -f 2)
+    rm "$L3D_COMPOSE"
+  fi
   if [[ ! -n ${PHP_VERSION} ]]; then
     while true; do
       DEFAULT=8.1
@@ -23,24 +28,6 @@ function getConfig() {
       esac
     done
   fi
-  if [[ ! -n ${COMPOSER_DOWNGRADE} ]]; then
-    while true; do
-      DEFAULT=0
-      read -p "Do you want to downgrade Composer to version 1 - 0=No, 1=Yes? [No] " VALUE
-      if [[ "x$VALUE" == "x" ]]; then
-        COMPOSER_DOWNGRADE=$DEFAULT
-      else
-        COMPOSER_DOWNGRADE=$VALUE
-      fi
-      case ${COMPOSER_DOWNGRADE} in
-      0) break ;;
-      1) break ;;
-      no|NO|No) COMPOSER_DOWNGRADE=0 ;;
-      yes|YES|Yes) COMPOSER_DOWNGRADE=1 ;;
-      *) echo "Only 1 or 0 are valid responses." ;;
-      esac
-    done
-  fi
   if [[ ! -n ${COMPOSE_PROJECT_NAME} ]]; then
     DEFAULT=$(basename $WORKDIR)
     read -p "Name your project (used as subdomain): [$DEFAULT]" VALUE
@@ -64,9 +51,9 @@ function startContainer() {
     if [[ $COMPOSE_PROJECT_NAME == "." ]]; then
       mode=NONPRESISTENT
     else
-      ID=$(docker container ls --all -q -f name=^${COMPOSE_PROJECT_NAME}_l3d$)
+      ID=$(docker container ls --all -q -f name=^${COMPOSE_PROJECT_NAME}_${USERNAME}_l3d$)
       if [[ -n ${ID} ]]; then
-        docker start ${COMPOSE_PROJECT_NAME}_l3d
+        docker start ${COMPOSE_PROJECT_NAME}_${USERNAME}_l3d
         mode=REGULAR
       fi
     fi
@@ -80,13 +67,17 @@ function startContainer() {
         --env COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME}
         --env COMPOSER_DOWNGRADE=${COMPOSER_DOWNGRADE}
         --env PHP_VERSION=${PHP_VERSION}
-        --env SSH_AUTH_SOCK=${SSHAUTHSOCK}
         --volume ${L3DDOCKERHOST}:/var/run/docker.sock
         --volume ${WORKDIR}:/drupal
-        --volume ${SSHAUTH}:${SSHAUTHSOCK}
         --volume ${HOMEDIR}:/home/${USERNAME}
         --workdir /drupal
       )
+      if [[ -n "$SSHAUTH" ]]; then
+        start_params+=(
+          --env SSH_AUTH_SOCK=${SSHAUTHSOCK}
+          --volume ${SSHAUTH}:${SSHAUTHSOCK}
+        )
+      fi
       if [[ ${L3DHOSTOS} != Darwin ]]; then
         start_params+=(
           --user ${USERID}:${GROUPID}
@@ -107,7 +98,7 @@ function startContainer() {
         start_params+=(
           --hostname ${COMPOSE_PROJECT_NAME}-l3d
         )
-        docker run --name ${COMPOSE_PROJECT_NAME}_l3d -dt \
+        docker run --name ${COMPOSE_PROJECT_NAME}_${USERNAME}_l3d -dt \
           "${start_params[@]}" \
           --restart unless-stopped \
           registry.lakedrops.com/docker/l3d/php-${PHP_VERSION}:${L3DVERSION}
@@ -116,8 +107,12 @@ function startContainer() {
           --hostname "L3D"
           --env HOMEDIR=${HOMEDIR}
           --env WORKDIR=${WORKDIR}
-          --env SSHAUTH=${SSHAUTH}
         )
+        if [[ -n "$SSHAUTH" ]]; then
+          start_params+=(
+            --env SSHAUTH=${SSHAUTH}
+          )
+        fi
         docker run -it --rm \
           "${start_params[@]}" \
           registry.lakedrops.com/docker/l3d/php-${PHP_VERSION}:${L3DVERSION} \
@@ -129,8 +124,12 @@ function startContainer() {
     start_params=(
       --env HOMEDIR=${HOMEDIR}
       --env WORKDIR=${WORKDIR}
-      --env SSHAUTH=${SSHAUTH}
     )
+    if [[ -n "$SSHAUTH" ]]; then
+      start_params+=(
+        --env SSHAUTH=${SSHAUTH}
+      )
+    fi
     if [[ "$PHP_VERSION" != "unknown" ]]; then
       start_params+=(
         --env PHP_VERSION=${PHP_VERSION}
@@ -138,7 +137,7 @@ function startContainer() {
     fi
     docker exec -it \
       "${start_params[@]}" \
-      ${COMPOSE_PROJECT_NAME}_l3d \
+      ${COMPOSE_PROJECT_NAME}_${USERNAME}_l3d \
       /usr/local/bin/.start
     exitContainer
   fi
@@ -148,7 +147,7 @@ if [[ -n $1 ]]; then
   if [[ "$1" == "." ]]; then
     COMPOSE_PROJECT_NAME=.
   else
-    ID=$(docker container ls --all -q -f name=^$1_l3d$)
+    ID=$(docker container ls --all -q -f name=^$1_${USERNAME}_l3d$)
     if [[ -n ${ID} ]]; then
       PHP_VERSION=unknown
       COMPOSE_PROJECT_NAME=$1
diff --git a/setup/scripts/l3d b/setup/scripts/l3d
index 9592dd7206f4cd394a8264628cb6096129ba9db2..793f60a90c8ce41700ab00a2711c093865552028 100755
--- a/setup/scripts/l3d
+++ b/setup/scripts/l3d
@@ -4,7 +4,6 @@ GROUPID=$(id -g)
 GROUPIDS=$(id -G)
 L3DHOSTOS="$(uname -s)"
 L3DDOCKERHOST=/var/run/docker.sock
-SSHAUTH=${SSH_AUTH_SOCK}
 SSHAUTHSOCK=/ssh-agent
 USERID=$(id -u)
 USERNAME=${USER}
@@ -25,9 +24,11 @@ case "${L3DHOSTOS}" in
       USERNAME=root
 
       # This variable is used to access the ssh agent on MacOS.
-      SSHAUTHMAGICPATH="/run/host-services/ssh-auth.sock"
-      SSHAUTH=${SSHAUTHMAGICPATH}
-      SSHAUTHSOCK=${SSHAUTHMAGICPATH}
+      if [[ -f "/run/host-services/ssh-auth.sock" ]]; then
+        SSHAUTHMAGICPATH="/run/host-services/ssh-auth.sock"
+        SSH_AUTH_SOCK=${SSHAUTHMAGICPATH}
+        SSHAUTHSOCK=${SSHAUTHMAGICPATH}
+      fi
       if [[ $? > 0 ]]; then
         exit $?
       fi
@@ -80,7 +81,7 @@ fi
 
 # Chenge directory to the existing project root, if available.
 if [[ -n $1 ]]; then
-  ID=$(docker container ls --all -q -f name=^$1_l3d$)
+  ID=$(docker container ls --all -q -f name=^$1_${USERNAME}_l3d$)
   if [[ -n ${ID} ]]; then
     cd $(docker exec ${ID} php /usr/local/bin/volume.php --none)
   fi
@@ -98,6 +99,11 @@ if [[ -f ".lakedrops.yml" ]]; then
   L3D_CONFIG=/tmp/${RANDOM}.lakedrops.yml
   docker cp .lakedrops.yml l3drun:$L3D_CONFIG >/dev/null 2>&1
 fi
+L3D_COMPOSE=[]
+if [[ -f "docker-compose.yml" ]]; then
+  L3D_COMPOSE=/tmp/${RANDOM}-docker-compose.yml
+  docker cp docker-compose.yml l3drun:$L3D_COMPOSE >/dev/null 2>&1
+fi
 
 # Create project container parameters
 project_params=(
@@ -109,13 +115,18 @@ project_params=(
   --env L3DSHELL=${L3DSHELL}
   --env L3D_ALWAYS_CLEANUP=${L3D_ALWAYS_CLEANUP}
   --env L3D_CONFIG=${L3D_CONFIG}
+  --env L3D_COMPOSE=${L3D_COMPOSE}
   --env WORKDIR=${PWD}
-  --env SSHAUTH=${SSHAUTH}
-  --env SSHAUTHSOCK=${SSHAUTHSOCK}
   --env PHP_VERSION=${PHP_VERSION}
   --env COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME}
   --env COMPOSER_DOWNGRADE=${COMPOSER_DOWNGRADE}
 )
+if [[ -n "$SSH_AUTH_SOCK" ]]; then
+  project_params+=(
+    --env SSHAUTH=${SSH_AUTH_SOCK}
+    --env SSHAUTHSOCK=${SSHAUTHSOCK}
+  )
+fi
 
 # Execute project container
 docker exec -it \
diff --git a/start.sh b/start.sh
index 31f57d97daed4ec6b00887a1a7555ea9ae77c43e..1fa8357c37c7ec28de044c7541513d1930e5a41b 100755
--- a/start.sh
+++ b/start.sh
@@ -32,20 +32,22 @@ function restoreEnvFile {
   if [[ "${COMPOSE_PROJECT_NAME}" == "." ]]; then
     return
   fi
-  if [[ -n ${PHP_VERSION} ]]; then
-    echo "PHP_VERSION=${PHP_VERSION}" >>.env
-  fi
-  if [[ -n ${COMPOSE_PROJECT_NAME} ]]; then
-    echo "COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME}" >>.env
-  fi
-  if [[ -n ${COMPOSER_DOWNGRADE} ]]; then
-    echo "COMPOSER_DOWNGRADE=${COMPOSER_DOWNGRADE}" >>.env
-  fi
-  if [[ -f ".env" ]]; then
-    # shellcheck disable=SC2046
-    # shellcheck disable=SC2094
-    # shellcheck disable=SC2002
-    env -i $(cat .env | xargs) >.env
+  if [[ -f ".env" && -w ".env" ]] || [[ ! -f ".env" && -w . ]]; then
+    if [[ -n ${PHP_VERSION} ]]; then
+      echo "PHP_VERSION=${PHP_VERSION}" >>.env
+    fi
+    if [[ -n ${COMPOSE_PROJECT_NAME} ]]; then
+      echo "COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME}" >>.env
+    fi
+    if [[ -n ${COMPOSER_DOWNGRADE} ]]; then
+      echo "COMPOSER_DOWNGRADE=${COMPOSER_DOWNGRADE}" >>.env
+    fi
+    if [[ -f ".env" ]]; then
+      # shellcheck disable=SC2046
+      # shellcheck disable=SC2094
+      # shellcheck disable=SC2002
+      env -i $(cat .env | xargs) >.env
+    fi
   fi
 }
 
@@ -207,30 +209,36 @@ function initialSetup {
 }
 
 function setupAhoy {
-  if [[ ! -f .ahoy.yml ]]; then
+  if [[ ! -f .ahoy.yml && -w . ]]; then
     echo "ahoyapi: v2" >.ahoy.yml
     echo "commands:" >>.ahoy.yml
   fi
-  if [[ ! -L .ahoy.l3d ]]; then
+  if [[ ! -L .ahoy.l3d && -w . ]]; then
     ln -s /etc/ahoy .ahoy.l3d
   fi
   if [[ -f .gitignore ]]; then
     EXISTING=$(cat .gitignore | grep "^/.ahoy.l3d$")
     if [[ -z ${EXISTING} ]]; then
-      echo "/.ahoy.l3d" >>.gitignore
+      if [[ -f ".gitignore" && -w ".gitignore" ]] || [[ ! -f ".gitignore" && -w . ]]; then
+        echo "/.ahoy.l3d" >>.gitignore
+      fi
     fi
   fi
-  EXISTING=$(cat .ahoy.yml | grep "^  changelog:")
-  if [[ -z ${EXISTING} ]]; then
-    echo "  changelog:" >>.ahoy.yml
-    echo "    imports:" >>.ahoy.yml
-    echo "      - ./.ahoy.l3d/changelog.yml" >>.ahoy.yml
-    echo "    usage: Changelog tools." >>.ahoy.yml
+  if [[ -f ".ahoy.yml" && -w ".ahoy.yml" ]] || [[ ! -f ".ahoy.yml" && -w . ]]; then
+    EXISTING=$(cat .ahoy.yml | grep "^  changelog:")
+    if [[ -z ${EXISTING} ]]; then
+      echo "  changelog:" >>.ahoy.yml
+      echo "    imports:" >>.ahoy.yml
+      echo "      - ./.ahoy.l3d/changelog.yml" >>.ahoy.yml
+      echo "    usage: Changelog tools." >>.ahoy.yml
+    fi
   fi
 }
 
 if [[ -n ${PHP_VERSION} ]]; then
-  echo "PHP_VERSION=${PHP_VERSION}" >>.env
+  if [[ -f ".env" && -w ".env" ]] || [[ ! -f ".env" && -w . ]]; then
+    echo "PHP_VERSION=${PHP_VERSION}" >>.env
+  fi
 fi
 readEnv
 # Validate PHP version
@@ -242,7 +250,7 @@ if [[ "$INSTALLED_PHP_VERSION" != "$PHP_VERSION" ]]; then
   if [[ "${COMPOSE_PROJECT_NAME}" != "." ]]; then
     echo -e "\\033[31m Killed the outdated container, please start again !!! \\033[0m"
     echo -e "\\033[31m ===================================================== \\033[0m"
-    docker rm -f ${COMPOSE_PROJECT_NAME}_l3d
+    docker rm -f ${COMPOSE_PROJECT_NAME}_${USERNAME}_l3d
   fi
 fi
 if [[ "$COMPOSER_DOWNGRADE" == "1" ]]; then
@@ -278,8 +286,8 @@ if [[ "${COMPOSE_PROJECT_NAME}" != "." ]]; then
       echo "#!/bin/sh" > .git/hooks/post-checkout
       chmod +x .git/hooks/post-checkout
     fi
-    OLDCOMMAND='docker exec '${COMPOSE_PROJECT_NAME}'_l3d /usr/local/bin/update-env'
-    NEWCOMMAND='RUNNING=$(docker container ls --all -q -f name='${COMPOSE_PROJECT_NAME}'_l3d);if [ "x$RUNNING" != "x" ];then docker exec '${COMPOSE_PROJECT_NAME}'_l3d /usr/local/bin/update-env;fi'
+    OLDCOMMAND='docker exec '${COMPOSE_PROJECT_NAME}'_'${USERNAME}'_l3d /usr/local/bin/update-env'
+    NEWCOMMAND='RUNNING=$(docker container ls --all -q -f name='${COMPOSE_PROJECT_NAME}'_'${USERNAME}_'l3d);if [ "x$RUNNING" != "x" ];then docker exec '${COMPOSE_PROJECT_NAME}'_l3d /usr/local/bin/update-env;fi'
     OLD_HOOK_DEFINED=$(grep "$OLDCOMMAND" .git/hooks/post-checkout)
     NEW_HOOK_DEFINED=$(grep "$NEWCOMMAND" .git/hooks/post-checkout)
     if [[ "x$OLD_HOOK_DEFINED" = "x" ]]; then