diff --git a/includes/admin.inc b/includes/admin.inc
index 237a05d..ec1dc90 100644
--- a/includes/admin.inc
+++ b/includes/admin.inc
@@ -2125,6 +2125,8 @@ function views_ui_edit_view_form_validate($form, &$form_state) {
  * Submit handler for the edit view form.
  */
 function views_ui_edit_view_form_submit($form, &$form_state) {
+  $form_state['view']->init_display();
+
   // Go through and remove displayed scheduled for removal.
   foreach ($form_state['view']->display as $id => $display) {
     if (!empty($display->deleted)) {
diff --git a/includes/view.inc b/includes/view.inc
index d9fb43f..a37f3aa 100644
--- a/includes/view.inc
+++ b/includes/view.inc
@@ -16,7 +16,7 @@
  * An object to contain all of the data to generate a view, plus the member
  * functions to build the view query, execute the query and render the output.
  */
-class view extends views_db_object {
+class view extends views_db_object implements \Serializable {
   var $db_table = 'views_view';
   var $base_table = 'node';
   var $base_field = 'nid';
@@ -2152,6 +2152,45 @@ function process_locale_strings($op) {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function serialize() {
+    return serialize(array(
+      $this->name,
+      $this->current_display,
+      $this->args,
+      $this->current_page,
+      $this->exposed_input,
+      $this->exposed_raw_input,
+      $this->exposed_data,
+      $this->executed,
+    ));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function unserialize($serialized) {
+    list($name, $current_display, $args, $current_page, $exposed_input, $exposed_raw_input, $exposed_data, $executed) = unserialize($serialized);
+
+    $this->name = $name;
+
+    $this->set_display($current_display);
+    $this->set_arguments($args);
+    $this->set_current_page($current_page);
+    $this->set_exposed_input($exposed_input);
+    $this->exposed_data = $exposed_data;
+    $this->exposed_raw_input = $exposed_raw_input;
+
+    $this->init_handlers();
+
+    // If the display was previously executed, execute it now.
+    if ($executed) {
+      $this->execute($this->current_display);
+    }
+  }
+
 }
 
 /**
diff --git a/plugins/views_plugin_exposed_form.inc b/plugins/views_plugin_exposed_form.inc
index 5d54600..a9100c0 100644
--- a/plugins/views_plugin_exposed_form.inc
+++ b/plugins/views_plugin_exposed_form.inc
@@ -157,7 +157,6 @@ function render_exposed_form($block = FALSE) {
       $form_state['ajax'] = TRUE;
     }
 
-    $form_state['exposed_form_plugin'] = $this;
     $form = drupal_build_form('views_exposed_form', $form_state);
     $output = drupal_render($form);
 
diff --git a/views.module b/views.module
index aab3812..4ec27d0 100644
--- a/views.module
+++ b/views.module
@@ -2052,7 +2052,7 @@ function views_exposed_form($form, &$form_state) {
   }
   ctools_include('dependent');
 
-  $exposed_form_plugin = $form_state['exposed_form_plugin'];
+  $exposed_form_plugin = $view->display_handler->getPlugin('exposed_form');
   $exposed_form_plugin->exposed_form_alter($form, $form_state);
 
   // Save the form
@@ -2077,13 +2077,14 @@ function views_form_views_exposed_form_alter(&$form, &$form_state) {
  * Validate handler for exposed filters
  */
 function views_exposed_form_validate(&$form, &$form_state) {
+  $view = $form_state->get('view');
   foreach (array('field', 'filter') as $type) {
-    $handlers = &$form_state['view']->$type;
+    $handlers = &$view->$type;
     foreach ($handlers as $key => $handler) {
       $handlers[$key]->exposed_validate($form, $form_state);
     }
   }
-  $exposed_form_plugin = $form_state['exposed_form_plugin'];
+  $exposed_form_plugin = $view->display_handler->getPlugin('exposed_form');
   $exposed_form_plugin->exposed_form_validate($form, $form_state);
 }
 
@@ -2102,7 +2103,8 @@ function views_exposed_form_submit(&$form, &$form_state) {
 
 
   $exclude = array('q', 'submit', 'form_build_id', 'form_id', 'form_token', 'exposed_form_plugin', '', 'reset');
-  $exposed_form_plugin = $form_state['exposed_form_plugin'];
+  $exposed_form_plugin = $form_state['view']->display_handler->getPlugin('exposed_form');
+
   $exposed_form_plugin->exposed_form_submit($form, $form_state, $exclude);
 
   foreach ($form_state['values'] as $key => $value) {
