diff --git a/importers/nginx.sh b/importers/nginx.sh
index 06c79537f2c8d378e9f5448ec35481b1086e6cba..008c3fc097473e6c3c59104dc4b84951d89a4c4e 100755
--- a/importers/nginx.sh
+++ b/importers/nginx.sh
@@ -1,8 +1,9 @@
 #!/bin/bash
 
 if [ ! -e "/data/per-user/$USER/nginx/data/www-content/index.html" ]; then
-  if [ -e "/data/per-user/$USER/nginx/data/git-url.txt" ]; then
-    git clone `cat /data/per-user/$USER/nginx/data/git-url.txt` /data/per-user/$USER/nginx/data/www-content
+  if [ -e "/data/per-user/$USER/nginx/data/GITURL" ]; then
+    git clone `cat /data/per-user/$USER/nginx/data/GITURL` /data/per-user/$USER/nginx/data/www-content
+    cd /data/per-user/$USER/nginx/data/www-content && git checkout master
   else
     mkdir -p /data/per-user/$USER/nginx/data/www-content
     echo Hello $USER > /data/per-user/$USER/nginx/data/www-content/index.html
diff --git a/importers/wordpress-subdir.sh b/importers/wordpress-subdir.sh
new file mode 100755
index 0000000000000000000000000000000000000000..977a31167d71cd544f73ba35b06af882ef4dddd2
--- /dev/null
+++ b/importers/wordpress-subdir.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+if [ ! -d "/data/per-user/$USER/wordpress-subdir/data" ]; then
+  cd /data/per-user/$USER/
+  tar xvzf /data/indiehosters/blueprints/wordpress.tgz
+fi
+
+cat /data/per-user/$USER/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > /data/per-user/$USER/wordpress-subdir/.env
+
+if [ ! -e "/data/per-user/$USER/wordpress-subdir/data/www-content/index.html" ]; then
+  if [ -e "/data/per-user/$USER/wordpress-subdir/data/GITURL" ]; then
+    git clone `cat /data/per-user/$USER/wordpress-subdir/data/GITURL` /data/per-user/$USER/wordpress-subdir/data/www-content
+    cd /data/per-user/$USER/wordpress-subdir/data/www-content && git checkout master
+  else
+    mkdir -p /data/per-user/$USER/wordpress-subdir/data/www-content
+    echo Hello $USER > /data/per-user/$USER/wordpress-subdir/data/www-content/index.html
+  fi
+fi
diff --git a/importers/wordpress.sh b/importers/wordpress.sh
index 7e1f05698acd5488aaf8be1f18c304dd0c551466..3af43a04285e76712dce378ac3690ee0e5072a47 100755
--- a/importers/wordpress.sh
+++ b/importers/wordpress.sh
@@ -3,5 +3,6 @@
 if [ ! -d "/data/per-user/$USER/wordpress/data" ]; then
   cd /data/per-user/$USER/
   tar xvzf /data/indiehosters/blueprints/wordpress.tgz
-  cat /data/per-user/$USER/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > /data/per-user/$USER/wordpress/.env
 fi
+
+cat /data/per-user/$USER/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > /data/per-user/$USER/wordpress/.env
diff --git a/scripts/activate-user.sh b/scripts/activate-user.sh
index 0e2bd8529d8a391d807b08086bc53d3e56d378be..c4ce8ddae143328ead21ed89c631b270e1c47327 100755
--- a/scripts/activate-user.sh
+++ b/scripts/activate-user.sh
@@ -10,7 +10,7 @@ fi
 mkdir -p /data/per-user/$DOMAIN/$IMAGE/data
 if [ $# -ge 3 ]; then
   GITREPO=$3
-  echo $GITREPO > /data/per-user/$DOMAIN/$IMAGE/data/git-url.txt
+  echo $GITREPO > /data/per-user/$DOMAIN/$IMAGE/data/GITURL
 fi
 
 # Start service for new site (and create the user). This will also enable the git puller.
diff --git a/scripts/setup.sh b/scripts/setup.sh
index edc6dddf6e37b5794167687e440ef275937ab38d..5a61542ee2761a779d3f2c6850a890e074df9c8d 100755
--- a/scripts/setup.sh
+++ b/scripts/setup.sh
@@ -1,5 +1,12 @@
 #!/bin/bash -eux
 
+if [ $# -ge 1 ]; then
+  HOSTNAME=$1
+else
+  echo "Usage: sh /data/indiehosters/scripts/setup.sh k1.you.indiehosters.net"
+  exit 1
+fi
+
 # Install cloud-config
 if [ -f /tmp/vagrantfile-user-data ]; then
   mv /tmp/vagrantfile-user-data /var/lib/coreos-vagrant/vagrantfile-user-data
@@ -12,14 +19,15 @@ docker pull indiehosters/postfix-forwarder
 docker pull indiehosters/nginx
 docker pull indiehosters/mysql
 docker pull indiehosters/wordpress
+docker pull indiehosters/wordpress-subdir
 
 # Install unit-files
 cp /data/indiehosters/unit-files/* /etc/systemd/system
 systemctl daemon-reload
 
 # Activate default domain
-sh /data/indiehosters/scripts/activate-user.sh $1 nginx
-etcdctl set /services/default '{"app":"nginx", "hostname":"'$1'"}'
+sh /data/indiehosters/scripts/activate-user.sh $HOSTNAME nginx
+etcdctl set /services/default '{"app":"nginx", "hostname":"'$HOSTNAME'"}'
 
 # Configure and start HAproxy
 mkdir -p /data/server-wide/haproxy/approved-certs
diff --git a/unit-files/gitpuller@.path b/unit-files/gitpuller@.path
new file mode 100644
index 0000000000000000000000000000000000000000..3bba8953de38483fd40573314947bb57258e6af0
--- /dev/null
+++ b/unit-files/gitpuller@.path
@@ -0,0 +1,2 @@
+[Path]
+PathExists=/data/per-user/%i/nginx/data/GITURL
diff --git a/unit-files/nginx-gitpuller@.service b/unit-files/gitpuller@.service
similarity index 76%
rename from unit-files/nginx-gitpuller@.service
rename to unit-files/gitpuller@.service
index 277cb1f22592dd6a97df9191b886fd2115dd6989..f85414fa5d3bad0256ac63f28eb9d1299c19d59f 100644
--- a/unit-files/nginx-gitpuller@.service
+++ b/unit-files/gitpuller@.service
@@ -1,9 +1,6 @@
 [Unit]
 Description=nginx git puller
 
-# Dependency ordering
-Before=nginx@%i.service
-
 [Service]
 ExecStart=cd /data/per-user/%i/nginx/data/www-content && git pull
 
diff --git a/unit-files/nginx-gitpuller@.timer b/unit-files/gitpuller@.timer
similarity index 100%
rename from unit-files/nginx-gitpuller@.timer
rename to unit-files/gitpuller@.timer
diff --git a/unit-files/nginx-gitpuller@.path b/unit-files/nginx-gitpuller@.path
deleted file mode 100644
index 564b2bc13b1e4c1c77fb7d373d86b24071e7f227..0000000000000000000000000000000000000000
--- a/unit-files/nginx-gitpuller@.path
+++ /dev/null
@@ -1,2 +0,0 @@
-[Path]
-PathExists=/data/per-user/%i/nginx/data/git-url.txt
diff --git a/unit-files/nginx@.service b/unit-files/nginx@.service
index d8830cec67b6496679c85ceb3d8b953a436bf9dd..9b6c7333167051feb98f56457afac95a903fa502 100644
--- a/unit-files/nginx@.service
+++ b/unit-files/nginx@.service
@@ -5,6 +5,7 @@ Description=%p-%i
 Requires=docker.service
 Requires=%p-importer@%i.service
 Requires=%p-discovery@%i.service
+Wants=gitpuller@%i.service
 
 # Dependency ordering
 After=docker.service
diff --git a/unit-files/wordpress-subdir-discovery@.service b/unit-files/wordpress-subdir-discovery@.service
new file mode 100644
index 0000000000000000000000000000000000000000..099c7b36d391215d1ae47aee88b0d2cd1cf057ac
--- /dev/null
+++ b/unit-files/wordpress-subdir-discovery@.service
@@ -0,0 +1,35 @@
+[Unit]
+Description=%p for %i etcd registration
+
+# Requirements
+Requires=etcd.service
+Requires=wordpress-subdir@%i.service
+
+# Dependency ordering
+After=etcd.service
+After=wordpress-subdir@%i.service
+
+# Dependency binding
+BindsTo=wordpress-subdir@%i.service
+
+[Service]
+# Start
+## Test whether service is accessible and then register useful information
+ExecStart=/bin/bash -c ' \
+  sleep 3; \
+  while true; do \
+    app=`echo %p | cut -d"-" -f1,2`; \
+    ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' $app-%i`; \
+    curl -f $ip; \
+    if [ $? -eq 0 ]; then \
+      etcdctl set /services/$app/%i \'{"ip":"\'$ip\'", "port":"80"}\' --ttl 60; \
+    else \
+      etcdctl rm /services/$app/%i; \
+    fi; \
+    sleep 50; \
+  done'
+
+# Stop
+ExecStop=/bin/bash -ceux ' \
+  app=`echo %p | cut -d"-" -f1`; \
+  /usr/bin/etcdctl rm /services/$app/%i
diff --git a/unit-files/wordpress-subdir-importer@.service b/unit-files/wordpress-subdir-importer@.service
new file mode 100644
index 0000000000000000000000000000000000000000..2ab17f4071f3a27724d0548d4ec7001ab9be45b2
--- /dev/null
+++ b/unit-files/wordpress-subdir-importer@.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=wordpress-subdir importer
+
+# Dependency ordering
+After=mysql-importer@%i.service
+Before=wordpress-subdir@%i.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+Environment=USER=%i
+ExecStart=/data/indiehosters/importers/wordpress-subdir.sh
+
+[Install]
+WantedBy=wordpress-subdir@%i.service
diff --git a/unit-files/wordpress-subdir@.service b/unit-files/wordpress-subdir@.service
new file mode 100644
index 0000000000000000000000000000000000000000..201d7e1099c936554f194261c6fb2ddc9720e3f1
--- /dev/null
+++ b/unit-files/wordpress-subdir@.service
@@ -0,0 +1,34 @@
+[Unit]
+Description=%p-%i
+
+# Requirements
+Requires=docker.service
+Requires=etcd.service
+Requires=mysql@%i.service
+Requires=%p-importer@%i.service
+Requires=%p-discovery@%i.service
+Wants=gitpuller@%i.service
+
+# Dependency ordering
+After=docker.service
+After=mysql@%i.service
+After=%p-importer@%i.service
+Before=%p-discovery@%i.service
+
+[Service]
+Restart=always
+ExecStartPre=-/usr/bin/docker kill %p-%i
+ExecStartPre=-/usr/bin/docker rm %p-%i
+ExecStart=/usr/bin/docker run \
+  --name %p-%i \
+  --link mysql-%i:db \
+  -v /data/per-user/%i/%p/data/wp-content:/wordpress/wp-content \
+  -v /data/per-user/%i/%p/data/.htaccess:/wordpress/.htaccess \
+  -v /data/per-user/%i/%p/data/www-content:/app \
+  --env-file /data/per-user/%i/%p/.env \
+  indiehosters/wordpress-subdir
+ExecReload=/usr/bin/docker restart %p-%i
+ExecStop=/usr/bin/docker stop %p-%i
+
+[Install]
+WantedBy=multi-user.target