diff --git a/facetapi_slider.info b/facetapi_slider.info
index 7271648..48f59f7 100644
--- a/facetapi_slider.info
+++ b/facetapi_slider.info
@@ -3,4 +3,4 @@ description = A Facet API widget that displays a slider to control ranges.
 dependencies[] = facetapi
 package = Search Toolkit
 core = 7.x
-files[] = plugins/facetapi/widget_slider.inc
\ No newline at end of file
+files[] = plugins/facetapi/widget_slider.inc
diff --git a/facetapi_slider.js b/facetapi_slider.js
index 2a297b5..5057eac 100644
--- a/facetapi_slider.js
+++ b/facetapi_slider.js
@@ -26,32 +26,35 @@ Drupal.facetapi_slider = {};
 Drupal.facetapi_slider.makeSlider = function($form, settings) {
   var $wrapper = $( '<div id="slider-' + settings.id + '">\n\
     <span class="facetapi-slider-min"></span>\n\
-    <span class="facetapi-slider-max" style="float: right;"></span>\n\
-    <div class="facetapi-slider"></div></div>' ).insertAfter( $form );
+    <div class="facetapi-slider"></div>\n\
+    <span class="facetapi-slider-max" style="float:right"></span></div>').insertAfter($form);
 
   function set_slider_handle_labels(minval, maxval) {
-    $form.find('input.facetapi-slider-min').val(minval);
-    $form.find('input.facetapi-slider-max').val(maxval);
+    minval = parseFloat(minval);
+    maxval = parseFloat(maxval);
+    $form.find('input.facetapi-slider-min').val(minval.toFixed(settings.precision));
+    $form.find('input.facetapi-slider-max').val(maxval.toFixed(settings.precision));
     // Calculate the position of the slider handles
     var $real_width = $wrapper.children('.facetapi-slider').width();
-    var $range = settings.sliderMax - settings.sliderMin;
-    var $real_left = minval - settings.sliderMin;
-    var $real_right = settings.sliderMax - maxval;
-    var $real_left_position = ($real_width/$range)*$real_left*.7-3;
-    var $real_right_position = ($real_width/$range)*$real_right*.7-3;
+    var $range = settings.sliderMaxGlobal - settings.sliderMinGlobal;
+    var $real_left = minval.toFixed(settings.precision) - settings.sliderMinGlobal;
+    var $real_right = settings.sliderMaxGlobal - maxval.toFixed(settings.precision);;
+    var $real_left_position = ($real_width/$range) * $real_left - 3;
+    var $real_right_position = ($real_width/$range) * $real_right - 3;
     // Set the handles with text and position
-    $wrapper.children('.facetapi-slider-min').text(minval);
-    $wrapper.children('.facetapi-slider-min').css("margin-left", $real_left_position+"px");
-    $wrapper.children('.facetapi-slider-max').text(maxval);
-    $wrapper.children('.facetapi-slider-max').css("margin-right", $real_right_position+"px");
+    $wrapper.children('.facetapi-slider-min').text(settings.prefix + minval.toFixed(settings.precision).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") + settings.suffix);
+    $wrapper.children('.facetapi-slider-max').text(settings.prefix + maxval.toFixed(settings.precision).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") + settings.suffix);
+
+    $wrapper.children('.facetapi-slider-min').css("margin-left", $real_left_position + "px");
+    $wrapper.children('.facetapi-slider-max').css("margin-right", $real_right_position + "px");
   }
 
   $wrapper.children('.facetapi-slider').slider({
     range: true,
-    min: parseFloat(settings.sliderMin),
-    max: parseFloat(settings.sliderMax),
+    min: parseFloat(settings.sliderMinGlobal),
+    max: parseFloat(settings.sliderMaxGlobal),
     step: settings.sliderStep,
-    values: [settings.sliderMinHandle, settings.sliderMaxHandle],
+    values: [settings.sliderMin, settings.sliderMax],
     slide: function (event, ui) {
       set_slider_handle_labels(ui.values[0], ui.values[1]);
     },
@@ -65,7 +68,7 @@ Drupal.facetapi_slider.makeSlider = function($form, settings) {
     }
   });
 
-  set_slider_handle_labels(settings.sliderMinHandle, settings.sliderMaxHandle);
+  set_slider_handle_labels(settings.sliderMin, settings.sliderMax);
 
   $form.hide();
 }
diff --git a/facetapi_slider.module b/facetapi_slider.module
index d545f03..f5cfa46 100644
--- a/facetapi_slider.module
+++ b/facetapi_slider.module
@@ -4,6 +4,10 @@
  * @file
  * A Facet API widget that displays a slider to control ranges.
  */
+
+/**
+ * Implements hook_menu().
+ */
 function facetapi_slider_menu() {
   $items['facetapi/widget/submit/%/%facetapi_adapter'] = array(
     'access callback' => TRUE,
@@ -47,7 +51,7 @@ function facetapi_slider_facetapi_widgets() {
 function facetapi_slider_forms($form_id, $args) {
   $widgets = &drupal_static(__FUNCTION__);
   $forms = array();
-  // Model code for facetapi itself
+  // Model code for facetapi itself.
   if (!isset($widgets)) {
     $widgets = module_invoke_all('facetapi_widgets');
   }
diff --git a/plugins/facetapi/widget_slider.inc b/plugins/facetapi/widget_slider.inc
index a7ddb74..47079a3 100644
--- a/plugins/facetapi/widget_slider.inc
+++ b/plugins/facetapi/widget_slider.inc
@@ -2,7 +2,6 @@
 
 /**
  * @file
- *
  */
 
 /**
@@ -26,20 +25,21 @@ class FacetapiWidgetSlider extends FacetapiWidget {
 
     $facet = $this->facet->getFacet();
     $adapter = $this->build['#adapter'];
-    // Get our searched values from the active item
+
+    // Get our searched values from the active item.
     if (isset($facet)) {
+
       $searched_values = $adapter->getActiveItems($facet);
       if (!empty($searched_values)) {
         $searched_values = reset($searched_values);
-        $values = $searched_values['value'];
-
-        // Remove the two brackets
-        // @todo Optimize this logic
-        $values = str_replace('[', '', $values);
-        $values = str_replace(']', '', $values);
-        $values = explode(' TO ', $values);
-        $slider_min_handle = $values[0];
-        $slider_max_handle = $values[1];
+        $value = $searched_values['value'];
+
+        // Remove the two brackets.
+        $range = explode(' TO ', trim($value, '{[]}'));
+
+        $slider_min_handle = $range[0];
+        $slider_max_handle = $range[1];
+
         if ($slider_min_handle == $slider_max_handle) {
           return FALSE;
         }
@@ -50,35 +50,46 @@ class FacetapiWidgetSlider extends FacetapiWidget {
     // We do not move this to the top since we do not want to
     // initialize a build if it is not needed.
     $this->key = $this->build['#facet']['name'];
-    $facet = $this->facet->getFacet();
     $build = $this->facet->getBuild();
     $slider = reset($build);
+
     $slider_min = $slider['#range_min'];
     $slider_max = $slider['#range_max'];
     $slider_min_global = $slider['#global_range_min'];
     $slider_max_global = $slider['#global_range_max'];
+    $precision = $this->settings->settings['precision'];
+    $step = $this->settings->settings['step'];
+
+    // If the min global value of the slider is higher than min or
+    // if the max global value of the slider is lower than max
+    // adapt the values so the slider doesn't oversize and you can slide back.
+    if ($slider_min < $slider_min_global) {
+      $slider_min_global = $slider_min;
+    }
+
+    if ($slider_max > $slider_max_global) {
+      $slider_max_global = $slider_max;
+    }
+
+    // Rounding based on the step.
+    $slider_min_global = round($slider_min_global / $step) * $step;
+    $slider_max_global = ceil($slider_max_global / $step) * $step;
+
     if ($slider_min == $slider_max) {
-      // Remove the slider because no results can be given
+      // Remove the slider because no results can be given.
       $this->build[$this->facet['field alias']] = NULL;
       return;
     }
-    $this->jsSettings['sliderMin'] = $slider_min_global;
-    $this->jsSettings['sliderMax'] = $slider_max_global;
-    if (isset($slider_min_handle) && isset($slider_max_handle)) {
-      $this->jsSettings['sliderMinHandle'] = $slider_min_handle;
-      $this->jsSettings['sliderMaxHandle'] = $slider_max_handle;
-    }
-    else {
-      $this->jsSettings['sliderMinHandle'] = $slider_min_global;
-      $this->jsSettings['sliderMaxHandle'] = $slider_max_global;
-    }
 
-    if ($slider_max - $slider_min < 20  && $facet['map options']['field']['type'] != 'number_integer') {
-      $this->jsSettings['sliderStep'] = ($slider_max - $slider_min) / 20;
-    }
-    else {
-      $this->jsSettings['sliderStep'] = 1;
-    }
+    $this->jsSettings['sliderMin'] = $slider_min;
+    $this->jsSettings['sliderMax'] = $slider_max;
+    $this->jsSettings['sliderMinGlobal'] = $slider_min_global;
+    $this->jsSettings['sliderMaxGlobal'] = $slider_max_global;
+    $this->jsSettings['prefix'] = $this->settings->settings['prefix'];
+    $this->jsSettings['suffix'] = $this->settings->settings['suffix'];
+    $this->jsSettings['precision'] = $precision;
+    $this->jsSettings['sliderStep'] = (double) $step;
+
     $this->build[$this->facet['field alias']] = drupal_get_form('facetapi_slider_widget_form_' . $this->facet['field alias'], $adapter, $this->build);
   }
 
@@ -87,6 +98,7 @@ class FacetapiWidgetSlider extends FacetapiWidget {
    */
   public static function widgetForm($form, $form_state, $form_id, FacetapiAdapter $adapter, $build = array()) {
     $slider = array();
+
     if (isset($build['#facet']) && isset($build[$build['#facet']['field alias']]) && isset($build[$build['#facet']['field alias']][$build['#facet']['field']])) {
       $slider = $build[$build['#facet']['field alias']][$build['#facet']['field']];
     }
@@ -156,7 +168,9 @@ class FacetapiWidgetSlider extends FacetapiWidget {
     if (empty($query_string[$filter_key])) {
       $query_string[$filter_key] = array();
     }
+
     $my_field = rawurlencode($form_state['values']['field_alias']);
+
     // Remove any existing filters for my field.
     foreach ($query_string[$filter_key] as $idx => $filter) {
       $parts = explode(':', $filter, 2);
@@ -164,10 +178,82 @@ class FacetapiWidgetSlider extends FacetapiWidget {
         unset($query_string[$filter_key][$idx]);
       }
     }
-    $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']}]";
     $form_state['redirect'] = array($form_state['values']['path'], array('query' => $query_string));
   }
 
+  /**
+   * Allows the widget to provide additional settings to the form.
+   */
+  function settingsForm(&$form, &$form_state) {
+
+    $form['widget']['widget_settings']['slider'][$this->id]['prefix'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Prefix'),
+      '#size' => 5,
+      '#default_value' => $this->settings->settings['prefix'],
+      '#description' => t('Adds a prefix to the slider, e.g. $, #.'),
+      '#states' => array(
+        'visible' => array(
+          'select[name="widget"]' => array('value' => $this->id),
+        ),
+      ),
+    );
+
+    $form['widget']['widget_settings']['slider'][$this->id]['suffix'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Suffix'),
+      '#size' => 5,
+      '#default_value' => $this->settings->settings['suffix'],
+      '#description' => t('Adds a suffix to the slider, e.g. &euro;, pcs., etc.'),
+      '#states' => array(
+        'visible' => array(
+          'select[name="widget"]' => array('value' => $this->id),
+        ),
+      ),
+    );
+
+    $form['widget']['widget_settings']['slider'][$this->id]['precision'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Precision'),
+      '#size' => 5,
+      '#default_value' => $this->settings->settings['precision'],
+      '#description' => t('Rounding of the slider value (number of decimals)'),
+      '#element_validate' => array('element_validate_number'),
+      '#states' => array(
+        'visible' => array(
+          'select[name="widget"]' => array('value' => $this->id),
+        ),
+      ),
+    );
+
+    $form['widget']['widget_settings']['slider'][$this->id]['step'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Step'),
+      '#size' => 5,
+      '#default_value' => $this->settings->settings['step'],
+      '#description' => t('Size of the slider steps'),
+      '#element_validate' => array('element_validate_number'),
+      '#states' => array(
+        'visible' => array(
+          'select[name="widget"]' => array('value' => $this->id),
+        ),
+      ),
+
+    );
+  }
+
+  /**
+   * Returns defaults for the settings this widget provides.
+   */
+  function getDefaultSettings() {
+    return array(
+      'prefix' => '',
+      'suffix' => '',
+      'precision' => '0',
+      'step' => '1',
+    );
+  }
+
 }
