diff --git a/roles/saltmaster/zemke-rhyne/account.sls b/roles/saltmaster/zemke-rhyne/account.sls
new file mode 100644
--- /dev/null
+++ b/roles/saltmaster/zemke-rhyne/account.sls
@@ -0,0 +1,25 @@
+#   -------------------------------------------------------------
+#   Salt — Provision Docker engine
+#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#   Project:        Nasqueron
+#   Created:        2017-04-28
+#   License:        Trivial work, not eligible to copyright
+#   -------------------------------------------------------------
+
+{% from "map.jinja" import dirs with context %}
+{% set zr_home = "/home/zr" %}
+
+#   -------------------------------------------------------------
+#   Account
+#
+#   This account is used by Jenkins jobs to deploy artifacts
+#   after a build.
+#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+zr_account:
+  user.present:
+    - name: zr
+    - fullname: Zemke-Rhyne
+    - uid: 8900
+    - gid: 9002
+    - home: {{ zr_home }}
diff --git a/roles/saltmaster/zemke-rhyne/data.sls b/roles/saltmaster/zemke-rhyne/data.sls
--- a/roles/saltmaster/zemke-rhyne/data.sls
+++ b/roles/saltmaster/zemke-rhyne/data.sls
@@ -6,11 +6,24 @@
 #   License:        Trivial work, not eligible to copyright
 #   -------------------------------------------------------------
 
+{% set zr_home = "/home/zr" %}
+
 # If we pass the JSON as contents, it will be converted into Python,
 # so we've a template to call directly the method.
 
-/home/zr/data/servers.json:
+{{ zr_home }}/data/servers.json:
   file.managed:
     - source: salt://roles/saltmaster/zemke-rhyne/files/servers.json.jinja
     - template: jinja
     - user: zr
+
+zr_authorized_keys:
+  cmd.run:
+    - runas: zr
+    - cwd: {{ zr_home }}
+    - name: make clean all
+    - onchanges:
+      - file: {{ zr_home }}/data/servers.json
+    - require:
+      - user: zr_account
+      - file: {{ zr_home }}/Makefile
diff --git a/roles/webserver-legacy/zr/files/dot.arcrc.json b/roles/saltmaster/zemke-rhyne/files/dot.arcrc.json
rename from roles/webserver-legacy/zr/files/dot.arcrc.json
rename to roles/saltmaster/zemke-rhyne/files/dot.arcrc.json
diff --git a/roles/saltmaster/zemke-rhyne/init.sls b/roles/saltmaster/zemke-rhyne/init.sls
--- a/roles/saltmaster/zemke-rhyne/init.sls
+++ b/roles/saltmaster/zemke-rhyne/init.sls
@@ -2,37 +2,39 @@
 #   Salt — Provision Docker engine
 #   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 #   Project:        Nasqueron
-#   Created:        2018-09-08
+#   Created:        2017-04-28
 #   License:        Trivial work, not eligible to copyright
+#   -------------------------------------------------------------
+
+#   -------------------------------------------------------------
+#   But first, we interrupt your configuration for some ASCII art.
+#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 #
-#           ___           ___           ___           ___           ___
-#          /  /\         /  /\         /__/\         /__/|         /  /\
-#         /  /::|       /  /:/_       |  |::\       |  |:|        /  /:/_
-#        /  /:/:|      /  /:/ /\      |  |:|:\      |  |:|       /  /:/ /\
-#       /  /:/|:|__   /  /:/ /:/_   __|__|:|\:\   __|  |:|      /  /:/ /:/_
-#      /__/:/ |:| /\ /__/:/ /:/ /\ /__/::::| \:\ /__/\_|:|____ /__/:/ /:/ /\
-#      \__\/  |:|/:/ \  \:\/:/ /:/ \  \:\~~\__\/ \  \:\/:::::/ \  \:\/:/ /:/
-#          |  |:/:/   \  \::/ /:/   \  \:\        \  \::/~~~~   \  \::/ /:/
-#          |  |::/     \  \:\/:/     \  \:\        \  \:\        \  \:\/:/
-#          |  |:/       \  \::/       \  \:\        \  \:\        \  \::/
-#          |__|/   ___   \__\/   ___   \__\/         \__\/ ___     \__\/ ___
-#                 /  /\         /__/\          ___        /__/\         /  /\
-#                /  /::\        \  \:\        /__/|       \  \:\       /  /:/_
-#               /  /:/\:\        \__\:\      |  |:|        \  \:\     /  /:/ /\
-#              /  /:/~/:/    ___ /  /::\     |  |:|    _____\__\:\   /  /:/ /:/_
-#             /__/:/ /:/___ /__/\  /:/\:\  __|__|:|   /__/::::::::\ /__/:/ /:/ /\
-#             \  \:\/:::::/ \  \:\/:/__\/ /__/::::\   \  \:\~~\~~\/ \  \:\/:/ /:/
-#              \  \::/~~~~   \  \::/         ~\~~\:\   \  \:\  ~~~   \  \::/ /:/
-#               \  \:\        \  \:\           \  \:\   \  \:\        \  \:\/:/
-#                \  \:\        \  \:\           \__\/    \  \:\        \  \::/
-#                 \__\/         \__\/                     \__\/         \__\/
-#
-#   Support tools for a Docker <--> Phabricator bridge.
 #
-#   Use the Zemke-Rhyne account to build Docker containers for
-#   Nasqueron applications, fetching information from DevCentral.
+#        ___           ___           ___           ___           ___
+#       /  /\         /  /\         /__/\         /__/|         /  /\
+#      /  /::|       /  /:/_       |  |::\       |  |:|        /  /:/_
+#     /  /:/:|      /  /:/ /\      |  |:|:\      |  |:|       /  /:/ /\
+#    /  /:/|:|__   /  /:/ /:/_   __|__|:|\:\   __|  |:|      /  /:/ /:/_
+#   /__/:/ |:| /\ /__/:/ /:/ /\ /__/::::| \:\ /__/\_|:|____ /__/:/ /:/ /\
+#   \__\/  |:|/:/ \  \:\/:/ /:/ \  \:\~~\__\/ \  \:\/:::::/ \  \:\/:/ /:/
+#       |  |:/:/   \  \::/ /:/   \  \:\        \  \::/~~~~   \  \::/ /:/
+#       |  |::/     \  \:\/:/     \  \:\        \  \:\        \  \:\/:/
+#       |  |:/       \  \::/       \  \:\        \  \:\        \  \::/
+#       |__|/   ___   \__\/   ___   \__\/         \__\/ ___     \__\/ ___
+#              /  /\         /__/\          ___        /__/\         /  /\
+#             /  /::\        \  \:\        /__/|       \  \:\       /  /:/_
+#            /  /:/\:\        \__\:\      |  |:|        \  \:\     /  /:/ /\
+#           /  /:/~/:/    ___ /  /::\     |  |:|    _____\__\:\   /  /:/ /:/_
+#          /__/:/ /:/___ /__/\  /:/\:\  __|__|:|   /__/::::::::\ /__/:/ /:/ /\
+#          \  \:\/:::::/ \  \:\/:/__\/ /__/::::\   \  \:\~~\~~\/ \  \:\/:/ /:/
+#          \  \::/~~~~   \  \::/         ~\~~\:\   \  \:\  ~~~   \  \::/ /:/
+#           \  \:\        \  \:\           \  \:\   \  \:\        \  \:\/:/
+#            \  \:\        \  \:\           \__\/    \  \:\        \  \::/
+#             \__\/         \__\/                     \__\/         \__\/
 #
-#   -------------------------------------------------------------
 
 include:
+  - .account
+  - .software
   - .data
diff --git a/roles/saltmaster/zemke-rhyne/software.sls b/roles/saltmaster/zemke-rhyne/software.sls
new file mode 100644
--- /dev/null
+++ b/roles/saltmaster/zemke-rhyne/software.sls
@@ -0,0 +1,69 @@
+#   -------------------------------------------------------------
+#   Salt — Provision Docker engine
+#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#   Project:        Nasqueron
+#   Created:        2017-04-28
+#   License:        Trivial work, not eligible to copyright
+#   -------------------------------------------------------------
+
+{% from "map.jinja" import dirs with context %}
+{% set zr_home = "/home/zr" %}
+
+#   -------------------------------------------------------------
+#   Required dependencies
+#
+#   :: jq
+#   :: arc
+#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+zr_required_sofware:
+  pkg.installed:
+    - pkgs:
+      - jq
+
+      # Devserver role provides their own Git clone of Arcanist
+      # For other servers, we need the package.
+      {% if not salt['node.has_role']('devserver') %}
+      - arcanist
+      {% endif %}
+
+#   -------------------------------------------------------------
+#   Deploy files and directory
+#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+{% for dir in ['data', 'lib'] %}
+{{ zr_home }}/{{ dir }}:
+  file.recurse:
+    - source: salt://software/zemke-rhyne/{{ dir }}
+    - include_empty: True
+    - clean: False
+    - dir_mode: 755
+    - file_mode: 644
+    - user: 8900
+    - group: 9002
+{% endfor %}
+
+{{ zr_home }}/bin:
+  file.recurse:
+    - source: salt://software/zemke-rhyne/bin
+    - dir_mode: 755
+    - file_mode: 755
+    - user: 8900
+    - group: 9002
+
+{% for file in ['README', 'Makefile', '.arcconfig', '.arclint'] %}
+{{ zr_home }}/{{ file }}:
+  file.managed:
+    - source: salt://software/zemke-rhyne/{{ file }}
+    - mode: 644
+    - user: 8900
+    - group: 9002
+{% endfor %}
+
+{{ zr_home }}/.arcrc:
+  file.managed:
+    - source: salt://roles/webserver-legacy/zr/files/dot.arcrc.json
+    - replace: False
+    - mode: 600
+    - user: 8900
+    - group: 9002
diff --git a/roles/webserver-legacy/init.sls b/roles/webserver-legacy/init.sls
--- a/roles/webserver-legacy/init.sls
+++ b/roles/webserver-legacy/init.sls
@@ -10,7 +10,6 @@
 include:
   - .account
   - .directories
-  - .zr
   - .nginx
   - .static-sites
   - .php-sites
diff --git a/roles/webserver-legacy/zr/init.sls b/roles/webserver-legacy/zr/init.sls
deleted file mode 100644
--- a/roles/webserver-legacy/zr/init.sls
+++ /dev/null
@@ -1,121 +0,0 @@
-#   -------------------------------------------------------------
-#   Salt — Sites to provision on the legacy web serves
-#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#   Project:        Nasqueron
-#   Created:        2017-04-28
-#   License:        Trivial work, not eligible to copyright
-#   -------------------------------------------------------------
-
-{% from "map.jinja" import dirs with context %}
-{% set zr_home = "/home/zr" %}
-
-#   -------------------------------------------------------------
-#   But first, we interrupt your configuration for some ASCI art.
-#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#
-#
-#        ___           ___           ___           ___           ___
-#       /  /\         /  /\         /__/\         /__/|         /  /\
-#      /  /::|       /  /:/_       |  |::\       |  |:|        /  /:/_
-#     /  /:/:|      /  /:/ /\      |  |:|:\      |  |:|       /  /:/ /\
-#    /  /:/|:|__   /  /:/ /:/_   __|__|:|\:\   __|  |:|      /  /:/ /:/_
-#   /__/:/ |:| /\ /__/:/ /:/ /\ /__/::::| \:\ /__/\_|:|____ /__/:/ /:/ /\
-#   \__\/  |:|/:/ \  \:\/:/ /:/ \  \:\~~\__\/ \  \:\/:::::/ \  \:\/:/ /:/
-#       |  |:/:/   \  \::/ /:/   \  \:\        \  \::/~~~~   \  \::/ /:/
-#       |  |::/     \  \:\/:/     \  \:\        \  \:\        \  \:\/:/
-#       |  |:/       \  \::/       \  \:\        \  \:\        \  \::/
-#       |__|/   ___   \__\/   ___   \__\/         \__\/ ___     \__\/ ___
-#              /  /\         /__/\          ___        /__/\         /  /\
-#             /  /::\        \  \:\        /__/|       \  \:\       /  /:/_
-#            /  /:/\:\        \__\:\      |  |:|        \  \:\     /  /:/ /\
-#           /  /:/~/:/    ___ /  /::\     |  |:|    _____\__\:\   /  /:/ /:/_
-#          /__/:/ /:/___ /__/\  /:/\:\  __|__|:|   /__/::::::::\ /__/:/ /:/ /\
-#          \  \:\/:::::/ \  \:\/:/__\/ /__/::::\   \  \:\~~\~~\/ \  \:\/:/ /:/
-#          \  \::/~~~~   \  \::/         ~\~~\:\   \  \:\  ~~~   \  \::/ /:/
-#           \  \:\        \  \:\           \  \:\   \  \:\        \  \:\/:/
-#            \  \:\        \  \:\           \__\/    \  \:\        \  \::/
-#             \__\/         \__\/                     \__\/         \__\/
-#
-
-#   -------------------------------------------------------------
-#   Required software
-#
-#   :: jq
-#   :: arc
-#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-zr_required_sofware:
-  pkg.installed:
-    - pkgs:
-      - jq
-      # Devserver role provides their own Git clone of Arcanist
-      # For other servers, we need the package.
-      {% if not salt['node.has_role']('devserver') %}
-      - arcanist
-      {% endif %}
-
-#   -------------------------------------------------------------
-#   Account
-#
-#   This account is used by Jenkins jobs to deploy artefacts
-#   after a build.
-#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-zr_account:
-  user.present:
-    - name: zr
-    - fullname: Zemke-Rhyne
-    - uid: 8900
-    - gid: 9002
-    - home: {{ zr_home }}
-
-#   -------------------------------------------------------------
-#   Deploy files and directory
-#   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-{% for dir in ['data', 'lib'] %}
-{{ zr_home }}/{{ dir }}:
-  file.recurse:
-    - source: salt://software/zemke-rhyne/{{ dir }}
-    - include_empty: True
-    - clean: False
-    - dir_mode: 755
-    - file_mode: 644
-    - user: 8900
-    - group: 9002
-{% endfor %}
-
-{{ zr_home }}/bin:
-  file.recurse:
-    - source: salt://software/zemke-rhyne/bin
-    - dir_mode: 755
-    - file_mode: 755
-    - user: 8900
-    - group: 9002
-
-{% for file in ['README', 'Makefile', '.arcconfig', '.arclint'] %}
-{{ zr_home }}/{{ file }}:
-  file.managed:
-    - source: salt://software/zemke-rhyne/{{ file }}
-    - mode: 644
-    - user: 8900
-    - group: 9002
-{% endfor %}
-
-{{ zr_home }}/.arcrc:
-  file.managed:
-    - source: salt://roles/webserver-legacy/zr/files/dot.arcrc.json
-    - replace: False
-    - mode: 600
-    - user: 8900
-    - group: 9002
-
-zr_make:
-  cmd.run:
-    - name: make
-    - runas: zr
-    - cwd: {{ zr_home }}
-    - creates: {{ zr_home }}/.ssh/authorized_keys
-    - require:
-      - user: zr_account
-      - file: {{ zr_home }}/Makefile