diff --git a/facetapi_slider.info b/facetapi_slider.info
index 48f59f7..7873ef4 100644
--- a/facetapi_slider.info
+++ b/facetapi_slider.info
@@ -4,3 +4,5 @@ dependencies[] = facetapi
 package = Search Toolkit
 core = 7.x
 files[] = plugins/facetapi/widget_slider.inc
+files[] = plugins/facetapi/widget_slider_date.inc
+files[] = plugins/facetapi/widget_slider_date_select_to_slider.inc
\ No newline at end of file
diff --git a/facetapi_slider.js b/facetapi_slider.js
index 85faeca..e7ae0e2 100644
--- a/facetapi_slider.js
+++ b/facetapi_slider.js
@@ -25,30 +25,29 @@ Drupal.facetapi_slider = {};
  */
 Drupal.facetapi_slider.makeSlider = function($form, settings) {
   var $wrapper = $( '<div id="slider-' + settings.id + '"><span class="facetapi-slider-min"></span><span class="facetapi-slider-max" style="float: right;"></span><div class="facetapi-slider"></div></div>' ).insertAfter( $form );
-  $min_input = $form.find('input.facetapi-slider-min');
-  $max_input = $form.find('input.facetapi-slider-max');
-  $min_span = $wrapper.children('.facetapi-slider-min');
-  $max_span = $wrapper.children('.facetapi-slider-max');
+
   $wrapper.children('.facetapi-slider').slider({
-      range: true,
-      min: settings.sliderMin,
-      max: settings.sliderMax,
-      step: settings.sliderStep,
-      values: [settings.sliderMin, settings.sliderMax],
-      slide: function(event, ui) {
-        $min_input.val(ui.values[0]);
-        $min_span.text(ui.values[0]);
-        $max_input.val(ui.values[1]);
-        $max_span.text(ui.values[1]);
-      },
-      stop: function(event, ui) {
-        $form.submit();
-      }
+    range: true,
+    min: parseFloat(settings.sliderMin),
+    max: parseFloat(settings.sliderMax),
+    step: settings.sliderStep,
+    values: [settings.sliderMin, settings.sliderMax],
+    slide: function (event, ui) {
+      $form.find('input.facetapi-slider-min').val(ui.values[0]);
+      $form.find('input.facetapi-slider-max').val(ui.values[1]);
+      $wrapper.children('.facetapi-slider-min').text(ui.values[0]);
+      $wrapper.children('.facetapi-slider-max').text(ui.values[1]);
+    },
+    stop: function(event, ui) {
+      $form.submit();
+    }
   });
-  $min_input.val(settings.sliderMin);
-  $min_span.text(settings.sliderMin);
-  $max_input.val(settings.sliderMax);
-  $max_span.text(settings.sliderMax);
+
+  $form.find('input.facetapi-slider-min').val(settings.sliderMin);
+  $form.find('input.facetapi-slider-max').val(settings.sliderMax);
+  $wrapper.children('.facetapi-slider-min').text(settings.sliderMin);
+  $wrapper.children('.facetapi-slider-max').text(settings.sliderMax);
+
   $form.hide();
 }
 
diff --git a/facetapi_slider.module b/facetapi_slider.module
index 5e1c6f6..6d737a3 100644
--- a/facetapi_slider.module
+++ b/facetapi_slider.module
@@ -36,6 +36,36 @@ function facetapi_slider_facetapi_widgets() {
       'handler' => array(
         'label' => t('Slider'),
         'class' => 'FacetapiWidgetSlider',
+        'query type' => 'numeric_range',
+        'requirements' => array(
+          'facetapi_requirement_facet_property' => array(
+            'query type' => 'numeric_range',
+          ),
+        ),
+      ),
+    ),
+    'facetapi_slider_date' => array(
+      'handler' => array(
+        'label' => t('Date Slider'),
+        'class' => 'FacetapiWidgetSliderDate',
+        'query type' => 'date',
+        'requirements' => array(
+          'facetapi_requirement_facet_property' => array(
+            'query type' => 'date',
+          ),
+        ),
+      ),
+    ),
+    'facetapi_slider_date_select_to_slider' => array(
+      'handler' => array(
+        'label' => t('Enhanced Date Slider'),
+        'class' => 'FacetapiWidgetSliderDateSelectToSlider',
+        'query type' => 'date',
+        'requirements' => array(
+          'facetapi_requirement_facet_property' => array(
+            'query type' => 'date',
+          ),
+        ),
       ),
     ),
   );
@@ -67,8 +97,44 @@ function facetapi_slider_forms($form_id, $args) {
   return $forms;
 }
 
+/**
+ * Implements hook_library().
+ */
+function facetapi_slider_library() {
+  $libraries['facetapi-date-slider'] = array(
+    'title' => 'Facet API date slider addon for jQuery UI datepicker',
+    'version' => '0.0.1',
+    'js' => array(
+      drupal_get_path('module', 'facetapi_slider') . '/facetapi_slider_datepicker_addon.js' => array(),
+      drupal_get_path('module', 'facetapi_slider') . '/facetapi_slider_date.js' => array(),
+    ),
+    'dependencies' => array(
+      array('system', 'ui.datepicker'),
+    ),
+  );
+  $libraries['selectToUISlider'] = array(
+    'title' => 'selectToUISlider by Filament Group, Inc',
+    'website' => 'http://www.filamentgroup.com/lab/update_jquery_ui_16_slider_from_a_select_element/',
+    'version' => '2.0',
+    'js' => array(
+      drupal_get_path('module', 'facetapi_slider') . '/libraries/selectToUISlider/selectToUISlider.jQuery.js' => array(),
+    ),
+    'css' => array(
+      drupal_get_path('module', 'facetapi_slider') . '/libraries/selectToUISlider/ui.slider.extras.css'  => array(
+        'type' => 'file',
+        'media' => 'screen',
+      ),
+    ),
+    'dependencies' => array(
+      array('system', 'ui'),
+    ),
+  );
+  return $libraries;
+}
+
 function facetapi_widget_form_wrapper($form, &$form_state, $form_id, $adapter, $build, $class) {
-  $form = call_user_func(array($class, 'widgetForm'), $form, $form_state, $form_id, $adapter, $build);
+  $params = func_get_args();
+  $form = call_user_func_array(array($class, 'widgetForm'), $params);
   $form['#widget_class']  = $class;
   $form['#facetapi_adapter'] = $adapter;
   $form['#validate'][] = 'facetapi_widget_form_wrapper_validate';
@@ -77,9 +143,9 @@ function facetapi_widget_form_wrapper($form, &$form_state, $form_id, $adapter, $
 }
 
 function facetapi_widget_form_wrapper_validate($form, &$form_state) {
-  return call_user_func(array($form['#widget_class'], 'widgetFormValidate'), $form, &$form_state);
+  call_user_func_array(array($form['#widget_class'], 'widgetFormValidate'), array($form, &$form_state));
 }
 
 function facetapi_widget_form_wrapper_submit($form, &$form_state) {
-  call_user_func(array($form['#widget_class'], 'widgetFormSubmit'), $form, &$form_state);
+  call_user_func_array(array($form['#widget_class'], 'widgetFormSubmit'), array($form, &$form_state));
 }
diff --git a/plugins/facetapi/widget_slider.inc b/plugins/facetapi/widget_slider.inc
index 21d03db..565ca14 100644
--- a/plugins/facetapi/widget_slider.inc
+++ b/plugins/facetapi/widget_slider.inc
@@ -22,28 +22,25 @@ class FacetapiWidgetSlider extends FacetapiWidget {
    * Renders the form.
    */
   public function execute() {
+
     // Sets the key, captures the facet's render array.
     $this->key = $this->build['#facet']['name'];
-    $slider = $this->build[$this->facet['field alias']][$this->facet['field']];
-
-    $this->build[$this->facet['field alias']] = drupal_get_form('facetapi_slider_widget_form_' . $this->facet['field alias'], $this->build['#adapter'], $this->build);
-    $slider_min =  $slider['#range_min'];
-    $slider_max =  $slider['#range_max'];
+    $facet = $this->facet->getFacet();
+    $build = $this->facet->getBuild();
+    $slider = reset($build);
+    $slider_min = $slider['#range_min'];
+    $slider_max = $slider['#range_max'];
     $this->jsSettings['sliderMin'] = $slider_min;
     $this->jsSettings['sliderMax'] = $slider_max;
+
     if ($slider_max - $slider_min < 20) {
       $this->jsSettings['sliderStep'] = ($slider_max - $slider_min) / 20;
     }
     else {
       $this->jsSettings['sliderStep'] = 1;
     }
-  }
 
-  /**
-   * Allows the widget to provide additional settings to the form.
-   */
-  public function settingsForm(&$form, &$form_state) {
-    // Nothing to do ...
+    $this->build[$this->facet['field alias']] = drupal_get_form('facetapi_slider_widget_form_' . $this->facet['field alias'], $this->build['#adapter'], $this->build);
   }
 
   /**
@@ -85,6 +82,10 @@ class FacetapiWidgetSlider extends FacetapiWidget {
       '#type' => 'hidden',
       '#default_value' => isset($build['#facet']['field alias']) ? $build['#facet']['field alias'] : '',
     );
+    $form['slider']['field_type'] = array(
+      '#type' => 'hidden',
+      '#default_value' => isset($build['#facet']['field type']) ? $build['#facet']['field type'] : '',
+    );
     $form['slider']['get'] = array(
       '#type' => 'hidden',
       '#default_value' => json_encode(array_diff_key($_GET, $exclude)),
@@ -95,7 +96,6 @@ class FacetapiWidgetSlider extends FacetapiWidget {
     );
     // Only add JS if we are on the actual search page.
     if (isset($build['#attributes'])) {
-
       $form['#attributes'] = $build['#attributes'];
       $form['slider']['#attached']['library'][] = array('system', 'ui.slider');
       $form['slider']['#attached']['js'][] = drupal_get_path('module', 'facetapi_slider') . '/facetapi_slider.js';
@@ -105,11 +105,14 @@ class FacetapiWidgetSlider extends FacetapiWidget {
   }
 
   public static function widgetFormValidate($form, &$form_state) {
-    drupal_set_message('Got values');
+    //drupal_set_message('Got values');
   }
 
   public static function widgetFormSubmit($form, &$form_state) {
-    $filter_key = $form['#facetapi_adapter']->getFilterKey();
+    $adapter = $form['#facetapi_adapter'];
+    $url_processor = $adapter->getUrlProcessor();
+    $filter_key = $url_processor->getFilterKey();
+
     $query_string = (array) json_decode($form_state['values']['get'], TRUE);
     if (empty($query_string[$filter_key])) {
       $query_string[$filter_key] = array();
@@ -122,7 +125,6 @@ class FacetapiWidgetSlider extends FacetapiWidget {
         unset($query_string[$filter_key][$idx]);
       }
     }
-    // TODO - apply round() only for integer fields.
     $form_state['values']['min'] = round($form_state['values']['min']);
     $form_state['values']['max'] = round($form_state['values']['max']);
     $query_string[$filter_key][] = $my_field . ':' . "[{$form_state['values']['min']} TO {$form_state['values']['max']}]";
