diff --git a/src/main/resources/META-INF/resources/cms2/base.css b/src/main/resources/META-INF/resources/cms2/base.css
index 14d4f7a..0cec83c 100644
--- a/src/main/resources/META-INF/resources/cms2/base.css
+++ b/src/main/resources/META-INF/resources/cms2/base.css
@@ -11,8 +11,11 @@
 /* Sanitize.css */
 @import "../web_modules/sanitize.css/forms.css";
 @import "../web_modules/sanitize.css/typography.css";
-/* */
 
+/* Content Tools */
+@import "../web_modules/ContentTools/build/content-tools.min.css";
+
+/* Fonts */
 @import "./fonts/fira.css";
 @import "./fonts/firacode.css";
 @import "./fonts/iosevka.css";
diff --git a/src/main/resources/META-INF/resources/lib.js b/src/main/resources/META-INF/resources/lib.js
index 7a59751..f64586d 100644
--- a/src/main/resources/META-INF/resources/lib.js
+++ b/src/main/resources/META-INF/resources/lib.js
@@ -4,6 +4,7 @@
 import './lazychat/newLazychatMessage.js';
 import './posts/commentBox.js';
 import './posts/postList.js';
+import './wiki/wikiPage.js';
 
 import './web_modules/elix/define/Button.js';
 import './web_modules/elix/define/ExpandablePanel.js';
diff --git a/src/main/resources/META-INF/resources/package.json b/src/main/resources/META-INF/resources/package.json
index e64f3a4..21ce087 100644
--- a/src/main/resources/META-INF/resources/package.json
+++ b/src/main/resources/META-INF/resources/package.json
@@ -27,8 +27,8 @@
   "snowpack": {
     "plugins": [],
     "install": [
-      "ContentTools",
       "ContentTools/build/content-tools.min.css",
+      "ContentTools/build/content-tools.min.js",
       "ContentTools/build/images/*",
       "bosonic",
       "elix/define/*.js",
diff --git a/src/main/resources/META-INF/resources/wiki/wikiPage.js b/src/main/resources/META-INF/resources/wiki/wikiPage.js
new file mode 100644
index 0000000..9f96732
--- /dev/null
+++ b/src/main/resources/META-INF/resources/wiki/wikiPage.js
@@ -0,0 +1,53 @@
+import '../web_modules/ContentTools/build/content-tools.min.js';
+
+window.addEventListener('DOMContentLoaded', () => {
+  let editor = ContentTools.EditorApp.get();
+  editor.init('*[data-editable]', 'data-name');
+
+  editor.addEventListener('saved', async function (ev) {
+    document.getElementById("warning-panel").close();
+
+    let {regions} = ev.detail();
+    if (Object.getOwnPropertyNames(regions).length === 0) {
+      // Nothing changed.
+      return;
+    }
+
+    this.busy(true);
+
+    let requestParams = new URLSearchParams();
+    for (let name of Object.getOwnPropertyNames(regions)) {
+      requestParams.append(name, regions[name]);
+    }
+
+    let {pageTitle} = document.getElementById('wiki-page').dataset;
+
+    let response = await fetch(`/wiki/${pageTitle}`, {
+      method: 'POST',
+      body: requestParams
+    });
+
+    if (!response.ok) {
+      document.getElementById("warning-panel").open();
+      document.getElementById("warning-text").innerText = `Failed to save page: ${response.statusText}`;
+      this.busy(false);
+
+return;
+    }
+
+    let status = await response.json();
+    if (status.status !== "ok") {
+      document.getElementById("warning-panel").open();
+      document.getElementById("warning-text").innerText = `Failed to save page: ${JSON.stringify(status)}`;
+      this.busy(false);
+
+return;
+    }
+
+    if (status.hasOwnProperty("content")) {
+      document.getElementById("wiki-content").innerHTML = status.content;
+    }
+
+    this.busy(false);
+  });
+});
diff --git a/src/main/resources/templates/benki/wiki/wikiPage.html b/src/main/resources/templates/benki/wiki/wikiPage.html
index 63d9950..b456475 100644
--- a/src/main/resources/templates/benki/wiki/wikiPage.html
+++ b/src/main/resources/templates/benki/wiki/wikiPage.html
@@ -7,7 +7,6 @@
 {#nav}{#navbar siteSection="Wiki" /}
 
 {#head}
-<link rel="stylesheet" type="text/css" href="/web_modules/ContentTools/build/content-tools.min.css" />
 <script type="module" src="/lib.js" defer></script>
 
 <style type="text/css">
@@ -16,62 +15,10 @@
     font-style: italic;
   }
 </style>
-
-<script type="module" defer>
-  import ContentTools from "/web_modules/ContentTools.js";
-
-  window.addEventListener('DOMContentLoaded', function() {
-    let editor = ContentTools.EditorApp.get();
-    editor.init('*[data-editable]', 'data-name');
-
-    editor.addEventListener('saved', async function (ev) {
-      document.getElementById("warning-panel").close();
-
-      let regions = ev.detail().regions;
-      if (Object.getOwnPropertyNames(regions).length === 0) {
-        // Nothing changed.
-        return;
-      }
-
-      this.busy(true);
-
-      let requestParams = new URLSearchParams();
-      for (let name of Object.getOwnPropertyNames(regions)) {
-        requestParams.append(name, regions[name]);
-      }
-
-      let response = await fetch("/wiki/{page.title}", {
-        method: 'POST',
-        body: requestParams
-      });
-
-      if (!response.ok) {
-        document.getElementById("warning-panel").open();
-        document.getElementById("warning-text").innerText = "Failed to save page: " + response.statusText;
-        this.busy(false);
-        return;
-      }
-
-      let status = await response.json();
-      if (status.status !== "ok") {
-        document.getElementById("warning-panel").open();
-        document.getElementById("warning-text").innerText = "Failed to save page: " + JSON.stringify(status);
-        this.busy(false);
-        return;
-      }
-
-      if (status.hasOwnProperty("content")) {
-        document.getElementById("wiki-content").innerHTML = status.content;
-      }
-
-      this.busy(false);
-    });
-  });
-</script>
 {/head}
 
 {#body}
-<article id="wiki-page">
+<article id="wiki-page" data-page-title="{page.title}">
   <header>
     <div data-editable data-name="wiki-title">
       <h1>{page.title}</h1>
