Index: views.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/views.module,v
retrieving revision 1.341.4.5
diff -u -p -r1.341.4.5 views.module
--- views.module	24 Dec 2009 00:14:41 -0000	1.341.4.5
+++ views.module	26 Dec 2009 21:26:53 -0000
@@ -978,6 +978,9 @@ function views_exposed_form($form, &$for
   }
   views_add_js('dependent');
 
+  $exposed_form_plugin = $form_state['exposed_form_plugin'];
+  $exposed_form_plugin->exposed_form_alter($form, $form_state);
+
   // Save the form
   views_exposed_form_cache($view->name, $view->current_display, $form);
 
@@ -994,6 +997,8 @@ function views_exposed_form_validate(&$f
       $handlers[$key]->exposed_validate($form, $form_state);
     }
   }
+  $exposed_form_plugin = $form_state['exposed_form_plugin'];
+  $exposed_form_plugin->exposed_form_validate($form, $form_state);
 }
 
 /**
@@ -1009,8 +1014,13 @@ function views_exposed_form_submit(&$for
   $form_state['view']->exposed_data = $form_state['values'];
   $form_state['view']->exposed_raw_input = array();
 
+
+  $exclude = array('q', 'submit', 'form_build_id', 'form_id', 'form_token', 'submit_button', 'exposed_form_plugin', '');
+  $exposed_form_plugin = $form_state['exposed_form_plugin'];
+  $exposed_form_plugin->exposed_form_submit($form, $form_state, $exclude);
+
   foreach ($form_state['values'] as $key => $value) {
-    if (!in_array($key, array('q', 'submit', 'form_build_id', 'form_id', 'form_token', ''))) {
+    if (!in_array($key, $exclude)) {
       $form_state['view']->exposed_raw_input[$key] = $value;
     }
   }
Index: plugins/views_plugin_exposed_form.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/plugins/views_plugin_exposed_form.inc,v
retrieving revision 1.3
diff -u -p -r1.3 views_plugin_exposed_form.inc
--- plugins/views_plugin_exposed_form.inc	26 Dec 2009 21:01:44 -0000	1.3
+++ plugins/views_plugin_exposed_form.inc	26 Dec 2009 21:26:57 -0000
@@ -74,6 +74,7 @@ class views_plugin_exposed_form extends 
       $form_state['ajax'] = TRUE;
     }
 
+    $form_state['exposed_form_plugin'] = $this;
     $output = drupal_render(drupal_build_form('views_exposed_form', $form_state));
     if (!empty($form_state['js settings'])) {
       $this->view->js_settings = $form_state['js settings'];
@@ -90,4 +91,20 @@ class views_plugin_exposed_form extends 
 
   function pre_execute() { }
 
+  function exposed_form_alter(&$form, &$form_state) { }
+  
+  function exposed_form_validate(&$form, &$form_state) { }
+  
+  /**
+   * This function is executed when exposed form is submited.
+   *
+   * @param $form
+   *   Nested array of form elements that comprise the form.
+   * @param $form_state
+   *   A keyed array containing the current state of the form.
+   * @param $exclude
+   *   Nested array of keys to exclude of insert into 
+   *   $view->exposed_raw_input
+   */ 
+  function exposed_form_submit(&$form, &$form_state, &$exclude) { }
 }
