Index: modules/book/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.module,v
retrieving revision 1.501
diff -u -p -r1.501 book.module
--- modules/book/book.module	30 Jul 2009 19:24:20 -0000	1.501
+++ modules/book/book.module	11 Aug 2009 00:03:09 -0000
@@ -1078,31 +1078,27 @@ function book_type_is_allowed($type) {
 }
 
 /**
- * Implement hook_node_type().
+ * Implement hook_node_type_update().
  *
  * Update book module's persistent variables if the machine-readable name of a
  * node type is changed.
  */
-function book_node_type($op, $type) {
-  switch ($op) {
-    case 'update':
+function book_node_type_update($type) {
-      if (!empty($type->old_type) && $type->old_type != $type->type) {
-        // Update the list of node types that are allowed to be added to books.
-        $allowed_types = variable_get('book_allowed_types', array('book'));
-        $key = array_search($type->old_type, $allowed_types);
+  if (!empty($type->old_type) && $type->old_type != $type->type) {
+    // Update the list of node types that are allowed to be added to books.
+    $allowed_types = variable_get('book_allowed_types', array('book'));
+    $key = array_search($type->old_type, $allowed_types);
 
-        if ($key !== FALSE) {
-          $allowed_types[$type->type] = $allowed_types[$key] ? $type->type : 0;
-          unset($allowed_types[$key]);
-          variable_set('book_allowed_types', $allowed_types);
-        }
+    if ($key !== FALSE) {
+      $allowed_types[$type->type] = $allowed_types[$key] ? $type->type : 0;
+      unset($allowed_types[$key]);
+      variable_set('book_allowed_types', $allowed_types);
+    }
 
-        // Update the setting for the "Add child page" link.
-        if (variable_get('book_child_type', 'book') == $type->old_type) {
-          variable_set('book_child_type', $type->type);
-        }
+    // Update the setting for the "Add child page" link.
+    if (variable_get('book_child_type', 'book') == $type->old_type) {
+      variable_set('book_child_type', $type->type);
+    }
-      }
-      break;
   }
 }
 
Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.751
diff -u -p -r1.751 comment.module
--- modules/comment/comment.module	9 Aug 2009 00:55:50 -0000	1.751
+++ modules/comment/comment.module	11 Aug 2009 00:03:10 -0000
@@ -211,38 +211,38 @@ function comment_fieldable_info() {
   return $return;
 }
 
-
 /**
- * Implement hook_node_type().
+ * Implement hook_node_type_insert().
  */
-function comment_node_type($op, $info) {
-  switch ($op) {
-    case 'insert':
-      field_attach_create_bundle('comment_node_' . $info->type);
-      break;
+function comment_node_type_insert($info) {
+  field_attach_create_bundle('comment_node_' . $info->type);
+}
 
-    case 'update':
-      if (!empty($info->old_type) && $info->type != $info->old_type) {
-        field_attach_rename_bundle('comment_node_' . $info->old_type, 'comment_node_' . $info->type);
-      }
-      break;
+/**
+ * Implement hook_node_type_update().
+ */
+function comment_node_type_update($info) {
+  if (!empty($info->old_type) && $info->type != $info->old_type) {
+    field_attach_rename_bundle('comment_node_' . $info->old_type, 'comment_node_' . $info->type);
+  }
+}
 
-    case 'delete':
-      field_attach_delete_bundle('comment_node_' . $info->type);
-
-      $settings = array(
-        'comment',
-        'comment_default_mode',
-        'comment_default_per_page',
-        'comment_anonymous',
-        'comment_subject_field',
-        'comment_preview',
-        'comment_form_location',
-      );
-      foreach ($settings as $setting) {
-        variable_del($setting . '_' . $info->type);
-      }
-      break;
+/**
+ * Implement hook_node_type_delete().
+ */
+function comment_node_type_delete($info) {
+  field_attach_delete_bundle('comment_node_' . $info->type);
+  $settings = array(
+    'comment',
+    'comment_default_mode',
+    'comment_default_per_page',
+    'comment_anonymous',
+    'comment_subject_field',
+    'comment_preview',
+    'comment_form_location',
+  );
+  foreach ($settings as $setting) {
+    variable_del($setting . '_' . $info->type);
   }
 }
 
Index: modules/node/content_types.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/content_types.inc,v
retrieving revision 1.85
diff -u -p -r1.85 content_types.inc
--- modules/node/content_types.inc	9 Aug 2009 01:15:33 -0000	1.85
+++ modules/node/content_types.inc	11 Aug 2009 00:03:11 -0000
@@ -349,10 +349,23 @@ function node_type_form_submit($form, &$
 }
 
 /**
- * Implement hook_node_type().
+ * Implement hook_node_type_insert().
  */
-function node_node_type($op, $info) {
-  if ($op != 'delete' && !empty($info->old_type) && $info->old_type != $info->type) {
+function node_node_type_insert($info) {
+  if (!empty($info->old_type) && $info->old_type != $info->type) {
+    $update_count = node_type_update_nodes($info->old_type, $info->type);
+
+    if ($update_count) {
+      drupal_set_message(format_plural($update_count, 'Changed the content type of 1 post from %old-type to %type.', 'Changed the content type of @count posts from %old-type to %type.', array('%old-type' => $info->old_type, '%type' => $info->type)));
+    }
+  }
+}
+
+/**
+ * Implement hook_node_type_update().
+ */
+function node_node_type_update($info) {
+  if (!empty($info->old_type) && $info->old_type != $info->type) {
     $update_count = node_type_update_nodes($info->old_type, $info->type);
 
     if ($update_count) {
Index: modules/node/node.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.api.php,v
retrieving revision 1.32
diff -u -p -r1.32 node.api.php
--- modules/node/node.api.php	5 Aug 2009 14:58:40 -0000	1.32
+++ modules/node/node.api.php	11 Aug 2009 00:03:11 -0000
@@ -626,35 +626,45 @@ function hook_ranking() {
 
 
 /**
+ * Act on node type creation.
+ *
+ * This hook allows modules to take action when a node type is created.
+ *
+ * @param $info
+ *   The node type object which is being created.
+ */
+function hook_node_type_insert($info) {
+}
+
+/**
  * Act on node type changes.
  *
  * This hook allows modules to take action when a node type is modified.
  *
- * @param $op
- *   What is being done to $info. Possible values:
- *   - "delete"
- *   - "insert"
- *   - "update"
  * @param $info
- *   The node type object on which $op is being performed.
+ *   The node type object which is being modified.
  */
-function hook_node_type($op, $info) {
-
-  switch ($op) {
-    case 'delete':
-      variable_del('comment_' . $info->type);
-      break;
-    case 'update':
-      if (!empty($info->old_type) && $info->old_type != $info->type) {
-        $setting = variable_get('comment_' . $info->old_type, COMMENT_NODE_OPEN);
-        variable_del('comment_' . $info->old_type);
-        variable_set('comment_' . $info->type, $setting);
-      }
-      break;
+function hook_node_type_update($info) {
+  if (!empty($info->old_type) && $info->old_type != $info->type) {
+    $setting = variable_get('comment_' . $info->old_type, COMMENT_NODE_OPEN);
+    variable_del('comment_' . $info->old_type);
+    variable_set('comment_' . $info->type, $setting);
   }
 }
 
 /**
+ * Act on node type deletion.
+ *
+ * This hook allows modules to take action when a node type is deleted.
+ *
+ * @param $info
+ *   The node type object which is being deleted.
+ */
+function hook_node_type_delete($info) {
+  variable_del('comment_' . $info->type);
+}
+
+/**
  * Define access restrictions.
  *
  * This hook allows node modules to limit access to the node types they
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.1095
diff -u -p -r1.1095 node.module
--- modules/node/node.module	8 Aug 2009 22:52:59 -0000	1.1095
+++ modules/node/node.module	11 Aug 2009 00:03:12 -0000
@@ -431,7 +431,7 @@ function node_type_save($info) {
       field_attach_rename_bundle($type->old_type, $type->type);
     }
     node_configure_fields($type);
-    module_invoke_all('node_type', 'update', $type);
+    module_invoke_all('node_type_update', $type);
     return SAVED_UPDATED;
   }
   else {
@@ -442,7 +442,7 @@ function node_type_save($info) {
 
     field_attach_create_bundle($type->type);
     node_configure_fields($type);
-    module_invoke_all('node_type', 'insert', $type);
+    module_invoke_all('node_type_insert', $type);
     return SAVED_NEW;
   }
 }
@@ -517,7 +517,7 @@ function node_type_delete($type) {
   db_delete('node_type')
     ->condition('type', $type)
     ->execute();
-  module_invoke_all('node_type', 'delete', $info);
+  module_invoke_all('node_type_delete', $info);
 }
 
 /**
@@ -2614,7 +2614,7 @@ function node_access_needs_rebuild($rebu
  *   large number of nodes).
  *   hook_update_N and any form submit handler are safe contexts to use the
  *   'batch mode'. Less decidable cases (such as calls from hook_user,
- *   hook_taxonomy, hook_node_type...) might consider using the non-batch mode.
+ *   hook_taxonomy, etc...) might consider using the non-batch mode.
  */
 function node_access_rebuild($batch_mode = FALSE) {
   db_delete('node_access')->execute();
Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.493
diff -u -p -r1.493 taxonomy.module
--- modules/taxonomy/taxonomy.module	4 Aug 2009 06:50:07 -0000	1.493
+++ modules/taxonomy/taxonomy.module	11 Aug 2009 00:03:13 -0000
@@ -929,10 +929,17 @@ function taxonomy_node_save($node, $term
 }
 
 /**
- * Implement hook_node_type().
+ * Implement hook_node_type_insert().
  */
+function taxonomy_node_type_insert($info) {
+  drupal_static_reset('taxonomy_term_count_nodes');
+}
+
+/**
+ * Implement hook_node_type_update().
+ */
-function taxonomy_node_type($op, $info) {
-  if ($op == 'update' && !empty($info->old_type) && $info->type != $info->old_type) {
+function taxonomy_node_type_update($info) {
+  if (!empty($info->old_type) && $info->type != $info->old_type) {
     db_update('taxonomy_vocabulary_node_type')
       ->fields(array(
         'type' => $info->type,
@@ -940,11 +947,17 @@ function taxonomy_node_type($op, $info) 
       ->condition('type', $info->old_type)
       ->execute();
   }
+  drupal_static_reset('taxonomy_term_count_nodes');
+}
+
-  elseif ($op == 'delete') {
-    db_delete('taxonomy_vocabulary_node_type')
-      ->condition('type', $info->type)
-      ->execute();
-  }
+/**
+ * Implement hook_node_type_delete().
+ */
+function taxonomy_node_type_delete($info) {
+  db_delete('taxonomy_vocabulary_node_type')
+    ->condition('type', $info->type)
+    ->execute();
+
   drupal_static_reset('taxonomy_term_count_nodes');
 }
 
