--- faceted_search.inc.orig	2009-07-30 15:20:41.000000000 +0100
+++ faceted_search.inc	2009-07-30 16:47:20.000000000 +0100
@@ -166,6 +166,10 @@
   function get_keywords(&$keywords) {
     // Does nothing by default.
   }
+  /** see http://drupal.org/node/173524#comment-1667662 **/
+  function is_multiple() {
+    return false;
+  }
 }
 
 /**
@@ -1006,8 +1010,11 @@
 
       // Disallow filters that already have been collected from the search text.
       foreach ($module_filters as $filter) {
+        // see http://drupal.org/node/173524#comment-1667662
+        if (!$filter->is_multiple()) {
         unset($selection[$filter->get_key()][$filter->get_id()]);
       }
+      }
 
       // Collect any remaining allowed facets.
       if (!empty($selection)) {
--- taxonomy_facets.module.orig	2009-07-30 14:54:37.000000000 +0100
+++ taxonomy_facets.module	2009-07-30 16:03:35.000000000 +0100
@@ -133,7 +133,7 @@
       foreach ($vocabularies as $vocabulary) {
         _taxonomy_facets_localize_vocabulary($vocabulary);
         // If the vocabulary's corresponding facet is allowed.
-        if (!isset($selection) || isset($selection['taxonomy'][$vocabulary->vid])) {
+        if (!isset($selection) || isset($selection['taxonomy'][$vocabulary->vid]) || $vocabulary->multiple) {
           $facets[] = new taxonomy_facet($vocabulary);
         }
       }
@@ -495,6 +495,9 @@
     $query->add_table('taxonomy_facets_term_node', 'nid', 'n', 'nid', "term_node_{$this->_tid}");
     $query->add_where("term_node_{$this->_tid}.tid = %d", $this->_tid);
   }
+  function is_multiple() {
+    return true;
+  }
 }
 
 // --------------------------------------------------------------------------
--- faceted_search_ui.module.orig	Mon Mar 02 20:17:10 2009
+++ faceted_search_ui.module	Thu Jul 30 14:59:52 2009
@@ -579,20 +579,36 @@ function faceted_search_ui_keyword_block
 function faceted_search_ui_guided_block($search) {
   faceted_search_ui_add_tooltips($search);
 
+  // build searched_tids array containing current selections
+  $searched_tids = array();
+  foreach ($search->get_filters() as $index => $facet) {
+    if (!$facet->is_browsable()) {
+      continue; // Not a facet.
+    }
+    if ($facet->is_active()) {
+      $search_path = $facet->_path;
+      $searched_tids[] = $search_path[0]->_tid;
+      if (count($search_path) > 1) {
+        drupal_set_message("Warning: more than one search_path object: " . print_r($search_path,TRUE));
+      }
+    }
+  }
   $facet_content = array();
   foreach ($search->get_filters() as $index => $facet) {
     if (!$facet->is_browsable()) {
       continue; // Not a facet.
     }
-
+    if (!empty($facet->_path)) { // ignore taxonomy facets that have terms already selected
+      continue;
+    }
     if ($facet->get_max_categories() > 0) {
       $max_count = $facet->get_max_categories();
     }
     else {
       $max_count = NULL; // No limit.
     }
+    $categories = faceted_search_ui_build_categories($search, $index, 0, $max_count, TRUE,$searched_tids);
 
-    $categories = faceted_search_ui_build_categories($search, $index, 0, $max_count);
     if (count($categories) > 0 || $facet->is_active()) {
       $content = theme('faceted_search_ui_facet_heading', $search, $search->ui_state, $search->get_filters(), $index, 'guided');
       $content .= theme('faceted_search_ui_categories', $facet, $categories, $search->ui_state['stage']);
@@ -1058,7 +1074,7 @@ function faceted_search_ui_build_breadcr
  * @param $links
  *   TRUE to generate category links, FALSE to generate text.
  */
-function faceted_search_ui_build_categories($search, $index, $from = NULL, $max_count = NULL, $links = TRUE) {
+function faceted_search_ui_build_categories($search, $index, $from = NULL, $max_count = NULL, $links = TRUE, $searched_tids=array()) {
   $facets = $search->get_filters();
   $facet = $facets[$index];
   $facet->set_sort($search->ui_state['facet-sort']);
@@ -1066,7 +1082,6 @@ function faceted_search_ui_build_categor
   // Load the categories. If a limit is used, we load one extra category in
   // order to determine whether a 'more' link needs to be displayed.
   $categories = $search->load_categories($facet, $from, (isset($max_count) ? $max_count + 1 : $max_count));
-
   // Replace the facet with a clone to allow active category manipulations (to
   // avoid manipulating the original facet).
   $facets[$index] = drupal_clone($facet);
@@ -1083,6 +1098,9 @@ function faceted_search_ui_build_categor
   foreach ($categories as $category_index => $category) {
     if (isset($max_count) && $category_index == $max_count) {
       break; // Do not theme the extra category.
+    }
+    if (in_array($category->_tid, $searched_tids) !== FALSE) {
+      continue;
     }
     if ($links) {
       $active_path = $facet->get_active_path();
