diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 0c3cfb7..c3c5bf8 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1346,6 +1346,9 @@ function node_build_content($node, $view_mode = 'full', $langcode = NULL) {
   // Remove previously built content, if exists.
   $node->content = array();
 
+  // Make the view mode available in the node object.
+  $node->view_mode = $view_mode;
+
   // The 'view' hook can be implemented to overwrite the default function
   // to display nodes.
   if (node_hook($node, 'view')) {
@@ -1424,6 +1427,20 @@ function node_is_page($node) {
 }
 
 /**
+ * Process variables for page.tpl.php
+ *
+ * @see page.tpl.php
+ */
+function node_preprocess_page(&$variables) {
+  // In order to have properly sectioned HTML5 markup for nodes, the title is
+  // always printed inside node.tpl.php. This code prevents it from printing in
+  // page.tpl.php as well.
+  if (!empty($variables['node']->view_mode) && $variables['node']->view_mode == 'full' && node_is_page($variables['node'])) {
+    $variables['title'] = '';
+  }
+}
+
+/**
  * Process variables for node.tpl.php
  *
  * Most themes utilize their own copy of node.tpl.php. The default is located
@@ -1476,6 +1493,12 @@ function template_preprocess_node(&$variables) {
     $variables['user_picture'] = '';
   }
 
+  // Add article ARIA role.
+  $variables['attributes_array']['role'] = 'article';
+
+  // Provide the node ID as an ID attribute. This protects from duplicate IDs.
+  $variables['attributes_array']['id'] = drupal_html_id('node-' . $node->nid);
+
   // Gather node classes.
   $variables['classes_array'][] = drupal_html_class('node-' . $node->type);
   if ($variables['promote']) {
diff --git a/core/modules/node/node.tpl.php b/core/modules/node/node.tpl.php
index 06dc199..3780f50 100644
--- a/core/modules/node/node.tpl.php
+++ b/core/modules/node/node.tpl.php
@@ -78,20 +78,23 @@
  * @see template_process()
  */
 ?>
-<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
+<article class="<?php print $classes; ?>"<?php print $attributes; ?>>
 
-  <?php print $user_picture; ?>
-
-  <?php print render($title_prefix); ?>
-  <?php if (!$page): ?>
-    <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
+  <?php print render($title_preffix); ?>
+  <?php if ($title): ?>
+    <?php if ($page): ?>
+      <h1<?php print $title_attributes; ?>><?php print $title; ?></h1>
+    <?php else: ?>
+      <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>" rel="bookmark"><?php print $title; ?></a></h2>
+    <?php endif; ?>
   <?php endif; ?>
   <?php print render($title_suffix); ?>
 
   <?php if ($display_submitted): ?>
-    <div class="submitted">
+    <footer class="submitted">
+      <?php print $user_picture; ?>
       <?php print $submitted; ?>
-    </div>
+    </footer>
   <?php endif; ?>
 
   <div class="content"<?php print $content_attributes; ?>>
@@ -103,8 +106,13 @@
     ?>
   </div>
 
-  <?php print render($content['links']); ?>
+  <?php if ($node_links = render($content['links'])): ?>
+    <div class="node-links clearfix">
+      <?php $tag = $page ? 'h2' : 'h3'; ?>
+      <<?php print $tag; ?> class="element-invisible"><?php print t('Article links'); ?></<?php print $tag; ?>>
+      <?php print $node_links; ?>
+    </div>
+  <?php endif; ?>
 
   <?php print render($content['comments']); ?>
-
-</div>
+</article>
diff --git a/core/themes/bartik/templates/node.tpl.php b/core/themes/bartik/templates/node.tpl.php
index 234b899..185c5dd 100644
--- a/core/themes/bartik/templates/node.tpl.php
+++ b/core/themes/bartik/templates/node.tpl.php
@@ -81,10 +81,12 @@
 <div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
 
   <?php print render($title_prefix); ?>
-  <?php if (!$page): ?>
-    <h2<?php print $title_attributes; ?>>
-      <a href="<?php print $node_url; ?>"><?php print $title; ?></a>
-    </h2>
+  <?php if ($title): ?>
+    <?php if ($page): ?>
+      <h1<?php print $title_attributes; ?>><?php print $title; ?></h1>
+    <?php else: ?>
+      <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>" rel="bookmark"><?php print $title; ?></a></h2>
+    <?php endif; ?>
   <?php endif; ?>
   <?php print render($title_suffix); ?>
 
