--- uc_roles.module	2010-09-22 16:26:27.000000000 -0400
+++ uc_rolesNew.module	2010-09-22 16:00:17.000000000 -0400
@@ -353,6 +353,12 @@ function uc_roles_user_submit(&$edit, &$
   if (!user_access('administer users') || $category != 'account') {
     return;
   }
+  
+  // If user doesn't have "administer permissions" permission, we need to populate the roles,
+  // otherwise user_save() will delete them.
+  if (!isset($edit['roles'])) {
+    $edit['roles'] = _uc_roles_get_user_roles($account->uid);
+  }
 
   // If a new temporary role is added.
   // Grant a new role.
@@ -401,6 +407,18 @@ function uc_roles_user_submit(&$edit, &$
 }
 
 /**
+ * Return an array of roles for the given uid.
+ */
+function _uc_roles_get_user_roles($uid) {
+  $rids = array();
+  $result = db_query("SELECT rid FROM {users_roles} WHERE uid = %d", $uid);
+  while ($row = db_fetch_array($result)) {
+    $rids[$row['rid']] = $row['rid'];
+  }
+  return $rids;
+}
+
+/**
  * Implementation of hook_user_validate().
  */
 function uc_roles_user_validate(&$edit, &$account, $category) {
