diff --git a/config/views.view.archive.yml b/config/views.view.archive.yml
index 6e783bd166827da4d179a7b3563d202f22b31678..b5ef6a06f63831fe0523f624cb93d69a0b65778f 100644
--- a/config/views.view.archive.yml
+++ b/config/views.view.archive.yml
@@ -27,8 +27,6 @@ display:
         type: basic
       pager:
         type: full
-      style_plugin: default
-      row_plugin: node
       sorts:
         created:
           id: created
@@ -62,6 +60,10 @@ display:
           group: 0
           expose:
             operator: false
+      style:
+        type: default
+      row:
+        type: node
   page:
     id: page
     display_title: Page
diff --git a/config/views.view.backlinks.yml b/config/views.view.backlinks.yml
index 4b06443f0627e82de4064ced460b43d6a8e184c3..c3739e8d746637f7e754fe5addbebbee37d26420 100644
--- a/config/views.view.backlinks.yml
+++ b/config/views.view.backlinks.yml
@@ -28,10 +28,6 @@ display:
         type: full
         options:
           items_per_page: 30
-      style_plugin: html_list
-      style_options:
-        type: ol
-      row_plugin: fields
       empty:
         text:
           id: area
@@ -70,6 +66,12 @@ display:
           group: 0
           expose:
             operator: false
+      style:
+        type: html_list
+        options:
+          type: ol
+      row:
+        type: fields
   page:
     id: page
     display_title: Page
@@ -101,8 +103,6 @@ display:
           row_options: false
           arguments: false
       use_more: true
-      style_plugin: html_list
-      row_plugin: fields
       arguments:
         nid:
           id: nid
@@ -117,3 +117,7 @@ display:
           specify_validation: 1
           validate:
             type: node
+      style:
+        type: html_list
+      row:
+        type: fields
diff --git a/config/views.view.comments_recent.yml b/config/views.view.comments_recent.yml
index 1c62bd486aec53b76dddb1fdc4049668108e7c87..337c356ecaf1cbf6a1b55948d744a9df118aeab2 100644
--- a/config/views.view.comments_recent.yml
+++ b/config/views.view.comments_recent.yml
@@ -30,8 +30,6 @@ display:
         type: some
         options:
           items_per_page: 5
-      style_plugin: html_list
-      row_plugin: fields
       relationships:
         nid:
           id: nid
@@ -63,6 +61,10 @@ display:
           field: status_extra
           relationship: nid
           group: 0
+      style:
+        type: html_list
+      row:
+        type: fields
   page:
     id: page
     display_title: Page
@@ -78,13 +80,6 @@ display:
         row_plugin: false
         row_options: false
         fields: false
-      style_plugin: html_list
-      row_plugin: fields
-      row_options:
-        inline:
-          title: title
-          timestamp: timestamp
-          separator: ' '
       fields:
         title:
           id: title
@@ -111,6 +106,15 @@ display:
           field: comment_body
           label: ''
       path: comments/recent
+      style:
+        type: html_list
+      row:
+        type: fields
+        options:
+          inline:
+            title: title
+            timestamp: timestamp
+            separator: ' '
   block:
     id: block
     display_title: Block
diff --git a/config/views.view.frontpage.yml b/config/views.view.frontpage.yml
index fb73c42c1ee79c7bef1b166891886667e8932d43..4ad616439855c14b4efc1e0b7b589171587e9871 100644
--- a/config/views.view.frontpage.yml
+++ b/config/views.view.frontpage.yml
@@ -26,10 +26,12 @@ display:
         type: basic
       pager:
         type: full
-      style_plugin: default
-      row_plugin: node
-      row_options:
-        links: 1
+      style:
+        type: default
+      row:
+        type: node
+        options:
+          links: 1
       sorts:
         sticky:
           id: sticky
@@ -82,8 +84,10 @@ display:
       title: 'Front page feed'
       pager:
         type: some
-      style_plugin: rss
-      row_plugin: node_rss
+      style:
+        type: rss
+      row:
+        type: node_rss
       path: rss.xml
       displays:
         default: default
diff --git a/config/views.view.glossary.yml b/config/views.view.glossary.yml
index 758a6bf089563028abe1aeb43a8f0080518ec17d..88de6990149153d6f3824d51e238c09fbb3c79e4 100644
--- a/config/views.view.glossary.yml
+++ b/config/views.view.glossary.yml
@@ -29,25 +29,6 @@ display:
         type: full
         options:
           items_per_page: 36
-      style_plugin: table
-      style_options:
-        columns:
-          title: title
-          name: name
-          changed: changed
-        default: title
-        info:
-          title:
-            sortable: 1
-            separator: ''
-          name:
-            sortable: 1
-            separator: ''
-          changed:
-            sortable: 1
-            separator: ''
-        override: 1
-        sticky: 0
       fields:
         title:
           id: title
@@ -91,6 +72,26 @@ display:
           id: uid
           table: node
           field: uid
+      style:
+        type: table
+        options:
+          columns:
+            title: title
+            name: name
+            changed: changed
+          default: title
+          info:
+            title:
+              sortable: 1
+              separator: ''
+            name:
+              sortable: 1
+              separator: ''
+            changed:
+              sortable: 1
+              separator: ''
+          override: 1
+          sticky: 0
   page:
     id: page
     display_title: Page
diff --git a/config/views.view.taxonomy_term.yml b/config/views.view.taxonomy_term.yml
index 66c3477ab340db594f491c334ffdcd9433fe3317..8cd3c791369ab60099521096019b4409dad96a2e 100644
--- a/config/views.view.taxonomy_term.yml
+++ b/config/views.view.taxonomy_term.yml
@@ -26,8 +26,6 @@ display:
         type: basic
       pager:
         type: full
-      style_plugin: default
-      row_plugin: node
       sorts:
         sticky:
           id: sticky
@@ -75,6 +73,10 @@ display:
           group: 0
           expose:
             operator: false
+      style:
+        type: default
+      row:
+        type: node
   page:
     id: page
     display_title: Page
@@ -98,9 +100,11 @@ display:
         type: full
         options:
           items_per_page: 15
-      style_plugin: rss
-      row_plugin: node_rss
       path: taxonomy/term/%/%/feed
       displays:
         page: page
         default: 0
+      style:
+        type: rss
+      row:
+        type: node_rss
diff --git a/config/views.view.tracker.yml b/config/views.view.tracker.yml
index 41f6ce40284ce0e4f49bcdf167d9bf0060616bda..6d4d4a41d303b55aa7b3cd1502c0cefeafca2d44 100644
--- a/config/views.view.tracker.yml
+++ b/config/views.view.tracker.yml
@@ -29,39 +29,6 @@ display:
         type: full
         options:
           items_per_page: '25'
-      style_plugin: table
-      style_options:
-        columns:
-          type: type
-          title: title
-          name: name
-          comment_count: comment_count
-          last_comment_timestamp: last_comment_timestamp
-          timestamp: title
-          new_comments: comment_count
-        default: last_comment_timestamp
-        info:
-          type:
-            sortable: 1
-            separator: ''
-          title:
-            sortable: 1
-            separator: ' '
-          name:
-            sortable: 1
-            separator: ''
-          comment_count:
-            sortable: 1
-            separator: '<br />'
-          last_comment_timestamp:
-            sortable: 1
-            separator: '&nbsp;'
-          timestamp:
-            separator: ''
-          new_comments:
-            separator: ''
-        override: 1
-        order: desc
       relationships:
         uid:
           id: uid
@@ -134,6 +101,40 @@ display:
           group: 0
           expose:
             operator: false
+      style:
+        type: table
+        options:
+          columns:
+            type: type
+            title: title
+            name: name
+            comment_count: comment_count
+            last_comment_timestamp: last_comment_timestamp
+            timestamp: title
+            new_comments: comment_count
+          default: last_comment_timestamp
+          info:
+            type:
+              sortable: 1
+              separator: ''
+            title:
+              sortable: 1
+              separator: '&nbsp;'
+            name:
+              sortable: 1
+              separator: ''
+            comment_count:
+              sortable: 1
+              separator: '<br />'
+            last_comment_timestamp:
+              sortable: 1
+              separator: '&nbsp;'
+            timestamp:
+              separator: ''
+            new_comments:
+              separator: ''
+          override: 1
+          order: desc
   page:
     id: page
     display_title: Page
diff --git a/includes/admin.inc b/includes/admin.inc
index 528eac8d67ad77f59c912cb8b1629a9dac289229..a83e62bcf09689e1340460cc84a762aeedb3c1bc 100644
--- a/includes/admin.inc
+++ b/includes/admin.inc
@@ -1963,15 +1963,17 @@ function views_ui_import_validate($form, &$form_state) {
         continue;
       }
 
-      $plugin = views_get_plugin('style', $display->getOption('style_plugin'));
+      $style = $display->getOption('style');
+      $plugin = views_get_plugin('style', $style['type']);
       if (!$plugin) {
-        drupal_set_message(t('Style plugin @plugin is not available.', array('@plugin' => $display->getOption('style_plugin'))), 'error');
+        drupal_set_message(t('Style plugin @plugin is not available.', array('@plugin' => $style['type'])), 'error');
         $broken = TRUE;
       }
       elseif ($plugin->usesRowPlugin()) {
-        $plugin = views_get_plugin('row', $display->getOption('row_plugin'));
+        $row = $display->getOption('row');
+        $plugin = views_get_plugin('row', $row['type']);
         if (!$plugin) {
-          drupal_set_message(t('Row plugin @plugin is not available.', array('@plugin' => $display->getOption('row_plugin'))), 'error');
+          drupal_set_message(t('Row plugin @plugin is not available.', array('@plugin' => $row['type'])), 'error');
           $broken = TRUE;
         }
       }
@@ -2122,8 +2124,8 @@ function views_ui_edit_form_get_bucket($type, ViewExecutable $view, $display) {
       break;
     case 'field':
       // Fetch the style plugin info so we know whether to list fields or not.
-      $name = $view->displayHandlers[$display['id']]->getOption('style_plugin');
-      $style_plugin = $view->displayHandlers[$display['id']]->getPlugin('style', $name);
+      $style = $view->displayHandlers[$display['id']]->getOption('style');
+      $style_plugin = $view->displayHandlers[$display['id']]->getPlugin('style', $style['type']);
       $uses_fields = $style_plugin && $style_plugin->usesFields();
       if (!$uses_fields) {
         $build['fields'][] = array(
@@ -3139,6 +3141,7 @@ function views_ui_edit_display_form($form, &$form_state) {
   if (!$view->setDisplay($display_id)) {
     views_ajax_error(t('Invalid display id @display', array('@display' => $display_id)));
   }
+  $display = &$view->display[$display_id];
 
   // Get form from the handler.
   $form['options'] = array(
@@ -4582,12 +4585,12 @@ function views_ui_config_style_form($form, &$form_state) {
 
       $form['#section'] = $display_id . '-' . $type . '-style-options';
 
-      $plugin = views_get_plugin('style', $handler->options['style_plugin']);
+      $plugin = views_get_plugin('style', $handler->options['style']['type']);
       if ($plugin) {
         $form['style_options'] = array(
           '#tree' => TRUE,
         );
-        $plugin->init($view, $view->display[$display_id], $handler->options['style_options']);
+        $plugin->init($view, $view->display[$display_id], $handler->options['style']['options']);
 
         $plugin->buildOptionsForm($form['style_options'], $form_state);
       }
diff --git a/lib/Drupal/views/Plugin/views/access/AccessPluginBase.php b/lib/Drupal/views/Plugin/views/access/AccessPluginBase.php
index 738d7123c680c4156580c2059441fc679978842c..a25322339f2dab7e751c1c072b9f817560c6e9eb 100644
--- a/lib/Drupal/views/Plugin/views/access/AccessPluginBase.php
+++ b/lib/Drupal/views/Plugin/views/access/AccessPluginBase.php
@@ -34,16 +34,12 @@ abstract class AccessPluginBase extends PluginBase {
    * @param $display
    *   The display handler.
    */
-  public function init(ViewExecutable $view, &$display) {
+  public function init(ViewExecutable $view, &$display, $options = NULL) {
     $this->setOptionDefaults($this->options, $this->defineOptions());
     $this->view = &$view;
     $this->displayHandler = &$display;
 
-    if (is_object($display)) {
-      $options = $display->getOption('access');
-      // Overlay incoming options on top of defaults
-      $this->unpackOptions($this->options, $options);
-    }
+    $this->unpackOptions($this->options, $options);
   }
 
   /**
diff --git a/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php b/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
index 1d2e4fc6b4f25368953edbef281d5078de4ca04f..8cbec066d37b2574ecbeb01efaa0c7c1d118bd51 100644
--- a/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
+++ b/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
@@ -63,16 +63,12 @@ abstract class CachePluginBase extends PluginBase {
    * @param $display
    *   The display handler.
    */
-  public function init(ViewExecutable $view, &$display) {
+  public function init(ViewExecutable $view, &$display, $options = NULL) {
     $this->setOptionDefaults($this->options, $this->defineOptions());
     $this->view = &$view;
     $this->displayHandler = &$display;
 
-    if (is_object($display)) {
-      $options = $display->getOption('cache');
-      // Overlay incoming options on top of defaults
-      $this->unpackOptions($this->options, $options);
-    }
+    $this->unpackOptions($this->options, $options);
   }
 
   /**
diff --git a/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php b/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
index d58354d0998dcdf953b2e479c921dd430ed6b492..1026ae4a1803b056a0af61ea96a1e8718d483728 100644
--- a/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
+++ b/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
@@ -352,10 +352,8 @@ public function attachTo($display_id) { }
    */
   public function defaultableSections($section = NULL) {
     $sections = array(
-      'access' => array('access', 'access_options'),
-      'access_options' => array('access', 'access_options'),
-      'cache' => array('cache', 'cache_options'),
-      'cache_options' => array('cache', 'cache_options'),
+      'access' => array('access'),
+      'cache' => array('cache'),
       'title' => array('title'),
       'css_class' => array('css_class'),
       'use_ajax' => array('use_ajax'),
@@ -369,10 +367,8 @@ public function defaultableSections($section = NULL) {
       'link_display' => array('link_display', 'link_url'),
 
       // Force these to cascade properly.
-      'style_plugin' => array('style_plugin', 'style_options', 'row_plugin', 'row_options'),
-      'style_options' => array('style_plugin', 'style_options', 'row_plugin', 'row_options'),
-      'row_plugin' => array('style_plugin', 'style_options', 'row_plugin', 'row_options'),
-      'row_options' => array('style_plugin', 'style_options', 'row_plugin', 'row_options'),
+      'style' => array('style', 'row'),
+      'row' => array('style', 'row'),
 
       'pager' => array('pager', 'pager_options'),
       'pager_options' => array('pager', 'pager_options'),
@@ -427,21 +423,17 @@ protected function defineOptions() {
           'hide_attachment_summary' => TRUE,
           'hide_admin_links' => FALSE,
           'pager' => TRUE,
-          'pager_options' => TRUE,
           'use_more' => TRUE,
           'use_more_always' => TRUE,
           'use_more_text' => TRUE,
           'exposed_form' => TRUE,
-          'exposed_form_options' => TRUE,
 
           'link_display' => TRUE,
           'link_url' => '',
           'group_by' => TRUE,
 
-          'style_plugin' => TRUE,
-          'style_options' => TRUE,
-          'row_plugin' => TRUE,
-          'row_options' => TRUE,
+          'style' => TRUE,
+          'row' => TRUE,
 
           'header' => TRUE,
           'footer' => TRUE,
@@ -523,12 +515,14 @@ protected function defineOptions() {
       'access' => array(
         'contains' => array(
           'type' => array('default' => 'none'),
-         ),
+          'options' => array('default' => array()),
+        ),
       ),
       'cache' => array(
         'contains' => array(
           'type' => array('default' => 'none'),
-         ),
+          'options' => array('default' => array()),
+        ),
       ),
       'query' => array(
         'contains' => array(
@@ -536,12 +530,6 @@ protected function defineOptions() {
           'options' => array('default' => array()),
          ),
       ),
-      // Note that exposed_form plugin has options in a separate array,
-      // while access and cache do not. access and cache are legacy and
-      // that pattern should not be repeated, but it is left as is to
-      // reduce the need to modify older views. Let's consider the
-      // pattern used here to be the template from which future plugins
-      // should be copied.
       'exposed_form' => array(
         'contains' => array(
           'type' => array('default' => 'basic'),
@@ -554,21 +542,17 @@ protected function defineOptions() {
           'options' => array('default' => array()),
          ),
       ),
-
-      // Note that the styles have their options completely independent.
-      // Like access and cache above, this is a legacy pattern and
-      // should not be repeated.
-      'style_plugin' => array(
-        'default' => 'default',
-      ),
-      'style_options' => array(
-        'default' => array(),
-      ),
-      'row_plugin' => array(
-        'default' => 'fields',
+      'style' => array(
+        'contains' => array(
+          'type' => array('default' => 'default'),
+          'options' => array('default' => array()),
+        ),
       ),
-      'row_options' => array(
-        'default' => array(),
+      'row' => array(
+        'contains' => array(
+          'type' => array('default' => 'fields'),
+          'options' => array('default' => array()),
+        ),
       ),
 
       'exposed_block' => array(
@@ -738,8 +722,8 @@ public function getOption($option) {
    * @return bool
    */
   public function usesFields() {
-    $name = $this->getOption('style_plugin');
-    $plugin = $this->getPlugin('style', $name);
+    $style = $this->getOption('style');
+    $plugin = $this->getPlugin('style', $style['type']);
     if ($plugin) {
       return $plugin->usesFields();
     }
@@ -759,15 +743,6 @@ public function getPlugin($type = 'style', $name = NULL) {
     static $cache = array();
     if (!isset($cache[$type][$name])) {
       switch ($type) {
-        case 'style':
-        case 'row':
-          $option_name = $type . '_plugin';
-          $options = $this->getOption($type . '_options');
-          if (!$name) {
-            $name = $this->getOption($option_name);
-          }
-
-          break;
         case 'query':
           $views_data = views_fetch_data($this->view->storage->base_table);
           $name = !empty($views_data['table']['base']['query class']) ? $views_data['table']['base']['query class'] : 'views_query';
@@ -778,15 +753,7 @@ public function getPlugin($type = 'style', $name = NULL) {
             $name = $options['type'];
           }
 
-          // access & cache store their options as siblings with the
-          // type; all others use an 'options' array.
-          if ($type != 'access' && $type != 'cache') {
-            if (!isset($options['options'])) {
-//              debug($type);
-//              debug($options);
-            }
-            $options = $options['options'];
-          }
+          $options = $options['options'];
       }
 
       if ($type != 'query') {
@@ -1089,15 +1056,16 @@ public function optionsSummary(&$categories, &$options) {
       'desc' => t('Change the title that this display will use.'),
     );
 
-    $name = $this->getOption('style_plugin');
+    $style_options = $this->getOption('style');
+    $name = $style_options['type'];
     $style_plugin = views_get_plugin_definition('style', $name);
-    $style_plugin_instance = $this->getPlugin('style', $name);
+    $style_plugin_instance = $this->getPlugin('style');
     $style_summary = empty($style_plugin['title']) ? t('Missing style plugin') : $style_plugin_instance->summaryTitle();
     $style_title = empty($style_plugin['title']) ? t('Missing style plugin') : $style_plugin_instance->pluginTitle();
 
     $style = '';
 
-    $options['style_plugin'] = array(
+    $options['style'] = array(
       'category' => 'format',
       'title' => t('Format'),
       'value' => $style_title,
@@ -1107,17 +1075,18 @@ public function optionsSummary(&$categories, &$options) {
 
     // This adds a 'Settings' link to the style_options setting if the style has options.
     if ($style_plugin_instance->usesOptions()) {
-      $options['style_plugin']['links']['style_options'] = t('Change settings for this format');
+      $options['style']['links']['style_options'] = t('Change settings for this format');
     }
 
     if ($style_plugin_instance->usesRowPlugin()) {
-      $name = $this->getOption('row_plugin');
+      $row_options = $this->getOption('row');
+      $name = $row_options['type'];
       $row_plugin = views_get_plugin_definition('row', $name);
       $row_plugin_instance = $this->getPlugin('row', $name);
       $row_summary = empty($row_plugin['title']) ? t('Missing style plugin') : $row_plugin_instance->summaryTitle();
       $row_title = empty($row_plugin['title']) ? t('Missing style plugin') : $row_plugin_instance->pluginTitle();
 
-      $options['row_plugin'] = array(
+      $options['row'] = array(
         'category' => 'format',
         'title' => t('Show'),
         'value' => $row_title,
@@ -1126,7 +1095,7 @@ public function optionsSummary(&$categories, &$options) {
       );
       // This adds a 'Settings' link to the row_options setting if the row style has options.
       if ($row_plugin_instance->usesOptions()) {
-        $options['row_plugin']['links']['row_options'] = t('Change settings for this style');
+        $options['row']['links']['row_options'] = t('Change settings for this style');
       }
     }
     if ($this->usesAJAX()) {
@@ -1493,17 +1462,12 @@ public function buildOptionsForm(&$form, &$form_state) {
 
         break;
       case 'access_options':
-        $access = $this->getOption('access');
         $plugin = $this->getPlugin('access');
         $form['#title'] .= t('Access options');
         if ($plugin) {
           $form['access_options'] = array(
             '#tree' => TRUE,
           );
-          $form['access_options']['type'] = array(
-            '#type' => 'value',
-            '#value' => $access['type'],
-          );
           $plugin->buildOptionsForm($form['access_options'], $form_state);
         }
         break;
@@ -1532,17 +1496,12 @@ public function buildOptionsForm(&$form, &$form_state) {
         }
         break;
       case 'cache_options':
-        $cache = $this->getOption('cache');
         $plugin = $this->getPlugin('cache');
         $form['#title'] .= t('Caching options');
         if ($plugin) {
           $form['cache_options'] = array(
             '#tree' => TRUE,
           );
-          $form['cache_options']['type'] = array(
-            '#type' => 'value',
-            '#value' => $cache['type'],
-          );
           $plugin->buildOptionsForm($form['cache_options'], $form_state);
         }
         break;
@@ -1609,20 +1568,21 @@ public function buildOptionsForm(&$form, &$form_state) {
           $form['field_language']['#markup'] = t("You don't have translatable entity types.");
         }
         break;
-      case 'style_plugin':
+      case 'style':
         $form['#title'] .= t('How should this view be styled');
         $form['style_plugin'] =  array(
           '#type' => 'radios',
           '#options' => views_fetch_plugin_names('style', $this->getStyleType(), array($this->view->storage->base_table)),
-          '#default_value' => $this->getOption('style_plugin'),
+          '#default_value' => $style['type'],
           '#description' => t('If the style you choose has settings, be sure to click the settings button that will appear next to it in the View summary.'),
         );
 
-        $name = $this->getOption('style_plugin');
-        $style_plugin = $this->getPlugin('style', $name);
+        $style_plugin = $this->getPlugin('style', $style['type']);
         if ($style_plugin->usesOptions()) {
           $form['markup'] = array(
-            '#markup' => '<div class="form-item description">' . t('You may also adjust the !settings for the currently selected style.', array('!settings' => $this->optionLink(t('settings'), 'style_options'))) . '</div>',
+            '#prefix' => '<div class="form-item description">',
+            '#suffix' => '</div>',
+            '#markup' => t('You may also adjust the !settings for the currently selected style.', array('!settings' => $this->optionLink(t('settings'), 'style_options'))),
           );
         }
 
@@ -1630,19 +1590,19 @@ public function buildOptionsForm(&$form, &$form_state) {
       case 'style_options':
         $form['#title'] .= t('Style options');
         $style = TRUE;
-        $type = 'style_plugin';
-        $name = $this->getOption('style_plugin');
+        $style_plugin = $this->getOption('style');
+        $name = $style_plugin['type'];
 
       case 'row_options':
         if (!isset($name)) {
-          $name = $this->getOption('row_plugin');
+          $row_plugin = $this->getOption('row');
+          $name = $row_plugin['type'];
         }
         // if row, $style will be empty.
         if (empty($style)) {
           $form['#title'] .= t('Row style options');
-          $type = 'row_plugin';
         }
-        $plugin = $this->getPlugin(empty($style) ? 'row' : 'style');
+        $plugin = $this->getPlugin(empty($style) ? 'row' : 'style', $name);
         if ($plugin) {
           $form[$form_state['section']] = array(
             '#tree' => TRUE,
@@ -1650,19 +1610,20 @@ public function buildOptionsForm(&$form, &$form_state) {
           $plugin->buildOptionsForm($form[$form_state['section']], $form_state);
         }
         break;
-      case 'row_plugin':
+      case 'row':
         $form['#title'] .= t('How should each row in this view be styled');
         $form['row_plugin'] =  array(
           '#type' => 'radios',
           '#options' => views_fetch_plugin_names('row', $this->getStyleType(), array($this->view->storage->base_table)),
-          '#default_value' => $this->getOption('row_plugin'),
+          '#default_value' => $row['type'],
         );
 
-        $name = $this->getOption('row_plugin');
-        $row_plugin = $this->getPlugin('row', $name);
-        if ($row_plugin->usesOptions()) {
+        $row_plugin_instance = $this->getPlugin('row', $row['type']);
+        if ($row_plugin_instance->usesOptions()) {
           $form['markup'] = array(
-            '#markup' => '<div class="form-item description">' . t('You may also adjust the !settings for the currently selected row style.', array('!settings' => $this->optionLink(t('settings'), 'row_options'))) . '</div>',
+            '#prefix' => '<div class="form-item description">',
+            '#suffix' => '</div>',
+            '#markup' => t('You may also adjust the !settings for the currently selected row style.', array('!settings' => $this->optionLink(t('settings'), 'row_options'))),
           );
         }
 
@@ -2128,7 +2089,7 @@ public function validateOptionsForm(&$form, &$form_state) {
           }
 
           foreach ($this->view->display as $id => $display) {
-            if ($id != $this->view->current_display && ($form_state['values']['display_id'] == $id || (isset($display['new_id']) && $form_state['values']['display_id'] == $display['new_id']))) {
+            if ($id != $this->view->current_display && ($form_state['values']['display_id'] == $id || (isset($display->new_id) && $form_state['values']['display_id'] == $display->new_id))) {
               form_error($form['display_id'], t('Display id should be unique.'));
             }
           }
@@ -2216,10 +2177,12 @@ public function submitOptionsForm(&$form, &$form_state) {
 
         break;
       case 'access_options':
-        $plugin = views_get_plugin('access', $form_state['values'][$section]['type']);
+        $plugin = $this->getPlugin('access');
         if ($plugin) {
+          $access = $this->getOption('access');
           $plugin->submitOptionsForm($form['access_options'], $form_state);
-          $this->setOption('access', $form_state['values'][$section]);
+          $access['options'] = $form_state['values'][$section];
+          $this->setOption('access', $access);
         }
         break;
       case 'cache':
@@ -2237,10 +2200,12 @@ public function submitOptionsForm(&$form, &$form_state) {
 
         break;
       case 'cache_options':
-        $plugin = views_get_plugin('cache', $form_state['values'][$section]['type']);
+        $plugin = $this->getPlugin('cache');
         if ($plugin) {
+          $cache = $this->getOption('cache');
           $plugin->submitOptionsForm($form['cache_options'], $form_state);
-          $this->setOption('cache', $form_state['values'][$section]);
+          $cache['options'] = $form_state['values'][$section];
+          $this->setOption('cache', $cache);
         }
         break;
       case 'query':
@@ -2277,14 +2242,15 @@ public function submitOptionsForm(&$form, &$form_state) {
       case 'group_by':
         $this->setOption($section, $form_state['values'][$section]);
         break;
-      case 'row_plugin':
+      case 'row':
         // This if prevents resetting options to default if they don't change
         // the plugin.
-        if ($this->getOption($section) != $form_state['values'][$section]) {
-          $plugin = views_get_plugin('row', $form_state['values'][$section]);
+        $row = $this->getOption('row');
+        if ($row['type'] != $form_state['values'][$section]['type']) {
+          $plugin = views_get_plugin('row', $form_state['values'][$section]['type']);
           if ($plugin) {
-            $this->setOption($section, $form_state['values'][$section]);
-            $this->setOption('row_options', array());
+            $row = array('type' => $form_state['values'][$section]['type']);
+            $this->setOption($section, $row);
 
             // send ajax form to options page if we use it.
             if ($plugin->usesOptions()) {
@@ -2293,14 +2259,15 @@ public function submitOptionsForm(&$form, &$form_state) {
           }
         }
         break;
-      case 'style_plugin':
+      case 'style':
         // This if prevents resetting options to default if they don't change
         // the plugin.
-        if ($this->getOption($section) != $form_state['values'][$section]) {
-          $plugin = views_get_plugin('style', $form_state['values'][$section]);
+        $style = $this->getOption('style');
+        if ($style['type'] != $form_state['values'][$section]['type']) {
+          $plugin = views_get_plugin('style', $form_state['values'][$section]['type']);
           if ($plugin) {
-            $this->setOption($section, $form_state['values'][$section]);
-            $this->setOption('style_options', array());
+            $row = array('type' => $form_state['values'][$section]['type']);
+            $this->setOption($section, $row);
             // send ajax form to options page if we use it.
             if ($plugin->usesOptions()) {
               views_ui_add_form_to_stack('display', $this->view, $this->display['id'], array('style_options'));
@@ -2309,14 +2276,22 @@ public function submitOptionsForm(&$form, &$form_state) {
         }
         break;
       case 'style_options':
-        $style = TRUE;
+        $plugin = $this->getPlugin('style');
+        if ($plugin) {
+          $style = $this->getOption('style');
+          $plugin->submitOptionsForm($form['style_options'], $form_state);
+          $style['options'] = $form_state['values'][$section];
+          $this->setOption('style', $style);
+        }
+        break;
       case 'row_options':
-        // if row, $style will be empty.
-        $plugin = $this->getPlugin(empty($style) ? 'row' : 'style');
+        $plugin = $this->getPlugin('row');
         if ($plugin) {
-          $plugin->submitOptionsForm($form['options'][$section], $form_state);
+          $row = $this->getOption('row');
+          $plugin->submitOptionsForm($form['row_options'], $form_state);
+          $row['options'] = $form_state['values'][$section];
+          $this->setOption('row', $row);
         }
-        $this->setOption($section, $form_state['values'][$section]);
         break;
       case 'exposed_block':
         $this->setOption($section, (bool) $form_state['values'][$section]);
diff --git a/lib/Drupal/views/Plugin/views/display/Feed.php b/lib/Drupal/views/Plugin/views/display/Feed.php
index dbc2ab38a99eec8efd8fc8c66edf3d14d906d329..5b9de864066422f60880ba294eeeeb87886baf31 100644
--- a/lib/Drupal/views/Plugin/views/display/Feed.php
+++ b/lib/Drupal/views/Plugin/views/display/Feed.php
@@ -52,8 +52,8 @@ public function init(ViewExecutable $view, &$display, $options = NULL) {
     // which we don't know until init().
     $row_plugins = views_fetch_plugin_names('row', $this->getStyleType(), array($view->storage->base_table));
     $default_row_plugin = key($row_plugins);
-    if ($this->options['row_plugin'] == '') {
-      $this->options['row_plugin'] = $default_row_plugin;
+    if (empty($this->options['row']['type'])) {
+      $this->options['row']['type'] = $default_row_plugin;
     }
   }
 
@@ -92,7 +92,7 @@ public function render() {
   }
 
   public function defaultableSections($section = NULL) {
-    if (in_array($section, array('style_options', 'style_plugin', 'row_options', 'row_plugin'))) {
+    if (in_array($section, array('style', 'row'))) {
       return FALSE;
     }
 
@@ -114,14 +114,12 @@ protected function defineOptions() {
     $options['displays'] = array('default' => array());
 
     // Overrides for standard stuff:
-    $options['style_plugin']['default'] = 'rss';
-    $options['style_options']['default']  = array('description' => '');
+    $options['style']['contains']['type']['default'] = 'rss';
+    $options['style']['contains']['options']['default']  = array('description' => '');
     $options['sitename_title']['default'] = FALSE;
-    $options['row_plugin']['default'] = '';
-    $options['defaults']['default']['style_plugin'] = FALSE;
-    $options['defaults']['default']['style_options'] = FALSE;
-    $options['defaults']['default']['row_plugin'] = FALSE;
-    $options['defaults']['default']['row_options'] = FALSE;
+    $options['row']['contains']['type']['default'] = '';
+    $options['defaults']['default']['style'] = FALSE;
+    $options['defaults']['default']['row'] = FALSE;
 
     return $options;
   }
diff --git a/lib/Drupal/views/Plugin/views/row/RowPluginBase.php b/lib/Drupal/views/Plugin/views/row/RowPluginBase.php
index 2e6348e8acfcf5aa88c5a59654c5c331bd368e9c..2e4fe83f0efa9d8adfc4799126268bdecd9ad6cd 100644
--- a/lib/Drupal/views/Plugin/views/row/RowPluginBase.php
+++ b/lib/Drupal/views/Plugin/views/row/RowPluginBase.php
@@ -47,8 +47,8 @@ public function init(ViewExecutable $view, &$display, $options = NULL) {
     $this->view = &$view;
     $this->displayHandler = &$display;
 
-    // Overlay incoming options on top of defaults.
-      $this->unpackOptions($this->options, isset($options) ? $options : $display->getOption('row_options'));
+    // Overlay incoming options on top of defaults
+    $this->unpackOptions($this->options, $options);
   }
 
   /**
diff --git a/lib/Drupal/views/Plugin/views/style/StylePluginBase.php b/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
index 4bcc5a08b534290c616a74d6cdb66dea6e1849a2..8f110673c92d037f4427c3065df5c2ef05a81039 100644
--- a/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
+++ b/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
@@ -95,10 +95,9 @@ public function init(ViewExecutable $view, &$display, $options = NULL) {
     $this->view = &$view;
     $this->displayHandler = &$display;
 
-    // Overlay incoming options on top of defaults
-    $this->unpackOptions($this->options, isset($options) ? $options : $display->getOption('style_options'));
+    $this->unpackOptions($this->options, $options);
 
-    if ($this->usesRowPlugin() && $display->getOption('row_plugin')) {
+    if ($this->usesRowPlugin() && $display->getOption('row')) {
       $this->row_plugin = $display->getPlugin('row');
     }
 
diff --git a/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php b/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php
index add64cea14e6ba8b0e4168641a6af3dc2952a119..d62f7edf1904a13bc1b4aa35b9c9d34c4a18cbe0 100644
--- a/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php
+++ b/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php
@@ -609,7 +609,7 @@ protected function build_display_options($form, $form_state) {
   protected function alter_display_options(&$display_options, $form, $form_state) {
     foreach ($display_options as $display_type => $options) {
       // Allow style plugins to hook in and provide some settings.
-      $style_plugin = views_get_plugin('style', $options['style_plugin']);
+      $style_plugin = views_get_plugin('style', $options['style']['type']);
       $style_plugin->wizard_submit($form, $form_state, $this, $display_options, $display_type);
     }
   }
@@ -669,8 +669,8 @@ protected function default_display_options() {
     $display_options['query']['type'] = 'views_query';
     $display_options['exposed_form']['type'] = 'basic';
     $display_options['pager']['type'] = 'full';
-    $display_options['style_plugin'] = 'default';
-    $display_options['row_plugin'] = 'fields';
+    $display_options['style']['type'] = 'default';
+    $display_options['row']['type'] = 'fields';
 
     // Add a least one field so the view validates and the user has a preview.
     // The base field can provide a default in its base settings; otherwise,
@@ -856,7 +856,6 @@ protected function default_display_sorts_user($form, $form_state) {
     return $sorts;
   }
 
-
   /**
    * Retrieves the page display options.
    *
@@ -873,11 +872,11 @@ protected function page_display_options(array $form, array &$form_state) {
     $page = $form_state['values']['page'];
     $display_options['title'] = $page['title'];
     $display_options['path'] = $page['path'];
-    $display_options['style_plugin'] = $page['style']['style_plugin'];
+    $display_options['style'] = array('type' => $page['style']['style_plugin']);
     // Not every style plugin supports row style plugins.
     // Make sure that the selected row plugin is a valid one.
     $options = $this->row_style_options();
-    $display_options['row_plugin'] = (isset($page['style']['row_plugin']) && isset($options[$page['style']['row_plugin']])) ? $page['style']['row_plugin'] : 'fields';
+    $display_options['row'] = array('type' => (isset($page['style']['row_plugin']) && isset($options[$page['style']['row_plugin']])) ? $page['style']['row_plugin'] : 'fields');
 
     // If the specific 0 items per page, use no pager.
     if (empty($page['items_per_page'])) {
@@ -918,8 +917,8 @@ protected function block_display_options(array $form, array &$form_state) {
     $display_options = array();
     $block = $form_state['values']['block'];
     $display_options['title'] = $block['title'];
-    $display_options['style_plugin'] = $block['style']['style_plugin'];
-    $display_options['row_plugin'] = isset($block['style']['row_plugin']) ? $block['style']['row_plugin'] : 'fields';
+    $display_options['style'] = array('type' => $block['style']['style_plugin']);
+    $display_options['row'] = array('type' => isset($block['style']['row_plugin']) ? $block['style']['row_plugin'] : 'fields');
     $display_options['pager']['type'] = $block['pager'] ? 'full' : (empty($block['items_per_page']) ? 'none' : 'some');
     $display_options['pager']['options']['items_per_page'] = $block['items_per_page'];
     return $display_options;
@@ -939,8 +938,8 @@ protected function block_display_options(array $form, array &$form_state) {
   protected function page_feed_display_options($form, $form_state) {
     $display_options = array();
     $display_options['pager']['type'] = 'some';
-    $display_options['style_plugin'] = 'rss';
-    $display_options['row_plugin'] = $form_state['values']['page']['feed_properties']['row_plugin'];
+    $display_options['style'] = array('type' => 'rss');
+    $display_options['row'] = array('type' => $form_state['values']['page']['feed_properties']['row_plugin']);
     $display_options['path'] = $form_state['values']['page']['feed_properties']['path'];
     $display_options['title'] = $form_state['values']['page']['title'];
     $display_options['displays'] = array(
@@ -971,8 +970,6 @@ protected function page_feed_display_options($form, $form_state) {
    */
   protected function setDefaultOptions($options, DisplayPluginBase $display, DisplayPluginBase $default_display) {
     foreach ($options as $option => $value) {
-      // @todo: Wouldn't it be possible to call set_override and set_option
-      //   instead.
       // If the default display supports this option, set the value there.
       // Otherwise, set it on the provided display.
       $default_value = $default_display->getOption($option);
diff --git a/lib/Drupal/views/Tests/Comment/WizardTest.php b/lib/Drupal/views/Tests/Comment/WizardTest.php
index e27339a2d3b0db80c2a480323ca5bd905b4485bd..03d53f6fe172d0d499989be4f423e06ed60e36e0 100644
--- a/lib/Drupal/views/Tests/Comment/WizardTest.php
+++ b/lib/Drupal/views/Tests/Comment/WizardTest.php
@@ -72,7 +72,8 @@ public function testCommentWizard() {
     $view = views_get_view($view['name']);
     $view->initDisplay();
     $view->initHandlers();
-    $this->assertEqual($view->display_handler->getOption('row_plugin'), 'comment');
+    $row = $view->display_handler->getOption('row');
+    $this->assertEqual($row['type'], 'comment');
 
     // Check for the default filters.
     $this->assertEqual($view->filter['status']->table, 'comment');
diff --git a/lib/Drupal/views/Tests/Plugin/AccessTest.php b/lib/Drupal/views/Tests/Plugin/AccessTest.php
index 3eb899b9f1a605674a62685b21e916d0256393cb..1a2d034b4949e8e5efd8ab85e2dd1396ab493976 100644
--- a/lib/Drupal/views/Tests/Plugin/AccessTest.php
+++ b/lib/Drupal/views/Tests/Plugin/AccessTest.php
@@ -69,7 +69,7 @@ function testAccessPerm() {
   function testAccessRole() {
     $view = $this->createViewFromConfig('test_access_role');
 
-    $view->displayHandlers['default']->options['access']['role'] = array(
+    $view->displayHandlers['default']->options['access']['options']['role'] = array(
       $this->normal_role => $this->normal_role,
     );
 
diff --git a/lib/Drupal/views/Tests/Plugin/CacheTest.php b/lib/Drupal/views/Tests/Plugin/CacheTest.php
index 20f98348b662bc3db89eb0962b464face847adb7..683f6302a3b6ebb3c4b44ba2b958b085af0449a2 100644
--- a/lib/Drupal/views/Tests/Plugin/CacheTest.php
+++ b/lib/Drupal/views/Tests/Plugin/CacheTest.php
@@ -88,8 +88,10 @@ function testTimeCaching() {
     $view = $this->getView();
     $view->display_handler->overrideOption('cache', array(
       'type' => 'time',
-      'results_lifespan' => '3600',
-      'output_lifespan' => '3600',
+      'options' => array(
+        'results_lifespan' => '3600',
+        'output_lifespan' => '3600'
+      )
     ));
 
     $this->executeView($view);
@@ -108,8 +110,10 @@ function testTimeCaching() {
     $view = $this->getView();
     $view->display_handler->overrideOption('cache', array(
       'type' => 'time',
-      'results_lifespan' => '3600',
-      'output_lifespan' => '3600',
+      'options' => array(
+        'results_lifespan' => '3600',
+        'output_lifespan' => '3600'
+      )
     ));
 
     $this->executeView($view);
@@ -127,6 +131,7 @@ function testNoneCaching() {
     $view = $this->getView();
     $view->display_handler->overrideOption('cache', array(
       'type' => 'none',
+      'options' => array()
     ));
 
     $this->executeView($view);
@@ -146,6 +151,7 @@ function testNoneCaching() {
     $view = $this->getView();
     $view->display_handler->overrideOption('cache', array(
       'type' => 'none',
+      'options' => array()
     ));
 
     $this->executeView($view);
@@ -164,7 +170,9 @@ function testHeaderStorage() {
     $view->storage->name = 'test_cache_header_storage';
     $view->display_handler->overrideOption('cache', array(
       'type' => 'time',
-      'output_lifespan' => '3600',
+      'options' => array(
+        'output_lifespan' => '3600'
+      )
     ));
 
     $view->preview();
diff --git a/lib/Drupal/views/Tests/Plugin/StyleMappingTest.php b/lib/Drupal/views/Tests/Plugin/StyleMappingTest.php
index 97882922de5544721716860b20e18649c35a857d..d68857a5bcdd443f985d5c8fb6bcca981fde6fa8 100644
--- a/lib/Drupal/views/Tests/Plugin/StyleMappingTest.php
+++ b/lib/Drupal/views/Tests/Plugin/StyleMappingTest.php
@@ -36,7 +36,7 @@ public function testMappedOutput() {
     $this->assertTrue(strpos($output, 'job') === FALSE, 'The job field is added to the view but not in the mapping.');
 
     $view = $this->getView();
-    $view->displayHandlers['default']->options['style_options']['mapping']['name_field'] = 'job';
+    $view->displayHandlers['default']->options['style']['options']['mapping']['name_field'] = 'job';
     $output = $this->mappedOutputHelper($view);
     $this->assertTrue(strpos($output, 'job') !== FALSE, 'The job field is added to the view and is in the mapping.');
   }
diff --git a/lib/Drupal/views/Tests/Plugin/StyleTest.php b/lib/Drupal/views/Tests/Plugin/StyleTest.php
index a6fc58f97908fe72447e48a86c8aad863cefa9e5..1c4f628bbbebd572bd458d12d6517b02e6762766 100644
--- a/lib/Drupal/views/Tests/Plugin/StyleTest.php
+++ b/lib/Drupal/views/Tests/Plugin/StyleTest.php
@@ -29,7 +29,9 @@ public static function getInfo() {
    */
   public function testStyle() {
     $view = $this->getView();
-    $view->display_handler->setOption('style_plugin', 'test_style');
+    $style = $view->display_handler->getOption('style');
+    $style['type'] = 'test_style';
+    $view->display_handler->setOption('style', $style);
     $view->initDisplay();
     $view->initStyle();
     $this->assertTrue($view->style_plugin instanceof \Drupal\views_test_data\Plugin\views\style\StyleTest, 'Make sure the right style plugin class is loaded.');
@@ -43,8 +45,12 @@ public function testStyle() {
 
     // This run use the test row plugin and render with it.
     $view = $this->getView();
-    $view->display_handler->setOption('style_plugin', 'test_style');
-    $view->display_handler->setOption('row_plugin', 'test_row');
+    $style = $view->display_handler->getOption('style');
+    $style['type'] = 'test_style';
+    $view->display_handler->setOption('style', $style);
+    $row = $view->display_handler->getOption('row');
+    $row['type'] = 'test_row';
+    $view->display_handler->setOption('row', $row);
     $view->initDisplay();
     $view->initStyle();
     $view->style_plugin->setUsesRowPlugin(TRUE);
diff --git a/lib/Drupal/views/ViewExecutable.php b/lib/Drupal/views/ViewExecutable.php
index 685783153ec06b1926cc666f8e7cdbedebb922e1..4639ca938ba2ba7039f1be141bd27ff5823cca0d 100644
--- a/lib/Drupal/views/ViewExecutable.php
+++ b/lib/Drupal/views/ViewExecutable.php
@@ -787,8 +787,9 @@ public function initStyle() {
     }
 
     if (!isset($this->plugin_name)) {
-      $this->plugin_name = $this->display_handler->getOption('style_plugin');
-      $this->style_options = $this->display_handler->getOption('style_options');
+      $style = $this->display_handler->getOption('style');
+      $this->plugin_name = $style['type'];
+      $this->style_options = $style['options'];
     }
 
     $this->style_plugin = views_get_plugin('style', $this->plugin_name);
diff --git a/lib/Views/comment/Plugin/views/wizard/Comment.php b/lib/Views/comment/Plugin/views/wizard/Comment.php
index 1171de935d6357ca01c34825362b288f9b6f6f82..dd67c520e329715b4d6bce41d6f596899d46d070 100644
--- a/lib/Views/comment/Plugin/views/wizard/Comment.php
+++ b/lib/Views/comment/Plugin/views/wizard/Comment.php
@@ -127,8 +127,8 @@ protected function block_display_options(array $form, array &$form_state) {
   protected  function display_options_row(&$display_options, $row_plugin, $row_options) {
     switch ($row_plugin) {
       case 'comment':
-        $display_options['row_plugin'] = 'comment';
-        $display_options['row_options']['links'] = !empty($row_options['links']);
+        $display_options['row']['type'] = 'comment';
+        $display_options['row']['options']['links'] = !empty($row_options['links']);
         break;
     }
   }
diff --git a/lib/Views/node/Plugin/views/wizard/Node.php b/lib/Views/node/Plugin/views/wizard/Node.php
index 979cb4a39db62d4cb72dee97ff444c14bda4d68b..74da6acb377113b375d3ce6a54644582fbe488a6 100644
--- a/lib/Views/node/Plugin/views/wizard/Node.php
+++ b/lib/Views/node/Plugin/views/wizard/Node.php
@@ -219,23 +219,23 @@ protected function block_display_options(array $form, array &$form_state) {
   protected  function display_options_row(&$display_options, $row_plugin, $row_options) {
     switch ($row_plugin) {
       case 'full_posts':
-        $display_options['row_plugin'] = 'node';
-        $display_options['row_options']['build_mode'] = 'full';
-        $display_options['row_options']['links'] = !empty($row_options['links']);
-        $display_options['row_options']['comments'] = !empty($row_options['comments']);
+        $display_options['row']['type'] = 'node';
+        $display_options['row']['options']['build_mode'] = 'full';
+        $display_options['row']['options']['links'] = !empty($row_options['links']);
+        $display_options['row']['options']['comments'] = !empty($row_options['comments']);
         break;
       case 'teasers':
-        $display_options['row_plugin'] = 'node';
-        $display_options['row_options']['build_mode'] = 'teaser';
-        $display_options['row_options']['links'] = !empty($row_options['links']);
-        $display_options['row_options']['comments'] = !empty($row_options['comments']);
+        $display_options['row']['type'] = 'node';
+        $display_options['row']['options']['build_mode'] = 'teaser';
+        $display_options['row']['options']['links'] = !empty($row_options['links']);
+        $display_options['row']['options']['comments'] = !empty($row_options['comments']);
         break;
       case 'titles_linked':
-        $display_options['row_plugin'] = 'fields';
+        $display_options['row']['type'] = 'fields';
         $display_options['field']['title']['link_to_node'] = 1;
         break;
       case 'titles':
-        $display_options['row_plugin'] = 'fields';
+        $display_options['row']['type'] = 'fields';
         $display_options['field']['title']['link_to_node'] = 0;
         break;
     }
diff --git a/tests/views_test_config/config/views.view.test_access_none.yml b/tests/views_test_config/config/views.view.test_access_none.yml
index f40fbf0be1a0636424f1bf3eaf9db64c0281bc33..79019ef9f79c59a3e092fea1254c173a45e7f71c 100644
--- a/tests/views_test_config/config/views.view.test_access_none.yml
+++ b/tests/views_test_config/config/views.view.test_access_none.yml
@@ -14,8 +14,10 @@ display:
         type: basic
       pager:
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_access_perm.yml b/tests/views_test_config/config/views.view.test_access_perm.yml
index 09064e27d5daad9fd2536ebb46793d49a6551f16..f509323b434483bae2d11ad8e7a0f6f7fbb8adc8 100644
--- a/tests/views_test_config/config/views.view.test_access_perm.yml
+++ b/tests/views_test_config/config/views.view.test_access_perm.yml
@@ -7,16 +7,19 @@ display:
   default:
     display_options:
       access:
-        perm: 'views_test_data test permission'
         type: perm
+        options:
+          perm: 'views_test_data test permission'
       cache:
         type: none
       exposed_form:
         type: basic
       pager:
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_access_role.yml b/tests/views_test_config/config/views.view.test_access_role.yml
index 2ac737a8d27645a388e29b972fd1a77e0224eb7a..3d2b4d98fd46b20914aa65a427b1c9979ee3541f 100644
--- a/tests/views_test_config/config/views.view.test_access_role.yml
+++ b/tests/views_test_config/config/views.view.test_access_role.yml
@@ -14,8 +14,10 @@ display:
         type: basic
       pager:
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_aggregate_count.yml b/tests/views_test_config/config/views.view.test_aggregate_count.yml
index ce2a72587c58af3da5b2ad777ee68b392b5b234a..7a4224790a48a61728f056aafc6921d45e744e21 100644
--- a/tests/views_test_config/config/views.view.test_aggregate_count.yml
+++ b/tests/views_test_config/config/views.view.test_aggregate_count.yml
@@ -44,8 +44,10 @@ display:
         options:
           query_comment: '0'
         type: views_query
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_argument_default_fixed.yml b/tests/views_test_config/config/views.view.test_argument_default_fixed.yml
index a0a4e57c2d4596a2cec68affd2bb43e420898bca..061b2097c627eb91a0b8102f42376015f7a63503 100644
--- a/tests/views_test_config/config/views.view.test_argument_default_fixed.yml
+++ b/tests/views_test_config/config/views.view.test_argument_default_fixed.yml
@@ -43,8 +43,10 @@ display:
           items_per_page: '10'
           offset: '0'
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_comment_user_uid.yml b/tests/views_test_config/config/views.view.test_comment_user_uid.yml
index babe7fae54a947b4c42bb3a839584096d0943972..4dca1cd32d7a30d68ac627898769ade1de50cbf1 100644
--- a/tests/views_test_config/config/views.view.test_comment_user_uid.yml
+++ b/tests/views_test_config/config/views.view.test_comment_user_uid.yml
@@ -35,8 +35,10 @@ display:
         options:
           query_comment: '0'
         type: views_query
-      row_plugin: node
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: node
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_destroy.yml b/tests/views_test_config/config/views.view.test_destroy.yml
index 16a4c4b3f1f9f47e8dc30690fd4a048807b6c345..a28c6b11550143644e0b8a7420fd20c9cefae2ce 100644
--- a/tests/views_test_config/config/views.view.test_destroy.yml
+++ b/tests/views_test_config/config/views.view.test_destroy.yml
@@ -131,7 +131,6 @@ display:
           id: uid
           table: comment
           relationship: cid
-      row_plugin: fields
       sorts:
         last_comment_name:
           field: last_comment_name
@@ -141,7 +140,10 @@ display:
           field: last_comment_timestamp
           id: last_comment_timestamp
           table: node_comment_statistics
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_field_get_entity.yml b/tests/views_test_config/config/views.view.test_field_get_entity.yml
index 269b4b23519ada86400745fd6768dd8aeac29845..5ba2fc94b078237dc57c53c858f17fa214ccd315 100644
--- a/tests/views_test_config/config/views.view.test_field_get_entity.yml
+++ b/tests/views_test_config/config/views.view.test_field_get_entity.yml
@@ -50,9 +50,11 @@ display:
           relationship: nid
           required: '0'
           table: node
-      row_plugin: fields
       sorts: {  }
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
@@ -60,4 +62,3 @@ display:
 human_name: test_field_get_entity
 name: test_field_get_entity
 tag: default
-
diff --git a/tests/views_test_config/config/views.view.test_field_tokens.yml b/tests/views_test_config/config/views.view.test_field_tokens.yml
index 62f37e06037ab8f21ec159d644e5a9d9e20f26de..01431a6b702f9d62f5998b529f3313733f6b575a 100644
--- a/tests/views_test_config/config/views.view.test_field_tokens.yml
+++ b/tests/views_test_config/config/views.view.test_field_tokens.yml
@@ -16,8 +16,6 @@ display:
         type: full
       query:
         type: views_query
-      row_plugin: fields
-      style_plugin: default
       fields:
         name:
           id: name
@@ -35,6 +33,10 @@ display:
           id: job
           table: views_test_data
           field: job
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Defaults
     id: default
diff --git a/tests/views_test_config/config/views.view.test_filter_date_between.yml b/tests/views_test_config/config/views.view.test_filter_date_between.yml
index a2a268a35d5444ba011f7f4e75ae2bad4d535e7f..71f4b2f256598c5ccaed069cca562752307ee149 100644
--- a/tests/views_test_config/config/views.view.test_filter_date_between.yml
+++ b/tests/views_test_config/config/views.view.test_filter_date_between.yml
@@ -28,8 +28,10 @@ display:
         options:
           query_comment: '0'
         type: views_query
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_filter_group_override.yml b/tests/views_test_config/config/views.view.test_filter_group_override.yml
index 639edb709414486f7cca95eb2b8a0dcdc4346a53..379eff630c846088598cf66f2c5867c9dfda978c 100644
--- a/tests/views_test_config/config/views.view.test_filter_group_override.yml
+++ b/tests/views_test_config/config/views.view.test_filter_group_override.yml
@@ -34,8 +34,10 @@ display:
         type: full
       query:
         type: views_query
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_filter_groups.yml b/tests/views_test_config/config/views.view.test_filter_groups.yml
index ecc4fde2c5a46c7094b4056f1b6c7cc7f43ba546..d71c02e1c809abc81ec08fc99379a69436f9e36b 100644
--- a/tests/views_test_config/config/views.view.test_filter_groups.yml
+++ b/tests/views_test_config/config/views.view.test_filter_groups.yml
@@ -54,15 +54,17 @@ display:
         type: full
       query:
         type: views_query
-      row_plugin: node
       sorts:
         created:
           field: created
           id: created
           order: DESC
           table: node
-      style_plugin: default
       title: test_filter_groups
+      style:
+        type: default
+      row:
+        type: node
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_filter_node_uid_revision.yml b/tests/views_test_config/config/views.view.test_filter_node_uid_revision.yml
index 39007b817a3d35c1fb123da771791614aa7cbf6b..69000ec69d19337ed316c911ad1ee502b16d83e0 100644
--- a/tests/views_test_config/config/views.view.test_filter_node_uid_revision.yml
+++ b/tests/views_test_config/config/views.view.test_filter_node_uid_revision.yml
@@ -32,19 +32,15 @@ display:
           table: node
           value:
             - '1'
-      sorts:
-        nid:
-          id: nid
-          table: node
-          field: nid
-          order: asc
+      sorts: {  }
       pager:
         type: full
       query:
         type: views_query
-      row_plugin: fields
-      sorts: {  }
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_glossary.yml b/tests/views_test_config/config/views.view.test_glossary.yml
index 648972fd9aff1a2495da4449464f6f9ac67c7a9c..33045e575a7ab3dd0c2a3dc8ed5ee8b2a1a121c3 100644
--- a/tests/views_test_config/config/views.view.test_glossary.yml
+++ b/tests/views_test_config/config/views.view.test_glossary.yml
@@ -35,8 +35,10 @@ display:
         type: full
       query:
         type: views_query
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_group_by_count.yml b/tests/views_test_config/config/views.view.test_group_by_count.yml
index ae3fe63cbe6251ca7c5182aa172e599073ccb563..7ea0ab80c7d6a0658a2716d4ecd21a5b63ef6fb4 100644
--- a/tests/views_test_config/config/views.view.test_group_by_count.yml
+++ b/tests/views_test_config/config/views.view.test_group_by_count.yml
@@ -47,8 +47,10 @@ display:
       group_by: '1'
       pager:
         type: some
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_group_by_in_filters.yml b/tests/views_test_config/config/views.view.test_group_by_in_filters.yml
index e7fb952d5d9b17aad36fd50ee73ceb5a5d975f3c..c494b095e9eaadcac3ef6557916c68c50f2253de 100644
--- a/tests/views_test_config/config/views.view.test_group_by_in_filters.yml
+++ b/tests/views_test_config/config/views.view.test_group_by_in_filters.yml
@@ -40,8 +40,10 @@ display:
       group_by: '1'
       pager:
         type: some
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_pager_full.yml b/tests/views_test_config/config/views.view.test_pager_full.yml
index 74b85a4d447f786eb78fd01f4d281edbc3e1714d..08be354c67c0985333a33627e90eef8c1b7eedc9 100644
--- a/tests/views_test_config/config/views.view.test_pager_full.yml
+++ b/tests/views_test_config/config/views.view.test_pager_full.yml
@@ -18,8 +18,10 @@ display:
           items_per_page: '5'
           offset: '0'
         type: full
-      row_plugin: node
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: node
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_pager_none.yml b/tests/views_test_config/config/views.view.test_pager_none.yml
index b77148473c9ffa1244e5347771646d7b2fab9b40..7b2031611986427d67d82185b73ca64a17745e1e 100644
--- a/tests/views_test_config/config/views.view.test_pager_none.yml
+++ b/tests/views_test_config/config/views.view.test_pager_none.yml
@@ -14,8 +14,10 @@ display:
         type: basic
       pager:
         type: none
-      row_plugin: node
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: node
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_pager_some.yml b/tests/views_test_config/config/views.view.test_pager_some.yml
index cffa993f73fa34f824782b5222925b246243732d..d9ecda50f46b0446f1d88709a18a2b5e6878c50d 100644
--- a/tests/views_test_config/config/views.view.test_pager_some.yml
+++ b/tests/views_test_config/config/views.view.test_pager_some.yml
@@ -17,8 +17,10 @@ display:
           items_per_page: '5'
           offset: '0'
         type: some
-      row_plugin: node
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: node
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_plugin_argument_default_current_user.yml b/tests/views_test_config/config/views.view.test_plugin_argument_default_current_user.yml
index 7a713ae40ca4e5869e535f7192da96207b5d7e0a..54180b6612d7a2d1c6242759d0333da54e1bd910 100644
--- a/tests/views_test_config/config/views.view.test_plugin_argument_default_current_user.yml
+++ b/tests/views_test_config/config/views.view.test_plugin_argument_default_current_user.yml
@@ -43,8 +43,10 @@ display:
           items_per_page: '10'
           offset: '0'
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_store_pager_settings.yml b/tests/views_test_config/config/views.view.test_store_pager_settings.yml
index f8852559679d983ca6f964a730a8fc85bdaa3938..0c4acfe11cb168f6f067894b0eb5cbfda165084f 100644
--- a/tests/views_test_config/config/views.view.test_store_pager_settings.yml
+++ b/tests/views_test_config/config/views.view.test_store_pager_settings.yml
@@ -14,8 +14,10 @@ display:
         type: basic
       pager:
         type: none
-      row_plugin: node
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: node
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_taxonomy_node_term_data.yml b/tests/views_test_config/config/views.view.test_taxonomy_node_term_data.yml
index b3e4ef55a7de0443710d04e9757c5b52836377ab..2cecd63a4d6cba0a24cd4cf814314d341ead0020 100644
--- a/tests/views_test_config/config/views.view.test_taxonomy_node_term_data.yml
+++ b/tests/views_test_config/config/views.view.test_taxonomy_node_term_data.yml
@@ -54,8 +54,10 @@ display:
           table: node
           vocabularies:
             tags: '0'
-      row_plugin: node
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: node
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_user_relationship.yml b/tests/views_test_config/config/views.view.test_user_relationship.yml
new file mode 100644
index 0000000000000000000000000000000000000000..096fa1624218a849d68e55aa88ea08523c8a5fe6
--- /dev/null
+++ b/tests/views_test_config/config/views.view.test_user_relationship.yml
@@ -0,0 +1,102 @@
+api_version: '3.0'
+base_table: node
+core: '8'
+description: ''
+disabled: '0'
+display:
+  default:
+    display_options:
+      access:
+        type: perm
+      cache:
+        type: none
+      exposed_form:
+        type: basic
+      fields:
+        name:
+          alter:
+            absolute: '0'
+            alter_text: '0'
+            ellipsis: '1'
+            external: '0'
+            html: '0'
+            make_link: '0'
+            nl2br: '0'
+            replace_spaces: '0'
+            strip_tags: '0'
+            trim: '0'
+            trim_whitespace: '0'
+            word_boundary: '1'
+          element_default_classes: '1'
+          element_label_colon: '1'
+          empty_zero: '0'
+          field: name
+          hide_alter_empty: '0'
+          hide_empty: '0'
+          id: name
+          link_to_user: '1'
+          overwrite_anonymous: '0'
+          table: users
+        title:
+          alter:
+            absolute: '0'
+            alter_text: '0'
+            ellipsis: '0'
+            html: '0'
+            make_link: '0'
+            strip_tags: '0'
+            trim: '0'
+            word_boundary: '0'
+          empty_zero: '0'
+          field: title
+          hide_empty: '0'
+          id: title
+          label: ''
+          link_to_node: '1'
+          table: node
+        uid:
+          alter:
+            absolute: '0'
+            alter_text: '0'
+            ellipsis: '1'
+            external: '0'
+            html: '0'
+            make_link: '0'
+            nl2br: '0'
+            replace_spaces: '0'
+            strip_tags: '0'
+            trim: '0'
+            trim_whitespace: '0'
+            word_boundary: '1'
+          element_default_classes: '1'
+          element_label_colon: '1'
+          empty_zero: '0'
+          field: uid
+          hide_alter_empty: '0'
+          hide_empty: '0'
+          id: uid
+          link_to_user: '1'
+          table: users
+      pager:
+        options:
+          items_per_page: '10'
+        type: full
+      query:
+        options:
+          query_comment: '0'
+        type: views_query
+      title: test_user_relationship
+      style:
+        type: default
+      row:
+        type: fields
+        options:
+          default_field_elements: '1'
+          hide_empty: '0'
+    display_plugin: default
+    display_title: Master
+    id: default
+    position: '0'
+human_name: test_user_relationship
+name: test_user_relationship
+tag: default
diff --git a/tests/views_test_config/config/views.view.test_view_argument_validate_numeric.yml b/tests/views_test_config/config/views.view.test_view_argument_validate_numeric.yml
index 13c4d2c60bbfb53b92c44cc4f500a041683b21df..446aa63bd4b043aa4f13080683c5f93b606d3bc5 100644
--- a/tests/views_test_config/config/views.view.test_view_argument_validate_numeric.yml
+++ b/tests/views_test_config/config/views.view.test_view_argument_validate_numeric.yml
@@ -24,8 +24,10 @@ display:
         type: basic
       pager:
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_view_argument_validate_php.yml b/tests/views_test_config/config/views.view.test_view_argument_validate_php.yml
index 4a0cf1ea909747169871150f2a0661079432de2b..9c81616cd247ffc2c8c821738dcd961e90ade877 100644
--- a/tests/views_test_config/config/views.view.test_view_argument_validate_php.yml
+++ b/tests/views_test_config/config/views.view.test_view_argument_validate_php.yml
@@ -24,8 +24,10 @@ display:
         type: basic
       pager:
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_view_argument_validate_user.yml b/tests/views_test_config/config/views.view.test_view_argument_validate_user.yml
index ac98d9056b2c8e45a1a4340708fd11de0718a5c2..2750f437e4489c83ac872ce9552a8bb1b7ed91b2 100644
--- a/tests/views_test_config/config/views.view.test_view_argument_validate_user.yml
+++ b/tests/views_test_config/config/views.view.test_view_argument_validate_user.yml
@@ -24,8 +24,10 @@ display:
         type: basic
       pager:
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_view_delete.yml b/tests/views_test_config/config/views.view.test_view_delete.yml
index 7b19ccfc25e2c4c0460bb3af3b5f15ca0979f7f5..ca28db84c29d8d7aea603b03ba93e9d0c6610748 100644
--- a/tests/views_test_config/config/views.view.test_view_delete.yml
+++ b/tests/views_test_config/config/views.view.test_view_delete.yml
@@ -16,8 +16,10 @@ display:
         type: full
       query:
         type: views_query
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Defaults
     id: default
diff --git a/tests/views_test_config/config/views.view.test_view_fieldapi.yml b/tests/views_test_config/config/views.view.test_view_fieldapi.yml
index 0d9acbb7cc684e875d6f6a0859520c145bb2b966..fe2ecc0b4458f8c3193bc4ab0d50d9d3ddd13968 100644
--- a/tests/views_test_config/config/views.view.test_view_fieldapi.yml
+++ b/tests/views_test_config/config/views.view.test_view_fieldapi.yml
@@ -17,17 +17,14 @@ display:
         type: none
       exposed_form:
         type: basic
-      fields:
-        nid:
-          field: nid
-          id: nid
-          table: node
       pager:
         type: full
       query:
         type: views_query
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
@@ -35,4 +32,3 @@ display:
 human_name: test_view_fieldapi
 name: test_view_fieldapi
 tag: default
-
diff --git a/tests/views_test_config/config/views.view.test_view_pager_full_zero_items_per_page.yml b/tests/views_test_config/config/views.view.test_view_pager_full_zero_items_per_page.yml
index b0dc441e0a55974aeb39ba353edeab5fb75f57ad..5b909ea4c626656e1b2c7e49c7887d62262649bc 100644
--- a/tests/views_test_config/config/views.view.test_view_pager_full_zero_items_per_page.yml
+++ b/tests/views_test_config/config/views.view.test_view_pager_full_zero_items_per_page.yml
@@ -34,8 +34,10 @@ display:
           items_per_page: '0'
           offset: '0'
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_config/config/views.view.test_views_handler_field_user_name.yml b/tests/views_test_config/config/views.view.test_views_handler_field_user_name.yml
index b3f17187d9f71fcc7d7fcc3a4a7697718c0bca9e..48522e05f15dac1115fad815dca48d27d696b285 100644
--- a/tests/views_test_config/config/views.view.test_views_handler_field_user_name.yml
+++ b/tests/views_test_config/config/views.view.test_views_handler_field_user_name.yml
@@ -37,8 +37,10 @@ display:
         options:
           query_comment: '0'
         type: views_query
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_access_dynamic.yml b/tests/views_test_data/config/views.view.test_access_dynamic.yml
index 8b40c46f22ad607c6260573745d97047f3eeb8fd..a78537d44b272b14d251228ff8cd33195af4bce3 100644
--- a/tests/views_test_data/config/views.view.test_access_dynamic.yml
+++ b/tests/views_test_data/config/views.view.test_access_dynamic.yml
@@ -14,8 +14,10 @@ display:
         type: basic
       pager:
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_access_static.yml b/tests/views_test_data/config/views.view.test_access_static.yml
index c76e541cda1ce4b76121282ac53d08853192d777..cd3a94c5df093bd1c77d7f3e1d34bb454922164a 100644
--- a/tests/views_test_data/config/views.view.test_access_static.yml
+++ b/tests/views_test_data/config/views.view.test_access_static.yml
@@ -14,8 +14,10 @@ display:
         type: basic
       pager:
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_argument_default_current_user.yml b/tests/views_test_data/config/views.view.test_argument_default_current_user.yml
index f28f4ae85d12d9d4d16bdc4f2b6e1a2e0476be93..3cf754dfb7e207e149c0035273b980fd134967d4 100644
--- a/tests/views_test_data/config/views.view.test_argument_default_current_user.yml
+++ b/tests/views_test_data/config/views.view.test_argument_default_current_user.yml
@@ -40,8 +40,10 @@ display:
           items_per_page: '10'
           offset: '0'
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_click_sort.yml b/tests/views_test_data/config/views.view.test_click_sort.yml
index 0a8ff5c5f30e593f0a5644e8d140ea73a3960fb2..8aa2eb247abb9f72865b4ecb60b54a41a839dcaa 100644
--- a/tests/views_test_data/config/views.view.test_click_sort.yml
+++ b/tests/views_test_data/config/views.view.test_click_sort.yml
@@ -24,17 +24,18 @@ display:
           type: none
         cache:
           type: none
-      style_plugin: table
-      style_options:
-        info:
-          id:
-            sortable: 1
-            default_sort_order: asc
-          name:
-            sortable: 1
-            default_sort_order: desc
-          created:
-            sortable: 0
+      style:
+        type: table
+        options:
+          info:
+            id:
+              sortable: 1
+              default_sort_order: asc
+            name:
+              sortable: 1
+              default_sort_order: desc
+            created:
+              sortable: 0
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_exposed_admin_ui.yml b/tests/views_test_data/config/views.view.test_exposed_admin_ui.yml
index d150630e4f43c33c53c9827ed5567f17ff559d8b..d73dfb879751e7f611b728bd7ae49335b659d023 100644
--- a/tests/views_test_data/config/views.view.test_exposed_admin_ui.yml
+++ b/tests/views_test_data/config/views.view.test_exposed_admin_ui.yml
@@ -25,16 +25,18 @@ display:
           table: node
       pager:
         type: full
-      row_options:
-        comments: '0'
-        links: '1'
-      row_plugin: node
       sorts:
         created:
           field: created
           id: created
           table: node
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: node
+        options:
+          comments: '0'
+          links: '1'
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_field_classes.yml b/tests/views_test_data/config/views.view.test_field_classes.yml
index e65f920e93e0a215e9213e768f7be6c84e6cc38f..d2fe5b2a7e0e5bc32932d5bcc2edeab17175a6d3 100644
--- a/tests/views_test_data/config/views.view.test_field_classes.yml
+++ b/tests/views_test_data/config/views.view.test_field_classes.yml
@@ -15,7 +15,8 @@ display:
           id: id
           table: views_test_data
           field: id
-      style_plugin: html_list
+      style:
+        type: html_list
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_field_output.yml b/tests/views_test_data/config/views.view.test_field_output.yml
index f52d30f630bbf86f382eba2881412e64813392ea..6d0d73f10551da4785637c626433b12f61180709 100644
--- a/tests/views_test_data/config/views.view.test_field_output.yml
+++ b/tests/views_test_data/config/views.view.test_field_output.yml
@@ -15,11 +15,12 @@ display:
           id: name
           table: views_test_data
           field: name
-      style_plugin: html_list
+      style:
+        type: html_list
     display_plugin: default
     display_title: Master
     id: default
     position: '0'
-human_name: ""
+human_name: ''
 name: test_field_output
 tag: ''
diff --git a/tests/views_test_data/config/views.view.test_filter.yml b/tests/views_test_data/config/views.view.test_filter.yml
index 99d0dad48c9e0f7723c8a4dee881f56edf2687fe..3f11e837802a3dc73cccf2f7693fa6b5c8ba92a8 100644
--- a/tests/views_test_data/config/views.view.test_filter.yml
+++ b/tests/views_test_data/config/views.view.test_filter.yml
@@ -27,9 +27,11 @@ display:
           table: views_test_data
       query:
         type: views_query
-      row_plugin: fields
-      style_plugin: default
       use_more_always: '0'
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_filter_in_operator_ui.yml b/tests/views_test_data/config/views.view.test_filter_in_operator_ui.yml
index 5b91ec25594b8a3ebfc082c4991432f3e4751177..a68c79056336ff81b08856850907a66937c0b9d3 100644
--- a/tests/views_test_data/config/views.view.test_filter_in_operator_ui.yml
+++ b/tests/views_test_data/config/views.view.test_filter_in_operator_ui.yml
@@ -26,8 +26,10 @@ display:
           table: node
       pager:
         type: full
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_rename_reset_button.yml b/tests/views_test_data/config/views.view.test_rename_reset_button.yml
index 900f26de6de2d79d070a053f1a656d0468368fa6..e03d6663d4469372040b464b5c36127d8187fe79 100644
--- a/tests/views_test_data/config/views.view.test_rename_reset_button.yml
+++ b/tests/views_test_data/config/views.view.test_rename_reset_button.yml
@@ -31,11 +31,13 @@ display:
         options:
           query_comment: '0'
         type: views_query
-      row_options:
-        comments: '0'
-        links: '1'
-      row_plugin: node
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: node
+        options:
+          comments: '0'
+          links: '1'
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_style_mapping.yml b/tests/views_test_data/config/views.view.test_style_mapping.yml
index 62763cb3f4a2b6ff2387e4a303f77f68ec17ee22..30d4dd92838d71a3822c2137ce72fa8217ce56ee 100644
--- a/tests/views_test_data/config/views.view.test_style_mapping.yml
+++ b/tests/views_test_data/config/views.view.test_style_mapping.yml
@@ -39,15 +39,16 @@ display:
           order: ASC
           relationship: none
           table: views_test_data
-      style_options:
-        mapping:
-          name_field: name
-          numeric_field:
-            age: age
-          title_field: name
-          toggle_numeric_field: '1'
-          toggle_title_field: '1'
-      style_plugin: mapping_test
+      style:
+        type: mapping_test
+        options:
+          mapping:
+            name_field: name
+            numeric_field:
+              age: age
+            title_field: name
+            toggle_numeric_field: '1'
+            toggle_title_field: '1'
     display_plugin: default
     display_title: Master
     id: default
diff --git a/tests/views_test_data/config/views.view.test_views_groupby_save.yml b/tests/views_test_data/config/views.view.test_views_groupby_save.yml
index 269b106beb93931b1536464540041068533c866f..05f9b5cc861e562277bee282aae6630f62f5dad8 100644
--- a/tests/views_test_data/config/views.view.test_views_groupby_save.yml
+++ b/tests/views_test_data/config/views.view.test_views_groupby_save.yml
@@ -14,8 +14,10 @@ display:
         type: basic
       pager:
         type: none
-      row_plugin: fields
-      style_plugin: default
+      style:
+        type: default
+      row:
+        type: fields
     display_plugin: default
     display_title: Master
     id: default