--- a/question_types/multichoice/multichoice.classes.inc	2012-03-03 08:56:04.000000000 +0200
+++ b/question_types/multichoice/multichoice.classes.inc	2012-03-04 12:01:35.157780944 +0200
@@ -57,7 +57,7 @@
       for ($i = 0; isset($this->node->alternatives[$i]); $i++) {
         $short = &$this->node->alternatives[$i];
         $short['score_if_not_chosen'] = 0;
-        if ($short['correct'] == 1 && !_quiz_is_int($short['score_if_chosen'], 1)) {
+        if (isset($short['correct']) && $short['correct'] == 1 && !_quiz_is_int($short['score_if_chosen'], 1)) {
           $short['score_if_chosen'] = 1;
         }
       }


--- a/question_types/quiz_question/quiz_question.module	2012-03-03 08:56:04.000000000 +0200
+++ b/question_types/quiz_question/quiz_question.module	2012-03-04 14:55:02.122123332 +0200
@@ -97,15 +97,16 @@
          return NODE_ACCESS_DENY;
        }
     case 'create':
-      if (!user_access('create quiz', $account)) {
+      if (!user_access('create quiz content', $account)) {
         return NODE_ACCESS_DENY;
       }
     case 'update': 
-      if (user_access('edit any quiz', $account) || (user_access('edit own quiz', $account) && ($account->uid == $node->uid))) {
+      if (user_access('edit any quiz content', $account) 
+                || (user_access('edit own quiz content', $account) && ($account->uid == $node->uid))) {
         return NODE_ACCESS_ALLOW;
       }
     case 'delete':
-      if (user_access('delete any quiz', $account) || (user_access('delete own quiz', $account) && ($account->uid == $node->uid))) {
+      if (user_access('delete any quiz content', $account) || (user_access('delete own quiz content', $account) && ($account->uid == $node->uid))) {
         return NODE_ACCESS_ALLOW;
       }
   }
 
@@ -887,7 +892,8 @@
         ->fetchField();
     }
 
-    $response_instance->question->score_weight = ($qnr_max_score == 0) ? 0 : ($qnr_max_score / $response_instance->question->max_score);
+    $response_instance->question->score_weight = ($qnr_max_score == 0 || $response_instance->question->max_score == 0) ? 0 : ($qnr_max_score / $response_instance->question->max_score);
   }
 
   return $response_instance->getReportForm($showpoints, $showfeedback, $allow_scoring);
 
--- a/quiz.module	2012-03-03 08:56:04.000000000 +0200
+++ b/quiz.module	2012-03-04 14:56:05.850125424 +0200
@@ -1716,37 +1716,35 @@
  *   The quiz node id.
  */
 function quiz_update_quiz_question_relationship($old_quiz_vid, $new_quiz_vid, $quiz_nid) {
-  /*
-  $sql = "INSERT INTO {quiz_node_relationship} (parent_nid, parent_vid, child_nid, child_vid, question_status, weight, max_score)
-          SELECT src.parent_nid, %d, src.child_nid, src.child_vid, src.question_status, src.weight, src.max_score
-          FROM {quiz_node_relationship} AS src
-          WHERE src.parent_vid = %d AND src.parent_nid = %d AND src.question_status != %d";
-  // TODO Please convert this statement to the D7 database API syntax.
-  /* db_query($sql, $new_quiz_vid, $old_quiz_vid, $quiz_nid, QUESTION_NEVER) */
-  $quiz_questions = db_select('quiz_node_relationship', 'qnr')
+  // query for quesions in previous version
+  $result = db_select('quiz_node_relationship', 'qnr')
     ->fields('qnr', array('parent_nid','child_nid', 'child_vid', 'question_status', 'weight', 'max_score'))
-    ->condition('parent_vid', $old_quiz_vid)
     ->condition('parent_nid', $quiz_nid)
+    ->condition('parent_vid', $old_quiz_vid)
     ->condition('question_status', QUESTION_NEVER, '!=')
-    ->execute()
-    ->fetchAssoc();
+    ->execute();
+
+  // only proceed if query returned data
+  if ($result->rowCount()) {
+    $insert_query = db_insert('quiz_node_relationship')
+      ->fields(array('parent_nid', 'parent_vid', 'child_nid', 'child_vid', 'question_status', 'weight', 'max_score'));
 
-  if (!empty($quiz_questions)) {
-    $query = db_insert('quiz_node_relationship')
-      ->fields(array('parent_nid', 'child_nid', 'child_vid', 'question_status', 'weight', 'max_score', 'parent_vid'));
-    foreach ($quiz_questions as $quiz_question) {
+    while($quiz_question = $result->fetchAssoc()) {
       $value = array(
         'parent_nid' => $quiz_nid,
-        'parent_vid' => $old_quiz_vid,
+        'parent_vid' => $new_quiz_vid,
         'child_nid' => $quiz_question['child_nid'],
         'child_vid' => $quiz_question['child_vid'],
         'question_status' => $quiz_question['question_status'],
         'weight' => $quiz_question['weight'],
         'max_score' => $quiz_question['max_score']
       );
-      $query->values($value);
+      // add new record to be inserted
+      $insert_query->values($value);
     }
-    $query->execute();
+
+    // perform the insert operation
+    $insert_query->execute();
   }
 }

@@ -2598,7 +2608,7 @@
 function quiz_start_check($quiz, $rid) {
   global $user;
 
-  $user_is_admin = user_access('edit any quiz') || (user_access('edit own quiz') && $quiz->uid == $user->uid);
+  $user_is_admin = user_access('edit any quiz content') || (user_access('edit own quiz content') && $quiz->uid == $user->uid);
 
   // Make sure this is available.
   if ($quiz->quiz_always != 1) {
@@ -3048,7 +3058,8 @@
     // to replace an unanswered question in $questions with it.
     if (!in_array($answered->vid, $already_answered)) {
       foreach ($questions as $key => $question) {
-        if (!in_array($question['vid'], $already_answered) && $question['random'] === TRUE) {
+      	// checks if question[random] is set
+      	if (!in_array($question['vid'], $already_answered) && isset($question['random']) && $question['random'] === TRUE) {
           $questions[$key]['vid'] = $answered->vid;
           $questions[$key]['nid'] = $answered->nid;
           $questions[$key]['rid'] = $rid;
