diff --git a/user_permissions.module b/user_permissions.module
index 1f2aa72..6f2122d 100644
--- a/user_permissions.module
+++ b/user_permissions.module
@@ -69,6 +69,24 @@ function user_permissions_profile_permissions_form($form, $form_state, $account)
     '#type' => 'hidden',
     '#value' => $account->uid,
   );
+  $blocked_permissions = array();
+  foreach (user_role_permissions($account->roles) as $other_role => $permissions) {
+    if ($other_role == $role->rid) {
+      continue;
+    }
+    foreach ($permissions as $perm => $value) {
+      if ($value) {
+        $blocked_permissions[$perm] = $perm;
+      }
+    }
+  }
+  foreach (element_children($form['checkboxes'][$role->rid]) as $permission) {
+    if (isset($blocked_permissions[$permission])) {
+      $form['checkboxes'][$role->rid][$permission]['#checked'] = TRUE;
+      $form['checkboxes'][$role->rid][$permission]['#value'] = $permission;
+      $form['checkboxes'][$role->rid][$permission]['#disabled'] = TRUE;
+    }
+  }
 
   unset($form['#submit']);
 
@@ -169,6 +187,9 @@ function user_permissions_form_user_admin_account_alter(&$form, &$form_state, $f
       }
     }
   }
+  foreach ($form['accounts']['#options'] as $uid => $row) {
+    $form['accounts']['#options'][$uid]['roles'] = str_replace("_user_role_$uid", '(custom permissions)', $row['roles']);
+  }
 }
 
 /**
