diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index a714419..9c2b1a2 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -1021,6 +1021,7 @@ function comment_build_content(Comment $comment, $node, $view_mode = 'full', $la
 
   // Remove previously built content, if exists.
   $comment->content = array();
+  $comment->view_mode = &$view_mode;
 
   // Build fields content.
   field_attach_prepare_view('comment', array($comment->cid => $comment), $view_mode, $langcode);
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index a59a5c7..efc2cff 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1405,6 +1405,7 @@ function node_build_content($node, $view_mode = 'full', $langcode = NULL) {
 
   // Remove previously built content, if exists.
   $node->content = array();
+  $node->view_mode = &$view_mode;
 
   // The 'view' hook can be implemented to overwrite the default function
   // to display nodes.
@@ -1467,8 +1468,13 @@ function node_show($node, $message = FALSE) {
     drupal_set_title(t('Revision of %title from %date', array('%title' => $node->title, '%date' => format_date($node->revision_timestamp))), PASS_THROUGH);
   }
 
+  // Check if view mode is set, defaults to 'full'
+  if (!isset($node->view_mode)) {
+    $node->view_mode = 'full';
+  }
+
   // For markup consistency with other pages, use node_view_multiple() rather than node_view().
-  $nodes = node_view_multiple(array($node->nid => $node), 'full');
+  $nodes = node_view_multiple(array($node->nid => $node), $node->view_mode);
 
   // Update the history table, stating that this user viewed this node.
   node_tag_new($node);
@@ -2672,6 +2678,13 @@ function node_feed($nids = FALSE, $channel = array()) {
  *   An array in the format expected by drupal_render().
  */
 function node_view_multiple($nodes, $view_mode = 'teaser', $weight = 0, $langcode = NULL) {
+
+  // Assigning view mode to every node makes no sense, as changing one changes
+  // all but let's try it anyway.
+  foreach ($nodes as $node) {
+    $node->view_mode = &$view_mode;
+  }
+
   field_attach_prepare_view('node', $nodes, $view_mode, $langcode);
   entity_prepare_view('node', $nodes, $langcode);
   $build = array();
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index e82edfc..32949bc 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -583,6 +583,8 @@ function taxonomy_term_view(TaxonomyTerm $term, $view_mode = 'full', $langcode =
     $langcode = $GLOBALS['language_content']->langcode;
   }
 
+  $term->view_mode = &$view_mode;
+
   field_attach_prepare_view('taxonomy_term', array($term->tid => $term), $view_mode, $langcode);
   entity_prepare_view('taxonomy_term', array($term->tid => $term), $langcode);
 
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 3b1d9cb..41e61b9 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -2559,6 +2559,7 @@ function user_build_content($account, $view_mode = 'full', $langcode = NULL) {
 
   // Remove previously built content, if exists.
   $account->content = array();
+  $account->view_mode = &$view_mode;
 
   // Build fields content.
   field_attach_prepare_view('user', array($account->uid => $account), $view_mode, $langcode);
