diff --git a/question_types/quiz_question/quiz_question.core.inc b/question_types/quiz_question/quiz_question.core.inc
index 4fbd193..c09b400 100644
--- a/question_types/quiz_question/quiz_question.core.inc
+++ b/question_types/quiz_question/quiz_question.core.inc
@@ -58,7 +58,7 @@ abstract class QuizQuestion {
    * @param $node
    *   The node object
    */
-  public function __construct(stdClass &$node) {
+  public function __construct(stdClass $node) {
     $this->node = $node;
   }
 
@@ -613,10 +613,10 @@ abstract class QuizQuestionResponse {
    * @return int
    *   The max score of this question response.
    */
-  public function getMaxScore($weight_adjusted = TRUE) {
+  function getMaxScore($weight_adjusted = TRUE) {
     if ($weight_adjusted) {
       $quiz_result = quiz_result_load($this->result_id);
-        $relationships = entity_load('quiz_question_relationship', FALSE, array(
+      $relationships = entity_load('quiz_question_relationship', FALSE, array(
         'parent_nid' => $quiz_result->nid,
         'parent_vid' => $quiz_result->vid,
         'child_nid' => $this->question->nid,
@@ -917,3 +917,62 @@ abstract class QuizQuestionResponse {
   }
 
 }
+
+class QuizQuestionBroken extends QuizQuestion {
+
+  public function getCreationForm(array &$form_state = NULL) {
+
+  }
+
+  public function getMaximumScore() {
+
+  }
+
+  public function saveNodeProperties() {
+
+  }
+
+  public function validateNode(array &$form) {
+
+  }
+
+  public function hasFeedback() {
+    return FALSE;
+  }
+
+}
+
+class QuizQuestionResponseBroken extends QuizQuestionResponse {
+
+  public function getReport() {
+    return array(
+      'answer_id' => 0,
+      'is_correct' => NULL,
+    );
+  }
+
+  public function __construct($result_id, stdClass $question_node, $answer = NULL) {
+    $this->quizQuestion = _quiz_question_get_instance($question_node);
+  }
+
+  public function delete() {
+
+  }
+
+  public function getResponse() {
+
+  }
+
+  public function save() {
+
+  }
+
+  public function score() {
+
+  }
+
+  public function getMaxScore($weight_adjusted = TRUE) {
+    return 0;
+  }
+
+}
diff --git a/question_types/quiz_question/quiz_question.module b/question_types/quiz_question/quiz_question.module
index 453bf83..4b0ffa9 100644
--- a/question_types/quiz_question/quiz_question.module
+++ b/question_types/quiz_question/quiz_question.module
@@ -606,9 +606,15 @@ function quiz_question_load($nodes) {
  */
 function _quiz_question_get_instance($node) {
   $info = quiz_question_get_info();
-  $constructor = $info[$node->type]['question provider'];
+  if (!empty($node->type)) {
+    $constructor = $info[$node->type]['question provider'];
+  }
+  else {
+    $node = new stdClass;
+  }
+
   if (empty($constructor)) {
-    return FALSE;
+    $constructor = 'QuizQuestionBroken';
   }
 
   // We create a new instance of QuizQuestion
@@ -644,7 +650,14 @@ function _quiz_question_response_get_instance($result_id, $question, $answer = N
     $question = node_load($nid, $vid);
   }
 
-  $constructor = $info[$question->type]['response provider'];
+  if (!empty($question->type)) {
+    $constructor = $info[$question->type]['response provider'];
+  }
+
+  if (empty($constructor)) {
+    $constructor = 'QuizQuestionResponseBroken';
+    $question = new stdClass;
+  }
   $to_return = new $constructor($result_id, $question, $answer);
   // All responce classes must extend QuizQuestionResponse
   if (!($to_return instanceof QuizQuestionResponse)) {
diff --git a/quiz.module b/quiz.module
index 95f11a7..f9f2124 100644
--- a/quiz.module
+++ b/quiz.module
@@ -3934,7 +3934,7 @@ function quiz_result_form($form, &$form_state, $quiz_result) {
       // Loop through all the questions and get their scoring form.
       $question_node = node_load($question['nid'], $question['vid']);
       $instance = _quiz_question_response_get_instance($quiz_result->result_id, $question_node);
-      $qras = entity_load('quiz_result_answer', FALSE, array('result_id' => $quiz_result->result_id, 'question_nid' => $question_node->nid, 'question_vid' => $question_node->vid));
+      $qras = entity_load('quiz_result_answer', FALSE, array('result_id' => $quiz_result->result_id, 'question_nid' => $question['nid'], 'question_vid' => $question['vid']));
       $qra = reset($qras);
       // Get the feedback elements.
       if ($instance->getQuizQuestion()->hasFeedback()) {
diff --git a/tests/QuizResultTestCase.test b/tests/QuizResultTestCase.test
index 5a081b1..075a80f 100644
--- a/tests/QuizResultTestCase.test
+++ b/tests/QuizResultTestCase.test
@@ -663,4 +663,31 @@ class QuizResultTestCase extends QuizTestCase {
     $this->assertNoFieldById('edit-result-field-b-und-0-value');
   }
 
+  /**
+   * Test that deleting a question from a Quiz doesn't result in a fatal error.
+   */
+  public function testBrokenResults() {
+    $this->drupalLogin($this->admin);
+
+    $question_node1 = $this->drupalCreateNode(array(
+      'type' => 'truefalse',
+      'correct_answer' => 1,
+    ));
+    $quiz_node = $this->linkQuestionToQuiz($question_node1);
+
+    // Submit an answer.
+    $this->drupalLogin($this->user);
+    $this->drupalGet("node/$quiz_node->nid/take");
+    $this->drupalPost(NULL, array(
+      "question[$question_node1->nid][answer]" => 1,
+      ), t('Finish'));
+
+    // Delete the question.
+    node_delete($question_node1->nid);
+
+    // And there should not be a fatal error.
+    $this->drupalGet("node/$quiz_node->nid/quiz-results/1");
+    $this->assertResponse(200, 'Saw the results page.');
+  }
+
 }
