diff --git a/core/modules/node/config/views.view.frontpage.yml b/core/modules/node/config/views.view.frontpage.yml
new file mode 100644
index 0000000..8ef5676
--- /dev/null
+++ b/core/modules/node/config/views.view.frontpage.yml
@@ -0,0 +1,161 @@
+api_version: '3.0'
+base_field: nid
+base_table: node
+core: 8.x
+description: 'A list of nodes marked as to be shown on the frontpage.'
+disabled: '0'
+display:
+  default:
+    display_options:
+      access:
+        type: perm
+      cache:
+        type: none
+      empty:
+        area:
+          admin_label: ''
+          content: 'No front page content has been created yet.'
+          empty: '1'
+          field: area
+          format: plain_text
+          group_type: group
+          id: area
+          label: ''
+          relationship: none
+          table: views
+          tokenize: '0'
+        node_listing_empty:
+          admin_label: ''
+          empty: '1'
+          field: node_listing_empty
+          group_type: group
+          id: node_listing_empty
+          label: ''
+          relationship: none
+          table: node
+        title:
+          id: title
+          table: views
+          field: title
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: ''
+          empty: '1'
+          title: 'Welcome to the site'
+      exposed_form:
+        type: basic
+      filters:
+        promote:
+          admin_label: ''
+          expose:
+            description: ''
+            identifier: ''
+            label: ''
+            multiple: '0'
+            operator: ''
+            operator_id: '0'
+            remember: '0'
+            remember_roles:
+              authenticated: authenticated
+            required: '0'
+            use_operator: '0'
+          exposed: '0'
+          field: promote
+          group: '1'
+          group_info:
+            default_group: All
+            default_group_multiple: {  }
+            description: ''
+            group_items: {  }
+            identifier: ''
+            label: ''
+            multiple: '0'
+            optional: '1'
+            remember: '0'
+            widget: select
+          group_type: group
+          id: promote
+          is_grouped: '0'
+          operator: '='
+          relationship: none
+          table: node
+          value: '1'
+        status:
+          expose:
+            operator: '0'
+          field: status
+          group: '1'
+          id: status
+          table: node
+          value: '1'
+      pager:
+        options:
+          items_per_page: '10'
+        type: full
+      query:
+        type: views_query
+      row:
+        options:
+          build_mode: teaser
+          comments: '0'
+          links: '1'
+        type: node
+      sorts:
+        created:
+          field: created
+          id: created
+          order: DESC
+          table: node
+        sticky:
+          admin_label: ''
+          expose:
+            label: ''
+          exposed: '0'
+          field: sticky
+          group_type: group
+          id: sticky
+          order: ASC
+          relationship: none
+          table: node
+      style:
+        type: default
+      title: ''
+    display_plugin: default
+    display_title: Master
+    id: default
+    position: {  }
+  feed:
+    display_options:
+      defaults:
+        sitename_title: '0'
+        title: '0'
+      display_description: 'Display the default content feed.'
+      displays:
+        default: default
+        page: page
+      pager:
+        type: some
+      path: rss.xml
+      row:
+        type: node_rss
+      sitename_title: '1'
+      style:
+        type: rss
+      title: ''
+    display_plugin: feed
+    display_title: Feed
+    id: feed
+    position: {  }
+  page:
+    display_options:
+      path: node
+    display_plugin: page
+    display_title: Page
+    id: page
+    position: {  }
+human_name: Frontpage
+langcode: und
+module: node
+name: frontpage
+tag: ''
diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php b/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php
new file mode 100644
index 0000000..92e3da6
--- /dev/null
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\node\Plugin\views\area\LinkAdd.
+ */
+
+namespace Drupal\node\Plugin\views\area;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\area\AreaPluginBase;
+
+/**
+ * An area plugin to display a node/add link.
+ *
+ * @ingroup views_area_handlers
+ *
+ * @Plugin(
+ *   id = "node_listing_empty"
+ * )
+ */
+class ListingEmpty extends AreaPluginBase {
+
+  /**
+   * Implements Drupal\views\Plugin\views\area\AreaPluginBase::LinkAdd().
+   */
+  function render($empty = FALSE) {
+    if (!$empty || !empty($this->options['empty'])) {
+      $element = array(
+        '#theme' => 'links',
+        '#links' => array(
+          array(
+            'href' => 'node/add',
+            'title' => t('Add new content')
+          )
+        ) ,
+        '#access' => _node_add_access()
+      );
+      return drupal_render($element);
+    }
+  }
+
+}
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeRSSContentTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeRSSContentTest.php
index e82ebcd..4e40a2e 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeRSSContentTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeRSSContentTest.php
@@ -21,7 +21,7 @@ class NodeRSSContentTest extends NodeTestBase {
    *
    * @var array
    */
-  public static $modules = array('node_test');
+  public static $modules = array('node_test', 'views');
 
   public static function getInfo() {
     return array(
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTitleTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTitleTest.php
index 1880d4f..a9503aa 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeTitleTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTitleTest.php
@@ -17,7 +17,7 @@ class NodeTitleTest extends NodeTestBase {
    *
    * @var array
    */
-  public static $modules = array('comment');
+  public static $modules = array('comment', 'views');
 
   protected $admin_user;
 
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 2dd1b57..0d9030b 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1949,27 +1949,12 @@ function node_menu() {
     'file' => 'content_types.inc',
   );
 
-  $items['node'] = array(
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-    'menu_name' => 'navigation',
-    'type' => MENU_CALLBACK,
-  );
   $items['node/add'] = array(
     'title' => 'Add content',
     'page callback' => 'node_add_page',
     'access callback' => '_node_add_access',
     'file' => 'node.pages.inc',
   );
-  $items['rss.xml'] = array(
-    'title' => 'RSS feed',
-    'page callback' => 'node_feed',
-    // Pass a FALSE and array argument to ensure that additional path components
-    // are not passed to node_feed().
-    'page arguments' => array(FALSE, array()),
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
   $items['node/add/%node_type'] = array(
     'title callback' => 'node_type_get_clean_name',
     'title arguments' => array(2),
@@ -2459,99 +2444,6 @@ function node_block_list_alter(&$blocks) {
 }
 
 /**
- * Page callback: Generates and prints an RSS feed.
- *
- * Generates an RSS feed from an array of node IDs, and prints it with an HTTP
- * header, with Content Type set to RSS/XML.
- *
- * @param $nids
- *   (optional) An array of node IDs (nid). Defaults to FALSE so empty feeds can
- *   be generated with passing an empty array, if no items are to be added
- *   to the feed.
- * @param $channel
- *   (optional) An associative array containing 'title', 'link', 'description',
- *   and other keys, to be parsed by format_rss_channel() and
- *   format_xml_elements(). A list of channel elements can be found at the
- *   @link http://cyber.law.harvard.edu/rss/rss.html RSS 2.0 Specification. @endlink
- *   The link should be an absolute URL.
- *
- * @return Symfony\Component\HttpFoundation\Response
- *   A response object.
- *
- * @see node_menu()
- */
-function node_feed($nids = FALSE, $channel = array()) {
-  global $base_url;
-  $language_content = language(LANGUAGE_TYPE_CONTENT);
-  $rss_config = config('system.rss');
-
-  if ($nids === FALSE) {
-    $nids = db_select('node', 'n')
-      ->fields('n', array('nid', 'created'))
-      ->condition('n.promote', 1)
-      ->condition('n.status', 1)
-      ->orderBy('n.created', 'DESC')
-      ->range(0, $rss_config->get('items.limit'))
-      ->addTag('node_access')
-      ->execute()
-      ->fetchCol();
-  }
-
-  $item_length = $rss_config->get('items.view_mode');
-  $namespaces = array('xmlns:dc' => 'http://purl.org/dc/elements/1.1/');
-  $teaser = ($item_length == 'teaser');
-
-  // Load all nodes to be rendered.
-  $nodes = node_load_multiple($nids);
-  $items = '';
-  foreach ($nodes as $node) {
-    $item_text = '';
-
-    $node->link = url("node/$node->nid", array('absolute' => TRUE));
-    $node->rss_namespaces = array();
-    $node->rss_elements = array(
-      array('key' => 'pubDate', 'value' => gmdate('r', $node->created)),
-      array('key' => 'dc:creator', 'value' => $node->name),
-      array('key' => 'guid', 'value' => $node->nid . ' at ' . $base_url, 'attributes' => array('isPermaLink' => 'false'))
-    );
-
-    // The node gets built and modules add to or modify $node->rss_elements
-    // and $node->rss_namespaces.
-    $build = node_view($node, 'rss');
-    unset($build['#theme']);
-
-    if (!empty($node->rss_namespaces)) {
-      $namespaces = array_merge($namespaces, $node->rss_namespaces);
-    }
-
-    if ($item_length != 'title') {
-      // We render node contents and force links to be last.
-      $build['links']['#weight'] = 1000;
-      $item_text .= drupal_render($build);
-    }
-
-    $items .= format_rss_item($node->label(), $node->link, $item_text, $node->rss_elements);
-  }
-
-  $channel_defaults = array(
-    'version'     => '2.0',
-    'title'       => config('system.site')->get('name'),
-    'link'        => $base_url,
-    'description' => $rss_config->get('channel.description'),
-    'language'    => $language_content->langcode
-  );
-  $channel_extras = array_diff_key($channel, $channel_defaults);
-  $channel = array_merge($channel_defaults, $channel);
-
-  $output = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
-  $output .= "<rss version=\"" . $channel["version"] . "\" xml:base=\"" . $base_url . "\" " . new Attribute($namespaces) . ">\n";
-  $output .= format_rss_channel($channel['title'], $channel['link'], $channel['description'], $items, $channel['language'], $channel_extras);
-  $output .= "</rss>\n";
-
-  return new Response($output, 200, array('Content-Type' =>  'application/rss+xml; charset=utf-8'));
-}
-
-/**
  * Constructs a drupal_render() style array from an array of loaded nodes.
  *
  * @param $nodes
@@ -2581,62 +2473,6 @@ function node_view_multiple($nodes, $view_mode = 'teaser', $weight = 0, $langcod
 }
 
 /**
- * Page callback: Generates a listing of promoted nodes.
- *
- * @return array
- *   An array in the format expected by drupal_render().
- *
- * @see node_menu()
- */
-function node_page_default() {
-  $site_config = config('system.site');
-  $select = db_select('node', 'n')
-    ->fields('n', array('nid', 'sticky', 'created'))
-    ->condition('n.promote', 1)
-    ->condition('n.status', 1)
-    ->orderBy('n.sticky', 'DESC')
-    ->orderBy('n.created', 'DESC')
-    ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
-    ->limit(variable_get('default_nodes_main', 10))
-    ->addTag('node_access');
-
-  $nids = $select->execute()->fetchCol();
-
-  if (!empty($nids)) {
-    $nodes = node_load_multiple($nids);
-    $build = node_view_multiple($nodes);
-
-    // 'rss.xml' is a path, not a file, registered in node_menu().
-    drupal_add_feed('rss.xml', $site_config->get('name') . ' ' . t('RSS'));
-    $build['pager'] = array(
-      '#theme' => 'pager',
-      '#weight' => 5,
-    );
-    drupal_set_title('');
-  }
-  else {
-    drupal_set_title(t('Welcome to @site-name', array('@site-name' => $site_config->get('name'))), PASS_THROUGH);
-
-    $default_message = '<p>' . t('No front page content has been created yet.') . '</p>';
-
-    $default_links = array();
-    if (_node_add_access()) {
-      $default_links[] = l(t('Add new content'), 'node/add');
-    }
-    if (!empty($default_links)) {
-      $default_message .= theme('item_list', array('items' => $default_links));
-    }
-
-    $build['default_message'] = array(
-      '#markup' => $default_message,
-      '#prefix' => '<div id="first-time">',
-      '#suffix' => '</div>',
-    );
-  }
-  return $build;
-}
-
-/**
  * Page callback: Displays a single node.
  *
  * @param Drupal\node\Node $node
diff --git a/core/modules/node/node.views.inc b/core/modules/node/node.views.inc
index 8ac6fd6..66b8fb8 100644
--- a/core/modules/node/node.views.inc
+++ b/core/modules/node/node.views.inc
@@ -418,6 +418,14 @@ function node_views_data() {
     ),
   );
 
+  $data['node']['node_listing_empty'] = array(
+    'title' => t('Empty Node Frontpage behavior'),
+    'help' => t('Provides a link to the node add overview page.'),
+    'area' => array(
+      'id' => 'node_listing_empty',
+    ),
+  );
+
   // ----------------------------------------------------------------------
   // Content revision table
 
diff --git a/core/modules/views/config/views.view.frontpage.yml b/core/modules/views/config/views.view.frontpage.yml
deleted file mode 100644
index a635a0e..0000000
--- a/core/modules/views/config/views.view.frontpage.yml
+++ /dev/null
@@ -1,95 +0,0 @@
-disabled: true
-api_version: '3.0'
-module: node
-name: frontpage
-description: 'Emulates the default Drupal front page; you may set the default home page path to this view to make it your front page.'
-tag: default
-base_table: node
-human_name: 'Front page'
-core: '8'
-display:
-  default:
-    id: default
-    display_title: Master
-    display_plugin: default
-    position: '1'
-    display_options:
-      query:
-        type: views_query
-        options:
-          query_comment: false
-      access:
-        type: none
-      cache:
-        type: none
-      exposed_form:
-        type: basic
-      pager:
-        type: full
-      style:
-        type: default
-      row:
-        type: node
-        options:
-          links: 1
-      sorts:
-        sticky:
-          id: sticky
-          table: node
-          field: sticky
-          order: DESC
-        created:
-          id: created
-          table: node
-          field: created
-          order: DESC
-      filters:
-        promote:
-          id: promote
-          table: node
-          field: promote
-          value: '1'
-          group: 0
-          expose:
-            operator: false
-        status:
-          id: status
-          table: node
-          field: status
-          value: '1'
-          group: 0
-          expose:
-            operator: false
-  page_1:
-    id: page_1
-    display_title: Page
-    display_plugin: page
-    position: '2'
-    display_options:
-      query:
-        type: views_query
-        options: {  }
-      path: frontpage
-  feed_1:
-    id: feed_1
-    display_title: Feed
-    display_plugin: feed
-    position: '3'
-    display_options:
-      query:
-        type: views_query
-        options: {  }
-      defaults:
-        title: false
-      title: 'Front page feed'
-      pager:
-        type: some
-      style:
-        type: rss
-      row:
-        type: node_rss
-      path: rss.xml
-      displays:
-        default: default
-        page: page
-      sitename_title: '1'
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php
index 073f7d8..f7fb4f1 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php
@@ -99,9 +99,7 @@ public function query() { }
   /**
    * Render the area
    */
-  function render($empty = FALSE) {
-    return '';
-  }
+  abstract function render($empty = FALSE);
 
   /**
    * Area handlers shouldn't have groupby.
