diff --git a/build.xml b/build.xml
index 4d686aa..49e7beb 100644
--- a/build.xml
+++ b/build.xml
@@ -62,8 +62,6 @@
       <arg value="build"/>
       <arg value="lib.css"/>
       <arg value="lib.js"/>
-      <arg value="web_modules/ContentTools.js"/>
-      <arg value="web_modules/ContentTools/build/content-tools.min.css"/>
     </exec>
   </target>
 
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>
