diff --git a/build/index.php b/build/index.php
index 7651f62..5fc2095 100644
--- a/build/index.php
+++ b/build/index.php
@@ -267,15 +267,17 @@ a.redlink:visited { color: rgb(130, 15, 15); /*#8b1a1a*/ }
 .search-context { max-height: 20em; overflow: hidden; }
 .search-context::after { content: ""; position: absolute; bottom: 0; width: 100%; height: 3em; display: block; background: linear-gradient(to bottom, transparent, #faf8fb); pointer-events: none; }
 
-textarea[name=content] { height: 30em; }
+textarea[name=content] { resize: none; }
+.fit-text-mirror { position: absolute; left: -10000vw; word-wrap: break-word; white-space: pre-wrap; }
 main label:not(.link-display-label) { display: inline-block; min-width: 16rem; }
 input[type=text]:not(.link-display), input[type=password], input[type=url], input[type=email], input[type=number], textarea { margin: 0.5rem 0; }
-input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea, #search-box { padding: 0.5rem 0.8rem; background: #d5cbf9; border: 0; border-radius: 0.3rem; font-size: 1rem; color: #442772; }
+input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea, textarea[name=content] + pre, #search-box { padding: 0.5rem 0.8rem; background: #d5cbf9; border: 0; border-radius: 0.3rem; font-size: 1rem; color: #442772; }
 textarea { min-height: 10em; line-height: 1.3em; font-size: 1.25rem; }
-textarea, textarea ~ input[type=submit], #search-box { width: calc(100% - 0.3rem); box-sizing: border-box; }
+textarea, textarea[name=content] + pre, textarea ~ input[type=submit], #search-box { width: calc(100% - 0.3rem); box-sizing: border-box; }
 textarea ~ input[type=submit] { margin: 0.5rem 0; padding: 0.5rem; font-weight: bolder; }
 .editform input[type=text] { width: calc(100% - 0.3rem); box-sizing: border-box; }
-.editfor textarea { min-height: 35rem; }
+
+
 
 .file-gallery { margin: 0.5em; padding: 0.5em; list-style-type: none; }
 .file-gallery > li { display: inline-block; min-width: attr(data-gallery-width); padding: 1em; text-align: center; }
@@ -4405,6 +4407,7 @@ register_module([
 			$content .= "<form method='post' action='index.php?action=save&page=" . rawurlencode($page) . "&action=save' class='editform'>
 			<input type='hidden' name='prev-content-hash' value='" . sha1($pagetext) . "' />
 			<textarea name='content' autofocus tabindex='1'>$pagetext</textarea>
+			<pre class='fit-text-mirror'></pre>
 			<input type='text' name='tags' value='$page_tags' placeholder='Enter some tags for the page here. Separate them with commas.' title='Enter some tags for the page here. Separate them with commas.' tabindex='2' />
 			<p class='editing-message'>$settings->editing_message</p>
 			<input name='submit-edit' type='submit' value='Save Page' tabindex='3' />
@@ -4422,6 +4425,25 @@ register_module([
 	});
 });");
 			
+			// Utilise the mirror to automatically resize the textarea to fit it's content
+			page_renderer::AddJSSnippet('function updateTextSize(textarea, mirror, event) {
+	let textareaFontSize = parseFloat(getComputedStyle(textarea).fontSize);
+	
+	let textareaWidth = textarea.getBoundingClientRect().width;// - parseInt(textarea.style.padding);
+	mirror.style.width = `${textareaWidth}px`;
+	mirror.innerText = textarea.value;
+	textarea.style.height = `${mirror.offsetHeight + (textareaFontSize * 5)}px`;
+}
+function trackTextSize(textarea) {
+	let mirror = textarea.nextElementSibling;
+	textarea.addEventListener("input", updateTextSize.bind(null, textarea, mirror));
+	updateTextSize(textarea, mirror, null);
+}
+window.addEventListener("load", function(event) {
+	trackTextSize(document.querySelector("textarea[name=content]"));
+});
+');
+			
 			// ~
 			
 			/// ~~~ Smart saving ~~~ ///
@@ -5653,7 +5675,7 @@ register_module([
 
 register_module([
 	"name" => "Parsedown",
-	"version" => "0.9.7",
+	"version" => "0.9.8",
 	"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",
diff --git a/module_index.json b/module_index.json
index c887258..69b0842 100755
--- a/module_index.json
+++ b/module_index.json
@@ -140,7 +140,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": 1487451276,
+        "lastupdate": 1488730217,
         "optional": false
     },
     {
@@ -235,11 +235,11 @@
     },
     {
         "name": "Parsedown",
-        "version": "0.9.7",
+        "version": "0.9.8",
         "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": 1488019684,
+        "lastupdate": 1488019975,
         "optional": false
     }
 ]
\ No newline at end of file
diff --git a/modules/page-edit.php b/modules/page-edit.php
index 142fb3c..a5af3c1 100755
--- a/modules/page-edit.php
+++ b/modules/page-edit.php
@@ -111,6 +111,7 @@ register_module([
 			$content .= "<form method='post' action='index.php?action=save&page=" . rawurlencode($page) . "&action=save' class='editform'>
 			<input type='hidden' name='prev-content-hash' value='" . sha1($pagetext) . "' />
 			<textarea name='content' autofocus tabindex='1'>$pagetext</textarea>
+			<pre class='fit-text-mirror'></pre>
 			<input type='text' name='tags' value='$page_tags' placeholder='Enter some tags for the page here. Separate them with commas.' title='Enter some tags for the page here. Separate them with commas.' tabindex='2' />
 			<p class='editing-message'>$settings->editing_message</p>
 			<input name='submit-edit' type='submit' value='Save Page' tabindex='3' />
@@ -128,6 +129,25 @@ register_module([
 	});
 });");
 			
+			// Utilise the mirror to automatically resize the textarea to fit it's content
+			page_renderer::AddJSSnippet('function updateTextSize(textarea, mirror, event) {
+	let textareaFontSize = parseFloat(getComputedStyle(textarea).fontSize);
+	
+	let textareaWidth = textarea.getBoundingClientRect().width;// - parseInt(textarea.style.padding);
+	mirror.style.width = `${textareaWidth}px`;
+	mirror.innerText = textarea.value;
+	textarea.style.height = `${mirror.offsetHeight + (textareaFontSize * 5)}px`;
+}
+function trackTextSize(textarea) {
+	let mirror = textarea.nextElementSibling;
+	textarea.addEventListener("input", updateTextSize.bind(null, textarea, mirror));
+	updateTextSize(textarea, mirror, null);
+}
+window.addEventListener("load", function(event) {
+	trackTextSize(document.querySelector("textarea[name=content]"));
+});
+');
+			
 			// ~
 			
 			/// ~~~ Smart saving ~~~ ///
diff --git a/theme_default.css b/theme_default.css
index 33c116b..62761f7 100644
--- a/theme_default.css
+++ b/theme_default.css
@@ -61,15 +61,17 @@ a.redlink:visited { color: rgb(130, 15, 15); /*#8b1a1a*/ }
 .search-context { max-height: 20em; overflow: hidden; }
 .search-context::after { content: ""; position: absolute; bottom: 0; width: 100%; height: 3em; display: block; background: linear-gradient(to bottom, transparent, #faf8fb); pointer-events: none; }
 
-textarea[name=content] { height: 30em; }
+textarea[name=content] { resize: none; }
+.fit-text-mirror { position: absolute; left: -10000vw; word-wrap: break-word; white-space: pre-wrap; }
 main label:not(.link-display-label) { display: inline-block; min-width: 16rem; }
 input[type=text]:not(.link-display), input[type=password], input[type=url], input[type=email], input[type=number], textarea { margin: 0.5rem 0; }
-input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea, #search-box { padding: 0.5rem 0.8rem; background: #d5cbf9; border: 0; border-radius: 0.3rem; font-size: 1rem; color: #442772; }
+input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea, textarea[name=content] + pre, #search-box { padding: 0.5rem 0.8rem; background: #d5cbf9; border: 0; border-radius: 0.3rem; font-size: 1rem; color: #442772; }
 textarea { min-height: 10em; line-height: 1.3em; font-size: 1.25rem; }
-textarea, textarea ~ input[type=submit], #search-box { width: calc(100% - 0.3rem); box-sizing: border-box; }
+textarea, textarea[name=content] + pre, textarea ~ input[type=submit], #search-box { width: calc(100% - 0.3rem); box-sizing: border-box; }
 textarea ~ input[type=submit] { margin: 0.5rem 0; padding: 0.5rem; font-weight: bolder; }
 .editform input[type=text] { width: calc(100% - 0.3rem); box-sizing: border-box; }
-.editfor textarea { min-height: 35rem; }
+
+
 
 .file-gallery { margin: 0.5em; padding: 0.5em; list-style-type: none; }
 .file-gallery > li { display: inline-block; min-width: attr(data-gallery-width); padding: 1em; text-align: center; }
