diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 0c3cfb7..35af15b 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')) {
@@ -1452,6 +1455,13 @@ function template_preprocess_node(&$variables) {
   $variables['title']     = check_plain($node->title);
   $variables['page']      = $variables['view_mode'] == 'full' && node_is_page($node);
 
+  // In order to have properly sectioned HTML5 markup for nodes, the title is
+  // always printed inside node.tpl.php. This code hides it when the title is
+  // printed as page title in page.tpl.php already.
+  if ($variables['page']) {
+    $variables['title_attributes_array']['class'][] = 'element-hidden';
+  }
+
   // Flatten the node object's member fields.
   $variables = array_merge((array) $node, $variables);
 
@@ -1476,6 +1486,9 @@ function template_preprocess_node(&$variables) {
     $variables['user_picture'] = '';
   }
 
+  // Add article ARIA role.
+  $variables['attributes_array']['role'] = 'article';
+
   // 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..ead8d10 100644
--- a/core/modules/node/node.tpl.php
+++ b/core/modules/node/node.tpl.php
@@ -78,20 +78,17 @@
  * @see template_process()
  */
 ?>
-<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
-
-  <?php print $user_picture; ?>
+<article class="<?php print $classes; ?>"<?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 endif; ?>
+  <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>" rel="bookmark"><?php print $title; ?></a></h2>
   <?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 +100,12 @@
     ?>
   </div>
 
-  <?php print render($content['links']); ?>
+  <?php if ($links = render($content['links'])): ?>
+    <div class="node-links clearfix">
+      <h3 class="element-invisible"><?php print t('Article links'); ?></h3>
+      <?php print $links; ?>
+    </div>
+  <?php endif; ?>
 
   <?php print render($content['comments']); ?>
-
-</div>
+</article>
