diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index d0a928b..c2d2fa2 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -158,16 +158,20 @@ function node_theme() {
     '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_recent_block' => array(
       'variables' => array('nodes' => NULL),
+      'template' => 'node-recent-block',
     ),
     'node_recent_content' => array(
       'variables' => array('node' => NULL),
+      'template' => 'node-recent-content',
     ),
     'node_edit_form' => array(
       'render element' => 'form',
@@ -1371,27 +1375,29 @@ function node_get_recent($number = 10) {
 }
 
 /**
- * Returns HTML for a list of recent content.
+ * Prepares variables for list of recent content templates.
  *
- * @param $variables
+ * Default template: node-recent-content.html.twig.
+ *
+ * @param array $variables
  *   An associative array containing:
  *   - nodes: An array of recent node entities.
  *
+ * @see template_preprocess_node_recent_content()
+ *
  * @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) {
     $row = array();
-    $node_recent_content = array(
-      '#theme' => 'node_recent_content',
-      '#node' => $node,
-    );
     $row[] = array(
-      'data' => drupal_render($node_recent_content),
+      'data' => array(
+        '#theme' => 'node_recent_content',
+        '#node' => $node,
+      ),
       'class' => 'title-author',
     );
     if (node_access('update', $node)) {
@@ -1410,52 +1416,43 @@ function theme_node_recent_block($variables) {
   }
 
   if ($rows) {
-    $table = array(
+    $variables['table'] = array(
       '#theme' => 'table',
       '#rows' => $rows,
     );
-    $output = drupal_render($table);
     if (user_access('access content overview')) {
-      $more_link = array(
+      $variables['more_link'] = array(
         '#theme' => 'more_link',
         '#url' => 'admin/content',
         '#title' => t('Show more content'),
       );
-      $output .= drupal_render($more_link);
     }
   }
-
-  return $output;
 }
 
 /**
- * Returns HTML for a recent node to be displayed in the recent content block.
+ * Prepares variables for recently created node templates.
  *
- * @param $variable
+ * Default template: node-recent-content.twig.
+ *
+ * @param array $variables
  *   An associative array containing:
  *   - node: A node entity.
  *
- * @ingroup themeable
+ * @see template_preprocess_node_recent_block()
  */
-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->id());
-  $mark = array(
+  $variables['link'] = l($node->label(), 'node/' . $node->id());
+  $variables['mark'] = array(
     '#theme' => 'mark',
-    '#status' => node_mark($node->id(), $node->getChangedTime()),
+    '#type' => node_mark($node->id(), $node->changed),
   );
-  $output .= drupal_render($mark);
-  $output .= '</div><div class="node-author">';
-  $username = array(
+  $variables['username'] = array(
     '#theme' => 'username',
     '#account' => $node->getAuthor(),
   );
-  $output .= drupal_render($username);
-  $output .= '</div>';
-
-  return $output;
 }
 
 /**
diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc
index de16e50..3673b48 100644
--- a/core/modules/node/node.pages.inc
+++ b/core/modules/node/node.pages.inc
@@ -41,32 +41,27 @@ function node_add_page() {
 }
 
 /**
- * Returns HTML for a list of available node types for node creation.
+ * Prepares variables for list of available node type templates.
  *
- * @param $variables
+ * Default template: node-add-list.html.twig.
+ *
+ * @param array $variables
  *   An associative array containing:
  *   - content: An array of content types.
  *
  * @see 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) {
+  $variables['types'] = array();
+  if (!empty($variables['content'])) {
+    foreach ($variables['content'] as $type) {
+      $variables['types'][$type->type] = array(
+        'type' => $type->type,
+        'add_link' => l($type->name, 'node/add/' . $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>';
   }
-  return $output;
 }
 
 
@@ -143,41 +138,36 @@ function node_preview(EntityInterface $node) {
 }
 
 /**
- * Returns HTML for a node preview for display during node creation and editing.
+ * Prepares variables for node preview templates.
  *
- * @param $variables
+ * Default template: node-preview.html.twig.
+ *
+ * @param array $variables
  *   An associative array containing:
  *   - node: The node entity which is being previewed.
  *
  * @see NodeFormController::preview()
  * @see node_preview()
- *
- * @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);
-
-  // Do we need to preview trimmed version of post as well as full version?
-  if ($trimmed != $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;
+  // Render trimmed teaser version of the post.
+  $node_teaser = node_view($node, 'teaser');
+  $node_teaser['#attached']['library'][] = array('node', 'drupal.node.preview');
+  $variables['teaser'] = $node_teaser;
+  // Render full version of the post.
+  $node_full = node_view($node, 'full');
+  $variables['full'] = $node_full;
+
+  // Display a preview of the teaser only if the content of the teaser is
+  // different to the full post.
+  if ($variables['teaser'] != $variables['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..e98a8c1
--- /dev/null
+++ b/core/modules/node/templates/node-add-list.html.twig
@@ -0,0 +1,27 @@
+{#
+/**
+ * @file
+ * Default theme implementation to list node types available for adding content.
+ *
+ * This list is displayed on the Add content admin page.
+ *
+ * Available variables:
+ * - types: A list of content types, each with the following properties:
+ *   - add_link: Link to create a piece of content of this type.
+ *   - description: Description of this type of content.
+ *
+ * @see template_preprocess_node_add_list()
+ *
+ * @ingroup themeable
+ */
+#}
+{% if types is not empty %}
+  <dl class="node-type-list admin-list">
+    {% for type in types %}
+      <dt>{{ type.add_link }}</dt>
+      <dd>{{ type.description }}</dd>
+    {% endfor %}
+  </dl>
+{% else %}
+  <p>{{ '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.'|t({'@create-content': url('admin/structure/types/add')}) }}</p>
+{% endif %}
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..1bc3441
--- /dev/null
+++ b/core/modules/node/templates/node-preview.html.twig
@@ -0,0 +1,23 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a node preview.
+ *
+ * This display may be used during node creation and editing.
+ *
+ * Available variables:
+ * - preview_teaser: Flag indicating whether to show a trimmed teaser version.
+ * - teaser: Trimmed teaser version of the node.
+ * - full: Full version of the node.
+ *
+ * @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..0c0c21b
--- /dev/null
+++ b/core/modules/node/templates/node-recent-block.html.twig
@@ -0,0 +1,20 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a list of recent content.
+ *
+ * Available variables:
+ * - table: A rendered HTML table of recent content.
+ * - more_link: A rendered link to show more content.
+ *
+ * @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..0299d8c
--- /dev/null
+++ b/core/modules/node/templates/node-recent-content.html.twig
@@ -0,0 +1,17 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a node in the recent content block.
+ *
+ * Available variables:
+ * - link: Link to the content.
+ * - mark: HTML marker for new or updated content.
+ * - username: The author of the content.
+ *
+ * @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/system/templates/image.html.twig b/core/modules/system/templates/image.html.twig
new file mode 100755
index 0000000..88707e0
--- /dev/null
+++ b/core/modules/system/templates/image.html.twig
@@ -0,0 +1,14 @@
+{#
+/**
+ * @file
+ * Default theme implementation of an image.
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the img tag.
+ *
+ * @see template_preprocess_image()
+ *
+ * @ingroup themeable
+ */
+#}
+<img{{ attributes }} />
\ No newline at end of file
diff --git a/core/modules/user/.user.install.swp b/core/modules/user/.user.install.swp
new file mode 100644
index 0000000..2844ba5
Binary files /dev/null and b/core/modules/user/.user.install.swp differ
