diff --git a/js/exposed-form-ajax.js b/js/exposed-form-ajax.js
new file mode 100644
index 0000000..df8535a
--- /dev/null
+++ b/js/exposed-form-ajax.js
@@ -0,0 +1,22 @@
+/**
+ * @file
+ * Handles Views' exposed form AJAX data submission.
+ */
+(function ($) {
+
+  /*
+   * Gets Form build info from settings and adds it to ajax data.
+   *
+   * @see views_exposed_form_ajax_enable().
+   */
+  Drupal.behaviors.ViewsExposedFormAjax = {
+    attach: function(context, settings) {
+      for (ajaxObject in Drupal.ajax) {
+        if (Drupal.ajax[ajaxObject].options) {
+          jQuery.extend(Drupal.ajax[ajaxObject].options.data, Drupal.settings.exposed_form_info);
+        }
+      }
+    }
+  };
+
+})(jQuery);
diff --git a/views.module b/views.module
index 4bc3496..359675d 100644
--- a/views.module
+++ b/views.module
@@ -2023,6 +2023,46 @@ function views_form_views_exposed_form_alter(&$form, &$form_state) {
   $form['form_build_id']['#access'] = FALSE;
   $form['form_token']['#access'] = FALSE;
   $form['form_id']['#access'] = FALSE;
+  // AJAX behaviors need these data, so we add it back in #after_build.
+  $form['#after_build'][] = 'views_exposed_form_ajax_enable';
+}
+
+/**
+ * Checks whether the exposed form will use ajax and passes required
+ * form information removed in views_form_views_exposed_form_alter().
+ */
+function views_exposed_form_ajax_enable(&$form, &$form_state) {
+  // In order for Ajax to work, we need the form build info. Here we
+  // check if #ajax has been added to any form elements, and if so,
+  // pass this info as settings via Javascript, which get attached to
+  // the submitted form on Ajax form submissions.
+  foreach (element_children($form) as $key) {
+    if (isset($form[$key]['#ajax'])) {
+      $form_info = array(
+        'form_id' => $form['#form_id'],
+        'form_build_id' => $form['#build_id'],
+      );
+      // Anonymous users don't get a token.
+      if (!empty($form['#token'])) {
+        $form_info['form_token'] = $form['#token'];
+      }
+      $form['#attached']['js'][] = array(
+        'type' => 'setting',
+        'data' => array(
+          'exposed_form_info' => $form_info,
+        ),
+      );
+      // Add the javascript behavior that will handle this data.
+      $form['#attached']['js'][] = array(
+        'weight' => 100,
+        'data' => drupal_get_path('module', 'views') . '/js/exposed-form-ajax.js',
+      );
+      // We only need to check this once.
+      break;
+    }
+  }
+
+  return $form;
 }
 
 /**
