diff --git a/macros/README.md b/macros/README.md
index db246ad..4814bb6 100644
--- a/macros/README.md
+++ b/macros/README.md
@@ -11,7 +11,5 @@ A short description of what the variables do and where they should go:
* `%CONTENT_DIR%` (anywhere in code) → the path to the ThreadR directory (without domain name)
* `%STYLESHEET%` (in HTML) → adds the tag linking the stylesheet
* `%REQUIRE_LOGIN%` (in PHP code, before any non-header data is sent to client) → sends users to the login page if they are not logged in
-### [navbar.template](./navbar.template), [banner_cookies.template](./banner_cookies.template)
-file templates for variables from the code variable replacement system
### [README.md](./README.md)
this file
diff --git a/macros/pass0_templates.json b/macros/pass0_templates.json
new file mode 100644
index 0000000..fc69442
--- /dev/null
+++ b/macros/pass0_templates.json
@@ -0,0 +1,4 @@
+{
+"NAVBAR":["file","macros/templates/navbar.template"],
+"BANNER_COOKIES":["file","macros/templates/banner_cookies.template"]
+}
diff --git a/macros/pass1.json b/macros/pass1.json
new file mode 100644
index 0000000..936428d
--- /dev/null
+++ b/macros/pass1.json
@@ -0,0 +1,4 @@
+{
+"STYLESHEET":"",
+"REQUIRE_LOGIN":"if (!$login) { header(\"Location: https:\/\/%DOMAIN_NAME%%CONTENT_DIR%\/login\/\\?error=session\"); die(); }"
+}
diff --git a/macros/variable_grabbler.pass2.json b/macros/pass2.json
similarity index 90%
rename from macros/variable_grabbler.pass2.json
rename to macros/pass2.json
index ef01cb4..3f34f41 100644
--- a/macros/variable_grabbler.pass2.json
+++ b/macros/pass2.json
@@ -1,6 +1,5 @@
{
-"CONTENT_DIR":"/threadr",
-"NO_CHEAP_SESSION_STEALING":"if (isset($_SESSION['user_id'])) {if ($_SESSION['user_ip']!=$_SERVER['REMOTE_ADDR'] || $_SESSION['user_http_user_agent']!=$_SERVER['HTTP_USER_AGENT']){ $_SESSION = array(); if (ini_get(\"session.use_cookies\")){ $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params[\"path\"], $params[\"domain\"], $params[\"secure\"], $params[\"httponly\"]); } session_destroy(); header(\"Location: https://threadr.lostcave.ddnss.de/threadr/login/\\?error=session\"); die();}}",
+"NO_CHEAP_SESSION_STEALING":"if (isset($_SESSION['user_id'])) {if ($_SESSION['user_ip']!=$_SERVER['REMOTE_ADDR'] || $_SESSION['user_http_user_agent']!=$_SERVER['HTTP_USER_AGENT']){ $_SESSION = array(); if (ini_get(\"session.use_cookies\")){ $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params[\"path\"], $params[\"domain\"], $params[\"secure\"], $params[\"httponly\"]); } session_destroy(); header(\"Location: https://%DOMAIN_NAME%%CONTENT_DIR%/login/\\?error=session\"); die();}}",
"SET_LOGIN_VARIABLE":"if (isset($_SESSION['user_id'])) { $login = true; } else { $login = false; }",
"PLEAZE_NO_CACHE":"header('Cache-Control: no-cache, no-store, must-revalidate');header('Pragma: no-cache');header('Expires: 0');",
"FORCE_LOGOUT":"$_SESSION = array(); if (ini_get('session.use_cookies')) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly']);} session_destroy();",
diff --git a/macros/pass3_base-names.json b/macros/pass3_base-names.json
new file mode 100644
index 0000000..24eb037
--- /dev/null
+++ b/macros/pass3_base-names.json
@@ -0,0 +1,4 @@
+{
+ "DOMAIN_NAME":["exec","sed --quiet "/domain_name=/s/.*=//p" config/names.conf"],
+ "CONTENT_DIR":["exec","sed --quiet "/threadr_home=/s/.*=//p" config/names.conf"]
+}
diff --git a/macros/pass4_install-config.json b/macros/pass4_install-config.json
new file mode 100644
index 0000000..6e96021
--- /dev/null
+++ b/macros/pass4_install-config.json
@@ -0,0 +1,3 @@
+{
+ "ABOUT_PAGE":["file","config/templates/about.template"]
+}
diff --git a/macros/templates/README.md b/macros/templates/README.md
new file mode 100644
index 0000000..bd09eae
--- /dev/null
+++ b/macros/templates/README.md
@@ -0,0 +1,5 @@
+# Files
+### [navbar.template](./navbar.template)
+contains the navbar, depends on a variable in PHP to determine which field on the navbar should be highlighted
+### [banner_cookies.template](./banner_cookies.template)
+contains the cookie banner
diff --git a/macros/banner_cookies.template b/macros/templates/banner_cookies.template
similarity index 100%
rename from macros/banner_cookies.template
rename to macros/templates/banner_cookies.template
diff --git a/macros/navbar.template b/macros/templates/navbar.template
similarity index 100%
rename from macros/navbar.template
rename to macros/templates/navbar.template
diff --git a/macros/variable_grabbler.pass0.json b/macros/variable_grabbler.pass0.json
deleted file mode 100644
index aacd39b..0000000
--- a/macros/variable_grabbler.pass0.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-"NAVBAR":["file","macros/navbar.template"],
-"BANNER_COOKIES":["file","macros/banner_cookies.template"],
-"ABOUT_PAGE":["file","config/about.template"]
-}
diff --git a/macros/variable_grabbler.pass1.json b/macros/variable_grabbler.pass1.json
deleted file mode 100644
index b6cf169..0000000
--- a/macros/variable_grabbler.pass1.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-"STYLESHEET":"",
-"REQUIRE_LOGIN":"if (!$login) { header(\"Location: https:\/\/threadr.lostcave.ddnss.de%CONTENT_DIR%\/login\/\\?error=session\"); die(); }"
-}