diff --git a/core/modules/views/config/schema/views.area.schema.yml b/core/modules/views/config/schema/views.area.schema.yml
index 086a512..07e8672 100644
--- a/core/modules/views/config/schema/views.area.schema.yml
+++ b/core/modules/views/config/schema/views.area.schema.yml
@@ -9,11 +9,8 @@ views.area.text:
   label: 'Text'
   mapping:
     content:
-      type: text
+      type: text_with_format
       label: 'The shown text of the area'
-    format:
-      type: string
-      label: 'The filter format the content is in'
     tokenize:
       type: boolean
       label: 'Should replacement tokens be used from the first row'
diff --git a/core/modules/views/config/schema/views.data_types.schema.yml b/core/modules/views/config/schema/views.data_types.schema.yml
index f8a2770..3e0cf12 100644
--- a/core/modules/views/config/schema/views.data_types.schema.yml
+++ b/core/modules/views/config/schema/views.data_types.schema.yml
@@ -176,6 +176,11 @@ views_display:
       label: 'Relationships'
       sequence:
         - type: views.relationship.[plugin_id]
+    header:
+      type: sequence
+      label: 'Header'
+      sequence:
+        - type: views.area.[plugin_id]
 
 views_sort:
   type: mapping
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 7206e5b..f200c9c 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
@@ -21,8 +21,12 @@ class Text extends TokenizeAreaPluginBase {
    */
   protected function defineOptions() {
     $options = parent::defineOptions();
-    $options['content'] = array('default' => '', 'translatable' => TRUE, 'format_key' => 'format');
-    $options['format'] = array('default' => NULL);
+    $options['content'] = array(
+      'contains' => array(
+        'value' => array('default' => '', 'translatable' => TRUE),
+        'format' => array('default' => NULL),
+      ),
+    );
     return $options;
   }
 
@@ -35,9 +39,9 @@ public function buildOptionsForm(&$form, &$form_state) {
     $form['content'] = array(
       '#title' => t('Content'),
       '#type' => 'text_format',
-      '#default_value' => $this->options['content'],
+      '#default_value' => $this->options['content']['value'],
       '#rows' => 6,
-      '#format' => isset($this->options['format']) ? $this->options['format'] : filter_default_format(),
+      '#format' => isset($this->options['content']['format']) ? $this->options['content']['format'] : filter_default_format(),
       '#editor' => FALSE,
     );
   }
@@ -45,20 +49,11 @@ public function buildOptionsForm(&$form, &$form_state) {
   /**
    * {@inheritdoc}
    */
-  public function submitOptionsForm(&$form, &$form_state) {
-    $form_state['values']['options']['format'] = $form_state['values']['options']['content']['format'];
-    $form_state['values']['options']['content'] = $form_state['values']['options']['content']['value'];
-    parent::submitOptionsForm($form, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function render($empty = FALSE) {
-    $format = isset($this->options['format']) ? $this->options['format'] : filter_default_format();
+    $format = isset($this->options['content']['format']) ? $this->options['content']['format'] : filter_default_format();
     if (!$empty || !empty($this->options['empty'])) {
       return array(
-        '#markup' => $this->renderTextarea($this->options['content'], $format),
+        '#markup' => $this->renderTextarea($this->options['content']['value'], $format),
       );
     }
 
