diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 5bdee72..737b035 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -610,7 +610,7 @@ function comment_node_view(EntityInterface $node, EntityDisplay $display, $view_
       }
     }
 
-    $node->content['links']['comment'] = array(
+    $node->links['comment'] = array(
       '#theme' => 'links__node__comment',
       '#links' => $links,
       '#attributes' => array('class' => array('links', 'inline')),
@@ -621,7 +621,7 @@ function comment_node_view(EntityInterface $node, EntityDisplay $display, $view_
     // appended to other nodes shown on the page, for example a node_reference
     // displayed in 'full' view mode within another node.
     if ($node->comment && $view_mode == 'full' && node_is_page($node) && empty($node->in_preview)) {
-      $node->content['comments'] = comment_node_page_additions($node);
+      $node->comments = comment_node_page_additions($node);
     }
   }
 }
@@ -1462,6 +1462,13 @@ function comment_preview(Comment $comment) {
 }
 
 /**
+ * Implements hook_preprocess_HOOK() for node.html.twig.
+ */
+function comment_preprocess_node(&$variables) {
+  $variables['comments'] = $variables['node']->comments;
+}
+
+/**
  * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function comment_preprocess_block(&$variables) {
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeFieldMultilingualTestCase.php b/core/modules/node/lib/Drupal/node/Tests/NodeFieldMultilingualTestCase.php
index 6df2698..416fbb6 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeFieldMultilingualTestCase.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeFieldMultilingualTestCase.php
@@ -132,9 +132,9 @@ function testMultilingualDisplaySettings() {
 
     // Check if node body is showed.
     $this->drupalGet('node/' . $node->id());
-    $body = $this->xpath('//article[@id=:id]//div[@class=:class]/descendant::p', array(
-      ':id' => 'node-' . $node->id(),
-      ':class' => 'content',
+    $body = $this->xpath('//article[@class=:node-class]//div[@class=:content-class]/descendant::p', array(
+      ':node-class' => 'node-.' . $node->nid,
+      ':content-class' => 'content',
     ));
     $this->assertEqual(current($body), $node->body['en'][0]['value'], 'Node body found.');
   }
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index d0a928b..95b6c89 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -700,6 +700,8 @@ function template_preprocess_node(&$variables) {
 
   $uri = $node->uri();
   $variables['node_url']  = url($uri['path'], $uri['options']);
+  $variables['url']  = url($uri['path'], $uri['options']);
+  // @todo $variables['title']['label'] after http://drupal.org/node/2004966.
   $variables['label'] = check_plain($node->label());
   $variables['page'] = $variables['view_mode'] == 'full' && node_is_page($node);
 
@@ -717,6 +719,7 @@ function template_preprocess_node(&$variables) {
   $submitted = Drupal::config('node.type.' . $node->bundle())->get('settings.node.submitted') ?: TRUE;
   if ($submitted) {
     $variables['display_submitted'] = TRUE;
+   // @todo remove submitted once http://drupal.org/node/1927584 is resolved.
     $variables['submitted'] = t('Submitted by !username on !datetime', array('!username' => $variables['name'], '!datetime' => $variables['date']));
     if (theme_get_setting('features.node_user_picture')) {
       // To change user picture settings (e.g. image style), edit the 'compact'
@@ -725,13 +728,18 @@ function template_preprocess_node(&$variables) {
       $variables['user_picture'] = user_view($node->getAuthor(), 'compact');
     }
     else {
-      $variables['user_picture'] = array();
+      $variables['author'] = array();
     }
   }
   else {
     $variables['display_submitted'] = FALSE;
+   // @todo remove submitted once http://drupal.org/node/1927584 is resolved.
     $variables['submitted'] = '';
-    $variables['user_picture'] = '';
+    $variables['author'] = '';
+  }
+
+  if (!empty($node->links)) {
+    $variables['links'] = $node->links;
   }
 
   // Add article ARIA role.
@@ -759,7 +767,7 @@ function template_preprocess_node(&$variables) {
   // Clean up name so there are no underscores.
   $variables['theme_hook_suggestions'][] = 'node__' . $node->bundle();
   $variables['theme_hook_suggestions'][] = 'node__' . $node->id();
-
+  // @todo these should be attributes on content instead.
   $variables['content_attributes']['class'][] = 'content';
 }
 
@@ -1439,7 +1447,7 @@ function theme_node_recent_block($variables) {
  */
 function theme_node_recent_content($variables) {
   $node = $variables['node'];
-
+  $variables['nid'] = $node->nid;
   $output = '<div class="node-title">';
   $output .= l($node->label(), 'node/' . $node->id());
   $mark = array(
diff --git a/core/modules/node/templates/node.html.twig b/core/modules/node/templates/node.html.twig
index ad12811..f07fdb4 100644
--- a/core/modules/node/templates/node.html.twig
+++ b/core/modules/node/templates/node.html.twig
@@ -6,6 +6,7 @@
  * Available variables:
  * - node: Full node entity.
  *   - type: The type of the node, for example, "page" or "article".
+ *   - nid: The node ID of the node.
  *   - uid: The user ID of the node author.
  *   - created: Formatted creation date. Preprocess functions can reformat it by
  *     calling format_date() with the desired parameters on
@@ -26,7 +27,7 @@
  *   or print a subset such as {{ content.field_example }}. Use
  *   {% hide(content.field_example) %} to temporarily suppress the printing
  *   of a given element.
- * - user_picture: The node author's picture from user-picture.html.twig.
+ * - author: The node author, using the 'compact' view mode.
  * - date: Formatted creation date. Preprocess functions can reformat it by
  *   calling format_date() with the desired parameters on
  *   $variables['created'].
@@ -81,31 +82,28 @@
  * @ingroup themeable
  */
 #}
-<article id="node-{{ node.nid }}" class="{{ attributes.class }} clearfix"{{ attributes }}>
+<article class="{{ attributes.class}}" {{ attributes }} role="article">
 
   {{ title_prefix }}
   {% if not page %}
     <h2{{ title_attributes }}>
-      <a href="{{ node_url }}" rel="bookmark">{{ label }}</a>
+      <a href="{{ url }}" rel="bookmark">{{ label }}</a>
     </h2>
   {% endif %}
   {{ title_suffix }}
 
   {% if display_submitted %}
     <footer>
-      {{ user_picture }}
-      <p class="submitted">{{ submitted }}</p>
+     {{ author }}
+     <div class="node--submitted">{{ submitted }}</div> {# @todo: split the data up ? #}
     </footer>
   {% endif %}
 
-  <div{{ content_attributes }}>
-    {# We hide the comments and links now so that we can render them later. #}
-    {% hide(content.comments) %}
-    {% hide(content.links) %}
+  <div class="content"> {# @todo: do we want .content ? #}
     {{ content }}
   </div>
 
-  {{ content.links }}
-  {{ content.comments }}
+  {{ links }}
+  {{ comments }}
 
 </article>
diff --git a/core/modules/rdf/rdf.module b/core/modules/rdf/rdf.module
index 23f47d6..3c72448 100644
--- a/core/modules/rdf/rdf.module
+++ b/core/modules/rdf/rdf.module
@@ -251,7 +251,7 @@ function rdf_preprocess_node(&$variables) {
   $bundle = $variables['node']->bundle();
   $mapping = rdf_get_mapping('node', $bundle);
   $bundle_mapping = $mapping->getPreparedBundleMapping('node', $bundle);
-  $variables['attributes']['about'] = empty($variables['node_url']) ? NULL: $variables['node_url'];
+  $variables['attributes']['about'] = empty($variables['url']) ? NULL: $variables['url'];
   $variables['attributes']['typeof'] = empty($bundle_mapping['types']) ? NULL : $bundle_mapping['types'];
 
   // Adds RDFa markup to the title of the node. Because the RDFa markup is
@@ -269,7 +269,7 @@ function rdf_preprocess_node(&$variables) {
       '#tag' => 'meta',
       '#attributes' => array(
         'content' => $variables['label'],
-        'about' => $variables['node_url'],
+        'about' => $variables['url'],
       ),
     );
     if (!empty($title_mapping['properties'])) {
@@ -317,7 +317,7 @@ function rdf_preprocess_node(&$variables) {
       $element = array(
         '#tag' => 'meta',
         '#attributes' => array(
-          'about' => $variables['node_url'],
+          'about' => $variables['url'],
           'property' => $comment_count_mapping['properties'],
           'content' => $variables['node']->comment_count,
           'datatype' => $comment_count_mapping['datatype'],
diff --git a/core/themes/bartik/templates/node.html.twig b/core/themes/bartik/templates/node.html.twig
index d8af3d5..9cdf004 100644
--- a/core/themes/bartik/templates/node.html.twig
+++ b/core/themes/bartik/templates/node.html.twig
@@ -6,6 +6,7 @@
  * Available variables:
  * - node: Full node entity.
  *   - type: The type of the node, for example, "page" or "article".
+ *   - nid: The node ID of the node.
  *   - uid: The user ID of the node author.
  *   - created: Formatted creation date. Preprocess functions can reformat it by
  *     calling format_date() with the desired parameters on
@@ -26,12 +27,12 @@
  *   or print a subset such as {{ content.field_example }}. Use
  *   {% hide(content.field_example) %} to temporarily suppress the printing
  *   of a given element.
- * - user_picture: The node author's picture from user-picture.html.twig.
+ * - author: The node author, using the 'compact' view mode.
  * - date: Formatted creation date. Preprocess functions can reformat it by
  *   calling format_date() with the desired parameters on
  *   $variables['created'].
  * - name: Themed username of node author output from theme_username().
- * - node_url: Direct URL of the current node.
+ * - url: Direct URL of the current node.
  * - display_submitted: Whether submission information should be displayed.
  * - submitted: Submission information created from name and date during
  *   template_preprocess_node().
@@ -77,38 +78,35 @@
  * @ingroup themeable
  */
 #}
-<article id="node-{{ node.nid }}" class="{{ attributes.class}} clearfix"{{ attributes }} role="article">
+<article class="{{ attributes.class}} node--{{ nid }} clearfix"{{ attributes }} role="article">
 
   <header>
     {{ title_prefix }}
     {% if not page %}
       <h2{{ title_attributes }}>
-        <a href="{{ node_url }}">{{ label }}</a>
+        <a href="{{ url }}">{{ label }}</a>
       </h2>
     {% endif %}
     {{ title_suffix }}
 
     {% if display_submitted %}
       <div class="meta submitted">
-        {{ user_picture }}
+        {{ author }}
         {{ submitted }}
       </div>
     {% endif %}
   </header>
 
   <div class="content clearfix"{{ content_attributes }}>
-    {# We hide the comments and links now so that we can render them later. #}
-    {% hide(content.comments) %}
-    {% hide(content.links) %}
     {{ content }}
   </div>
 
   {% if content.links %}
     <footer class="link-wrapper">
-      {{ content.links }}
+      {{ links }}
     </footer>
   {% endif %}
 
-  {{ content.comments }}
+  {{ comments }}
 
 </article>
