=== modified file 'sites/all/modules/adminrole/adminrole.module'
--- adminrole.module	2010-08-24 22:12:40 +0000
+++ adminrole.module	2010-09-17 22:00:10 +0000
@@ -8,38 +8,40 @@
  */
 
 /**
- * Implements hook_form_FORM_ID_alter().
- */
-function adminrole_form_user_admin_settings_alter(&$form, $form_state) {
-  // Administrative role option.
-  $form['admin_role'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Administrator role'),
-  );
-
-  // Do not allow users to set the anonymous or authenticated user roles as the
-  // administrator role.
-  $roles = user_roles();
-  unset($roles[DRUPAL_ANONYMOUS_RID]);
-  unset($roles[DRUPAL_AUTHENTICATED_RID]);
-
-  $form['admin_role']['user_admin_role'] = array(
-    '#type' => 'select',
-    '#title' => t('Administrator role'),
-    '#default_value' => variable_get('user_admin_role', 0),
-    '#options' => array(0 => t('Disabled')) + $roles,
-    '#description' => t('This role will be automatically assigned new permissions whenever a module is enabled.'),
-  );
-
-  // Ensure the save/reset buttons have a lower weight than our fieldset.
-  $form['buttons'] += array('#weight' => 100);
+ * Implementation of hook_menu().
+ */
+function adminrole_menu() {
+  $items = array();
+
+  $items['admin/user/adminrole'] = array(
+    'title' => 'Admin role',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('adminrole_settings_form'),
+    'access arguments' => array('administer permissions'),
+    'type' => MENU_NORMAL_ITEM,
+    'file' => 'adminrole.settings.inc',
+  );
+
+  return $items;
+}
+
+/**
+ * Implementation of hook_theme().
+ */
+function adminrole_theme() {
+  return array(
+    'adminrole_perm_exlusions' => array(
+      'arguments' => array('element' => NULL),
+      'file' => 'adminrole.settings.inc',
+    ),
+  );
 }
 
 /**
  * Implements hook_form_alter().
  */
 function adminrole_form_alter(&$form, $form_state, $form_id) {
-  if (in_array($form_id, array('system_modules', 'user_admin_settings'))) {
+  if ($form_id == 'system_modules') {
     $form['#submit'][] = 'adminrole_update_permissions';
   }
 }

=== added file 'sites/all/modules/adminrole/adminrole.settings.inc'
--- adminrole.settings.inc	1970-01-01 00:00:00 +0000
+++ adminrole.settings.inc	2010-09-17 22:00:10 +0000
@@ -0,0 +1,114 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Administration functions
+ */
+
+/**
+ * FAPI form builder
+ */
+function adminrole_settings_form($form_state) {
+  $form = array();
+
+  // Administrative role option.
+  $form['user_admin_role'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Administrator role'),
+  );
+
+  // Do not allow users to set the anonymous or authenticated user roles as the
+  // administrator role.
+  $roles = user_roles();
+  unset($roles[DRUPAL_ANONYMOUS_RID]);
+  unset($roles[DRUPAL_AUTHENTICATED_RID]);
+
+  $form['user_admin_role'] = array(
+    '#type' => 'select',
+    '#title' => t('Administrator role'),
+    '#default_value' => variable_get('user_admin_role', 0),
+    '#options' => array(0 => t('Disabled')) + $roles,
+    '#description' => t('This role will be automatically assigned all permissions (except the below) whenever a module is enabled, and upon submitting this form. Any changes made in the \'Permissions\' screen will be overwritten.'),
+  );
+
+  $exclusions = variable_get('adminrole_exclude_permissions', array());
+  $form['adminrole_perm_exlusions'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Exclusions'),
+    '#description' => t('Select the permissions below you <em>DO NOT</em> want the administrator role to be assigned.'),
+    '#options' => array(),
+    '#default_value' => array(),
+    '#theme' => 'adminrole_perm_exlusions',
+    '#modules' => array(),
+  );
+
+  foreach (module_list(FALSE, FALSE, TRUE) as $module) {
+    $permissions = module_invoke($module, 'perm');
+
+    if (!$permissions) {
+      continue;
+    }
+
+    $default_value = array_intersect($exclusions, $permissions);
+    $form['adminrole_perm_exlusions']['#options'] += drupal_map_assoc($permissions, 't');
+    $form['adminrole_perm_exlusions']['#default_value'] += $default_value;
+
+    $form['adminrole_perm_exlusions']['#modules'][$module] = array(
+      'module' => $module,
+      'permissions' => $permissions,
+      'excluded' => count($default_value),
+    );
+  }
+  $form = system_settings_form($form);
+  $form['#submit'] = array('adminrole_settings_form_submit');
+  return $form;
+}
+
+function adminrole_settings_form_submit($form, &$form_state) {
+  if ($op == t('Reset to defaults')) {
+    variable_del('user_admin_role');
+    variable_del('adminrole_exclude_permissions');
+    drupal_set_message(t('The configuration options have been reset to their default values.'));
+  }
+  else {
+    variable_set('user_admin_role', $form_state['values']['user_admin_role']);
+    $perms = array_filter($form_state['values']['adminrole_perm_exlusions']);
+    variable_set('adminrole_exclude_permissions', array_keys($perms));
+  }
+
+  adminrole_update_permissions();
+}
+
+/**
+ * Theme exlusions checkboxes
+ */
+function theme_adminrole_perm_exlusions($element) {
+
+  $rows = array();
+  foreach ($element['#modules'] as $info) {
+    $rows[] = array(
+      array('data' => t('@module module', array('@module' => $info['module'])), 'class' => 'module', 'id' => 'module-'. $info['module'], 'colspan' => 2)
+    );
+
+    foreach ($info['permissions'] as $perm) {
+      $row  = array();
+      // We want to set the title in a different table column
+      // (title is localized version of $perm)
+      $row[] = array('data' => $element[$perm]['#title'], 'class' => 'permission');
+      unset ($element[$perm]['#title']);
+      $row[] = array('data' => drupal_render($element[$perm]), 'class' => 'checkbox', 'title' => 'admin role' .' : '. t($perm));
+      $rows[] = $row;
+    }
+  }
+  $header = array(t('Permission'), array('data' => t('Excluded'), 'class' => 'checkbox'));
+  $output = theme('table', $header, $rows, array('id' => 'permissions'));
+  $fs = array(
+      '#type' => 'fieldset',
+      '#title' => t('Exclusions'),
+      '#collapsible' => TRUE,
+      '#collapsed' => empty($element['#default_value']),
+      '#value' => $output,
+    );
+  return theme('fieldset', $fs);
+}

