diff --git a/public_html/media/css/upload.css b/public_html/media/css/post-upload.css
similarity index 100%
rename from public_html/media/css/upload.css
rename to public_html/media/css/post-upload.css
diff --git a/public_html/media/js/comment-edit.js b/public_html/media/js/comment-edit.js
index c1b00133..fc07b466 100644
--- a/public_html/media/js/comment-edit.js
+++ b/public_html/media/js/comment-edit.js
@@ -2,6 +2,12 @@ $(function()
 {
 	function onDomUpdate()
 	{
+		$('form.edit-comment textarea, form.add-comment textarea')
+			.bind('change keyup', function(e)
+			{
+				enableExitConfirmation();
+			});
+
 		$('form.edit-comment, form.add-comment').submit(function(e)
 		{
 			e.preventDefault();
@@ -41,6 +47,8 @@ $(function()
 						}
 						else
 						{
+							disableExitConfirmation();
+
 							formDom.find('.preview').hide();
 							var cb = function()
 							{
diff --git a/public_html/media/js/core.js b/public_html/media/js/core.js
index aab75a5f..651eb649 100644
--- a/public_html/media/js/core.js
+++ b/public_html/media/js/core.js
@@ -272,3 +272,18 @@ $(function()
 	Mousetrap.bind('d', function() { var url = $('.paginator:visible .next:not(.disabled) a').attr('href'); if (typeof url !== 'undefined') window.location.href = url; }, 'keyup');
 	Mousetrap.bind('p', function() { $('.post a').eq(0).focus(); return false; }, 'keyup');
 });
+
+
+
+function enableExitConfirmation()
+{
+	$(window).bind('beforeunload', function(e)
+	{
+		return true;
+	});
+}
+
+function disableExitConfirmation()
+{
+	$(window).unbind('beforeunload');
+}
diff --git a/public_html/media/js/upload.js b/public_html/media/js/post-upload.js
similarity index 98%
rename from public_html/media/js/upload.js
rename to public_html/media/js/post-upload.js
index e7a3b95e..c793ed45 100644
--- a/public_html/media/js/upload.js
+++ b/public_html/media/js/post-upload.js
@@ -136,6 +136,7 @@ $(function()
 
 	function uploadFinished()
 	{
+		disableExitConfirmation();
 		window.location.href = $('#upload-step2').attr('data-redirect-url');
 	}
 
@@ -224,6 +225,7 @@ $(function()
 	{
 		for (var i = 0; i < inputs.length; i ++)
 		{
+			enableExitConfirmation();
 			var input = inputs[i];
 			var postDom = $('#post-template').clone(true);
 			postDom.find('form').submit(false);
diff --git a/public_html/media/js/post-view.js b/public_html/media/js/post-view.js
index 3e28253e..7cd24e11 100644
--- a/public_html/media/js/post-view.js
+++ b/public_html/media/js/post-view.js
@@ -12,6 +12,7 @@ $(function()
 			aDom.addClass('inactive');
 
 			var formDom = $('form.edit-post');
+			formDom.data('original-data', formDom.serialize());
 			if (formDom.find('.tagit').length == 0)
 			{
 				$.getJSON('/tags?json', {filter: 'order:popularity,desc'}, function(data)
@@ -23,7 +24,13 @@ $(function()
 					tagItOptions.availableTags = tags;
 					tagItOptions.placeholderText = $('.tags input').attr('placeholder');
 					$('.tags input').tagit(tagItOptions);
+
 					formDom.find('input[type=text]:visible:eq(0)').focus();
+					formDom.find('textarea, input').bind('change keyup', function()
+					{
+						if (formDom.serialize() != formDom.data('original-data'))
+							enableExitConfirmation();
+					});
 				});
 			}
 			else
@@ -89,6 +96,8 @@ $(function()
 			{
 				if (data['success'])
 				{
+					disableExitConfirmation();
+
 					$.get(window.location.href, function(data)
 					{
 						$('#sidebar').replaceWith($(data).find('#sidebar'));
diff --git a/src/Controllers/PostController.php b/src/Controllers/PostController.php
index a6261bf6..a2d9b45d 100644
--- a/src/Controllers/PostController.php
+++ b/src/Controllers/PostController.php
@@ -180,8 +180,8 @@ class PostController
 	*/
 	public function uploadAction()
 	{
-		$this->context->stylesheets []= 'upload.css';
-		$this->context->scripts []= 'upload.js';
+		$this->context->stylesheets []= 'post-upload.css';
+		$this->context->scripts []= 'post-upload.js';
 		$this->context->subTitle = 'upload';
 		PrivilegesHelper::confirmWithException(Privilege::UploadPost);
 		if ($this->config->registration->needEmailForUploading)