diff --git a/README.md b/README.md
index 13b81f946c988c758374cc644d0a33f13fad3aaf..97159bb5cfa2d2e8574011787033edff621497fd 100644
--- a/README.md
+++ b/README.md
@@ -24,14 +24,7 @@ This will install the script `l3d` into the given directory `/usr/local/bin` fro
 
 ## Quick start MacOS
 
-Here we have to circumwent some limitations that come with Docker for Mac:
-
-1. Docker for Mac is not able to mount certain directories and one of those is anything underneath `/usr`. Therefore you have to use a different directory where the L3D script and some additional files get stored.
-2. Docker for Mac does not properly mount sockets such that SSH agent can not be used inside of Docker containers the same way this is being done on Linux platforms. There are many workarounds available and we have integrated the approach from [mariusgrigaitis](https://github.com/mariusgrigaitis/docker-mac-ssh-auth-sock) into this project.
-
-This requires [socat](https://linux.die.net/man/1/socat). You can install that with `brew install socat` or `sudo port install socat` or any other method that is applicable to you specific Mac. After installation make sure that `socat` can be found in your search path. If it got installed in a directory that isn't in the path, you can create a symbolic link to it into `/usr/local/bin`.
-
-Then use the following command to install L3D (replace `myname` with your correct username:
+Use the following command to install L3D (replace `myname` with your correct username):
 
 ```bash
 docker run -v /Users/myname/bin:/setup --rm registry.lakedrops.com/docker/l3d/setup:latest
diff --git a/run/Dockerfile b/run/Dockerfile
index de57d32c9c1164ac29a3493a9efdf8ce62961519..1560373ca6def3a58cee40e49dda7d1fb7e55cab 100644
--- a/run/Dockerfile
+++ b/run/Dockerfile
@@ -14,7 +14,7 @@ ARG glibc_version=2.28-r0
 
 ADD scripts/* /usr/local/bin/
 
-RUN apk add bash curl jq && \
+RUN apk add --no-cache bash curl jq && \
     wget -q https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -O /etc/apk/keys/sgerrand.rsa.pub && \
     wget -q https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${glibc_version}/glibc-${glibc_version}.apk && \
     apk add --no-cache glibc-${glibc_version}.apk && \
diff --git a/run/scripts/start b/run/scripts/start
index 23060ca44f48386f8aa2d058bcd7586ebcbf82b2..d5f0ccad2cd7380ef890990eeb213c549235ab67 100755
--- a/run/scripts/start
+++ b/run/scripts/start
@@ -64,27 +64,40 @@ function startContainer {
     if [[ -n ${ID} ]]; then
       docker start ${COMPOSE_PROJECT_NAME}_l3d
     else
+      start_params=(
+        --hostname ${COMPOSE_PROJECT_NAME}-l3d
+        --env L3DVERSION=${L3DVERSION}
+        --env L3DSHELL=${L3DSHELL}
+        --env HOME=/home/${USERNAME}
+        --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
+        --restart unless-stopped
+      )
+      if [[ ${L3DHOSTOS} != Darwin ]]; then
+        start_params+=(
+          --user ${USERID}:${GROUPID}
+          --group-add ${GROUPIDS// / --group-add }
+          --volume /etc/group:/etc/group:ro
+          --volume /etc/passwd:/etc/passwd:ro
+          --volume /etc/shadow:/etc/shadow:ro
+          --volume /etc/sudoers:/etc/sudoers:ro
+          --volume /etc/sudoers.d:/etc/sudoers.d:ro
+        )
+      # else
+        # (see #62) Disabled for now.
+        #start_params+=(
+        #  --volume ${HOMEDIR}/.passwd:/etc/passwd:ro
+        #)
+      fi
       docker run --name ${COMPOSE_PROJECT_NAME}_l3d -dt \
-        --hostname ${COMPOSE_PROJECT_NAME}-l3d \
-        --user ${USERID}:${GROUPID} \
-        --group-add ${GROUPIDS// / --group-add } \
-        --env L3DVERSION=${L3DVERSION} \
-        --env L3DSHELL=${L3DSHELL} \
-        --env COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME} \
-        --env COMPOSER_DOWNGRADE=${COMPOSER_DOWNGRADE} \
-        --env PHP_VERSION=${PHP_VERSION} \
-        --env SSH_AUTH_SOCK=${SSHAUTHSOCK} \
-        --volume /var/run/docker.sock:/var/run/docker.sock \
-        --volume ${WORKDIR}:/drupal \
-        --volume /etc/group:/etc/group:ro \
-        --volume /etc/passwd:/etc/passwd:ro \
-        --volume /etc/shadow:/etc/shadow:ro \
-        --volume /etc/sudoers:/etc/sudoers:ro \
-        --volume /etc/sudoers.d:/etc/sudoers.d:ro \
-        --volume ${SSHAUTH}:${SSHAUTHSOCK} \
-        --volume ${HOMEDIR}:${HOMEDIR} \
-        --workdir /drupal \
-        --restart unless-stopped \
+        "${start_params[@]}" \
         registry.lakedrops.com/docker/l3d/php-${PHP_VERSION}:${L3DVERSION}
     fi
     docker exec -it \
diff --git a/setup/scripts/l3d b/setup/scripts/l3d
index 13af5c52beb52e1af615893253bf1ba3dfccf279..03ba4fb136cb8aba2118a3a7b7c58184b02e2925 100755
--- a/setup/scripts/l3d
+++ b/setup/scripts/l3d
@@ -1,8 +1,14 @@
 #!/bin/bash
 
+GROUPID=$(id -g)
+GROUPIDS=$(id -G)
+L3DHOSTOS="$(uname -s)"
+L3DDOCKERHOST=/var/run/docker.sock
 SSHAUTH=${SSH_AUTH_SOCK}
 SSHAUTHSOCK=/ssh-agent
-L3DHOSTOS="$(uname -s)"
+USERID=$(id -u)
+USERNAME=${USER}
+
 case "${L3DHOSTOS}" in
     Darwin*)
       if ! which greadlink >/dev/null; then
@@ -11,8 +17,17 @@ case "${L3DHOSTOS}" in
       else
         # This works on MacOS when coreutils is installed.
         SCRIPTPATH="$(dirname "$(greadlink -f "$0")")"
+        # (see #62) L3DDOCKERHOST="$(dirname "$(greadlink -f "/var/run/docker.sock")")/docker.sock"
       fi
-      ${SCRIPTPATH}/prepareMac4L3d
+      GROUPID=1
+      # (see #62) Write a fake passwd file which will later be mounted into containers.
+      # echo "${USERNAME}:x:${USERID}:${GROUPID}:${USERNAME},,,:/home/${USERNAME}:${L3DSHELL}" >${HOME}/.passwd
+      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 [[ $? > 0 ]]; then
         exit $?
       fi
@@ -30,15 +45,25 @@ fi
 touch ${HOME}/.gitconfig
 touch ${HOME}/.gitignore_global
 
+# l3d container
 ID=$(docker container ls --all -q -f name=^l3drun$)
 if [[ ! -n ${ID} ]]; then
+  # Create l3drun container parameters
+  l3drun_params=(
+    --env L3DHOSTOS=${L3DHOSTOS}
+    --env SCRIPTPATH=${SCRIPTPATH}
+    --env L3DDOCKERHOST=${L3DDOCKERHOST}
+    --volume /var/run/docker.sock:/var/run/docker.sock
+    --volume ${SCRIPTPATH}:/setup
+    --volume ${HOME}/.traefik:/root/.traefik
+  )
+  # Execute l3drun container
   docker run --name=l3drun -dt --rm \
-    --env SCRIPTPATH=${SCRIPTPATH} \
-    --volume /var/run/docker.sock:/var/run/docker.sock \
-    --volume ${SCRIPTPATH}:/setup \
-    --volume ${HOME}/.traefik:/root/.traefik \
+    "${l3drun_params[@]}" \
     registry.lakedrops.com/docker/l3d/run:'{{ version }}'
 fi
+
+# Set l3d shell
 if [[ -n ${L3DSHELL} ]]; then
   # Nothing to do, we go with this value
   L3DSHELL=${L3DSHELL}
@@ -47,26 +72,33 @@ elif [[ -n ${SHELL} ]]; then
 else
   L3DSHELL="/usr/bin/fish"
 fi
+
+# Read environment variables
 if [[ -f "${HOME}/.env" ]]; then
   export $(cat ${HOME}/.env | xargs) > /dev/null 2>&1
 fi
 if [[ -f ".env" ]]; then
   export $(cat .env | xargs) > /dev/null 2>&1
 fi
-export USERID=$(id -u)
-export GROUPID=$(id -g)
-export GROUPIDS=$(id -G)
+
+# Create project container parameters
+project_params=(
+  --env USERID=${USERID}
+  --env USERNAME=${USERNAME}
+  --env GROUPID=${GROUPID}
+  --env GROUPIDS="${GROUPIDS}"
+  --env HOMEDIR=${HOME}
+  --env L3DSHELL=${L3DSHELL}
+  --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}
+)
+
+# Execute project container
 docker exec -it \
-  --env USERID=${USERID} \
-  --env GROUPID=${GROUPID} \
-  --env GROUPIDS="${GROUPIDS}" \
-  --env HOMEDIR=${HOME} \
-  --env L3DSHELL=${L3DSHELL} \
-  --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} \
+  "${project_params[@]}" \
   l3drun \
   /usr/local/bin/run $@
diff --git a/setup/scripts/prepareMac4L3d b/setup/scripts/prepareMac4L3d
deleted file mode 100755
index ac088d61441b6bdfc4e90db32add8ed8c39072d3..0000000000000000000000000000000000000000
--- a/setup/scripts/prepareMac4L3d
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env bash
-
-# Credit: https://github.com/mariusgrigaitis/docker-mac-ssh-auth-sock
-
-SOCATID=$(docker container ls --all -q -f name=l3d_socat)
-if [[ -n ${SOCATID} ]]; then
-  exit 0
-fi
-
-if ! which socat >/dev/null; then
-    echo "socat is missing. Install it and make sure the executable is in the local search path."
-    echo "For help see https://stackoverflow.com/questions/16808543/install-socat-on-mac"
-    exit 1
-fi
-
-if ! docker ps >/dev/null; then
-    echo "Docker for Mac is not running. Make sure it's running."
-    exit 1
-fi
-
-if [[ -z "${SSH_AUTH_SOCK}" ]]; then
-    echo "SSH_AUTH_SOCK is missing. Is ssh-agent running?"
-    exit 1
-fi
-
-if ! test -S ${SSH_AUTH_SOCK}; then
-    echo "$SSH_AUTH_SOCK is not a socket. Check agent?"
-    exit 1
-fi
-
-TTY_FILE=~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
-TTY_FILE_NEW=~/Library/Containers/com.docker.docker/Data/vms/0/tty
-
-if ! test -c $TTY_FILE; then
-    echo "$TTY_FILE is not available. Docker for Mac setup has changed? Trying newer file..."
-    if ! test -c $TTY_FILE_NEW; then
-        echo "$TTY_FILE_NEW is not available. Docker for Mac setup has changed? Giving up."
-        exit 1
-    else
-        TTY_FILE=$TTY_FILE_NEW
-    fi
-fi
-
-# This is where the UGLY hack starts
-#
-# Problem: if you do: docker run -v $SSH_AUTH_SOCK:$SSH_AUTH_SOCK container
-# you get a socket file which is mounted over osxfs from Mac host.
-# This socket file can't be reused or removed because it would make ssh commands on
-# host machine to not work
-#
-# Solution:
-# 1. connect to VM over special tty channel
-# 2. create an empty directory
-# 3. bind mount that empty directory over $SSH_AUTH_SOCK directory
-# 4. Profit
-#
-# This makes other docker containers see the created directory instead of osxfs mounted one.
-# It also allows to create socket file under same path that does not collide with host one.
-# Command is sent over special tty channel to Docker for Mac VM and does not check for errors, etc
-# meaning it could be very "unreliable"
-COMMAND="mkdir -p /ssh-auth-sock-hack && mount -o bind /ssh-auth-sock-hack $(dirname $SSH_AUTH_SOCK) && rmdir $SSH_AUTH_SOCK"
-
-echo ctr -n services.linuxkit tasks exec --exec-id 'ssh-$(hostname)-$$' '$(ctr -n services.linuxkit tasks ls -q | grep docker)' sh -c \"$COMMAND\" > $TTY_FILE
-# give some time for command to execute.
-sleep 1
-
-echo "Docker for Mac is now prepared."
-
-echo "Starting socket proxy."
-# This is where the proxying magic happens
-# On host machine it connects to $SSH_AUTH_SOCK socket and pipes output to stdout, takes input from stdin
-# On docker VM it launches a container running socat, which creates a socket file under $SSH_AUTH_SOCK path, accepts
-# input and forwards it to stdout/stdin
-# socat running on host machine connects stdin/stdout between those two sockets can communicate over stdin/stdout
-#
-# This is not really reliable because forwarding input/output over stdin/stdout does not allow for multiple communications
-# at the same time. It fails when doing multiple connections to $SSH_AUTH_SOCK at the same time.
-exec socat "EXEC:\"docker run -i --rm --name l3d_socat -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) alpine/socat UNIX-LISTEN:$SSH_AUTH_SOCK,reuseaddr,fork -\"" "EXEC:\"socat - UNIX:${SSH_AUTH_SOCK}\"" &
-
-echo "Waiting ..."
-sleep 2
-SOCATID=$(docker container ls --all -q -f name=l3d_socat)
-if [[ -n ${SOCATID} ]]; then
-  ssh-add
-  echo "All set!"
-  exit 0
-fi
-exit 1
diff --git a/setup/scripts/setup b/setup/scripts/setup
index eff93626007e6150f8e455b61d12b073fc7a249b..4c6fed84af0aa18f547d8eb5d2c01a7b9df55693 100755
--- a/setup/scripts/setup
+++ b/setup/scripts/setup
@@ -1,7 +1,6 @@
 #!/bin/sh
 
 cp /usr/local/bin/l3d /setup/l3d
-cp /usr/local/bin/prepareMac4L3d /setup/prepareMac4L3d
 
 echo "L3D installed successfully!"
 echo ""