diff --git a/facetapi.api.php b/facetapi.api.php
index 8d6d163..dcb0384 100644
--- a/facetapi.api.php
+++ b/facetapi.api.php
@@ -135,6 +135,8 @@ function hook_facetapi_realm_info_alter(array &$realm_info) {
  *   - field api name: (optional) The machine readable name of the Field API
  *     field data the facet is associated with, FALSE if it is not associated
  *     with a field.
+ *   - field api bundles: (optional) An array of entity names that this field
+ *     contains bundle information for. Defaults to an empty array.
  *   - query type: The query type plugin ID used by the backend to execute the
  *     facet query for this field.
  *   - dependency plugins: (optional) An array of dependency plugin IDs that are
diff --git a/facetapi.module b/facetapi.module
index 794683c..947b3fe 100644
--- a/facetapi.module
+++ b/facetapi.module
@@ -369,6 +369,8 @@ function facetapi_realm_load($realm_name) {
  *     pass the filter information through the query string.
  *   - field api name: The machine readable name of the Field API field data the
  *     facet is associated with, FALSE if it is not associated with a field.
+ *   - field api bundles: An array of entity names that this field contains
+ *     bundle information for.
  *   - query type: The query type plugin ID used by the backend to execute the
  *     facet query for this field.
  *   - dependency plugins: An array of dependency plugin IDs that are supported
@@ -450,12 +452,11 @@ function facetapi_get_searcher_info() {
       $info['type'] = $info['types'][key($info['types'])];
     }
 
-    // Maps "types" so we can do faster lookups via isset().
-    $info['types'] = drupal_map_assoc($info['types']);
     $searcher_info[$searcher] = $info;
   }
 
   drupal_alter('facetapi_searcher_info', $searcher_info);
+  array_walk($searcher_info, 'facetapi_map_assoc', 'types');
   return $searcher_info;
 }
 
@@ -525,6 +526,7 @@ function facetapi_get_facet_info($searcher) {
           'field' => $facet_name,
           'field alias' => isset($info['field']) ? $info['field'] : $facet_name,
           'field api name' => FALSE,
+          'field api bundles' => array(),
           'query type' => 'term',
           'dependency plugins' => array(),
           'default widget' => FALSE,
@@ -549,6 +551,7 @@ function facetapi_get_facet_info($searcher) {
 
     // Invokes alter hook, sorts and returns.
     drupal_alter('facetapi_facet_info', $facet_info[$searcher], $searcher_info[$searcher]);
+    array_walk($facet_info[$searcher], 'facetapi_map_assoc', 'field api bundles');
     uasort($facet_info[$searcher], 'drupal_sort_weight');
   }
 
@@ -556,6 +559,22 @@ function facetapi_get_facet_info($searcher) {
 }
 
 /**
+ * Wrapper around drupal_map_assoc() for a key in all items of an array.
+ *
+ * Useful as an array_walk() callback.
+ *
+ * @param array &$array
+ *   The array being modified.
+ * @param $name
+ *   The key of the array being modified, usually the name of a definition.
+ * @param $key
+ *   The key in the array being passed to drupal_map_assoc().
+ */
+function facetapi_map_assoc(&$array, $name, $key) {
+  $array[$key] = drupal_map_assoc($array[$key]);
+}
+
+/**
  * Returns all sort definitions.
  *
  * @return array
@@ -715,6 +734,7 @@ function facetapi_facetapi_facet_info($searcher_info) {
     $facets['bundle'] = array(
       'label' => t('Content type'),
       'description' => t('Filter by content type.'),
+      'field api bundles' => array('node'),
       'map callback' => 'facetapi_map_bundle',
       'values callback' => 'facetapi_callback_type_values',
       'facet mincount allowed' => TRUE,
diff --git a/plugins/facetapi/dependency_bundle.inc b/plugins/facetapi/dependency_bundle.inc
index c7a9191..5118a1a 100644
--- a/plugins/facetapi/dependency_bundle.inc
+++ b/plugins/facetapi/dependency_bundle.inc
@@ -19,17 +19,27 @@ class FacetapiDependencyBundle extends FacetapiDependency {
         // @todo Do we need defensive coding here?
         $field_info = field_info_field($this->facet['field api name']);
 
-        // Gets the bundles the searcher indexing.
-        $bundles = array();
-        foreach ($this->adapter->getTypes() as $type) {
-          if (isset($field_info['bundles'][$type])) {
-            $bundles += $field_info['bundles'][$type];
-          }
+        // Iterate over field info, collect bundles this field is attached to.
+        $field_bundles = array();
+        foreach ($field_info['bundles'] as $entity => $bundles) {
+          $field_bundles[$entity] = array_flip($bundles);
         }
 
-        // Attempts to find a match.
-        $matches = array_intersect_key(array_flip($bundles), $this->activeItems['bundle']);
-        return ($matches) ? NULL : FALSE;
+        // Find active facets that contain bundle data.
+        $enabled = array_filter($this->adapter->getEnabledFacets(), array($this, 'filterBundleFacets'));
+        $active = array_filter($this->activeItems);
+        $active_bundles = array_intersect_key($enabled, $active);
+
+        // Check if there is any match.
+        foreach ($active_bundles as $facet) {
+          foreach ($facet['field api bundles'] as $entity) {
+            $bundles = (isset($field_bundles[$entity])) ? $field_bundles[$entity] : array();
+            if (array_intersect_key($active[$facet['name']], $field_bundles[$entity])) {
+              return NULL;
+            }
+          }
+        }
+        return FALSE;
 
       case 'selected':
         $matches = array_intersect_key(
@@ -41,6 +51,19 @@ class FacetapiDependencyBundle extends FacetapiDependency {
   }
 
   /**
+   * Returns TRUE if the facet contains bundle information.
+   *
+   * @param array $facet
+   *   The facet definition beinf filtered.
+   *
+   * @return
+   *   A boolean flagging whether the item should remain in the array.
+   */
+  public function filterBundleFacets($facet) {
+    return !empty($facet['field api bundles']);
+  }
+
+  /**
    * Adds dependency settings to the form.
    */
   public function settingsForm(&$form, &$form_state) {
