diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTemplateSuggestionsTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTemplateSuggestionsTest.php
new file mode 100644
index 0000000..3acb894
--- /dev/null
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTemplateSuggestionsTest.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * @file
+ * Contains of \Drupal\node\Tests\NodeTemplateSuggestionsTest.
+ */
+
+namespace Drupal\node\Tests;
+
+/**
+ * Checks node template suggestions.
+ */
+class NodeTemplateSuggestionsTest extends NodeTestBase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Node template suggestions',
+      'description' => 'Tests the node template suggestions.',
+      'group' => 'Node',
+    );
+  }
+
+  /**
+   * Tests if template_preprocess_node() generates the correct suggestions.
+   */
+  function testNodeThemeHookSuggestions() {
+    // Create node to be rendered.
+    $node = $this->drupalCreateNode();
+    $view_mode = 'full';
+
+    // Simulate theming of the node.
+    $build = \Drupal::entityManager()->getViewBuilder('node')->view($node, $view_mode);
+
+    $variables['elements'] = $build;
+    $suggestions = \Drupal::moduleHandler()->invokeAll('theme_suggestions_node', array($variables));
+
+    $this->assertEqual($suggestions, array('node__full', 'node__page', 'node__page__full', 'node__' . $node->id(), 'node__' . $node->id() . '__full'), 'Found expected node suggestions.');
+
+    //Change the view_mode.
+    $view_mode = 'node.myCustomNodeView...123';
+    $build = \Drupal::entityManager()->getViewBuilder('node')->view($node, $view_mode);
+
+    $variables['elements'] = $build;
+    $suggestions = \Drupal::moduleHandler()->invokeAll('theme_suggestions_node', array($variables));
+
+    $this->assertEqual($suggestions, array('node__node_mycustomnodeview_123', 'node__page', 'node__page__node_mycustomnodeview_123', 'node__' . $node->id(), 'node__' . $node->id() . '__node_mycustomnodeview_123'), 'Found expected node suggestions.');
+  }
+
+}
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 8d1b07c..6e719ad 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -639,9 +639,13 @@ function node_preprocess_block(&$variables) {
 function node_theme_suggestions_node(array $variables) {
   $suggestions = array();
   $node = $variables['elements']['#node'];
+  $sanitized_view_mode = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '_', $variables['elements']['#view_mode']));
 
+  $suggestions[] = 'node__' . $sanitized_view_mode;
   $suggestions[] = 'node__' . $node->bundle();
+  $suggestions[] = 'node__' . $node->bundle() . '__' . $sanitized_view_mode;
   $suggestions[] = 'node__' . $node->id();
+  $suggestions[] = 'node__' . $node->id() . '__' . $sanitized_view_mode;
 
   return $suggestions;
 }
