=== modified file 'sites/all/modules/contrib/features/includes/features.user.inc'
--- sites/all/modules/contrib/features/includes/features.user.inc	2009-12-08 14:11:09 +0000
+++ sites/all/modules/contrib/features/includes/features.user.inc	2009-12-10 14:56:33 +0000
@@ -102,7 +102,12 @@
   $defaults = module_invoke($module, 'user_default_permissions');
   if (!empty($defaults)) {
     $roles = _features_get_roles();
+
+    // Track the roles explicitly managed by this feature.
+    $managed_roles = array();
+
     foreach ($defaults as $permission) {
+      $managed_roles += $permission['roles'];
       $perm = $permission['name'];
 
       // Add permissions for any roles that should have them.
@@ -116,6 +121,8 @@
             'perm' => array(),
           );
         }
+        
+        // If the permission is not managed by the feature, keep the current permissions.
         if (!in_array($perm, $roles[$role]['perm'])) {
           $roles[$role]['perm'][] = $perm;
         }
@@ -129,6 +136,11 @@
         }
       }
     }
+    
+    // Drop changes for any roles that are not explicitly managed by this feature.
+    // Using array_combine() instead of array_fill_keys() to maintain PHP < 5.2 compatibility.
+    $roles = array_intersect_key($roles, array_combine($managed_roles, $managed_roles));
+    
     // Write the updated permissions.
     _user_features_save_roles($roles);
   }
