diff --git a/modules/node/node.module b/modules/node/node.module
index 0c3cfb7..35d9ef5 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -1424,6 +1424,21 @@ function node_is_page($node) {
 }
 
 /**
+ * Process variables for page.tpl.php
+ *
+ * @see page.tpl.php
+ */
+function node_preprocess_page(&$variables) {
+  // Prevent the title from being printed in both the node and page template
+  // when a full node is being viewed. In order to have properly sectioned HTML5
+  // markup for nodes, we must ensure the title is printed inside the node
+  // template, as opposed to the page.tpl.php template.
+  if (!empty($variables['node']) && $variables['page']) {
+    $variables['title'] = '';
+  }
+}
+
+/**
  * Process variables for node.tpl.php
  *
  * Most themes utilize their own copy of node.tpl.php. The default is located
diff --git a/modules/node/node.tpl.php b/modules/node/node.tpl.php
index 06dc199..2eaeeff 100644
--- a/modules/node/node.tpl.php
+++ b/modules/node/node.tpl.php
@@ -77,34 +77,36 @@
  * @see template_preprocess_node()
  * @see template_process()
  */
-?>
-<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
 
-  <?php print $user_picture; ?>
+// Hide the comments, links and the tags field so they can be rendered apart
+// from $content afterwards.
+hide($content['comments']);
+hide($content['links']);
+?>
+<article id="node-<?php print $node->nid; ?>" 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 if ($display_submitted || $user_picture || $title): ?>
+    <header>
+      <?php print $user_picture; ?>
+      <?php if ($page): ?>
+        <h1<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h1>
+      <?php else: ?>
+        <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
+      <?php endif; ?>
+      <p class="submitted"><?php print $submitted; ?></p>
+    </header>
   <?php endif; ?>
   <?php print render($title_suffix); ?>
 
-  <?php if ($display_submitted): ?>
-    <div class="submitted">
-      <?php print $submitted; ?>
-    </div>
-  <?php endif; ?>
-
   <div class="content"<?php print $content_attributes; ?>>
-    <?php
-      // We hide the comments and links now so that we can render them later.
-      hide($content['comments']);
-      hide($content['links']);
-      print render($content);
-    ?>
+    <?php print render($content); ?>
   </div>
 
-  <?php print render($content['links']); ?>
+  <?php if ($links = render($content['links'])): ?>
+    <nav><?php print $links; ?></nav>
+  <?php endif; ?>
 
   <?php print render($content['comments']); ?>
 
-</div>
+</article>
