Index: moodle/mod/choice/lib.php
--- moodle/mod/choice/lib.php Base (1.141)
+++ moodle/mod/choice/lib.php Locally Modified (Based On 1.141)
@@ -224,10 +224,12 @@
                 }
             $cdisplay['options'][] = $option;
             }
-        }
+    }

-    $cdisplay['hascapability'] = is_enrolled($context, NULL, 'mod/choice:choose'); //only enrolled users are allowed to make a choice
-
+    //only enrolled/ has capability users are allowed to make a choice
+    if (is_enrolled($context, NULL, 'mod/choice:choose') || has_capability('mod/choice:choose', $context)) {
+        $cdisplay['hascapability'] = true;
+    }
     if ($choice->allowupdate && $DB->record_exists('choice_answers', array('choiceid'=> $choice->id, 'userid'=> $user->id))) {
         $cdisplay['allowupdate'] = true;
                 }
@@ -276,7 +278,7 @@

         if ($answers) {
             foreach ($answers as $a) { //only return enrolled users.
-                if (is_enrolled($context, $a->userid, 'mod/choice:choose')) {
+                if (is_enrolled($context, $a->userid, 'mod/choice:choose') || has_capability('mod/choice:choose', $context)) {
                     $countanswers++;
                 }
             }
@@ -358,7 +360,7 @@
         $display->options[$optionid]->maxanswer = $choice->maxanswers[$optionid];

         if (array_key_exists($optionid, $allresponses)) {
-            $display->options[$optionid]->user = $allresponses[$optionid]; //->user;
+            $display->options[$optionid]->user = $allresponses[$optionid];
             $totaluser += count($allresponses[$optionid]);
         }
     }
@@ -748,10 +750,14 @@

     if ($rawresponses) {
         foreach ($rawresponses as $response) {
-            if (isset($allresponses[0][$response->userid])) {   // This person is enrolled and in correct group
+            $responseuser = $DB->get_record("user", array("id" => $response->userid));
+            if (isset($allresponses[0][$response->userid]) ) {   // This person is enrolled and in correct group
                 $allresponses[0][$response->userid]->timemodified = $response->timemodified;
                 $allresponses[$response->optionid][$response->userid] = clone($allresponses[0][$response->userid]);
                 unset($allresponses[0][$response->userid]);   // Remove from unanswered column
+            } else if(has_capability('mod/choice:choose', $context, $responseuser)) {
+                $responseuser->timemodified = $response->timemodified;
+                $allresponses[$response->optionid][$response->userid] = $responseuser;
             }
         }
     }
@@ -841,7 +847,7 @@
     $choice = $DB->get_record('choice', array('id'=>$cm->instance), '*',
             MUST_EXIST);

-    // If completion option is enabled, evaluate it and return true/false
+    // If completion option is enabled, evaluate it and return true/false
     if($choice->completionsubmit) {
         return $DB->record_exists('choice_answers', array(
                 'choiceid'=>$choice->id, 'userid'=>$userid));
Index: moodle/mod/choice/view.php
--- moodle/mod/choice/view.php Base (1.143)
+++ moodle/mod/choice/view.php Locally Modified (Based On 1.143)
@@ -35,7 +35,8 @@
         print_error('badcontext');
     }

-    if ($action == 'delchoice' and confirm_sesskey() and is_enrolled($context, NULL, 'mod/choice:choose') and $choice->allowupdate) {
+    if ($action == 'delchoice' && confirm_sesskey() &&
+       ((is_enrolled($context, NULL, 'mod/choice:choose') && $choice->allowupdate) || has_capability('mod/choice:deleteresponses', $context))) {
         if ($answer = $DB->get_record('choice_answers', array('choiceid' => $choice->id, 'userid' => $USER->id))) {
             $DB->delete_records('choice_answers', array('id' => $answer->id));

@@ -51,25 +52,26 @@
     $PAGE->set_heading($course->fullname);

 /// Submit any new data if there is any
-    if ($form = data_submitted() && is_enrolled($context, NULL, 'mod/choice:choose') && confirm_sesskey()) {
-        $timenow = time();
-        if (has_capability('mod/choice:deleteresponses', $context)) {
-            if ($action == 'delete') { //some responses need to be deleted
-                choice_delete_responses($attemptids, $choice, $cm, $course); //delete responses.
-                redirect("view.php?id=$cm->id");
+    $notification = null;
+    if ($form = data_submitted() && confirm_sesskey()) {
+        if ($action == 'delete' && has_capability('mod/choice:deleteresponses', $context)) {
+            choice_delete_responses($attemptids, $choice, $cm, $course); //delete responses.
+            redirect("view.php?id=$cm->id");
+        } else if (is_enrolled($context, NULL, 'mod/choice:choose') || has_capability('mod/choice:choose', $context)) {
+            $answer = optional_param('answer', '', PARAM_INT);
+
+            if (empty($answer)) {
+                redirect("view.php?id=$cm->id", get_string('mustchooseone', 'choice'));
+            } else {
+                choice_user_submit_response($answer, $choice, $USER->id, $course, $cm);
             }
+            $notification = get_string('choicesaved', 'choice');
         }
-        $answer = optional_param('answer', '', PARAM_INT);
+    }

-        if (empty($answer)) {
-            redirect("view.php?id=$cm->id", get_string('mustchooseone', 'choice'));
-        } else {
-            choice_user_submit_response($answer, $choice, $USER->id, $course, $cm);
-        }
-        echo $OUTPUT->header();
-        echo $OUTPUT->notification(get_string('choicesaved', 'choice'),'notifysuccess');
-    } else {
-        echo $OUTPUT->header();
+    echo $OUTPUT->header();
+    if (!empty($notification)) {
+        echo $OUTPUT->notification($notification,'notifysuccess');
     }


@@ -117,7 +119,8 @@
         }
     }

-    if ( (!$current or $choice->allowupdate) and $choiceopen and is_enrolled($context, NULL, 'mod/choice:choose')) {
+    if ( (!$current or $choice->allowupdate) && $choiceopen &&
+         (is_enrolled($context, NULL, 'mod/choice:choose') || has_capability('mod/choice:choose', $context))) {
     // They haven't made their choice yet or updates allowed and choice is open

         $options = choice_prepare_options($choice, $USER, $cm, $allresponses);
@@ -135,7 +138,7 @@
             // Guest account
             echo $OUTPUT->confirm(get_string('noguestchoose', 'choice').'<br /><br />'.get_string('liketologin'),
                          get_login_url(), new moodle_url('/course/view.php', array('id'=>$course->id)));
-        } else if (!is_enrolled($context)) {
+        } else if (!is_enrolled($context) && !has_capability('mod/choice:choose', $context)) {
             // Only people enrolled can make a choice
             $SESSION->wantsurl = $FULLME;
             $SESSION->enrolcancel = (!empty($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : '';
@@ -146,7 +149,6 @@
             echo $OUTPUT->single_button(new moodle_url('/enrol/index.php?', array('id'=>$course->id)), get_string('enrolme', 'core_enrol', format_string($course->shortname)));
             echo $OUTPUT->container_end();
             echo $OUTPUT->box_end();
-
         }
     }

