diff --git modules/node/node.module modules/node/node.module
index 1f134bc..824f132 100644
--- modules/node/node.module
+++ modules/node/node.module
@@ -529,6 +529,10 @@ function node_type_save($info) {
     field_attach_create_bundle('node', $type->type);
 
     module_invoke_all('node_type_insert', $type);
+
+    if (variable_get('node_permissions_' . $type->type, 1)) {
+      user_permissions_insert(node_list_permissions($type->type));
+    }
     $status = SAVED_NEW;
   }
 
@@ -623,6 +627,8 @@ function node_type_delete($type) {
   field_attach_delete_bundle('node', $type);
   module_invoke_all('node_type_delete', $info);
 
+  user_permissions_delete(node_list_permissions($type));
+
   // Clear the node type cache.
   drupal_static_reset('_node_types_build');
 }
diff --git modules/user/user.module modules/user/user.module
index f263ea8..60696c6 100644
--- modules/user/user.module
+++ modules/user/user.module
@@ -2955,6 +2955,40 @@ function user_role_revoke_permissions($rid, array $permissions = array()) {
 }
 
 /**
+ * Informs modules about new user permissions.
+ *
+ * _insert(), because there's a possibility for introducing _update() at some
+ * point in the future.
+ *
+ * @todo Make user_modules_installed() call this function.
+ */
+function user_permissions_insert(array $permissions = array()) {
+  // Allow modules to react on new permissions.
+  module_invoke_all('user_permissions_insert', $permissions);
+
+  // Grant any new permissions to the administration role.
+  $rid = variable_get('user_admin_role', 0);
+  if ($rid && !empty($permissions)) {
+    user_role_grant_permissions($rid, $permissions);
+  }
+}
+
+/**
+ * Informs modules about no longer available user permissions.
+ *
+ * @todo Make user_modules_uninstalled() call this function.
+ */
+function user_permissions_delete(array $permissions = array()) {
+  // Allow modules to act on the deleted permissions before they are removed.
+  module_invoke_all('user_permissions_delete', $permissions);
+
+  // Delete all records that currently reference the permissions.
+  db_delete('role_permission')
+    ->condition('permission', $permissions, 'IN')
+    ->execute();
+}
+
+/**
  * Implements hook_user_operations().
  */
 function user_user_operations($form = array(), $form_state = array()) {
