diff --git a/facetapi.facetapi.inc b/facetapi.facetapi.inc
index cabd809..0fe4f02 100644
--- a/facetapi.facetapi.inc
+++ b/facetapi.facetapi.inc
@@ -174,6 +174,18 @@ function facetapi_facetapi_filters() {
         'requirements' => array('facetapi_requirement_facet_hierarchical' => TRUE),
       ),
     ),
+    'remove_single_count' => array(
+      'handler' => array(
+        'label' => t('Remove any facets that only have one result in total.'),
+        'class' => 'FacetapiFilterRemoveSingleCount',
+      ),
+    ),
+    'remove_single_item' => array(
+      'handler' => array(
+        'label' => t('Remove any facets that only have one matching item.'),
+        'class' => 'FacetapiFilterRemoveSingleItem',
+      ),
+    ),
   );
 }
 
diff --git a/plugins/facetapi/filter.inc b/plugins/facetapi/filter.inc
index 0bc71e6..4d8d904 100644
--- a/plugins/facetapi/filter.inc
+++ b/plugins/facetapi/filter.inc
@@ -152,3 +152,63 @@ class FacetapiFilterCurrentDepth extends FacetapiFilter {
     return $build;
   }
 }
+
+/**
+ * Plugin that filters any facets with only one total result.
+ */
+class FacetapiFilterRemoveSingleCount extends FacetapiFilter {
+
+  /**
+   * Implements FacetapiFilter::execute().
+   */
+  public function execute(array $build) {
+    $count = 0;
+    foreach ($build as $item) {
+      $count += !empty($item['#count']) ? $item['#count'] : 0;
+    }
+    if ($count > 1) {
+      return $build;
+    }
+    else {
+      return array();
+    }
+  }
+}
+
+/**
+ * Plugin that filters any facets with only one matching item.
+ */
+class FacetapiFilterRemoveSingleItem extends FacetapiFilter {
+
+  /**
+   * Implements FacetapiFilter::execute().
+   */
+  public function execute(array $build) {
+    if (count($build) > 1) {
+      return $build;
+    }
+    // If there is only one item, we still need to check for children.
+    elseif (count($build) == 1) {
+      // Pretend to loop, but we only care about 1 item.
+      foreach ($build as $item) {
+        // If the facet is active, we want to display it, since it means that
+        // a user activated it, and they should be able to deactivate it.
+        if (!empty($item['#active'])) {
+          return $build;
+        }
+        // If no children, or only 1 child, do not display the item.
+        elseif (empty($item['#item_children']) || count($item['#item_children']) == 1) {
+          return array();
+        }
+        // Otherwise there are multiple children, so display as normal.
+        else {
+          return $build;
+        }
+        break;
+      }
+    }
+    else {
+      return array();
+    }
+  }
+}
