--- faceted_search.inc.orig	2009-07-30 15:20:41.000000000 +0100
+++ faceted_search.inc	2009-07-30 15:33:19.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 15:44:56.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);
         }
       }
