diff --git a/build/index.php b/build/index.php
index b5ade85..d6c182c 100755
--- a/build/index.php
+++ b/build/index.php
@@ -1245,7 +1245,7 @@ class page_renderer
 		$result .= self::getJS();
 		
 		if(module_exists("feature-search"))
-			$result .= "\t\t<link type='application/opensearchdescription+xml' rel='search' href='?action=opensearch-description' />";
+			$result .= "\t\t<link type='application/opensearchdescription+xml' rel='search' href='?action=opensearch-description' />\n";
 		
 		if(!empty($settings->enable_math_rendering))
 		{
@@ -1303,18 +1303,18 @@ class page_renderer
 	private static $jsLinks = [];
 	public function AddJSLink(string $scriptUrl)
 	{
-		$jsLinks[] = $scriptUrl;
+		static::$jsLinks[] = $scriptUrl;
 	}
 	public function AddJSSnippet(string $script)
 	{
-		$jsSnippets[] = $script;
+		static::$jsSnippets[] = $script;
 	}
 	
 	private static function getJS()
 	{
-		$result = "";
+		$result = "<!-- Javascript -->\n";
 		foreach(static::$jsSnippets as $snippet)
-			$result .= "<script defer>$snippet</script>\n";
+			$result .= "<script defer>\n$snippet\n</script>\n";
 		foreach(static::$jsLinks as $link)
 			$result .= "<script src='" . $link . "' defer></script>\n";
 		return $result;
@@ -3941,29 +3941,34 @@ register_module([
 			<p class='editing-message'>$settings->editing_message</p>
 			<input name='submit-edit' type='submit' value='Save Page' tabindex='3' />
 		</form>";
-			page_renderer::AddJSSnippet("// Adapted from https://jsfiddle.net/2wAzx/13/
-document.querySelector(\"[name=content]\").addEventListener(\"keydown\", (event) => {
-	if(event.keyCode !== 9) return true;
-	var currentValue = event.target.value, startPos = event.target.selectionStart, endPos = event.target.selectionEnd;
-	event.target.value = currentValue.substring(0, startPos) + \"\\t\" + currentValue.substring(endPos);
-	event.target.selectionStart = event.target.selectionEnd = startPos + 1;
-	event.stopPropagation(); event.preventDefault();
-	return false;
+			// Allow tab characters in the page editor
+			page_renderer::AddJSSnippet("window.addEventListener('load', function(event) {
+	// Adapted from https://jsfiddle.net/2wAzx/13/
+	document.querySelector(\"[name=content]\").addEventListener(\"keydown\", (event) => {
+		if(event.keyCode !== 9) return true;
+		var currentValue = event.target.value, startPos = event.target.selectionStart, endPos = event.target.selectionEnd;
+		event.target.value = currentValue.substring(0, startPos) + \"\\t\" + currentValue.substring(endPos);
+		event.target.selectionStart = event.target.selectionEnd = startPos + 1;
+		event.stopPropagation(); event.preventDefault();
+		return false;
+	});
 });");
 			
 			// ~
 			
 			/// ~~~ Smart saving ~~~ ///
 			
-			page_renderer::AddJSSnippet('// Smart saving
-function getSmartSaveKey() { return document.querySelector("main h1").innerHTML.replace("Creating ", "").replace("Editing ", "").trim(); }
-// Saving
-document.querySelector("textarea[name=content]").addEventListener("keyup", function(event) { window.localStorage.setItem(getSmartSaveKey(), event.target.value) });
-// Loading
-window.addEventListener("load", function(event) {
-	var editor = document.querySelector("textarea[name=content]");
-	if(editor.value.length > 0) return; // Don\'t restore if there\'s data in the editor already
-	editor.value = localStorage.getItem(getSmartSaveKey());
+			page_renderer::AddJSSnippet('document.addEventListener("load", function(event) {
+	// Smart saving
+	function getSmartSaveKey() { return document.querySelector("main h1").innerHTML.replace("Creating ", "").replace("Editing ", "").trim(); }
+	// Saving
+	document.querySelector("textarea[name=content]").addEventListener("keyup", function(event) { window.localStorage.setItem(getSmartSaveKey(), event.target.value) });
+	// Loading
+	window.addEventListener("load", function(event) {
+		var editor = document.querySelector("textarea[name=content]");
+		if(editor.value.length > 0) return; // Don\'t restore if there\'s data in the editor already
+		editor.value = localStorage.getItem(getSmartSaveKey());
+	});
 });');
 			
 			exit(page_renderer::render_main("$title - $settings->sitename", $content));
@@ -5174,7 +5179,7 @@ register_module([
 			<tr><th>Type this</th><th>To get this</th></tr>
 			<tr><td><code>{{{@}}}</code></td><td>Lists all variables and their values in a table.</td></tr>
 			<tr><td><code>{{{#}}}</code></td><td>Shows a 'stack trace', outlining all the parent includes of the current page being parsed.</td></tr>
-			<tr><td><code>{{{~}}}</code></td><td>Outputs the requested pagee's name.</td></tr>
+			<tr><td><code>{{{~}}}</code></td><td>Outputs the requested page's name.</td></tr>
 			<tr><td><code>{{{*}}}</code></td><td>Outputs a comma separated list of all the subpages of the current page.</td></tr>
 			<tr><td><code>{{{+}}}</code></td><td>Shows a gallery containing all the files that are sub pages of the current page.</td></tr>
 		</table>");
diff --git a/core.php b/core.php
index 95c3913..6f113d0 100644
--- a/core.php
+++ b/core.php
@@ -936,7 +936,7 @@ class page_renderer
 		$result .= self::getJS();
 		
 		if(module_exists("feature-search"))
-			$result .= "\t\t<link type='application/opensearchdescription+xml' rel='search' href='?action=opensearch-description' />";
+			$result .= "\t\t<link type='application/opensearchdescription+xml' rel='search' href='?action=opensearch-description' />\n";
 		
 		if(!empty($settings->enable_math_rendering))
 		{
@@ -994,18 +994,18 @@ class page_renderer
 	private static $jsLinks = [];
 	public function AddJSLink(string $scriptUrl)
 	{
-		$jsLinks[] = $scriptUrl;
+		static::$jsLinks[] = $scriptUrl;
 	}
 	public function AddJSSnippet(string $script)
 	{
-		$jsSnippets[] = $script;
+		static::$jsSnippets[] = $script;
 	}
 	
 	private static function getJS()
 	{
-		$result = "";
+		$result = "<!-- Javascript -->\n";
 		foreach(static::$jsSnippets as $snippet)
-			$result .= "<script defer>$snippet</script>\n";
+			$result .= "<script defer>\n$snippet\n</script>\n";
 		foreach(static::$jsLinks as $link)
 			$result .= "<script src='" . $link . "' defer></script>\n";
 		return $result;
diff --git a/module_index.json b/module_index.json
index 0185b4c..f3a1f81 100755
--- a/module_index.json
+++ b/module_index.json
@@ -122,7 +122,7 @@
         "author": "Starbeamrainbowlabs",
         "description": "Allows you to edit pages by adding the edit and save actions. You should probably include this one.",
         "id": "page-edit",
-        "lastupdate": 1477821977,
+        "lastupdate": 1478354728,
         "optional": false
     },
     {
@@ -212,7 +212,7 @@
         "author": "Emanuil Rusev & Starbeamrainbowlabs",
         "description": "An upgraded (now default!) parser based on Emanuil Rusev's Parsedown Extra PHP library (https:\/\/github.com\/erusev\/parsedown-extra), which is licensed MIT. Please be careful, as this module adds some weight to your installation, and also *requires* write access to the disk on first load.",
         "id": "parser-parsedown",
-        "lastupdate": 1476906745,
+        "lastupdate": 1478204933,
         "optional": false
     }
 ]
\ No newline at end of file
diff --git a/modules/page-edit.php b/modules/page-edit.php
index ac62b0e..0335360 100755
--- a/modules/page-edit.php
+++ b/modules/page-edit.php
@@ -88,29 +88,34 @@ register_module([
 			<p class='editing-message'>$settings->editing_message</p>
 			<input name='submit-edit' type='submit' value='Save Page' tabindex='3' />
 		</form>";
-			page_renderer::AddJSSnippet("// Adapted from https://jsfiddle.net/2wAzx/13/
-document.querySelector(\"[name=content]\").addEventListener(\"keydown\", (event) => {
-	if(event.keyCode !== 9) return true;
-	var currentValue = event.target.value, startPos = event.target.selectionStart, endPos = event.target.selectionEnd;
-	event.target.value = currentValue.substring(0, startPos) + \"\\t\" + currentValue.substring(endPos);
-	event.target.selectionStart = event.target.selectionEnd = startPos + 1;
-	event.stopPropagation(); event.preventDefault();
-	return false;
+			// Allow tab characters in the page editor
+			page_renderer::AddJSSnippet("window.addEventListener('load', function(event) {
+	// Adapted from https://jsfiddle.net/2wAzx/13/
+	document.querySelector(\"[name=content]\").addEventListener(\"keydown\", (event) => {
+		if(event.keyCode !== 9) return true;
+		var currentValue = event.target.value, startPos = event.target.selectionStart, endPos = event.target.selectionEnd;
+		event.target.value = currentValue.substring(0, startPos) + \"\\t\" + currentValue.substring(endPos);
+		event.target.selectionStart = event.target.selectionEnd = startPos + 1;
+		event.stopPropagation(); event.preventDefault();
+		return false;
+	});
 });");
 			
 			// ~
 			
 			/// ~~~ Smart saving ~~~ ///
 			
-			page_renderer::AddJSSnippet('// Smart saving
-function getSmartSaveKey() { return document.querySelector("main h1").innerHTML.replace("Creating ", "").replace("Editing ", "").trim(); }
-// Saving
-document.querySelector("textarea[name=content]").addEventListener("keyup", function(event) { window.localStorage.setItem(getSmartSaveKey(), event.target.value) });
-// Loading
-window.addEventListener("load", function(event) {
-	var editor = document.querySelector("textarea[name=content]");
-	if(editor.value.length > 0) return; // Don\'t restore if there\'s data in the editor already
-	editor.value = localStorage.getItem(getSmartSaveKey());
+			page_renderer::AddJSSnippet('document.addEventListener("load", function(event) {
+	// Smart saving
+	function getSmartSaveKey() { return document.querySelector("main h1").innerHTML.replace("Creating ", "").replace("Editing ", "").trim(); }
+	// Saving
+	document.querySelector("textarea[name=content]").addEventListener("keyup", function(event) { window.localStorage.setItem(getSmartSaveKey(), event.target.value) });
+	// Loading
+	window.addEventListener("load", function(event) {
+		var editor = document.querySelector("textarea[name=content]");
+		if(editor.value.length > 0) return; // Don\'t restore if there\'s data in the editor already
+		editor.value = localStorage.getItem(getSmartSaveKey());
+	});
 });');
 			
 			exit(page_renderer::render_main("$title - $settings->sitename", $content));
