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
index d442803..3334be8 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php
@@ -37,7 +37,7 @@ public function render($empty = FALSE) {
         ) ,
         '#access' => _node_add_access()
       );
-      return drupal_render($element);
+      return $element;
     }
   }
 
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 fa394ae..c4f4764 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
@@ -159,7 +159,13 @@ public function preRender(array $results) {
   }
 
   /**
-   * Render the area
+   * Render the area.
+   *
+   * @param bool $empty
+   *   (optional) Indicator if view result is empty or not. Defaults to FALSE.
+   *
+   * @return array
+   *   Drupal render array.
    */
   public abstract function render($empty = FALSE);
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Broken.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Broken.php
index 772304c..bfd184c 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Broken.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Broken.php
@@ -27,7 +27,15 @@ public function adminLabel($short = FALSE) {
   public function defineOptions() { return array(); }
   public function ensureMyTable() { /* No table to ensure! */ }
   public function query($group_by = FALSE) { /* No query to run */ }
-  function render($empty = FALSE) { return ''; }
+
+  /**
+   * Implements \Drupal\views\Plugin\views\area\AreaPluginBase::render().
+   */
+  function render($empty = FALSE) {
+    // Simply render nothing by returning an empty array.
+    return array();
+  }
+
   public function buildOptionsForm(&$form, &$form_state) {
     $form['markup'] = array(
       '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Result.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Result.php
index e4d11bd..99e3462 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Result.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Result.php
@@ -57,7 +57,7 @@ public function buildOptionsForm(&$form, &$form_state) {
 
 
   /**
-   * Find out the information to render.
+   * Implements \Drupal\views\Plugin\views\area\AreaPluginBase::render().
    */
   function render($empty = FALSE) {
     // Must have options and does not work on summaries.
@@ -99,7 +99,10 @@ function render($empty = FALSE) {
     if (!empty($total)) {
       $output .= filter_xss_admin(str_replace(array_keys($replacements), array_values($replacements), $format));
     }
-    return $output;
+    // Return as render array.
+    return array(
+      '#markup' => $output,
+    );
   }
 
 }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Text.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Text.php
index 38c12c7..7495933 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Text.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Text.php
@@ -49,12 +49,18 @@ public function submitOptionsForm(&$form, &$form_state) {
     parent::submitOptionsForm($form, $form_state);
   }
 
+  /**
+   * Implements \Drupal\views\Plugin\views\area\AreaPluginBase::render().
+   */
   function render($empty = FALSE) {
     $format = isset($this->options['format']) ? $this->options['format'] : filter_default_format();
     if (!$empty || !empty($this->options['empty'])) {
-      return $this->render_textarea($this->options['content'], $format);
+      return array(
+        '#markup' => $this->render_textarea($this->options['content'], $format),
+      );
     }
-    return '';
+
+    return array();
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/TextCustom.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/TextCustom.php
index 782ab9a..754dd4f 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/TextCustom.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/TextCustom.php
@@ -44,12 +44,17 @@ public function buildOptionsForm(&$form, &$form_state) {
   public function submitOptionsForm(&$form, &$form_state) {
   }
 
+  /**
+   * Implements \Drupal\views\Plugin\views\area\AreaPluginBase::render().
+   */
   function render($empty = FALSE) {
     if (!$empty || !empty($this->options['empty'])) {
-      return $this->render_textarea($this->options['content']);
+      return array(
+        '#markup' => $this->render_textarea($this->options['content']),
+      );
     }
 
-    return '';
+    return array();
   }
 
   /**
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 84b95e5..67c9603 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
@@ -59,7 +59,7 @@ public function preRender(array $results) {
   }
 
   /**
-   * Implements \Drupal\views\Plugins\views\area\AreaPluginBase::render();
+   * Implements \Drupal\views\Plugin\views\area\AreaPluginBase::render().
    */
   public function render($empty = FALSE) {
     // Do nothing for this handler.
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php
index ffc94e7..32653dc 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php
@@ -56,7 +56,7 @@ public function buildOptionsForm(&$form, &$form_state) {
   }
 
   /**
-   * Render the area
+   * Implements \Drupal\views\Plugin\views\area\AreaPluginBase::render().
    */
   function render($empty = FALSE) {
     if (!empty($this->options['view_to_insert'])) {
@@ -78,15 +78,21 @@ function render($empty = FALSE) {
         drupal_set_message(t("Recursion detected in view @view display @display.", array('@view' => $view_name, '@display' => $display_id)), 'error');
       }
       else {
+        // Current $view->preview() does not return a render array, so we have
+        // to build a markup out if it.
         if (!empty($this->options['inherit_arguments']) && !empty($this->view->args)) {
-          return $view->preview($display_id, $this->view->args);
+          return array(
+            '#markup' => $view->preview($display_id, $this->view->args),
+          );
         }
         else {
-          return $view->preview($display_id);
+          return array(
+            '#markup' => $view->preview($display_id),
+          );
         }
       }
     }
-    return '';
+    return array();
   }
 
 }
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 3259815..15817de 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
@@ -2465,10 +2465,22 @@ public function render() {
     return $element;
   }
 
+  /**
+   * Render one of the available areas.
+   *
+   * @param string $area
+   *   Identifier of the specific area to render.
+   * @param bool $empty
+   *   (optional) Indicator whether or not the view result is empty. Defaults to
+   *   FALSE
+   *
+   * @return array
+   *   A render array for the given area.
+   */
   public function renderArea($area, $empty = FALSE) {
-    $return = '';
-    foreach ($this->getHandlers($area) as $area) {
-      $return .= $area->render($empty);
+    $return = array();
+    foreach ($this->getHandlers($area) as $key => $area_handler) {
+      $return[$key] = $area_handler->render($empty);
     }
     return $return;
   }
diff --git a/core/modules/views/templates/views-view.tpl.php b/core/modules/views/templates/views-view.tpl.php
index 05ce4c7..ca8faef 100644
--- a/core/modules/views/templates/views-view.tpl.php
+++ b/core/modules/views/templates/views-view.tpl.php
@@ -35,7 +35,7 @@
   <?php print render($title_suffix); ?>
   <?php if ($header): ?>
     <div class="view-header">
-      <?php print $header; ?>
+      <?php print render($header); ?>
     </div>
   <?php endif; ?>
 
@@ -57,7 +57,7 @@
     </div>
   <?php elseif ($empty): ?>
     <div class="view-empty">
-      <?php print $empty; ?>
+      <?php print render($empty); ?>
     </div>
   <?php endif; ?>
 
@@ -77,7 +77,7 @@
 
   <?php if ($footer): ?>
     <div class="view-footer">
-      <?php print $footer; ?>
+      <?php print render($footer); ?>
     </div>
   <?php endif; ?>
 
diff --git a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/area/TestExample.php b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/area/TestExample.php
index ea53407..9da0f6f 100644
--- a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/area/TestExample.php
+++ b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/area/TestExample.php
@@ -40,11 +40,13 @@ public function buildOptionsForm(&$form, &$form_state) {
   }
 
   /**
-   * Overrides Drupal\views\Plugin\views\area\AreaPluginBase::render().
+   * Implements Drupal\views\Plugin\views\area\AreaPluginBase::render().
    */
   public function render($empty = FALSE) {
     if (!$empty || !empty($this->options['empty'])) {
-      return $this->globalTokenReplace($this->options['string']);
+      return array(
+        '#markup' => $this->globalTokenReplace($this->options['string']),
+      );
     }
   }
 
