diff --git a/contrib/search_api_views/search_api_views.views.inc b/contrib/search_api_views/search_api_views.views.inc
index a021186..bd138fe 100644
--- a/contrib/search_api_views/search_api_views.views.inc
+++ b/contrib/search_api_views/search_api_views.views.inc
@@ -134,8 +134,8 @@ function search_api_views_views_data() {
         if (isset($field['entity_type']) && $field['entity_type'] === 'taxonomy_term') {
           $field_id = ($pos = strrpos($key, ':')) ? substr($key, $pos + 1) : $key;
           $field_info = field_info_field($field_id);
-          if (isset($field_info['settings']['allowed_values'][0]['vocabulary'])) {
-            $vocabulary_fields[$field_info['settings']['allowed_values'][0]['vocabulary']][] = $key;
+          if ($vocabulary = _search_api_views_get_field_vocabulary($field_info)) {
+            $vocabulary_fields[$vocabulary][] = $key;
           }
           else {
             $vocabulary_fields[''][] = $key;
@@ -194,13 +194,7 @@ function _search_api_views_add_handlers($id, array $field, EntityMetadataWrapper
   }
 
   $info = $wrapper->info();
-  if ($inner_type == 'boolean') {
-    $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterBoolean';
-  }
-  elseif ($inner_type == 'date') {
-    $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterDate';
-  }
-  elseif (isset($field['entity_type']) && $field['entity_type'] === 'user') {
+  if (isset($field['entity_type']) && $field['entity_type'] === 'user') {
     $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterUser';
   }
   elseif (isset($field['entity_type']) && $field['entity_type'] === 'taxonomy_term') {
@@ -216,21 +210,20 @@ function _search_api_views_add_handlers($id, array $field, EntityMetadataWrapper
         $field_info = field_info_field($parts[count($parts) - 2]);
       }
     }
-    // "Terms reference" vocabulary
-    if (isset($field_info['settings']['allowed_values'][0]['vocabulary'])) {
-      $table[$id]['filter']['vocabulary'] = $field_info['settings']['allowed_values'][0]['vocabulary'];
-    }
-    // "Entity reference" vocabulary
-    elseif (isset($field_info['settings']['handler']) && $field_info['settings']['handler'] === 'base') {
-      if (!empty($field_info['settings']['handler_settings']['target_bundles'])) {
-        $table[$id]['filter']['vocabulary'] = key($field_info['settings']['handler_settings']['target_bundles']);
-      }
+    if ($vocabulary = _search_api_views_get_field_vocabulary($field_info)) {
+      $table[$id]['filter']['vocabulary'] = $vocabulary;
     }
   }
   elseif (isset($info['options list']) && is_callable($info['options list'])) {
     $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterOptions';
     $table[$id]['filter']['multi-valued'] = search_api_is_list_type($type);
   }
+  elseif ($inner_type == 'boolean') {
+    $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterBoolean';
+  }
+  elseif ($inner_type == 'date') {
+    $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterDate';
+  }
   else {
     $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilter';
   }
@@ -299,3 +292,24 @@ function search_api_views_views_plugins() {
 
   return $ret;
 }
+
+/**
+ * Returns vocabulary machine name of a term field.
+ */
+function _search_api_views_get_field_vocabulary($field_id) {
+  if ($field_info = field_info_field($field_id)) {
+    // "Terms reference" vocabulary.
+    if (isset($field_info['settings']['allowed_values'][0]['vocabulary'])) {
+      return $field_info['settings']['allowed_values'][0]['vocabulary'];
+    }
+    // "Entity reference" vocabulary.
+    elseif (isset($field_info['settings']['handler']) && $field_info['settings']['handler'] === 'base') {
+      if (!empty($field_info['settings']['handler_settings']['target_bundles'])) {
+        $bundles = $field_info['settings']['handler_settings']['target_bundles'];
+        if (count($bundles) == 1) {
+          return key($bundles);
+        }
+      }
+    }
+  }
+}