diff --git a/dreditor.user.js b/dreditor.user.js
index bc866d8..855eab4 100644
--- a/dreditor.user.js
+++ b/dreditor.user.js
@@ -601,7 +601,7 @@ Drupal.storage.unserialize = function (str) {
     if (splitted.length != 2) {
       return;
     }
-    var key = splitted[0];
+    var key = decodeURIComponent(splitted[0]);
     var val = decodeURIComponent(splitted[1].replace(/\+/g, ' '));
     val = Drupal.storage.parse(val);
 
@@ -1499,6 +1499,42 @@ Drupal.behaviors.dreditorIssueCommentForm = function (context) {
 };
 
 /**
+ * Backs up form values before submit for potential later restore.
+ *
+ * drupal.org's advanced infrastructure may respond with totally bogus things
+ * like HTTP redirects to completely invalid locations. Native support for
+ * retaining previously posted form values in modern browsers is entirely
+ * hi-jacked in those cases; the browser doesn't even know anymore that it
+ * posted something.
+ */
+Drupal.behaviors.dreditorFormBackup = function (context) {
+  $(context).find('#comment-form:has(#edit-category)').once('dreditor-form-backup', function () {
+    var $form = $(this);
+
+    var $restore = $('<a href="javascript:void()" class="dreditor-application-toggle">Restore previous values</a>').click(function () {
+      if (window.confirm('Reset this form to your last submitted values?')) {
+        var values = Drupal.storage.unserialize(Drupal.storage.load('form.backup'));
+        $form.find('[name]').not('[type=hidden]').each(function () {
+          if (typeof values[this.name] != 'undefined') {
+            $(this).val(values[this.name]);
+          }
+        });
+        // Remove this (restore) button.
+        $(this).fadeOut();
+      }
+      return false;
+    });
+
+    $form.find('[type="submit"]')
+      .bind('click', function () {
+        Drupal.storage.save('form.backup', $form.serialize());
+      })
+      // @todo Replace with .eq(-1), available in jQuery 1.4+.
+      .filter(':last').after($restore);
+  });
+};
+
+/**
  * Attach commit message generator to issue comment form.
  */
 Drupal.behaviors.dreditorCommitMessage = function (context) {
