diff --git a/includes/nodequeue.admin.inc b/includes/nodequeue.admin.inc
index e0c6b97..616cb38 100644
--- a/includes/nodequeue.admin.inc
+++ b/includes/nodequeue.admin.inc
@@ -394,13 +394,9 @@ function nodequeue_edit_queue_form($form, &$form_state, $queue) {
     '#description' => t('Enter the text for the corresponding link to remove a node from a queue. This may be blank (in which case no link will appear) but a remove link will only appear if link, above, is set.'),
   );
 
-
-  $result = db_query("SELECT r.* FROM {role} r LEFT JOIN {role_permission} p ON p.rid = r.rid WHERE p.permission LIKE '%manipulate queues%' ORDER BY r.name");
-
-  $roles = array();
-  foreach ($result as $role) {
-    $roles[$role->rid] = $role->name;
-  }
+  $manipulate_all_queues = user_roles(FALSE, 'manipulate all queues');
+  $manipulate_queues = user_roles(FALSE, 'manipulate queues');
+  $roles = $manipulate_all_queues + $manipulate_queues;
 
   if (!empty($roles)) {
     $form['roles'] = array(
@@ -410,6 +406,15 @@ function nodequeue_edit_queue_form($form, &$form_state, $queue) {
       '#options' => $roles,
       '#description' => t('Check each role that can add nodes to the queue. Be sure that roles you want to appear here have "manipulate queues" access in the main access control panel.'),
     );
+
+    foreach ($roles as $rid => $role) {
+      $form['roles'][$rid] = array(
+        '#type' => 'checkbox',
+        '#title' => $role,
+        '#default_value' => (isset($manipulate_all_queues[$rid]) || in_array($rid, $queue->roles)) ? TRUE : FALSE,
+        '#disabled' => (isset($manipulate_all_queues[$rid])) ? TRUE : FALSE,
+      );
+    }
   }
   else {
     $form['roles'] = array(
@@ -418,7 +423,9 @@ function nodequeue_edit_queue_form($form, &$form_state, $queue) {
     );
 
     $form['roles_markup'] = array(
-      '#value' => t('No roles have the "manipulate queues" permission, so only the administrator account will be able to add or remove items from this queue.'),
+      '#type' => 'item',
+      '#title' => t('Roles'),
+      '#description' => '<strong>' . t('No roles have the "manipulate queues" permission, so only the administrator account will be able to add or remove items from this queue.') . '</strong>',
     );
   }
 
@@ -513,7 +520,7 @@ function nodequeue_edit_queue_form_validate($form, &$form_state) {
     form_set_error('title', t('Please enter a title for this queue.'));
   }
   $queue = (object) $form_state['values'];
-  // fix checkboxes
+  // Fix checkboxes.
   $queue->roles = array_keys(array_filter($queue->roles));
   $queue->types = array_keys(array_filter($queue->types));
 
@@ -529,10 +536,14 @@ function nodequeue_edit_queue_form_validate($form, &$form_state) {
  */
 function nodequeue_edit_queue_form_submit($formid, &$form_state) {
   $queue = (object) $form_state['values'];
-  // fix checkboxes
+  // Fix checkboxes.
   $queue->roles = array_keys(array_filter($queue->roles));
   $queue->types = array_keys(array_filter($queue->types));
 
+  // Remove roles that have the 'manipulate all queues' permission.
+  $manipulate_all_queues = array_keys(user_roles(FALSE, 'manipulate all queues'));
+  $queue->roles = array_diff($queue->roles, $manipulate_all_queues);
+
   if (!isset($queue->qid)) {
     $queue->new = TRUE;
   }
diff --git a/nodequeue.module b/nodequeue.module
index 9a498c5..5a9062d 100644
--- a/nodequeue.module
+++ b/nodequeue.module
@@ -28,17 +28,17 @@ define('NODEQUEUE_DUPLICATE_POSITION', 3);
  */
 function nodequeue_permission() {
   return array(
-    'manipulate queues' => array(
-      'title' => t('manipulate queues'),
-      'description' => t('Manipulate queues.'),
-    ),
     'administer nodequeue' => array(
-      'title' => t('administer nodequeue'),
+      'title' => t('Administer nodequeue'),
       'description' => t('Administer the nodequeue module.'),
     ),
+   'manipulate queues' => array(
+      'title' => t('Manipulate queues'),
+      'description' => t('Manipulate queues.'),
+    ),
     'manipulate all queues' => array(
-      'title' => t('manipulate all queues'),
-      'description' => t('Manipulate all queues'),
+      'title' => t('Manipulate all queues'),
+      'description' => t('Manipulate all queues.'),
     ),
   );
 }
