diff --git a/better_exposed_filters.css b/better_exposed_filters.css
index bc1c2d9..4bdd23a 100644
--- a/better_exposed_filters.css
+++ b/better_exposed_filters.css
@@ -13,3 +13,13 @@ fieldset.bef-select-as-checkboxes-fieldset.collapsed legend
 {
   position: relative;
 }
+
+/*
+ * Styles for the jQuery UI slider widgets.
+ */
+.bef-slider.ui-slider-horizontal {
+  margin-top: 6px;
+}
+.bef-slider.ui-slider-vertical {
+  margin-top: 2px;
+}
diff --git a/better_exposed_filters.js b/better_exposed_filters.js
index 3a7b59b..b47785e 100644
--- a/better_exposed_filters.js
+++ b/better_exposed_filters.js
@@ -124,6 +124,106 @@
       });
     }
   }
+
+  Drupal.behaviors.better_exposed_filters_slider = {
+    attach: function(context, settings) {
+      if (Drupal.settings.better_exposed_filters.bef_slider) {
+        // Run through each filter's slider options.
+        $.each(Drupal.settings.better_exposed_filters.bef_slider_options, function(i, sliderOptions) {
+          // Only make one slider per filter.
+          $("#" + sliderOptions.viewId + " #edit-" + sliderOptions.id + "-wrapper").once('slider-filter', function() {
+            var $min = $("input#edit-" + sliderOptions.id + "-min"),
+              $max = $("input#edit-" + sliderOptions.id + "-max"),
+              $val = $("input#edit-" + sliderOptions.id),
+              default_min = null,
+              deafult_max = null,
+              default_value = null,
+              default_values = null;
+
+            // Return if there are no min/max elements on this page.
+            if ((!$min.length || !$max.length) && !$val.length) {
+              return;
+            }
+
+            var getValue = function() {
+              return val;
+            }
+
+            // Use existing default values or else use the slider min & max.
+            // Then set initial values of the form elements.
+            // This accounts for the case that no defualt was present and we
+            // are defaulting to the slider range.
+            if ($val.length) {
+              default_value = parseInt(($val.val() == '') ? sliderOptions.min : $val.val());
+              $val.val(default_value);
+              // Update the slider when the field are updated.
+              $val.blur(function() {
+                var val = parseInt($(this).val());
+                if (!isNaN(val)) {
+                  $(this).parents('div.views-widget').next('.bef-slider').slider('value', val);
+                }
+              });
+            }
+            else {
+              default_min = parseInt(($min.val() == '') ? sliderOptions.min : $min.val());
+              default_max = parseInt(($max.val() == '') ? sliderOptions.max : $max.val());
+              $min.val(default_min);
+              $max.val(default_max);
+              default_values = [default_min, default_max];
+              // Update the slider when the fields are updated.
+              $min.blur(function() {
+                var val = parseInt($(this).val());
+                if (!isNaN(val)) {
+                  $(this).parents('div.views-widget').next('.bef-slider').slider('values', 0, val);
+                }
+              });
+              $max.blur(function() {
+                var val = parseInt($(this).val());
+                if (!isNaN(val)) {
+                  $(this).parents('div.views-widget').next('.bef-slider').slider('values', 1, val);
+                }
+              });
+            }
+
+            // Insert the slider before the min/max input elements.
+            $attachElement = $val.length ? $val : $min;
+            $attachElement.parents('div.views-widget').after(
+              $('<div class="bef-slider"></div>').slider({
+                range: sliderOptions.range,
+                min: parseInt(sliderOptions.min),
+                max: parseInt(sliderOptions.max),
+                animate: sliderOptions.animate ? sliderOptions.animate : false,
+                orientation: sliderOptions.orientation,
+                value: default_value,
+                values: default_values,
+                // Attach slide listeners
+                slide: function(event, ui) {
+                  // Update the form input elements when the slider moves.
+                  if (typeof ui.values === "undefined") {
+                    $val.val(ui.value);
+                  }
+                  else {
+                    if ($min.length) {
+                      $min.val(ui.values[0]);
+                    }
+                    if ($max.length) {
+                      $max.val(ui.values[1]);
+                    }
+                  }
+                },
+                // Attach stop listeners.
+                stop: function(event, ui) {
+                  // Click the auto submit button.
+                  $(this).parents('form').find('.ctools-auto-submit-click').click();
+                }
+              })
+            );
+          })
+        });
+      }
+    }
+  };
+
   /*
    * Helper functions
    */
diff --git a/better_exposed_filters.module b/better_exposed_filters.module
index 76eae42..2d4b3af 100644
--- a/better_exposed_filters.module
+++ b/better_exposed_filters.module
@@ -87,3 +87,30 @@ function bef_sort_combine_submit($form, &$form_state) {
   // And pass this along to Views
   views_exposed_form_submit($form, $form_state);
 }
+
+/**
+ * Form element validation handler for BEF jQuery slider required fields.
+ */
+function better_expose_filters_element_validate_slider_required($element, &$form_state) {
+  $value = $element['#value'];
+  // If a jQuery slider format has been selected make sure the min & max value
+  // fields are not empty.
+  if (isset($element['#bef_filter_id']) && isset($element['#bef_valid_format']) &&
+      isset($form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['bef_format']) &&
+      $form_state['values']['exposed_form_options']['bef'][$element['#bef_filter_id']]['bef_format'] == $element['#bef_valid_format'] &&
+      $value == '') {
+    form_error($element, t('!name field is required.', array('!name' => $element['#title'])));
+  }
+}
+
+/**
+ * Form element validation handler for BEF jQuery slider animate setting.
+ */
+function better_expose_filters_element_validate_slider_animate($element, &$form_state) {
+  $value = $element['#value'];
+  if ($value !== '' &&
+      ((!is_numeric($value) || intval($value) != $value || $value <= 0) &&
+       !in_array($value, array('slow', 'normal', 'fast')))) {
+    form_error($element, t('%name must be "slow", "normal", "fast" or the number of milliseconds to run the animation (e.g. 1000).', array('%name' => $element['#title'])));
+  }
+}
diff --git a/better_exposed_filters_exposed_form_plugin.inc b/better_exposed_filters_exposed_form_plugin.inc
index 68ca833..c4c3c47 100644
--- a/better_exposed_filters_exposed_form_plugin.inc
+++ b/better_exposed_filters_exposed_form_plugin.inc
@@ -214,6 +214,12 @@ Title Desc|Z -> A</pre> Leave the replacement value blank to remove an option al
       // Used for date-based filters
       $bef_datepicker = FALSE;
 
+      // Used for numeric between filters.
+      $bef_range = FALSE;
+
+      // Used for numeric single value filters.
+      $bef_slider = FALSE;
+
       /*
        * Check various filter types and determine what options are available
        */
@@ -244,6 +250,15 @@ Title Desc|Z -> A</pre> Leave the replacement value blank to remove an option al
         $bef_datepicker = TRUE;
       }
 
+      if ($filter instanceof views_handler_filter_numeric) {
+        if ($filter->operator == 'between') {
+          $bef_range = TRUE;
+        }
+        else {
+          $bef_slider = TRUE;
+        }
+      }
+
       // All filters can use the default filter exposed by Views
       $display_options = array('default' => t('Default select list'));
 
@@ -264,6 +279,14 @@ Title Desc|Z -> A</pre> Leave the replacement value blank to remove an option al
         $display_options['bef_datepicker'] = t('jQuery UI Datepicker');
       }
 
+      if ($bef_range) {
+        $display_options['bef_range'] = t('jQuery UI range slider');
+      }
+
+      if ($bef_slider) {
+        $display_options['bef_slider'] = t('jQuery UI slider');
+      }
+
       if ($bef_standard) {
         // Less used BEF options, so put them last.
         $display_options['bef_links'] = t('Links');
@@ -329,6 +352,78 @@ Title Desc|Z -> A</pre> Leave the replacement value blank to remove an option al
         );
       }
 
+      if ($bef_range || $bef_slider) {
+        $slider_type = $bef_range ? 'bef_range' : 'bef_slider';
+        $bef_options[$label]['more_options']['bef_slider_min'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Range minimum'),
+          '#default_value' => $this->options['bef'][$label]['more_options']['bef_slider_min'],
+          '#bef_filter_id' => $label,
+          '#bef_valid_format' => $slider_type,
+          '#states' => array(
+            'visible' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => $slider_type),
+            ),
+            'required' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => $slider_type),
+            ),
+          ),
+          '#description' => t('The minimum allowed value for the jQuery range slider.'),
+          '#element_validate' => array('element_validate_integer', 'better_expose_filters_element_validate_slider_required'),
+        );
+        $bef_options[$label]['more_options']['bef_slider_max'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Range maximum'),
+          '#default_value' => $this->options['bef'][$label]['more_options']['bef_slider_max'],
+          '#bef_filter_id' => $label,
+          '#bef_valid_format' => $slider_type,
+          '#states' => array(
+            'visible' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => $slider_type),
+            ),
+            'required' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => $slider_type),
+            ),
+          ),
+          '#description' => t('The maximum allowed value for the jQuery range slider.'),
+          '#element_validate' => array('element_validate_integer', 'better_expose_filters_element_validate_slider_required'),
+        );
+        $bef_options[$label]['more_options']['bef_slider_animate'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Animate'),
+          '#default_value' => $this->options['bef'][$label]['more_options']['bef_slider_animate'],
+          '#bef_filter_id' => $label,
+          '#bef_valid_format' => $slider_type,
+          '#states' => array(
+            'visible' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => $slider_type),
+            ),
+          ),
+          '#description' => t('Whether to slide handle smoothly when user click outside handle on the bar. Allowed values are "slow", "normal", "fast" or the number of milliseconds to run the animation (e.g. 1000). If left blank, there will be no animation, the slider will just jump to the new value instantly.'),
+          '#element_validate' => array('better_expose_filters_element_validate_slider_animate'),
+        );
+        $bef_options[$label]['more_options']['bef_slider_orientation'] = array(
+          '#type' => 'select',
+          '#title' => t('Orientation'),
+          '#options' => array(
+            'horizontal' => t('Horizontal'),
+            'vertical' => t('Vertical'),
+          ),
+          '#default_value' => $this->options['bef'][$label]['more_options']['bef_slider_orientation'],
+          '#bef_filter_id' => $label,
+          '#bef_valid_format' => $slider_type,
+          '#states' => array(
+            'visible' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => $slider_type),
+            ),
+            'required' => array(
+              ':input[name="exposed_form_options[bef][' . $label . '][bef_format]"]' => array('value' => $slider_type),
+            ),
+          ),
+          '#description' => t('The orientation of the jQuery range slider.'),
+        );
+      }
+
       // Allow any filter to be moved into the secondary options fieldset
       $bef_options[$label]['more_options']['is_secondary'] = array(
         '#type' => 'checkbox',
@@ -424,6 +519,10 @@ Title Desc|Z -> A</pre> Leave the replacement value blank to remove an option al
     $add_datepicker = FALSE;
     $datepicker_format = '';
 
+    // We only want to add the slider code once.
+    $add_slider = FALSE;
+    $slider_options = array();
+
     // Grab BEF settings
     $settings = $this->_bef_get_settings();
 
@@ -804,6 +903,34 @@ Title Desc|Z -> A</pre> Leave the replacement value blank to remove an option al
           }
           break;
 
+        case 'bef_range':
+          $show_apply = TRUE;
+          $add_slider = TRUE;
+          $slider_options[$field_id] = array(
+            'range' => TRUE,
+            'min' => $options['more_options']['bef_slider_min'],
+            'max' => $options['more_options']['bef_slider_max'],
+            'animate' => $options['more_options']['bef_slider_animate'],
+            'orientation' => $options['more_options']['bef_slider_orientation'],
+            'id' => drupal_html_id($field_id),
+            'viewId' => $form['#id'],
+          );
+          break;
+
+        case 'bef_slider':
+          $show_apply = TRUE;
+          $add_slider = TRUE;
+          $slider_options[$field_id] = array(
+            'range' => FALSE,
+            'min' => $options['more_options']['bef_slider_min'],
+            'max' => $options['more_options']['bef_slider_max'],
+            'animate' => $options['more_options']['bef_slider_animate'],
+            'orientation' => $options['more_options']['bef_slider_orientation'],
+            'id' => drupal_html_id($field_id),
+            'viewId' => $form['#id'],
+          );
+          break;
+
         case 'bef_links':
           $show_apply = TRUE;
 
@@ -1023,6 +1150,19 @@ Title Desc|Z -> A</pre> Leave the replacement value blank to remove an option al
       )), 'setting');
     }
 
+    // Only add slider code once.
+    drupal_add_js(array('better_exposed_filters' => array('bef_slider' => FALSE)), 'setting');
+    if ($add_slider) {
+      // Trigger slider in better_exposed_filters.js
+      drupal_add_js(array('better_exposed_filters' => array(
+        'bef_slider' => TRUE,
+        'bef_slider_options' => $slider_options,
+      )), 'setting');
+      drupal_add_library('system', 'ui.slider');
+      drupal_add_js(drupal_get_path('module', 'better_exposed_filters') . '/better_exposed_filters.js');
+      drupal_add_css(drupal_get_path('module', 'better_exposed_filters') . '/better_exposed_filters.css');
+    }
+
     // Check for secondary elements
     if ($allow_secondary && !empty($secondary)) {
       // Add secondary elements after regular exposed filter elements
