diff --git a/core/modules/node/content_types.inc b/core/modules/node/content_types.inc
index c958f27..f2dda42 100644
--- a/core/modules/node/content_types.inc
+++ b/core/modules/node/content_types.inc
@@ -75,7 +75,8 @@ function node_overview_types() {
 }
 
 /**
- * Returns HTML for a node type description for the content type admin page.
+ * Preprocess variables node-admin-overview.html.twig, node type description
+ * for the content type admin page.
  *
  * @param $variables
  *   An associative array containing:
@@ -88,14 +89,10 @@ function node_overview_types() {
  *
  * @ingroup themeable
  */
-function theme_node_admin_overview($variables) {
-  $name = $variables['name'];
-  $type = $variables['type'];
-
-  $output = check_plain($name);
-  $output .= ' <small>' . t('(Machine name: @type)', array('@type' => $type->type)) . '</small>';
-  $output .= '<div class="description">' . filter_xss_admin($type->description) . '</div>';
-  return $output;
+function template_preprocess_node_admin_overview(&$variables) {
+  $variables['name'] = check_plain($variables['name']);
+  $variables['description'] = filter_xss_admin($variables['type']->description);
+  $variables['machine_name'] = t('(Machine name: @type)', array('@type' => $variables['type']->type));
 }
 
 /**
diff --git a/core/modules/node/node.api.php b/core/modules/node/node.api.php
index f4e3d3d..3928326 100644
--- a/core/modules/node/node.api.php
+++ b/core/modules/node/node.api.php
@@ -698,7 +698,7 @@ function hook_node_prepare(Drupal\node\Node $node) {
  *   theming.
  *
  * @see template_preprocess_search_result()
- * @see search-result.tpl.php
+ * @see search-result.html.twig
  *
  * @ingroup node_api_hooks
  */
@@ -890,8 +890,8 @@ function hook_node_view(\Drupal\node\Plugin\Core\Entity\Node $node, \Drupal\enti
  * If the module wishes to act on the rendered HTML of the node rather than the
  * structured content array, it may use this hook to add a #post_render
  * callback.  Alternatively, it could also implement hook_preprocess_HOOK() for
- * node.tpl.php. See drupal_render() and theme() documentation respectively for
- * details.
+ * node.html.twig. See drupal_render() and theme() documentation respectively
+ * for details.
  *
  * @param $build
  *   A renderable array representing the node content.
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index b64a1dc..1e709e8 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -153,23 +153,30 @@ function node_theme() {
     ),
     'node_search_admin' => array(
       'render element' => 'form',
+      'template' => 'node-search-admin',
     ),
     'node_add_list' => array(
       'variables' => array('content' => NULL),
       'file' => 'node.pages.inc',
+      'template' => 'node-add-list',
     ),
     'node_preview' => array(
       'variables' => array('node' => NULL),
       'file' => 'node.pages.inc',
+      'template' => 'node-preview',
     ),
     'node_admin_overview' => array(
       'variables' => array('name' => NULL, 'type' => NULL),
+      'file' => 'content_types.inc',
+      'template' => 'node-admin-overview',
     ),
     'node_recent_block' => array(
       'variables' => array('nodes' => NULL),
+      'template' => 'node-recent-block',
     ),
     'node_recent_content' => array(
       'variables' => array('node' => NULL),
+      'template' => 'node-recent-content',
     ),
   );
 }
@@ -1109,7 +1116,7 @@ function node_is_page(Node $node) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function node_preprocess_block(&$variables) {
   if ($variables['block']->module == 'node') {
@@ -1125,11 +1132,11 @@ function node_preprocess_block(&$variables) {
 }
 
 /**
- * Processes variables for node.tpl.php.
+ * Setup template variables for node.html.twig
  *
- * Most themes utilize their own copy of node.tpl.php. The default is located
- * inside "modules/node/node.tpl.php". Look in there for the full list of
- * variables.
+ * Most themes utilize their own copy of node.html.twig. The default is located
+ * inside "core/modules/node/templates/node.html.twig". Look in there for the
+ * full list of variables.
  *
  * @param $variables
  *   An associative array containing:
@@ -1137,7 +1144,7 @@ function node_preprocess_block(&$variables) {
  *   - node: The node object.
  *   - view_mode: View mode; e.g., 'full', 'teaser'...
  *
- * @see node.tpl.php
+ * @see node.html.twig
  */
 function template_preprocess_node(&$variables) {
   $variables['view_mode'] = $variables['elements']['#view_mode'];
@@ -1159,7 +1166,7 @@ function template_preprocess_node(&$variables) {
 
   // Make useful flags and node data available.
   // @todo: The comment properties only exist if comment.module is enabled, but
-  //   are documented in node.tpl.php, so we make sure that they are set.
+  //   are documented in node.html.twig, so we make sure that they are set.
   //   Consider removing them.
   $properties = array('type', 'comment_count', 'uid', 'created', 'promote', 'sticky', 'status', 'comment');
   foreach ($properties as $property) {
@@ -1511,7 +1518,8 @@ function node_user_predelete($account) {
 }
 
 /**
- * Returns HTML for the content ranking part of the search settings admin page.
+ * Setup template variables for node-search-admin.html.twig, the content ranking
+ * part of the search settings admin page.
  *
  * @param $variables
  *   An associative array containing:
@@ -1520,23 +1528,22 @@ function node_user_predelete($account) {
  * @see node_search_admin()
  * @ingroup themeable
  */
-function theme_node_search_admin($variables) {
+function template_preprocess_node_search_admin(&$variables) {
   $form = $variables['form'];
 
   $output = drupal_render($form['info']);
 
   $header = array(t('Factor'), t('Weight'));
   foreach (element_children($form['factors']) as $key) {
-    $row = array();
-    $row[] = $form['factors'][$key]['#title'];
-    $form['factors'][$key]['#title_display'] = 'invisible';
-    $row[] = drupal_render($form['factors'][$key]);
-    $rows[] = $row;
+      $row = array();
+      $row[] = $form['factors'][$key]['#title'];
+      $form['factors'][$key]['#title_display'] = 'invisible';
+      $row[] = drupal_render($form['factors'][$key]);
+      $rows[] = $row;
   }
-  $output .= theme('table', array('header' => $header, 'rows' => $rows));
 
-  $output .= drupal_render_children($form);
-  return $output;
+  $variables['table'] = theme('table', array('header' => $header, 'rows' => $rows));
+  $variables['form'] = drupal_render_children($form);
 }
 
 /**
@@ -1939,7 +1946,8 @@ function node_get_recent($number = 10) {
 }
 
 /**
- * Returns HTML for a list of recent content.
+ * Preprocess variables for node-recent-content.html.twig, a list of recently
+ * created content.
  *
  * @param $variables
  *   An associative array containing:
@@ -1947,9 +1955,8 @@ function node_get_recent($number = 10) {
  *
  * @ingroup themeable
  */
-function theme_node_recent_block($variables) {
+function template_preprocess_node_recent_block(&$variables) {
   $rows = array();
-  $output = '';
 
   $l_options = array('query' => drupal_get_destination());
   foreach ($variables['nodes'] as $node) {
@@ -1973,18 +1980,18 @@ function theme_node_recent_block($variables) {
     $rows[] = $row;
   }
 
-  if ($rows) {
-    $output = theme('table', array('rows' => $rows));
-    if (user_access('access content overview')) {
-      $output .= theme('more_link', array('url' => 'admin/content', 'title' => t('Show more content')));
-    }
+  $variables['table'] = $rows ? theme('table', array('rows' => $rows)) : NULL;
+  if (user_access('access content overview') && $rows) {
+    $variables['more_link'] = theme('more_link', array('url' => 'admin/content', 'title' => t('Show more content')));
+  }
+  else {
+    $variables['more_link'] = FALSE;
   }
-
-  return $output;
 }
 
 /**
- * Returns HTML for a recent node to be displayed in the recent content block.
+ * Preprocess variables for node-recent-content.twig, a recent node to be
+ * displayed in the recent content block.
  *
  * @param $variables
  *   An associative array containing:
@@ -1992,17 +1999,12 @@ function theme_node_recent_block($variables) {
  *
  * @ingroup themeable
  */
-function theme_node_recent_content($variables) {
+function template_preprocess_node_recent_content(&$variables) {
   $node = $variables['node'];
-
-  $output = '<div class="node-title">';
-  $output .= l($node->label(), 'node/' . $node->nid);
-  $output .= theme('mark', array('type' => node_mark($node->nid, $node->changed)));
-  $output .= '</div><div class="node-author">';
-  $output .= theme('username', array('account' => user_load($node->uid)));
-  $output .= '</div>';
-
-  return $output;
+  $variables['link'] = l($node->label(), 'node/' . $node->nid);
+  $mark = theme('mark', array('type' => node_mark($node->nid, $node->changed)));
+  $variables['mark'] = !empty($mark) ? $mark : '';
+  $variables['username'] = theme('username', array('account' => user_load($node->uid)));
 }
 
 /**
diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc
index 245fef7..a387043 100644
--- a/core/modules/node/node.pages.inc
+++ b/core/modules/node/node.pages.inc
@@ -56,7 +56,8 @@ function node_add_page() {
 }
 
 /**
- * Returns HTML for a list of available node types for node creation.
+ * Setup template variables for node-add-list.html.twig, a list of available
+ * node types for node creation.
  *
  * @param $variables
  *   An associative array containing:
@@ -66,22 +67,17 @@ function node_add_page() {
  *
  * @ingroup themeable
  */
-function theme_node_add_list($variables) {
-  $content = $variables['content'];
-  $output = '';
-
-  if ($content) {
-    $output = '<dl class="node-type-list">';
-    foreach ($content as $type) {
-      $output .= '<dt>' . l($type->name, 'node/add/' . $type->type) . '</dt>';
-      $output .= '<dd>' . filter_xss_admin($type->description) . '</dd>';
+function template_preprocess_node_add_list(&$variables) {
+  if (!empty($variables['content'])) {
+    foreach ($variables['content'] as $type) {
+      $variables['types'][$type->type]['type'] = $type->type;
+      $variables['types'][$type->type]['add_link'] = l($type->name, 'node/add/' . $type->type);
+      $variables['types'][$type->type]['description'] = filter_xss_admin($type->description);
     }
-    $output .= '</dl>';
   }
   else {
-    $output = '<p>' . t('You have not created any content types yet. Go to the <a href="@create-content">content type creation page</a> to add a new content type.', array('@create-content' => url('admin/structure/types/add'))) . '</p>';
+    $variables['no_content_text'] = t('You have not created any content types yet. Go to the <a href="@create-content">content type creation page</a> to add a new content type.', array('@create-content' => url('admin/structure/types/add')));
   }
-  return $output;
 }
 
 
@@ -157,7 +153,8 @@ function node_preview(Node $node) {
 }
 
 /**
- * Returns HTML for a node preview for display during node creation and editing.
+ * Setup template variables for node-preview.html.twig, a node preview for
+ * display during node creation and editing.
  *
  * @param $variables
  *   An associative array containing:
@@ -168,30 +165,25 @@ function node_preview(Node $node) {
  *
  * @ingroup themeable
  */
-function theme_node_preview($variables) {
+function template_preprocess_node_preview(&$variables) {
   $node = $variables['node'];
 
-  $output = '';
-
-  $elements = node_view($node, 'teaser');
-  $elements['#attached']['library'][] = array('node', 'drupal.node.preview');
-  $trimmed = drupal_render($elements);
-  $elements = node_view($node, 'full');
-  $full = drupal_render($elements);
+  // Render trimmed teaser version of the post.
+  $node_teaser = node_view(clone $node, 'teaser');
+  $node_teaser['#attached']['library'][] = array('node', 'drupal.node.preview');
+  $variables['teaser']= drupal_render($node_teaser);
+  // Render full version of the post.
+  $node_full = node_view($node, 'full');
+  $variables['full'] = drupal_render($node_full);
 
-  // Do we need to preview trimmed version of post as well as full version?
-  if ($trimmed != $full) {
+  // Do we need to preview a trimmed teaser version of a post as well as a full version?
+  if ($variables['teaser'] != $variables['full']) {
     drupal_set_message(t('The trimmed version of your post shows what your post looks like when promoted to the main page or when exported for syndication.<span class="no-js"> You can insert the delimiter "&lt;!--break--&gt;" (without the quotes) to fine-tune where your post gets split.</span>'));
-    $output .= '<h3>' . t('Preview trimmed version') . '</h3>';
-    $output .= $trimmed;
-    $output .= '<h3>' . t('Preview full version') . '</h3>';
-    $output .= $full;
+    $variables['preview_teaser'] = TRUE;
   }
   else {
-    $output .= $full;
+    $variables['preview_teaser'] = FALSE;
   }
-
-  return $output;
 }
 
 /**
diff --git a/core/modules/node/templates/node-add-list.html.twig b/core/modules/node/templates/node-add-list.html.twig
new file mode 100644
index 0000000..f517659
--- /dev/null
+++ b/core/modules/node/templates/node-add-list.html.twig
@@ -0,0 +1,25 @@
+{#
+/**
+ * @file
+ * Default theme implementation to list the available types for content creation.
+ *
+ * Available variables:
+ * - types: list of content types
+ * - no_content_text: Text displaying when no content types are avalieble.
+ *
+ * @see template_preprocess
+ * @see template_preprocess_node_add_list
+ *
+ * @ingroup themeable
+ */
+#}
+{% if content %}
+  <dl class="node-type-list">
+    {% for type in types %}
+      <dt>{{ type.add_link }}</dt>
+      <dd>{{ type.description }}</dd>
+    {% endfor %}
+  </dl> 
+{% else %}
+  <p>{{ no_content_text }}</p>
+{% endif %}
diff --git a/core/modules/node/templates/node-admin-overview.html.twig b/core/modules/node/templates/node-admin-overview.html.twig
new file mode 100644
index 0000000..e1136cb
--- /dev/null
+++ b/core/modules/node/templates/node-admin-overview.html.twig
@@ -0,0 +1,19 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a node type description for the
+ * content type admin page.
+ *
+ * Available variables:
+ * - name: Human readable name of the content type.
+ * - machine_name: Machine readable name of the content type.
+ * - description: Description of the content type.
+ *
+ * @see template_preprocess
+ * @see template_preprocess_node_admin_overview
+ *
+ * @ingroup themeable
+ */
+#}
+{{ name }} <small>{{ machine_name }}</small>
+<div class="description">{{ description }}</div>
diff --git a/core/modules/node/templates/node-preview.html.twig b/core/modules/node/templates/node-preview.html.twig
new file mode 100644
index 0000000..ba107f9
--- /dev/null
+++ b/core/modules/node/templates/node-preview.html.twig
@@ -0,0 +1,24 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a node preview.
+ *
+ * This display may be used during node creation and editing.
+ *
+ * Available variables:
+ * - preview_teaser: Boolean flag indicating whether or not to show a trimmed teaser version.
+ * - teaser: Trimmed teaser version of the node.
+ * - full: Full version of the node.
+ *
+ * @see template_preprocess
+ * @see template_preprocess_node_preview
+ *
+ * @ingroup themeable
+ */
+#}
+{% if preview_teaser %}
+  <h3>{{ "Preview trimmed version" | t }}</h3>
+  {{ teaser }}
+  <h3>{{ "Preview full version" | t }}</h3>
+{% endif %}
+{{ full }}
diff --git a/core/modules/node/templates/node-recent-block.html.twig b/core/modules/node/templates/node-recent-block.html.twig
new file mode 100644
index 0000000..0bfedd4
--- /dev/null
+++ b/core/modules/node/templates/node-recent-block.html.twig
@@ -0,0 +1,21 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a list of recent content.
+ *
+ * Available variables:
+ * - table: An rendered HTML table of recent content.
+ * - more_link: A rendered link to show more content.
+ *
+ * @see template_preprocess
+ * @see template_preprocess_node_recent_block
+ *
+ * @ingroup themeable
+ */
+#}
+{% if table %}
+  {{ table }}
+{% endif %}
+{% if more_link %}
+  {{ more_link }}
+{% endif %}
diff --git a/core/modules/node/templates/node-recent-content.html.twig b/core/modules/node/templates/node-recent-content.html.twig
new file mode 100644
index 0000000..600a850
--- /dev/null
+++ b/core/modules/node/templates/node-recent-content.html.twig
@@ -0,0 +1,18 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a recent node to be displayed in the recent content block.
+ *
+ * Available variables:
+ * - path: Path to content
+ * - mark: html marker for new or updated content
+ * - username: The author of the content
+ *
+ * @see template_preprocess
+ * @see template_preprocess_node_recent_content
+ *
+ * @ingroup themeable
+ */
+#}
+<div class="node-title">{{ link }}{{ mark }}</div>
+<div class="node-author">{{ username }}</div>
diff --git a/core/modules/node/templates/node-search-admin.html.twig b/core/modules/node/templates/node-search-admin.html.twig
new file mode 100644
index 0000000..00016b1
--- /dev/null
+++ b/core/modules/node/templates/node-search-admin.html.twig
@@ -0,0 +1,17 @@
+{#
+/**
+* @file
+* Returns HTML for the content ranking part of the search settings admin page.
+*
+* Available variables:
+* - table: The table of the settings.
+* - form: A render element representing the form.
+*
+* @see template_preprocess
+* @see template_preprocess_node_search_admin
+*
+* @group themable
+*/
+#}
+{{ table }}
+{{ form }}
diff --git a/core/modules/node/templates/node.html.twig b/core/modules/node/templates/node.html.twig
index f1e0b5a..100d32a 100644
--- a/core/modules/node/templates/node.html.twig
+++ b/core/modules/node/templates/node.html.twig
@@ -4,22 +4,21 @@
  * Default theme implementation to display a node.
  *
  * Available variables:
- * - label: the title of the node.
- * - content: node items. Use {{ content }} to print them all,
+ * - title: The node title.
+ * - content: An array of node items. Use {{ content }} to print them all,
  *   or print a subset such as {{ content.field_example }}. Use
  *   {% hide(content.field_example) %} to temporarily suppress the printing
  *   of a given element.
+ * - author: Themed username of node author output from theme_username().
  * - user_picture: The node author's picture from user-picture.html.twig.
- * - 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().
+ * - created: Formatted creation date. Preprocess functions can reformat it by
+ *   calling format_date() with the desired parameters on the $created variable.
+ * - changed: Formatted last-changed date. 
  * - 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().
- * - attributes: HTML attributes for the surrounding element.
- *    Attributes include the 'class' information, which contains:
+ * - attributes: An instance of Attributes class that can be manipulated as an
+ *    array and printed as a string.
+ *    It includes the 'class' information, which includes:
  *   - node: The current template type; for example, "theming hook".
  *   - node-[type]: The current node type. For example, if the node is a
  *     "Article" it would result in "node-article". Note that the machine
@@ -38,30 +37,28 @@
  *   displayed after the main title tag that appears in the template.
  *
  * Other variables:
- * - node: Fully loaded node entity.
+ * - node: Full node entity. Contains data that may not be safe.
  * - type: Node type; for example, page, article, etc.
  * - comment_count: Number of comments attached to the node.
  * - uid: User ID of the node author.
- * - created: Time the node was published formatted as a Unix timestamp.
+ * - created: Time the node was published formatted in Unix timestamp.
  * - zebra: Outputs either "even" or "odd". Useful for zebra striping in
  *   teaser listings.
  * - id: Position of the node. Increments each time it's output.
  *
  * Node status variables:
  * - view_mode: View mode; for example, "teaser" or "full".
- * - teaser: Flag for the teaser state. Will be true if view_mode is 'teaser'.
- * - page: Flag for the full page state. Will be true if view_mode is 'full'.
+ * - teaser: Flag for the teaser state (shortcut for $view_mode == 'teaser').
+ * - page: Flag for the full page state.
  * - promote: Flag for front page promotion state.
- * - sticky: Flag for sticky post setting.
+ * - sticky: Flags for sticky post setting.
  * - status: Flag for published status.
  * - comment: State of comment settings for the node.
- * - readmore: Flag for more state. Will be true if the teaser content of the
- *   node cannot hold the main body content.
- * - is_front: Flag for front. Will be true when presented on the front page.
- * - logged_in: Flag for authenticated user status. Will be true when the
- *   current user is a logged-in member.
- * - is_admin: Flag for admin user status. Will be true when the current user
- *   is an administrator.
+ * - readmore: Flags true if the teaser content of the node cannot hold the
+ *   main body content.
+ * - is_front: Flags true when presented in the front page.
+ * - logged_in: Flags true when the current user is a logged-in member.
+ * - is_admin: Flags true when the current user is an administrator.
  *
  * Field variables: for each field instance attached to the node a corresponding
  * variable is defined; for example, $node->body becomes body. When needing to
@@ -70,19 +67,21 @@
  * desired field language; for example, $node->body['en'], thus overriding any
  * language negotiation rule that was previously applied.
  *
- * @see template_preprocess()
- * @see template_preprocess_node()
+ * @see template_preprocess
+ * @see template_preprocess_node
+ *
+ * @TODO: might be a good idea to remove the id attribute, because if that gets
+ *   rendered twice on a page this is invalid CSS for example: two lists
+ *   in different view modes.
  *
  * @ingroup themeable
  */
 #}
-<article id="node-{{ node.nid }}" class="{{ attributes.class }} clearfix"{{ attributes }}>
+<article id="node-{{ node.nid }}" class="clearfix {{ attributes.class }}"{{ attributes }}>
 
   {{ title_prefix }}
   {% if not page %}
-    <h2{{ title_attributes }}>
-      <a href="{{ node_url }}" rel="bookmark">{{ label }}</a>
-    </h2>
+    <h2><a href="{{ node_url }}" rel="bookmark">{{ label }}</a></h2>
   {% endif %}
   {{ title_suffix }}
 
@@ -93,10 +92,10 @@
     </footer>
   {% endif %}
 
-  <div class="content"{{ content_attributes }}>
+  <div class="content {{ content_attributes.class }}"{{ content_attributes }}>
     {# We hide the comments and links now so that we can render them later. #}
-    {% hide(content.comments) %}
-    {% hide(content.links) %}
+    {{ hide(content.comments) }}
+    {{ hide(content.links) }}
     {{ content }}
   </div>
 
diff --git a/core/modules/node/templates/node.tpl.php b/core/modules/node/templates/node.tpl.php
deleted file mode 100644
index 196d26f..0000000
--- a/core/modules/node/templates/node.tpl.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display a node.
- *
- * Available variables:
- * - $label: the (sanitized) title of the node.
- * - $content: An array of node items. Use render($content) to print them all,
- *   or print a subset such as render($content['field_example']). Use
- *   hide($content['field_example']) to temporarily suppress the printing of a
- *   given element.
- * - $user_picture: The node author's picture. Use render() to print it.
- * - $date: Formatted creation date. Preprocess functions can reformat it by
- *   calling format_date() with the desired parameters on the $created variable.
- * - $name: Themed username of node author output from theme_username().
- * - $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().
- * - $attributes: An instance of Attributes class that can be manipulated as an
- *    array and printed as a string.
- *    It includes the 'class' information, which includes:
- *   - node: The current template type; for example, "theming hook".
- *   - node-[type]: The current node type. For example, if the node is a
- *     "Article" it would result in "node-article". Note that the machine
- *     name will often be in a short form of the human readable label.
- *   - view-mode-[view_mode]: The View Mode of the node; for example, "teaser"
- *     or "full".
- *   - preview: Nodes in preview mode.
- *   The following are controlled through the node publishing options.
- *   - promoted: Nodes promoted to the front page.
- *   - sticky: Nodes ordered above other non-sticky nodes in teaser
- *     listings.
- *   - unpublished: Unpublished nodes visible only to administrators.
- * - $title_prefix (array): An array containing additional output populated by
- *   modules, intended to be displayed in front of the main title tag that
- *   appears in the template.
- * - $title_suffix (array): An array containing additional output populated by
- *   modules, intended to be displayed after the main title tag that appears in
- *   the template.
- *
- * Other variables:
- * - $node: Full node entity. Contains data that may not be safe.
- * - $type: Node type; for example, page, article, etc.
- * - $comment_count: Number of comments attached to the node.
- * - $uid: User ID of the node author.
- * - $created: Time the node was published formatted in Unix timestamp.
- * - $zebra: Outputs either "even" or "odd". Useful for zebra striping in
- *   teaser listings.
- * - $id: Position of the node. Increments each time it's output.
- *
- * Node status variables:
- * - $view_mode: View mode; for example, "teaser" or "full".
- * - $teaser: Flag for the teaser state (shortcut for $view_mode == 'teaser').
- * - $page: Flag for the full page state.
- * - $promote: Flag for front page promotion state.
- * - $sticky: Flags for sticky post setting.
- * - $status: Flag for published status.
- * - $comment: State of comment settings for the node.
- * - $is_front: Flags true when presented in the front page.
- * - $logged_in: Flags true when the current user is a logged-in member.
- * - $is_admin: Flags true when the current user is an administrator.
- *
- * Field variables: for each field instance attached to the node a corresponding
- * variable is defined; for example, $node->body becomes $body. When needing to
- * access a field's raw values, developers/themers are strongly encouraged to
- * use these variables. Otherwise they will have to explicitly specify the
- * desired field language; for example, $node->body['en'], thus overriding any
- * language negotiation rule that was previously applied.
- *
- * @see template_preprocess()
- * @see template_preprocess_node()
- * @see template_process()
- *
- * @ingroup themeable
- */
-?>
-<article id="node-<?php print $node->nid; ?>" class="<?php print $attributes['class']; ?> clearfix"<?php print $attributes; ?>>
-
-  <?php print render($title_prefix); ?>
-  <?php if (!$page): ?>
-    <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>" rel="bookmark"><?php print $label; ?></a></h2>
-  <?php endif; ?>
-  <?php print render($title_suffix); ?>
-
-  <?php if ($display_submitted): ?>
-    <footer>
-      <?php print render($user_picture); ?>
-      <p class="submitted"><?php print $submitted; ?></p>
-    </footer>
-  <?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);
-    ?>
-  </div>
-
-  <?php print render($content['links']); ?>
-  <?php print render($content['comments']); ?>
-
-</article>
