diff --git a/classes/form/evaluserexport.php b/classes/form/evaluserexport.php
index b17730d5e85a884ce528ed26d369768d8ea4f4ef..3f9a5f5861b5781575ce995c09dfeb1fdbb0eb84 100644
--- a/classes/form/evaluserexport.php
+++ b/classes/form/evaluserexport.php
@@ -38,13 +38,12 @@ class evaluserexport extends moodleform {
         $mform->addElement('html', '<div id="intor">' . $introtext . '</div>');
 
         $courseid = $this->_customdata['courseid'];
+        $mform->addElement('hidden', 'courseid', $courseid);
+        $mform->setType('courseid', PARAM_INT);
+
         $coursecontext = $this->_customdata['coursecontext'];
-        $viewableroles = get_roles_used_in_context($coursecontext, false);
-        $roles = role_fix_names($viewableroles, $coursecontext, ROLENAME_ALIAS);
-        $options = [];
-        foreach ($roles as $role) {
-            $options[$role->id] = $role->localname;
-        }
+        $mform->addElement('hidden', 'coursecontextid', $coursecontext->id);
+        $mform->setType('coursecontextid', PARAM_INT);
 
         $placeholder = get_string('course_code_placeholder', 'local_hshexport');
         $mform->addElement('text', 'course_code', get_string('course_code', 'local_hshexport'), 'maxlength="150" size="50" placeholder="'.$placeholder.'"');
@@ -52,22 +51,21 @@ class evaluserexport extends moodleform {
         $mform->addHelpButton('course_code', 'course_code', 'local_hshexport');
         $mform->setDefault('course_code', null);
 
+        $viewableroles = get_roles_used_in_context($coursecontext, false);
         $roles = role_fix_names($viewableroles, $coursecontext, ROLENAME_ALIAS);
-
         $roles_checkboxes = [];
-
         foreach ($roles as $role) {
             $roles_checkboxes[] =& $mform->createElement('advcheckbox', 'role_'.$role->id, $role->localname, null, ['group' => 1], [null, $role->id]);
         }
+
         $mform->addGroup($roles_checkboxes, 'roles', get_string('select_roles', 'local_hshexport'), ['<br/>'], true);
         $mform->addHelpButton('roles', 'select_roles', 'local_hshexport');
         $mform->addGroupRule(
             'roles',
             get_string('noselectedroles', 'local_hshexport'),
             'required',
-            null,
-            1,
-            'client'
+            PARAM_INT,
+            1
         );
 
         $this->add_checkbox_controller(
@@ -75,21 +73,7 @@ class evaluserexport extends moodleform {
             get_string("checkall", "local_hshexport")
         );
 
-        $mform->addElement('hidden', 'courseid', $courseid);
-        $mform->setType('courseid', PARAM_INT);
-
-        $mform->addElement('hidden', 'coursecontextid', $coursecontext->id);
-        $mform->setType('coursecontextid', PARAM_INT);
-
         $submitlabel = get_string('csvdownload', 'local_hshexport');
         $this->add_action_buttons(false, $submitlabel);
-
-    }
-
-    function validation($data, $files)
-    {
-        $errors = parent::validation($data, $files); // TODO: Change the autogenerated stub
-        return $errors;
     }
-
 }
\ No newline at end of file
diff --git a/action_download.php b/download.php
similarity index 73%
rename from action_download.php
rename to download.php
index 842edc9902fb49359a097ffdfae4162a6b8619e6..e8f15bc53914cd7d15a9a44c856bde6400dc548b 100644
--- a/action_download.php
+++ b/download.php
@@ -27,21 +27,22 @@ use local_hshexport\local\helpers\download;
 require(__DIR__ . '/../../config.php');
 require_once($CFG->libdir.'/csvlib.class.php');
 
-$PAGE->set_url('/local/hshexport/action_download.php');
+$PAGE->set_url('/local/hshexport/download.php');
 
-if (!confirm_sesskey()) {
-    throw new \moodle_exception('confirmsesskeybad');
-}
+$course_code = optional_param('code', null, PARAM_ALPHANUMEXT);
+$courseid = required_param('id', PARAM_INT);
+$coursecontextid = required_param('context', PARAM_INT);
+$roles = required_param('roles', PARAM_TEXT);
 
-$course_code = optional_param('course_code', null, PARAM_ALPHANUMEXT);
-$courseid = required_param('courseid', PARAM_INT);
-$coursecontextid = required_param('coursecontextid', PARAM_INT);
-$roles = required_param_array('roles',PARAM_INT);
+$coursecontext = context_course::instance($courseid);
+$PAGE->set_context($coursecontext);
+require_capability('local/hshexport:canexport', $coursecontext);
 
-$roleids = array_values(array_filter($roles));
+$roles = json_decode(urldecode($roles));
+$roleids = array_map('intval', $roles);
 
 $filename = download::get_evaluation_filename($courseid, $course_code);
-$users = local_hshexport\local\helpers\user_query::get_users_by_role($courseid, $coursecontextid, $roleids);
+$users = local_hshexport\local\helpers\user_query::get_users_by_role($courseid, $coursecontextid, $roles);
 
 if (!$course_code) {
     $course = get_course($courseid);
diff --git a/index.php b/index.php
index b6774a84075ea18fa219f283f8c18aeb3f52abc3..fa798c3931fbe5bdb25ae42703f55c9f91925384 100644
--- a/index.php
+++ b/index.php
@@ -24,8 +24,8 @@
 
 use local_hshexport\form\evaluserexport;
 
-
 require(__DIR__ . '/../../config.php');
+require_once($CFG->libdir.'/csvlib.class.php');
 
 $courseid = required_param('id', PARAM_INT);
 $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
@@ -48,11 +48,26 @@ $customdata = [
     'coursecontext' => $coursecontext
 ];
 
-$mform = new evaluserexport('action_download.php', $customdata);
+$mform = new evaluserexport('#', $customdata);
+
+if ($formdata = $mform->get_data()) {
+
+    // removes not selected roles from array
+    $roleids = array_values(array_filter($formdata->roles));
+    $roles_param = urlencode(json_encode($roleids));
+
+    $params = [
+        'id' => $formdata->courseid,
+        'context' => $formdata->coursecontextid,
+        'roles' => $roles_param,
+        'code' => $formdata->course_code
+    ];
+
+    redirect(new moodle_url('/local/hshexport/download.php', $params));
 
-//if ($mform->get_data()) {
-//    redirect(new moodle_url('local/hshexport/action_download.php'));
-//}
+} else {
+    $mform->set_data($formdata);
+}
 
 $mform->display();
 echo $OUTPUT->footer();