diff --git a/blueprints/known-0.6.4.tgz b/blueprints/known-0.6.4.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..bc5455a3486d541fc779cb6740f999f46ada1a3c
Binary files /dev/null and b/blueprints/known-0.6.4.tgz differ
diff --git a/scripts/setup.sh b/scripts/setup.sh
index 6a9ac8e900e7349903993e9b3d6c305e50717c28..aff3c1a580d90bbe6fae8b8f3621c61f2a1cfcbe 100755
--- a/scripts/setup.sh
+++ b/scripts/setup.sh
@@ -19,6 +19,7 @@ docker pull indiehosters/postfix-forwarder
 docker pull indiehosters/nginx
 docker pull indiehosters/mysql
 docker pull indiehosters/wordpress
+docker pull indiehosters/known
 
 # Install unit-files
 sudo cp /data/indiehosters/unit-files/* /etc/systemd/system && systemctl daemon-reload
diff --git a/unit-files/known-discovery@.service b/unit-files/known-discovery@.service
new file mode 100644
index 0000000000000000000000000000000000000000..a2a9e2d1abf5826d7be7980a97c1edf35ad456fc
--- /dev/null
+++ b/unit-files/known-discovery@.service
@@ -0,0 +1,34 @@
+[Unit]
+Description=%p for %i etcd registration
+
+# Requirements
+Requires=etcd.service
+
+# Dependency ordering
+After=etcd.service
+After=known@%i.service
+
+# Dependency binding
+BindsTo=known@%i.service
+
+[Service]
+# Start
+## Test whether service is accessible and then register useful information
+ExecStart=/bin/bash -c ' \
+  sleep 30; \
+  while true; do \
+    app=`echo %p | cut -d"-" -f1`; \
+    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 -euxc ' \
+  app=`echo %p | cut -d"-" -f1`; \
+  /usr/bin/etcdctl rm /services/$app/%i
diff --git a/unit-files/known-importer@.service b/unit-files/known-importer@.service
new file mode 100644
index 0000000000000000000000000000000000000000..95ab943585238150765529abb91de6a9ac456168
--- /dev/null
+++ b/unit-files/known-importer@.service
@@ -0,0 +1,30 @@
+[Unit]
+Description=WordPress importer
+
+# Dependency ordering
+After=mysql@%i.service
+Before=known@%i.service
+Before=backup@%i.timer
+
+# Dependency binding
+BindsTo=known@%i.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+Environment=DOMAIN=%i
+ExecStartPre=/data/indiehosters/scripts/backup-init.sh
+ExecStartPre=/data/indiehosters/scripts/import.sh
+ExecStart=/bin/bash -euxc ' \
+  cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \
+  known_folder=/data/domains/%i/known; \
+  if [ ! -d $known_folder/known-content ]; then \
+    mkdir -p $known_folder; \
+    cd $known_folder; \
+    tar xvzf /data/indiehosters/blueprints/known-0.6.4.tgz; \
+    touch .htaccess; \
+  fi; \
+  cat /data/domains/%i/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $known_folder/.env'
+
+[Install]
+WantedBy=known@%i.service
diff --git a/unit-files/known@.service b/unit-files/known@.service
new file mode 100644
index 0000000000000000000000000000000000000000..800220ff6664e09e4f010be44f33d022f3b64500
--- /dev/null
+++ b/unit-files/known@.service
@@ -0,0 +1,33 @@
+[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
+Requires=backup@%i.timer
+
+# 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/domains/%i/%p/known-content:/app/known-content \
+  -v /data/domains/%i/%p/.htaccess:/app/.htaccess \
+  --env-file /data/domains/%i/%p/.env \
+  indiehosters/known
+ExecReload=/usr/bin/docker restart %p-%i
+ExecStop=/usr/bin/docker stop %p-%i
+
+[Install]
+WantedBy=multi-user.target