diff --git a/question_types/quiz_question/quiz_question.module b/question_types/quiz_question/quiz_question.module
index f32d2a8..9fba1ee 100644
--- a/question_types/quiz_question/quiz_question.module
+++ b/question_types/quiz_question/quiz_question.module
@@ -143,7 +143,7 @@ function quiz_question_node_form_submit($form, &$form_state) {
     // Forced redirect to question-revision-actions, overriding any '?destination' that's set
     unset($_GET['destination']);
     unset($_REQUEST['edit']['destination']);
-    $form_state['redirect'] = 'node/'  . $node->nid . '/question-revision-actions';
+    $form_state['redirect'] = 'node/' . $node->nid . '/question-revision-actions';
   }
 }
 
@@ -211,9 +211,15 @@ function quiz_question_answering_form($form, $form_state, $nodes, $result_id) {
       'answer' => $element,
     );
 
-    if (!$quiz->allow_change) {
-      if (quiz_result_is_question_answered($quiz_result, $node)) {
-        // This question was already answered, and not skipped.
+    $qra = quiz_result_answer_load($quiz_result->result_id, $node->nid, $node->vid);
+    $blank_and_change = $qra->is_skipped && $quiz->allow_change_blank;
+    if (!$quiz->allow_change && $qra->answer_timestamp) {
+      if ($blank_and_change) {
+        // Allow it.
+      }
+      else {
+        // This question was already answered, or answering blank question is
+        // disabled.
         $form['question'][$node->nid]['#disabled'] = TRUE;
       }
     }
@@ -287,21 +293,23 @@ function quiz_question_answering_form_submit_blank($form, &$form_state) {
   $quiz_result = quiz_result_load($_SESSION['quiz'][arg(1)]['result_id']);
   $quiz = node_load($quiz_result->nid, $quiz_result->vid);
 
-  foreach (array_keys($form_state['input']['question']) as $nid) {
-    // Loop over all question inputs provided, and record them as skipped.
-    $question = node_load($nid);
-
-    // Delete the user's answer.
-    _quiz_question_response_get_instance($quiz_result->result_id, $question)->delete();
-
-    // Mark our question attempt as skipped, reset the correct and points flag.
-    $qra = quiz_result_answer_load($quiz_result->result_id, $question->nid, $question->vid);
-    $qra->is_skipped = 1;
-    $qra->is_correct = 0;
-    $qra->points_awarded = 0;
-    $qra->answer_timestamp = REQUEST_TIME;
-    entity_save('quiz_result_answer', $qra);
-    quiz_question_goto($quiz, $_SESSION['quiz'][$quiz->nid]['current'] + 1);
+  if (!empty($form_state['input']['question'])) {
+    foreach (array_keys($form_state['input']['question']) as $nid) {
+      // Loop over all question inputs provided, and record them as skipped.
+      $question = node_load($nid);
+
+      // Delete the user's answer.
+      _quiz_question_response_get_instance($quiz_result->result_id, $question)->delete();
+
+      // Mark our question attempt as skipped, reset the correct and points flag.
+      $qra = quiz_result_answer_load($quiz_result->result_id, $question->nid, $question->vid);
+      $qra->is_skipped = 1;
+      $qra->is_correct = 0;
+      $qra->points_awarded = 0;
+      $qra->answer_timestamp = REQUEST_TIME;
+      entity_save('quiz_result_answer', $qra);
+      quiz_question_goto($quiz, $_SESSION['quiz'][$quiz->nid]['current'] + 1);
+    }
   }
 
   // Advance to next question.
diff --git a/quiz.install b/quiz.install
index 4b46bc9..2a4cc69 100644
--- a/quiz.install
+++ b/quiz.install
@@ -257,6 +257,13 @@ function quiz_schema() {
         'default' => 1,
         'description' => 'Boolean indicating whether a user can change the answer to an already answered question.',
       ),
+      'allow_change_blank' => array(
+        'type' => 'int',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Boolean indicating whether a user can change the answer to a skipped question.',
+      ),
       'build_on_last' => array(
         'type' => 'varchar',
         'length' => '255',
@@ -1024,3 +1031,16 @@ function quiz_update_7514() {
     'quiz_feedback' => 'quiz_feedback',
   ));
 }
+
+/**
+ * Add allow_change_blank property.
+ */
+function quiz_update_7515() {
+  db_add_field('quiz_node_properties', 'allow_change_blank', array(
+    'type' => 'int',
+    'size' => 'tiny',
+    'not null' => TRUE,
+    'default' => 0,
+    'description' => 'Boolean indicating whether a user can change the answer to a skipped question.',
+  ));
+}
diff --git a/quiz.module b/quiz.module
index 9f68be6..c3d71b7 100644
--- a/quiz.module
+++ b/quiz.module
@@ -829,6 +829,7 @@ function _quiz_get_node_defaults() {
   return (object) array(
       'aid' => NULL,
       'allow_change' => 1,
+      'allow_change_blank' => 0,
       'allow_jumping' => 0,
       'allow_resume' => 1,
       'allow_skipping' => 1,
@@ -1080,6 +1081,17 @@ function quiz_form(&$node, &$form_state) {
     '#default_value' => $node->allow_change,
     '#description' => t('If the user is able to visit a previous question, allow them to change the answer.'),
   );
+  $form['taking']['allow_change_blank'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Allow changing blank answers'),
+    '#default_value' => $node->allow_change_blank,
+    '#description' => t('If the user is able to visit a previous skipped question, allow them to enter an answer.'),
+    '#states' => array(
+      'visible' => array(
+        '#edit-allow-change' => array('checked' => FALSE),
+      ),
+    ),
+  );
   $form['taking']['backwards_navigation'] = array(
     '#type' => 'checkbox',
     '#title' => t('Backwards navigation'),
