--- adminrole.module.orig	2009-10-30 11:18:40.339574428 -0500
+++ adminrole.module	2009-10-30 11:19:01.207922800 -0500
@@ -14,6 +14,8 @@ function adminrole_help($section) {
   switch ($section) {
     case 'admin/user/adminrole':
       return t('Change which role is an "administrator" role with full permissions');
+    case 'admin/user/adminrole/exceptions':
+      return t('Select the permissions below you <strong>DO NOT</strong> want the admin role to have.');
   }
 }
 
@@ -23,13 +25,22 @@ function adminrole_help($section) {
 function adminrole_menu() {
   $items = array();
 
-  $items['admin/user/adminrole'] = array(
+  $items['admin/user/adminrole/roles'] = array(
     'title' => t('Admin Role'),
     'description' => t('Change which role is an "administrator" role with full permissions'),
     'page callback' => 'drupal_get_form',
     'page arguments' => array('adminrole_admin_settings'),
     'access arguments' => array('administer site configuration'),
-    'type' => MENU_NORMAL_ITEM,
+    'type' => MENU_LOCAL_TASK,
+  );
+  $items['admin/user/adminrole/exceptions'] = array(
+    'title' => t('Admin Role Permission Exceptions'),
+    'description' => t('Exclude permissions from automatically turning on for the admin role.'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('adminrole_settings_exceptions'),
+    'access arguments' => array('administer site configuration'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 5,
   );
 
   $items['admin/adminrole/update'] = array(
@@ -42,6 +53,46 @@ function adminrole_menu() {
   return $items;
 }
 
+function adminrole_settings_exceptions($form_state) {
+  $form = array();
+  $options = array();
+  $defaults = explode(', ', variable_get('adminrole_exceptions', ''));
+  foreach (module_list(FALSE, FALSE, TRUE) as $module) {
+    if ($permissions = module_invoke($module, 'perm')) {
+      $form['permission'][] = array(
+        '#value' => $module,
+      );   
+      asort($permissions);
+      foreach ($permissions as $perm) {
+        $options[$perm] = '';
+        $form['permission'][$perm] = array('#value' => t($perm));
+      }
+    }
+  }
+
+  $form['checkboxes'] = array('#type' => 'checkboxes', '#options' => $options, '#default_value' => array_values($defaults));
+
+  $form = system_settings_form($form);
+  $form['#theme'] = 'adminrole_settings_exceptions';
+  $form['#submit'] = array('adminrole_settings_exceptions_submit');
+  return $form;  
+}
+
+function adminrole_settings_exceptions_submit($form, &$form_state) {
+  if ($op == t('Reset to defaults')) {
+    variable_del('adminrole_exceptions');
+    drupal_set_message(t('The configuration options have been reset to their default values.'));
+  }
+  else {
+    $perms = array_filter($form_state['values']['checkboxes']);
+    variable_set('adminrole_exceptions', implode(', ', array_keys($perms)));
+  }
+
+  cache_clear_all();
+  drupal_rebuild_theme_registry();
+  adminrole_update_perms();
+}
+
 function adminrole_update_perms() {
   if ($admin_role = variable_get('adminrole_adminrole', 0)) {
     if ($admin_role == 0) {
@@ -53,6 +104,10 @@ function adminrole_update_perms() {
         $perms = array_merge($perms, $permissions);
       }
     }
+
+    $exceptions = array_values(explode(', ', variable_get('adminrole_exceptions', '')));
+    $perms = array_diff($perms, $exceptions);
+
     db_query('DELETE FROM {permission} WHERE rid = %d', $admin_role);
     if (count($perms)) {
       db_query("INSERT INTO {permission} (rid, perm) VALUES (%d, '%s')", $admin_role, implode(', ', $perms));
@@ -63,7 +118,6 @@ function adminrole_update_perms() {
 
 function adminrole_admin_settings() {
   $form = array();
-
   $u_roles = user_roles();
   // Removing Authenticated and anonymous roles
   unset($u_roles[1]);
@@ -88,3 +142,36 @@ function adminrole_form_alter(&$form, $f
      $form['#submit'][] = 'adminrole_update_perms';
   }
 }
+
+function adminrole_theme() {
+  return array(
+    'adminrole_settings_exceptions' => array(
+      'argument' => array('form' => NULL),
+    ),
+  );
+}
+
+
+function theme_adminrole_settings_exceptions($form) {
+  foreach (element_children($form['permission']) as $key) {
+    // Don't take form control structures
+    if (is_array($form['permission'][$key])) {
+      $row = array();
+      // Module name
+      if (is_numeric($key)) {
+        $row[] = array('data' => t('@module module', array('@module' => drupal_render($form['permission'][$key]))), 'class' => 'module', 'id' => 'module-'. $form['permission'][$key]['#value'], 'colspan' => 2);
+      }
+      else {
+        $row[] = array('data' => drupal_render($form['permission'][$key]), 'class' => 'permission');
+        $row[] = array('data' => drupal_render($form['checkboxes'][$key]), 'class' => 'checkbox', 'title' => 'admin role' .' : '. t($key));
+      }
+      $rows[] = $row;
+    }
+  }
+  $header[] = (t('Permission'));
+  $output = theme('table', $header, $rows, array('id' => 'permissions'));
+  $output .= drupal_render($form);
+  return $output;
+}
+
+
