diff --git a/handlers/views_handler_filter.inc b/handlers/views_handler_filter.inc
index 541e5df..09ad83d 100644
--- a/handlers/views_handler_filter.inc
+++ b/handlers/views_handler_filter.inc
@@ -489,99 +489,6 @@ class views_handler_filter extends views_handler {
   }
 
   /**
-   * Check to see if input from the exposed filters should change
-   * the behavior of this filter.
-   */
-  function accept_exposed_input($input) {
-    if (empty($this->options['exposed'])) {
-      return TRUE;
-    }
-
-
-    if (!empty($this->options['expose']['use_operator']) && !empty($this->options['expose']['operator_id']) && isset($input[$this->options['expose']['operator_id']])) {
-      $this->operator = $input[$this->options['expose']['operator_id']];
-    }
-
-    if (!empty($this->options['expose']['identifier'])) {
-      $value = $input[$this->options['expose']['identifier']];
-
-      // Various ways to check for the absence of non-required input.
-      if (empty($this->options['expose']['required'])) {
-        if (($this->operator == 'empty' || $this->operator == 'not empty') && $value === '') {
-          $value = ' ';
-        }
-
-        if ($this->operator != 'empty' && $this->operator != 'not empty') {
-          if ($value == 'All' || $value === array()) {
-            return FALSE;
-          }
-        }
-
-        if (!empty($this->always_multiple) && $value === '') {
-          return FALSE;
-        }
-      }
-
-
-      if (isset($value)) {
-        $this->value = $value;
-        if (empty($this->always_multiple) && empty($this->options['expose']['multiple'])) {
-          $this->value = array($value);
-        }
-      }
-      else {
-        return FALSE;
-      }
-    }
-
-    return TRUE;
-  }
-
-  function store_exposed_input($input, $status) {
-    if (empty($this->options['exposed']) || empty($this->options['expose']['identifier'])) {
-      return TRUE;
-    }
-
-    if (empty($this->options['expose']['remember'])) {
-      return;
-    }
-
-    // Figure out which display id is responsible for the filters, so we
-    // know where to look for session stored values.
-    $display_id = ($this->view->display_handler->is_defaulted('filters')) ? 'default' : $this->view->current_display;
-
-    // shortcut test.
-    $operator = !empty($this->options['expose']['use_operator']) && !empty($this->options['expose']['operator_id']);
-
-    // false means that we got a setting that means to recuse ourselves,
-    // so we should erase whatever happened to be there.
-    if (!$status && isset($_SESSION['views'][$this->view->name][$display_id])) {
-      $session = &$_SESSION['views'][$this->view->name][$display_id];
-      if ($operator && isset($session[$this->options['expose']['operator_id']])) {
-        unset($session[$this->options['expose']['operator_id']]);
-      }
-
-      if (isset($session[$this->options['expose']['identifier']])) {
-        unset($session[$this->options['expose']['identifier']]);
-      }
-    }
-
-    if ($status) {
-      if (!isset($_SESSION['views'][$this->view->name][$display_id])) {
-        $_SESSION['views'][$this->view->name][$display_id] = array();
-      }
-
-      $session = &$_SESSION['views'][$this->view->name][$display_id];
-
-      if ($operator && isset($input[$this->options['expose']['operator_id']])) {
-        $session[$this->options['expose']['operator_id']] = $input[$this->options['expose']['operator_id']];
-      }
-
-      $session[$this->options['expose']['identifier']] = $input[$this->options['expose']['identifier']];
-    }
-  }
-
-  /**
    * Add this filter to the query.
    *
    * Due to the nature of fapi, the value and the operator have an unintended
diff --git a/handlers/views_handler_sort.inc b/handlers/views_handler_sort.inc
index f767b99..cb7faaf 100644
--- a/handlers/views_handler_sort.inc
+++ b/handlers/views_handler_sort.inc
@@ -32,6 +32,7 @@ class views_handler_sort extends views_handler {
     $options['expose'] = array(
       'contains' => array(
         'label' => array('default' => '', 'translatable' => TRUE),
+        'remember' => array('default' => 0),
       ),
     );
     return $options;
@@ -188,7 +189,13 @@ class views_handler_sort extends views_handler {
       '#required' => TRUE,
       '#size' => 40,
       '#weight' => -1,
-   );
+    );
+    $form['expose']['remember'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Remember the last selection'),
+      '#description' => t('Enable to remember the last selection made by the user.'),
+      '#default_value' => $this->options['expose']['remember'],
+    );
   }
 
   /**
diff --git a/includes/handlers.inc b/includes/handlers.inc
index e3b3442..9aadef0 100644
--- a/includes/handlers.inc
+++ b/includes/handlers.inc
@@ -631,13 +631,101 @@ class views_handler extends views_object {
 
   /**
    * Take input from exposed handlers and assign to this handler, if necessary.
+   *
+   * Check to see if input from the exposed handlers should change
+   * the behavior of this handler.
    */
-  function accept_exposed_input($input) { return TRUE; }
+  function accept_exposed_input($input) {
+    if (empty($this->options['exposed'])) {
+      return TRUE;
+    }
+
+
+    if (!empty($this->options['expose']['use_operator']) && !empty($this->options['expose']['operator_id']) && isset($input[$this->options['expose']['operator_id']])) {
+      $this->operator = $input[$this->options['expose']['operator_id']];
+    }
+
+    if (!empty($this->options['expose']['identifier'])) {
+      $value = $input[$this->options['expose']['identifier']];
+
+      // Various ways to check for the absence of non-required input.
+      if (empty($this->options['expose']['required'])) {
+        if (($this->operator == 'empty' || $this->operator == 'not empty') && $value === '') {
+          $value = ' ';
+        }
+
+        if ($this->operator != 'empty' && $this->operator != 'not empty') {
+          if ($value == 'All' || $value === array()) {
+            return FALSE;
+          }
+        }
+
+        if (!empty($this->always_multiple) && $value === '') {
+          return FALSE;
+        }
+      }
+
+
+      if (isset($value)) {
+        $this->value = $value;
+        if (empty($this->always_multiple) && empty($this->options['expose']['multiple'])) {
+          $this->value = array($value);
+        }
+      }
+      else {
+        return FALSE;
+      }
+    }
+
+    return TRUE;
+  }
 
   /**
    * If set to remember exposed input in the session, store it there.
    */
-  function store_exposed_input($input, $status) { return TRUE; }
+  function store_exposed_input($input, $status) {
+    if (empty($this->options['exposed']) || empty($this->options['expose']['identifier'])) {
+      return TRUE;
+    }
+
+    if (empty($this->options['expose']['remember'])) {
+      return;
+    }
+
+    // Figure out which display id is responsible for the filters, so we
+    // know where to look for session stored values.
+    $display_id = ($this->view->display_handler->is_defaulted('filters')) ? 'default' : $this->view->current_display;
+
+    // shortcut test.
+    $operator = !empty($this->options['expose']['use_operator']) && !empty($this->options['expose']['operator_id']);
+
+    // false means that we got a setting that means to recuse ourselves,
+    // so we should erase whatever happened to be there.
+    if (!$status && isset($_SESSION['views'][$this->view->name][$display_id])) {
+      $session = &$_SESSION['views'][$this->view->name][$display_id];
+      if ($operator && isset($session[$this->options['expose']['operator_id']])) {
+        unset($session[$this->options['expose']['operator_id']]);
+      }
+
+      if (isset($session[$this->options['expose']['identifier']])) {
+        unset($session[$this->options['expose']['identifier']]);
+      }
+    }
+
+    if ($status) {
+      if (!isset($_SESSION['views'][$this->view->name][$display_id])) {
+        $_SESSION['views'][$this->view->name][$display_id] = array();
+      }
+
+      $session = &$_SESSION['views'][$this->view->name][$display_id];
+
+      if ($operator && isset($input[$this->options['expose']['operator_id']])) {
+        $session[$this->options['expose']['operator_id']] = $input[$this->options['expose']['operator_id']];
+      }
+
+      $session[$this->options['expose']['identifier']] = $input[$this->options['expose']['identifier']];
+    }
+  }
 
   /**
    * Get the join object that should be used for this handler.
