diff --git a/facetapi_select.module b/facetapi_select.module
index 93891ed..73c38ef 100644
--- a/facetapi_select.module
+++ b/facetapi_select.module
@@ -1,21 +1,22 @@
 <?php
 
-function facetapi_select_facet_form($form, &$form_state, $variables, $count = 0) {
-  $name = 'facetapi_select_facet_form_' . $count;
-
-  // Add link to deactive widget if currently active
-  if (!empty($variables['active_items'])) {
-    $form['deactivate_links'] = array(
-      '#theme' => 'item_list',
-      '#items' => $variables['active_items']
-    );
+/**
+ * Implements hook_forms().
+ */
+function facetapi_select_forms($form_id) {
+  // Build all multiselect facet forms on the page using the same form
+  // callback.
+  $forms = array();
+  if (strpos($form_id, 'facetapi_select_facet_form_') === 0) {
+    $forms[$form_id]['callback'] = 'facetapi_select_facet_form';
   }
+  return $forms;
+}
 
+function facetapi_select_facet_form($form, &$form_state, $variables) {
   if (!empty($variables['options'])) {
     $form['facets'] = array(
       '#type' => 'select',
-      '#id' => $name,
-      '#name' => $name,
       '#default_value' => '',
       '#options' => $variables['options'],
       '#attributes' => array(
@@ -45,8 +46,8 @@ function facetapi_select_facet_form($form, &$form_state, $variables, $count = 0)
  * Submit function for facetapi_select_form().
  */
 function facetapi_select_facet_form_submit($form, &$form_state) {
-  preg_match('/^\/(.*)\?(.*)/', $form_state['values']['facets'], $filters);
-  drupal_goto($filters[1], $query = $filters[2]);
+  $parsed_url = drupal_parse_url($form_state['values']['facets']);
+  drupal_goto($parsed_url['path'], array('query' => $parsed_url['query']));
 }
 
 /**
@@ -74,6 +75,7 @@ function facetapi_select_theme() {
         'facet_text' => NULL,
         'facet_count' => 0,
         'show_count' => TRUE,
+        'is_active' => FALSE,
       ),
     ),
   );
@@ -85,6 +87,9 @@ function facetapi_select_theme() {
 function theme_facetapi_select_select_option($variables) {
   $output = $variables['facet_text'];
 
+  if ($variables['is_active']) {
+    $output = '(-) ' . $output;
+  }
   if ($variables['show_count']) {
     $output .= ' (' . $variables['facet_count'] . ')';
   }
diff --git a/plugins/facetapi/FacetapiSelectDropdowns.inc b/plugins/facetapi/FacetapiSelectDropdowns.inc
index 4ee2217..355fb29 100644
--- a/plugins/facetapi/FacetapiSelectDropdowns.inc
+++ b/plugins/facetapi/FacetapiSelectDropdowns.inc
@@ -23,18 +23,28 @@ class FacetapiSelectDropdowns extends FacetapiWidgetLinks {
     $variables = $this->buildItems($element);
 
     if (!empty($variables['options'])) {
-      $default_option_label = !empty($settings->settings['default_option_label']) ? filter_xss_admin($settings->settings['default_option_label']) : t('--Choose--');
-      $variables['default_option_label'] = theme('facetapi_select_select_option', array(
-        'facet_text' => $default_option_label,
-        'show_count' => FALSE
-      ));
+      $reset_option_label = !empty($settings->settings['reset_option_label']) ? filter_xss_admin($settings->settings['reset_option_label']) : t('--Reset--');
+
+      if (!empty($variables['facet_reset_url'])) {
+        $variables['options'] = array_merge(
+          array($variables['facet_reset_url'] => $reset_option_label),
+          $variables['options']
+        );
+      }
+      else {
+        $default_option_label = !empty($settings->settings['default_option_label']) ? filter_xss_admin($settings->settings['default_option_label']) : t('--Choose--');
+        $variables['default_option_label'] = theme('facetapi_select_select_option', array(
+          'facet_text' => $default_option_label,
+          'show_count' => FALSE
+        ));
+      }
     }
 
-    $element = drupal_get_form('facetapi_select_facet_form', $variables, $count);
+    $element = drupal_get_form("facetapi_select_facet_form_$count", $variables);
   }
 
   /**
-   * Build the active items and the options array for the provided facetapi element.
+   * Build the options array for the provided facetapi element.
    *
    * @param array $element
    *   The facetapi element as provided by execute().
@@ -44,33 +54,27 @@ class FacetapiSelectDropdowns extends FacetapiWidgetLinks {
    */
   protected function buildItems($element, $depth = 0) {
     $settings = $this->settings;
-    $variables = array('active_items' => array(), 'options' => array());
+    $variables = array('options' => array());
+    $facet_settings = $this->facet->getSettings();
 
     $is_active = FALSE;
     $url = NULL;
     foreach ($element as $value => $item) {
-      $is_active = FALSE;
       $url = $this->getUrl($item);
       $item['#markup'] = str_repeat('-', $depth) . ' ' . $item['#markup'];
 
-      if ($item['#active']) {
-        // We use $element[$value] so we don't get the "--" in front of the text
-        // since it is already tiered for the active links.
-        $variables['active_items'][$url]['data'] = $this->buildActiveLink($element[$value]);
-        $is_active = TRUE;
+      if ($facet_settings->settings['limit_active_items'] && $item['#active']) {
+        $variables['options'][''] = $this->buildSelectOption($item);
+        $variables['facet_reset_url'] = $url;
       }
       else {
         $variables['options'][$url] = $this->buildSelectOption($item);
       }
-
-      if ($this->shouldExpandChildren($is_active, $item)) {
-        $this->appendChildren($variables, $item, $depth, $is_active);
-      }
     }
 
-    // When there are currently no options and the current active item has children
-    // let's add the children as options.
-    if ($is_active && empty($variables['options']) && !empty($item['#item_children'])) {
+    // When there is only one option and it is active with children let's add
+    // the children as options.
+    if ($item['#active'] && count($variables['options']) === 1 && !empty($item['#item_children'])) {
       $this->appendChildren($variables, $item, $depth);
     }
 
@@ -78,29 +82,6 @@ class FacetapiSelectDropdowns extends FacetapiWidgetLinks {
   }
 
   /**
-   * Determine if we should expand the children for the current active item.
-   *
-   * @param array $is_active
-   *   Dictates if the current item is active.
-   * @param array $item
-   *   The current item we are processing.
-   *
-   * @return boolean
-   *   Returns TRUE if we should expand the items children and FALSE otherwise.
-   */
-  protected function shouldExpandChildren($is_active, $item) {
-    $element = &$this->build[$this->facet['field alias']];
-    $settings = $this->settings;
-
-    $has_siblings = count($element) > 1;
-    $has_children = !empty($item['#item_children']);
-    $is_expanded = (bool) $settings->settings['show_expanded'];
-    $is_active_and_has_siblings = ($is_active && $has_siblings);
-
-    return (($is_expanded || $is_active_and_has_siblings) && $has_children);
-  }
-
-  /**
    * Append children to the active items and options for the facet.
    *
    * @param array $variables
@@ -117,70 +98,12 @@ class FacetapiSelectDropdowns extends FacetapiWidgetLinks {
   protected function appendChildren(array &$variables, array $item, $depth = 0, $is_active = FALSE) {
     $tmpItems = $this->buildItems($item['#item_children'], ++$depth);
 
-    if (!empty($tmpItems['active_items'])) {
-      $variables['active_items'][$this->getUrl($item)]['children'] = $tmpItems['active_items'];
-    }
-
     if (!empty($tmpItems['options'])) {
-      // We only ever want to add an OpGroup when there are child options and
-      // the current item is active.
-      if ($is_active) {
-        $this->appendOpGroupheader($variables, $item);
-      }
       $variables['options'] += $tmpItems['options'];
     }
   }
 
   /**
-   * Append the OpGroup header to the options array for active items so that
-   * they should not selectable.
-   *
-   * @param array $variables
-   *   The variables array as provided by FacetapiSlectDropdowns::getItems().
-   * @param array $item
-   *   The item to build the opgroup header for.
-   *
-   * @return void
-   */
-  function appendOpGroupheader(array &$variables, array $item) {
-    if (!empty($item) && isset($variables['active_items'][$this->getUrl($item)])) {
-      $text = $this->buildSelectOption($item);
-      $variables['options'][$text] = array();
-    }
-  }
-
-  /**
-   * Build an individual active item link.
-   *
-   * @param array $item
-   *   The facet item to build as an active link.
-   * @param string $path
-   *   The path to use for the link as determined by the facetapi_select settings.
-   *
-   * @return string
-   *   The built active link based on the specified item.
-   */
-  protected function buildActiveLink(array $item) {
-    // We call theme directly here because we will be adding these items to a
-    // theme_list() build array as the items.
-    return theme('facetapi_link_active', array(
-      'text' => $item['#markup'],
-      'count' => $item['#count'],
-      'path' => $item['#path'],
-      'options' => array(
-        'query' => $item['#query'],
-        'attributes' => array(
-          'class' => 'facetapi-active',
-          'id' => drupal_html_id('facetapi-link'),
-          'rel' => 'nofollow',
-        ),
-        // Because the path has already been through url(), mark it as external.
-        'html' => TRUE,
-      )
-    ));
-  }
-
-  /**
    * Build an indiviudal select option.
    *
    * @param array $item
@@ -194,6 +117,7 @@ class FacetapiSelectDropdowns extends FacetapiWidgetLinks {
       'facet_text' => $item['#markup'],
       'facet_count' => $item['#count'],
       'show_count' => isset($this->settings->settings['hide_facet_count']) ? !$this->settings->settings['hide_facet_count'] : TRUE,
+      'is_active' => isset($item['#active']) ? $item['#active'] : FALSE,
     ));
   }
 
@@ -226,11 +150,17 @@ class FacetapiSelectDropdowns extends FacetapiWidgetLinks {
     );
 
     $form['widget']['widget_settings']['links'][$this->id]['default_option_label'] = array(
-      '#title' => t('Default Option Label'),
+      '#title' => t('Default option label'),
       '#type' => 'textfield',
       '#default_value' => !empty($this->settings->settings['default_option_label']) ? $this->settings->settings['default_option_label'] : '',
       '#states' => $states,
     );
+    $form['widget']['widget_settings']['links'][$this->id]['reset_option_label'] = array(
+      '#title' => t('Reset option label'),
+      '#type' => 'textfield',
+      '#default_value' => !empty($this->settings->settings['reset_option_label']) ? $this->settings->settings['reset_option_label'] : '',
+      '#states' => $states,
+    );
     $form['widget']['widget_settings']['links'][$this->id]['submit_page'] = array(
       '#type' => 'textfield',
       '#title' => t('Force this facet to submit to a specific search page'),
