Index: modules/comment/comment.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.api.php,v
retrieving revision 1.17
diff -u -p -r1.17 comment.api.php
--- modules/comment/comment.api.php	3 Oct 2010 01:15:33 -0000	1.17
+++ modules/comment/comment.api.php	22 Oct 2010 18:38:05 -0000
@@ -68,6 +68,8 @@ function hook_comment_load($comments) {
  *   View mode, e.g. 'full', 'teaser'...
  * @param $langcode
  *   The language code used for rendering.
+ *
+ * @see hook_entity_view()
  */
 function hook_comment_view($comment, $view_mode, $langcode) {
   // how old is the comment
@@ -90,6 +92,7 @@ function hook_comment_view($comment, $vi
  *   A renderable array representing the comment.
  *
  * @see comment_view()
+ * @see hook_entity_view_alter()
  */
 function hook_comment_view_alter(&$build) {
   // Check for the existence of a field added by another module.
Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.906
diff -u -p -r1.906 comment.module
--- modules/comment/comment.module	20 Oct 2010 01:31:06 -0000	1.906
+++ modules/comment/comment.module	22 Oct 2010 18:38:39 -0000
@@ -939,7 +939,8 @@ function comment_view($comment, $node, $
   }
 
   // Allow modules to modify the structured comment.
-  drupal_alter('comment_view', $build);
+  $type = 'comment';
+  drupal_alter(array('comment_view', 'entity_view'), $build, $type);
 
   return $build;
 }
@@ -983,6 +984,7 @@ function comment_build_content($comment,
 
   // Allow modules to make their own additions to the comment.
   module_invoke_all('comment_view', $comment, $view_mode, $langcode);
+  module_invoke_all('entity_view', $comment, 'comment', $view_mode, $langcode);
 }
 
 /**
Index: modules/node/node.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.api.php,v
retrieving revision 1.78
diff -u -p -r1.78 node.api.php
--- modules/node/node.api.php	22 Oct 2010 00:35:35 -0000	1.78
+++ modules/node/node.api.php	22 Oct 2010 18:38:05 -0000
@@ -759,6 +759,8 @@ function hook_node_submit($node, $form, 
  * @param $langcode
  *   The language code used for rendering.
  *
+ * @see hook_entity_view()
+ *
  * @ingroup node_api_hooks
  */
 function hook_node_view($node, $view_mode, $langcode) {
@@ -785,6 +787,7 @@ function hook_node_view($node, $view_mod
  *   A renderable array representing the node content.
  *
  * @see node_view()
+ * @see hook_entity_view_alter()
  *
  * @ingroup node_api_hooks
  */
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.1309
diff -u -p -r1.1309 node.module
--- modules/node/node.module	20 Oct 2010 08:15:33 -0000	1.1309
+++ modules/node/node.module	22 Oct 2010 18:39:14 -0000
@@ -1270,7 +1270,8 @@ function node_view($node, $view_mode = '
   }
 
   // Allow modules to modify the structured node.
-  drupal_alter('node_view', $build);
+  $type = 'node';
+  drupal_alter(array('node_view', 'entity_view'), $build, $type);
 
   return $build;
 }
@@ -1343,6 +1344,7 @@ function node_build_content($node, $view
 
   // Allow modules to make their own additions to the node.
   module_invoke_all('node_view', $node, $view_mode, $langcode);
+  module_invoke_all('entity_view', $node, 'node', $view_mode, $langcode);
 }
 
 /**
Index: modules/system/system.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.api.php,v
retrieving revision 1.205
diff -u -p -r1.205 system.api.php
--- modules/system/system.api.php	22 Oct 2010 17:20:41 -0000	1.205
+++ modules/system/system.api.php	22 Oct 2010 18:38:05 -0000
@@ -356,6 +356,68 @@ function hook_entity_query_alter($query)
 }
 
 /**
+ * Act on entities being assembled before rendering.
+ *
+ * @param $entity
+ *   The entity object.
+ * @param $type
+ *   The type of entity being rendered (i.e. node, user, comment).
+ * @param $view_mode
+ *   The view mode the entity is rendered in.
+ * @param $langcode
+ *   The language code used for rendering.
+ *
+ * The module may add elements to $entity->content prior to rendering. The
+ * structure of $entity->content is a renderable array as expected by
+ * drupal_render().
+ *
+ * @see hook_entity_view_alter()
+ * @see hook_comment_view()
+ * @see hook_node_view()
+ * @see hook_user_view()
+ */
+function hook_entity_view($entity, $type, $view_mode, $langcode) {
+  $entity->content['my_additional_field'] = array(
+    '#markup' => $additional_field,
+    '#weight' => 10,
+    '#theme' => 'mymodule_my_additional_field',
+  );
+}
+
+/**
+ * Alter the results of ENTITY_view().
+ *
+ * This hook is called after the content has been assembled in a structured
+ * array and may be used for doing processing which requires that the complete
+ * entity content structure has been built.
+ *
+ * If a module wishes to act on the rendered HTML of the entity rather than the
+ * structured content array, it may use this hook to add a #post_render
+ * callback. Alternatively, it could also implement hook_preprocess_ENTITY().
+ * See drupal_render() and theme() for details.
+ *
+ * @param $build
+ *   A renderable array representing the entity content.
+ * @param $type
+ *   The type of entity being rendered (i.e. node, user, comment).
+ *
+ * @see hook_entity_view()
+ * @see hook_comment_view_alter()
+ * @see hook_node_view_alter()
+ * @see hook_taxonomy_term_view_alter()
+ * @see hook_user_view_alter()
+ */
+function hook_entity_view_alter(&$build, $type) {
+  if ($build['#view_mode'] == 'full' && isset($build['an_additional_field'])) {
+    // Change its weight.
+    $build['an_additional_field']['#weight'] = -10;
+
+    // Add a #post_render callback to act on the rendered HTML of the entity.
+    $build['#post_render'][] = 'my_module_node_post_render';
+  }
+}
+
+/**
  * Define administrative paths.
  *
  * Modules may specify whether or not the paths they define in hook_menu() are
Index: modules/taxonomy/taxonomy.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.api.php,v
retrieving revision 1.10
diff -u -p -r1.10 taxonomy.api.php
--- modules/taxonomy/taxonomy.api.php	24 Jun 2010 22:21:51 -0000	1.10
+++ modules/taxonomy/taxonomy.api.php	22 Oct 2010 18:38:05 -0000
@@ -183,5 +183,33 @@ function hook_taxonomy_term_delete($term
 }
 
 /**
+ * Alter the results of taxonomy_term_view().
+ *
+ * This hook is called after the content has been assembled in a structured
+ * array and may be used for doing processing which requires that the complete
+ * taxonomy term content structure has been built.
+ *
+ * If the module wishes to act on the rendered HTML of the term rather than the
+ * structured content array, it may use this hook to add a #post_render
+ * callback. Alternatively, it could also implement
+ * hook_preprocess_taxonomy_term(). See drupal_render() and theme()
+ * documentation respectively for details.
+ *
+ * @param $build
+ *   A renderable array representing the node content.
+ *
+ * @see hook_entity_view_alter()
+ */
+function hook_taxonomy_term_view_alter(&$build) {
+  if ($build['#view_mode'] == 'full' && isset($build['an_additional_field'])) {
+    // Change its weight.
+    $build['an_additional_field']['#weight'] = -10;
+  }
+
+  // Add a #post_render callback to act on the rendered HTML of the term.
+  $build['#post_render'][] = 'my_module_node_post_render';
+}
+
+/**
  * @} End of "addtogroup hooks".
  */
Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.613
diff -u -p -r1.613 taxonomy.module
--- modules/taxonomy/taxonomy.module	15 Oct 2010 05:25:32 -0000	1.613
+++ modules/taxonomy/taxonomy.module	22 Oct 2010 18:39:42 -0000
@@ -665,6 +665,10 @@ function taxonomy_term_view($term, $view
 
   $build['#attached']['css'][] = drupal_get_path('module', 'taxonomy') . '/taxonomy.css';
 
+  // Allow modules to modify the structured term.
+  $type = 'taxonomy_term';
+  drupal_alter(array('taxonomy_term_view', 'entity_view'), $build, $type);
+
   return $build;
 }
 
Index: modules/user/user.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.api.php,v
retrieving revision 1.24
diff -u -p -r1.24 user.api.php
--- modules/user/user.api.php	3 Oct 2010 01:15:34 -0000	1.24
+++ modules/user/user.api.php	22 Oct 2010 18:38:05 -0000
@@ -316,6 +316,9 @@ function hook_user_logout($account) {
  *   View mode, e.g. 'full'.
  * @param $langcode
  *   The language code used for rendering.
+ *
+ * @see hook_user_view_alter()
+ * @see hook_entity_view()
  */
 function hook_user_view($account, $view_mode, $langcode) {
   if (user_access('create blog content', $account)) {
@@ -344,6 +347,7 @@ function hook_user_view($account, $view_
  *   A renderable array representing the user.
  *
  * @see user_view()
+ * @see hook_entity_view_alter()
  */
 function hook_user_view_alter(&$build) {
   // Check for the existence of a field added by another module.
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.1211
diff -u -p -r1.1211 user.module
--- modules/user/user.module	20 Oct 2010 05:32:31 -0000	1.1211
+++ modules/user/user.module	22 Oct 2010 18:40:12 -0000
@@ -2423,7 +2423,8 @@ function user_view($account, $view_mode 
   );
 
   // Allow modules to modify the structured user.
-  drupal_alter('user_view', $build);
+  $type = 'user';
+  drupal_alter(array('user_view', 'entity_view'), $build, $type);
 
   return $build;
 }
@@ -2454,6 +2455,7 @@ function user_build_content($account, $v
 
   // Populate $account->content with a render() array.
   module_invoke_all('user_view', $account, $view_mode, $langcode);
+  module_invoke_all('entity_view', $account, 'user', $view_mode, $langcode);
 }
 
 /**
