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 62ac0c8..40abd08 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
@@ -27,6 +27,13 @@
 abstract class AreaPluginBase extends HandlerBase {
 
   /**
+   * The type of this area handler, i.e. 'header', 'footer', or 'empty'.
+   *
+   * @var string
+   */
+  public $handlerType;
+
+  /**
    * Overrides Drupal\views\Plugin\views\HandlerBase::init().
    *
    * Make sure that no result area handlers are set to be shown when the result
@@ -35,7 +42,7 @@
   public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
     parent::init($view, $display, $options);
 
-    if (isset($this->handler_type) && ($this->handler_type == 'empty')) {
+    if ($this->handlerType == 'empty') {
       $this->options['empty'] = TRUE;
     }
   }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php
index 61cb8e0..321f6f2 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php
@@ -50,12 +50,14 @@ public function buildOptionsForm(&$form, &$form_state) {
    * Overrides Drupal\views\Plugin\views\AreaPluginBase::preRender().
    */
   public function preRender(array $results) {
-    if (!empty($this->options['title'])) {
+    parent::preRender($results);
+
+    // If a title is provided, process it. If the area is for the empty
+    // result set, ensure there are no results.
+    if (!empty($this->options['title']) && ($this->handlerType != 'empty' || empty($results))) {
       $value = $this->globalTokenReplace($this->options['title']);
       $this->view->setTitle($this->sanitizeValue($value, 'xss_admin'), PASS_THROUGH);
     }
-
-    return '';
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
index a252414..33746a7 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
@@ -879,7 +879,7 @@ public function getHandlers($type) {
         if ($handler) {
           // Special override for area types so they know where they come from.
           if ($handler_type == 'area') {
-            $handler->handler_type = $type;
+            $handler->handlerType = $type;
           }
 
           $handler->init($this->view, $this, $info);
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTitleTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTitleTest.php
new file mode 100644
index 0000000..d0d06cf
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTitleTest.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\Tests\Handler\AreaTitleTest.
+ */
+
+namespace Drupal\views\Tests\Handler;
+
+use Drupal\views\Tests\ViewUnitTestBase;
+
+/**
+ * Tests the title area handler.
+ *
+ * @see Drupal\views\Plugin\views\area\Title
+ */
+class AreaTitleTest extends ViewUnitTestBase {
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = array('test_area_title');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Area: Title',
+      'description' => 'Tests the title area handler.',
+      'group' => 'Views Handlers',
+    );
+  }
+
+  /**
+   * Tests the title area handler.
+   */
+  public function testTitleText() {
+    $view = views_get_view('test_area_title');
+
+    $view->setDisplay('default');
+    $this->executeView($view);
+    $view->render();
+    $this->assertFalse($view->getTitle(), 'The title area does not override the title if the view is not empty.');
+    $view->destroy();
+
+    $view->setDisplay('default');
+    $this->executeView($view);
+    $view->result = array();
+    $view->render();
+    $this->assertEqual($view->getTitle(), 'test_title_empty', 'The title area should override the title if the result is empty.');
+    $view->destroy();
+
+    $view->setDisplay('page_1');
+    $this->executeView($view);
+    $view->render();
+    $this->assertEqual($view->getTitle(), 'test_title_header', 'The title area on the header should override the title if the result is not empty.');
+    $view->destroy();
+
+    $view->setDisplay('page_1');
+    $this->executeView($view);
+    $view->result = array();
+    $view->render();
+    $this->assertEqual($view->getTitle(), 'test_title_header', 'The title area on the header should override the title if the result is empty.');
+    $view->destroy();
+  }
+
+}
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_area_title.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_area_title.yml
new file mode 100644
index 0000000..05a35a9
--- /dev/null
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_area_title.yml
@@ -0,0 +1,62 @@
+base_table: views_test_data
+core: '8'
+description: ''
+status: '1'
+display:
+  default:
+    display_options:
+      defaults:
+        fields: '0'
+        pager: '0'
+        pager_options: '0'
+        sorts: '0'
+      fields:
+        id:
+          field: id
+          id: id
+          relationship: none
+          table: views_test_data
+          plugin_id: numeric
+      pager:
+        options:
+          offset: '0'
+        type: none
+      pager_options: {  }
+      sorts:
+        id:
+          field: id
+          id: id
+          order: ASC
+          relationship: none
+          table: views_test_data
+          plugin_id: numeric
+      empty:
+        title:
+          field: title
+          id: title
+          table: views
+          plugin_id: title
+          title: test_title_empty
+    display_plugin: default
+    display_title: Master
+    id: default
+    position: '0'
+  page_1:
+    display_options:
+      defaults:
+        empty: '0'
+        header: '0'
+      header:
+        title:
+          field: title
+          id: title
+          table: views
+          plugin_id: title
+          title: test_title_header
+    display_plugin: page
+    display_title: Page 1
+    id: page_1
+    position: '1'
+human_name: ''
+id: test_area_title
+tag: ''
