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 a9d79ba..8fdd520 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
@@ -1595,7 +1595,12 @@ public function buildOptionsForm(&$form, &$form_state) {
       case 'style':
         $form['#title'] .= t('How should this view be styled');
         $style_plugin = $this->getPlugin('style');
-        $form['style'] =  array(
+        $form['style'] = array(
+          '#prefix' => '<div class="clearfix">',
+          '#suffix' => '</div>',
+          '#tree' => TRUE,
+        );
+        $form['style']['type'] =  array(
           '#type' => 'radios',
           '#options' => views_fetch_plugin_names('style', $this->getStyleType(), array($this->view->storage->get('base_table'))),
           '#default_value' => $style_plugin->definition['id'],
@@ -1637,7 +1642,12 @@ public function buildOptionsForm(&$form, &$form_state) {
       case 'row':
         $form['#title'] .= t('How should each row in this view be styled');
         $row_plugin_instance = $this->getPlugin('row');
-        $form['row'] =  array(
+        $form['row'] = array(
+          '#prefix' => '<div class="clearfix">',
+          '#suffix' => '</div>',
+          '#tree' => TRUE,
+        );
+        $form['row']['type'] =  array(
           '#type' => 'radios',
           '#options' => views_fetch_plugin_names('row', $this->getStyleType(), array($this->view->storage->get('base_table'))),
           '#default_value' => $row_plugin_instance->definition['id'],
@@ -2120,52 +2130,6 @@ public function submitOptionsForm(&$form, &$form_state) {
         $this->display['display_title'] = $form_state['values']['display_title'];
         $this->setOption('display_description', $form_state['values']['display_description']);
         break;
-      case 'access':
-        $access = $this->getOption('access');
-        if ($access['type'] != $form_state['values']['access']['type']) {
-          $plugin = drupal_container()->get('plugin.manager.views.access')->createInstance($form_state['values']['access']['type']);
-          if ($plugin) {
-            $access = array('type' => $form_state['values']['access']['type']);
-            $this->setOption('access', $access);
-            if ($plugin->usesOptions()) {
-              $form_state['view']->addFormToStack('display', $this->display['id'], array('access_options'));
-            }
-          }
-        }
-
-        break;
-      case 'access_options':
-        $plugin = $this->getPlugin('access');
-        if ($plugin) {
-          $access = $this->getOption('access');
-          $plugin->submitOptionsForm($form['access_options'], $form_state);
-          $access['options'] = $form_state['values'][$section];
-          $this->setOption('access', $access);
-        }
-        break;
-      case 'cache':
-        $cache = $this->getOption('cache');
-        if ($cache['type'] != $form_state['values']['cache']['type']) {
-          $plugin = drupal_container()->get('plugin.manager.views.cache')->createInstance($form_state['values']['cache']['type']);
-          if ($plugin) {
-            $cache = array('type' => $form_state['values']['cache']['type']);
-            $this->setOption('cache', $cache);
-            if ($plugin->usesOptions()) {
-              $form_state['view']->addFormToStack('display', $this->display['id'], array('cache_options'));
-            }
-          }
-        }
-
-        break;
-      case 'cache_options':
-        $plugin = $this->getPlugin('cache');
-        if ($plugin) {
-          $cache = $this->getOption('cache');
-          $plugin->submitOptionsForm($form['cache_options'], $form_state);
-          $cache['options'] = $form_state['values'][$section];
-          $this->setOption('cache', $cache);
-        }
-        break;
       case 'query':
         $plugin = $this->getPlugin('query');
         if ($plugin) {
@@ -2179,7 +2143,9 @@ public function submitOptionsForm(&$form, &$form_state) {
       case 'title':
       case 'css_class':
       case 'display_comment':
-        $this->setOption($section, $form_state['values'][$section]);
+      case 'distinct':
+      case 'group_by':
+      $this->setOption($section, $form_state['values'][$section]);
         break;
       case 'field_language':
         $this->setOption('field_langcode', $form_state['values']['field_langcode']);
@@ -2188,120 +2154,51 @@ public function submitOptionsForm(&$form, &$form_state) {
       case 'use_ajax':
       case 'hide_attachment_summary':
       case 'hide_admin_links':
-        $this->setOption($section, (bool)$form_state['values'][$section]);
+      case 'exposed_block':
+      $this->setOption($section, (bool)$form_state['values'][$section]);
         break;
       case 'use_more':
         $this->setOption($section, intval($form_state['values'][$section]));
         $this->setOption('use_more_always', !intval($form_state['values']['use_more_always']));
         $this->setOption('use_more_text', $form_state['values']['use_more_text']);
-      case 'distinct':
-        $this->setOption($section, $form_state['values'][$section]);
-        break;
-      case 'group_by':
-        $this->setOption($section, $form_state['values'][$section]);
         break;
-      case 'row':
-        // This if prevents resetting options to default if they don't change
-        // the plugin.
-        $row = $this->getOption('row');
-        if ($row['type'] != $form_state['values'][$section]) {
-          $plugin = drupal_container()->get('plugin.manager.views.row')->createInstance($form_state['values'][$section]);
-          if ($plugin) {
-            $row = array('type' => $form_state['values'][$section]);
-            $this->setOption($section, $row);
 
-            // send ajax form to options page if we use it.
-            if ($plugin->usesOptions()) {
-              $form_state['view']->addFormToStack('display', $this->display['id'], array('row_options'));
-            }
-          }
-        }
-        break;
-      case 'style':
-        // This if prevents resetting options to default if they don't change
-        // the plugin.
-        $style = $this->getOption('style');
-        if ($style['type'] != $form_state['values'][$section]) {
-          $plugin = drupal_container()->get('plugin.manager.views.style')->createInstance($form_state['values'][$section]);
-          if ($plugin) {
-            $row = array('type' => $form_state['values'][$section]);
-            $this->setOption($section, $row);
-            // send ajax form to options page if we use it.
-            if ($plugin->usesOptions()) {
-              $form_state['view']->addFormToStack('display', $this->display['id'], array('style_options'));
-            }
-          }
-        }
-        break;
-      case 'style_options':
-        $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':
-        $plugin = $this->getPlugin('row');
-        if ($plugin) {
-          $row = $this->getOption('row');
-          $plugin->submitOptionsForm($form['row_options'], $form_state);
-          $row['options'] = $form_state['values'][$section];
-          $this->setOption('row', $row);
-        }
-        break;
-      case 'exposed_block':
-        $this->setOption($section, (bool) $form_state['values'][$section]);
-        break;
+      case 'access':
+      case 'cache':
       case 'exposed_form':
-        $exposed_form = $this->getOption('exposed_form');
-        if ($exposed_form['type'] != $form_state['values']['exposed_form']['type']) {
-          $plugin = drupal_container()->get('plugin.manager.views.exposed_form')->createInstance($form_state['values']['exposed_form']['type']);
+      case 'pager':
+      case 'row':
+      case 'style':
+      $plugin_type = $section;
+        $access = $this->getOption($plugin_type);
+        if ($access['type'] != $form_state['values'][$plugin_type]['type']) {
+          $plugin = drupal_container()->get('plugin.manager.views.' . $plugin_type)->createInstance($form_state['values'][$plugin_type]['type']);
           if ($plugin) {
-            $exposed_form = array('type' => $form_state['values']['exposed_form']['type'], 'options' => array());
-            $this->setOption('exposed_form', $exposed_form);
+            $plugin_options = array('type' => $form_state['values'][$plugin_type]['type']);
+            $this->setOption($plugin_type, $plugin_options);
             if ($plugin->usesOptions()) {
-              $form_state['view']->addFormToStack('display', $this->display['id'], array('exposed_form_options'));
+              $form_state['view']->addFormToStack('display', $this->display['id'], array($plugin_type . '_options'));
             }
           }
         }
-
-        break;
-      case 'exposed_form_options':
-        $plugin = $this->getPlugin('exposed_form');
-        if ($plugin) {
-          $exposed_form = $this->getOption('exposed_form');
-          $plugin->submitOptionsForm($form['exposed_form_options'], $form_state);
-          $exposed_form['options'] = $form_state['values'][$section];
-          $this->setOption('exposed_form', $exposed_form);
-        }
         break;
-      case 'pager':
-        $pager = $this->getOption('pager');
-        if ($pager['type'] != $form_state['values']['pager']['type']) {
-          $plugin = drupal_container()->get('plugin.manager.views.pager')->createInstance($form_state['values']['pager']['type']);
-          if ($plugin) {
-            // Because pagers have very similar options, let's allow pagers to
-            // try to carry the options over.
-            $plugin->init($this->view, $this, $pager['options']);
 
-            $pager = array('type' => $form_state['values']['pager']['type'], 'options' => $plugin->options);
-            $this->setOption('pager', $pager);
-            if ($plugin->usesOptions()) {
-              $form_state['view']->addFormToStack('display', $this->display['id'], array('pager_options'));
-            }
-          }
-        }
 
-        break;
+      case 'access_options':
+      case 'cache_options':
+      case 'exposed_form_options':
       case 'pager_options':
-        $plugin = $this->getPlugin('pager');
+      case 'row_options':
+      case 'style_options':
+        // Submit plugin options. Every section with "_options" in it, belongs to
+        // a plugin type, like "style_options".
+        $plugin_type = str_replace('_options', '', $form_state['section']);
+        $plugin = $this->getPlugin($plugin_type);
         if ($plugin) {
-          $pager = $this->getOption('pager');
-          $plugin->submitOptionsForm($form['pager_options'], $form_state);
-          $pager['options'] = $form_state['values'][$section];
-          $this->setOption('pager', $pager);
+          $plugin_options = $this->getOption($plugin_type);
+          $plugin->submitOptionsForm($form[$plugin_type . '_options'], $form_state);
+          $plugin_options['options'] = $form_state['values'][$section];
+          $this->setOption($plugin_type, $plugin_options);
         }
         break;
     }
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/PagerTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/PagerTest.php
index b8d2e74..babf4d5 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/PagerTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/PagerTest.php
@@ -103,7 +103,7 @@ public function testStorePagerSettings() {
       'pager_options[items_per_page]' => 10,
     );
     $this->drupalPost('admin/structure/views/nojs/display/test_store_pager_settings/default/pager_options', $edit, t('Apply'));
-    $this->assertText('20 items');
+    $this->assertText('10 items');
 
   }
 
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/RowUITest.php b/core/modules/views/lib/Drupal/views/Tests/UI/RowUITest.php
index 2b42157..2fee8ed 100644
--- a/core/modules/views/lib/Drupal/views/Tests/UI/RowUITest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/RowUITest.php
@@ -41,10 +41,10 @@ public function testRowUI() {
     $row_options_url = "admin/structure/views/nojs/display/$view_name/default/row_options";
 
     $this->drupalGet($row_plugin_url);
-    $this->assertFieldByName('row', 'fields', 'The default row plugin selected in the UI should be fields.');
+    $this->assertFieldByName('row[type]', 'fields', 'The default row plugin selected in the UI should be fields.');
 
     $edit = array(
-      'row' => 'test_row'
+      'row[type]' => 'test_row'
     );
     $this->drupalPost(NULL, $edit, t('Apply'));
     $this->assertFieldByName('row_options[test_option]', NULL, 'Make sure the custom settings form from the test plugin appears.');
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/StyleUITest.php b/core/modules/views/lib/Drupal/views/Tests/UI/StyleUITest.php
index 034f463..02b5cab 100644
--- a/core/modules/views/lib/Drupal/views/Tests/UI/StyleUITest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/StyleUITest.php
@@ -41,10 +41,10 @@ public function testStyleUI() {
     $style_options_url = "admin/structure/views/nojs/display/$view_name/default/style_options";
 
     $this->drupalGet($style_plugin_url);
-    $this->assertFieldByName('style', 'default', 'The default style plugin selected in the UI should be unformatted list.');
+    $this->assertFieldByName('style[type]', 'default', 'The default style plugin selected in the UI should be unformatted list.');
 
     $edit = array(
-      'style' => 'test_style'
+      'style[type]' => 'test_style'
     );
     $this->drupalPost(NULL, $edit, t('Apply'));
     $this->assertFieldByName('style_options[test_option]', NULL, 'Make sure the custom settings form from the test plugin appears.');
