diff --git a/profiles/unl_profile/unl_profile.install b/profiles/unl_profile/unl_profile.install
index 372523ea2ad8dae41a990007a828ad77fc80b00b..70224d08dfbe78655e6fe7b713ee6ccb06cb9d8b 100644
--- a/profiles/unl_profile/unl_profile.install
+++ b/profiles/unl_profile/unl_profile.install
@@ -226,13 +226,8 @@ EOF;
           'default'       => $new_prefix,
 
           // shared tables across all sites
-          'authmap'       => $shared_prefix,
           'filter'        => $shared_prefix,
           'filter_format' => $shared_prefix,
-          'role'          => $shared_prefix,
-          'sessions'      => $shared_prefix,
-          'users'         => $shared_prefix,
-          'users_roles'   => $shared_prefix,
           'wysiwyg'       => $shared_prefix,
         );
         
@@ -243,6 +238,9 @@ EOF;
         
         foreach ($settings['databases']['value'] as &$database) {
           $database['default']['prefix'] = $new_prefixes;
+          if (!isset($database['slave'])) {
+            continue;
+          }
           foreach ($database['slave'] as &$slave_database) {
             $slave_database['prefix'] = $new_prefixes;
           }
@@ -263,16 +261,12 @@ EOF;
         module_enable(array('unl_cas'));
         
         // Copy permissions from the parent site to the new site.
-        db_query("TRUNCATE ${new_prefix}role_permission")->execute();
+        db_query("TRUNCATE {$new_prefix}role_permission")->execute();
         // I'm using REPLACE because I keep getting duplicate entry errors, despite inserting into what should be an empty table.
-        db_query("REPLACE INTO ${new_prefix}role_permission (rid, permission, module) SELECT rid, permission, module FROM ${shared_prefix}role_permission")->execute();
+        db_query("REPLACE INTO {$new_prefix}role_permission (rid, permission, module) SELECT rid, permission, module FROM {$shared_prefix}role_permission")->execute();
     }
     
     
-    //$permissions = array_keys(module_invoke_all('permission'));
-    //print_r($permissions);
-    //user_role_grant_permissions(3, array($permissions));
-    
     $files_dir = $settings_dir . '/files';
     chmod($files_dir, 0777);
     
diff --git a/sites/all/modules/unl/unl_cas.module b/sites/all/modules/unl/unl_cas.module
index d31dfe42d9b3208098d2452593831289e9a71459..52bc00001957bdac47bd796ead807a3b51625a88 100644
--- a/sites/all/modules/unl/unl_cas.module
+++ b/sites/all/modules/unl/unl_cas.module
@@ -179,6 +179,69 @@ function unl_cas_import_user($username) {
   return $user;
 }
 
+/**
+ * Implements hook_user_presave()
+ * 
+ * On non-default sites, only allow users who are administrators on the default
+ * to be administrators.  Also, automatically make users who are administrators
+ * on the default site an administrator on non-default sites.
+ */
+function unl_cas_user_presave(&$edit, $account, $category) {
+  if (conf_path() == 'sites/default') {
+    return;
+  }
+  
+  if (isset($account->name)) {
+    $username = $account->name;
+  }
+  else {
+    $username = $edit['name'];
+  }
+
+  $local_admin_role_id = variable_get('user_admin_role');
+  
+  if (_unl_cas_is_user_default_site_administrator($username)) {
+    $local_admin_role = user_role_load($local_admin_role_id);
+    $edit['roles'][$local_admin_role_id] = $local_admin_role->name;
+  }
+  else {
+    unset($edit['roles'][$local_admin_role_id]);
+  }
+}
+
+/**
+ * Implements hook_user_login()
+ * 
+ * On non-default sites, if a user with the administrator role logs in, verify
+ * that they are still an admin in the default site.  If not, remove them from
+ * the role.
+ */
+function unl_cas_user_login(&$edit, $account) {
+  if (conf_path() == 'sites/default') {
+    return;
+  }
+  
+  if (!in_array(variable_get('user_admin_role'), array_keys($account->roles))) {
+    return;
+  }
+  
+  $edit = array(
+    'roles' => $account->roles,
+  );
+  user_save($account, $edit);
+}
+
+function _unl_cas_is_user_default_site_administrator($username) {
+  require 'sites/default/settings.php';
+  $shared_prefix = $databases['default']['default']['prefix'];
+  
+  $data = db_query("SELECT value FROM {$shared_prefix}variable WHERE name='user_admin_role'")->fetchCol();
+  $shared_admin_role_id = unserialize($data[0]);
+  
+  $shared_admin_usernames = db_query("SELECT u.name FROM {$shared_prefix}users AS u JOIN {$shared_prefix}users_roles AS r ON u.uid = r.uid WHERE name=:name AND rid=:rid", array(':name' => $username, ':rid' => $shared_admin_role_id))->fetchCol();
+  return count($shared_admin_usernames) > 0;
+}
+
 function unl_cas_preprocess_user_picture(&$variables) {
   //Default image: http://planetred.unl.edu/mod/profile/graphics/defaultmedium.gif
   if ($variables['account']->uid == 0) {