diff --git a/better_exposed_filters.js b/better_exposed_filters.js
index 3a7b59b..0ebe4be 100644
--- a/better_exposed_filters.js
+++ b/better_exposed_filters.js
@@ -124,6 +124,56 @@
       });
     }
   }
+
+  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");
+            var $max = $("input#edit-" + sliderOptions.id + "-max");
+
+            // Return if there are no min/max elements on this page.
+            if (!$min.length || !$max.length) {
+              return;
+            }
+
+            // Set default values or use those passed into the form.
+            var init_min = ('' == $min.val()) ? sliderOptions.min : $min.val();
+            var init_max = ('' == $max.val()) ? sliderOptions.max : $max.val();
+
+            // Set initial values of the form elements.
+            $min.val(init_min);
+            $max.val(init_max);
+
+            // Insert the slider before the min/max input elements.
+            $min.parents('div.views-widget').after(
+              $('<div></div>').slider({
+                range: sliderOptions.range,
+                min: sliderOptions.min,
+                max: sliderOptions.max,
+                values: [init_min, init_max],
+                // Attach slide listeners
+                slide: function(event, ui) {
+                  // Update the form input elements when the slider moves.
+                  $min.val(ui.values[0]);
+                  $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_exposed_form_plugin.inc b/better_exposed_filters_exposed_form_plugin.inc
index 68ca833..bbc97c9 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');
@@ -424,6 +447,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 +831,32 @@ 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' => $form[$field_id]['min']['#default_value'],
+            'max' => $form[$field_id]['max']['#default_value'],
+            'id' => drupal_html_id($field_id),
+            'viewId' => $form['#id'],
+          );
+          // Don't break, continue through to the bef_slider case.
+          break;
+        case 'bef_slider':
+          $show_apply = TRUE;
+          $add_slider = TRUE;
+          // Todo: Don't hard code min & max values. The user will have to be
+          // given options.
+          $slider_options[$field_id] = array(
+            'range' => FALSE,
+            'min' => 0,
+            'max' => 1000000,
+            'id' => drupal_html_id($field_id),
+            'viewId' => $form['#id'],
+          );
+          break;
+
         case 'bef_links':
           $show_apply = TRUE;
 
@@ -1023,6 +1076,18 @@ 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');
+    }
+
     // Check for secondary elements
     if ($allow_secondary && !empty($secondary)) {
       // Add secondary elements after regular exposed filter elements
