diff --git apachesolr.taxonomy.inc apachesolr.taxonomy.inc
index e626db4..87e790a 100644
--- apachesolr.taxonomy.inc
+++ apachesolr.taxonomy.inc
@@ -9,57 +9,67 @@
  * Overrides taxonomy/term/X links
  */
 function apachesolr_search_taxonomy_term_page($str_tids = '', $depth = 0, $op = 'page') {
-  drupal_add_feed(url('taxonomy/term/' . $str_tids . '/' . $depth . '/feed'), 'RSS - '. $title);
-
-  $vids_to_override = apachesolr_get_enabled_facets('apachesolr_search');
-
   $terms = taxonomy_terms_parse_string($str_tids);
-  $redirect_to_apachesolr = TRUE;
-
-  // Only support one term, only page callbacks, and only depth = 0 (because of way Solr indexing works)
-  if ((count($terms['tids']) > 1 && $terms['operator'] != 'and') || ($op != 'page') || ($depth != 0)) {
-    $redirect_to_apachesolr = FALSE;
+  if ($terms['operator'] != 'and' && $terms['operator'] != 'or') {
+    drupal_not_found();
   }
-  else {
-    // Check if term belongs to vocabulary selected by admin as an available filter
-    $term = taxonomy_get_term($terms['tids'][0]);
-    $vocabulary_facet_name = 'im_vid_' . $term->vid;
 
-    if (!in_array($vocabulary_facet_name, $vids_to_override)) {
-      $redirect_to_apachesolr = FALSE;
+  if ($terms['tids']) {
+    $result = db_query(db_rewrite_sql('SELECT t.tid, t.name FROM {term_data} t WHERE t.tid IN (' . db_placeholders($terms['tids']) . ')', 't', 'tid'), $terms['tids']);
+    $tids = array(); // we rebuild the $tids-array so it only contains terms the user has access to.
+    $names = array();
+    while ($term = db_fetch_object($result)) {
+      $tids[] = $term->tid;
+      $names[] = $term->name;
     }
-  }
 
-  if ($redirect_to_apachesolr == FALSE) {
-    // Fallback to normal taxonomy/term page
-    require_once(drupal_get_path('module', 'taxonomy') .'/taxonomy.pages.inc');
-    return taxonomy_term_page($str_tids, $depth, $op);
-  }
-  else {
-    $filters = 'tid:' . array_pop($terms['tids']);
-    $solrsort = variable_get('apachesolr_search_taxonomy_sort', 'created desc');
-    $page = isset($_GET['page']) ? $_GET['page'] : 0;
-    $_GET['retain-filters'] = 1;
+    if ($names) {
+      $term = taxonomy_get_term($tids[0]);
 
-    try {
-      module_load_include('inc', 'search', 'search.pages');
-      $data = apachesolr_search_execute('', $filters, $solrsort, 'search/apachesolr_search', $page);
-      $results = theme('search_results', $data, 'apachesolr_search');
-    }
-    catch (Exception $e) {
-      watchdog('Apache Solr', t('Error running search'));
-    }
+      // Only support one term, only page callbacks, and only depth = 0 (because of way Solr indexing works)
+      // Check if term belongs to vocabulary selected by admin as an available filter
+      if (user_access('search content') && count($terms['tids']) == 1 && $op == 'page' && $depth == 0 && in_array('im_vid_' . $term->vid, apachesolr_get_enabled_facets('apachesolr_search'))) {
+        $title = implode(', ', $names);
+        drupal_set_title(check_plain($title));
+
+        // Build breadcrumb based on first hierarchy of first term:
+        $current->tid = $tids[0];
+        $breadcrumb = array();
+        while ($parents = taxonomy_get_parents($current->tid)) {
+          $current = array_shift($parents);
+          $breadcrumb[] = l($current->name, 'taxonomy/term/' . $current->tid);
+        }
+        $breadcrumb[] = l(t('Home'), NULL);
+        $breadcrumb = array_reverse($breadcrumb);
+        drupal_set_breadcrumb($breadcrumb);
+
+        $_GET['retain-filters'] = 1;
+        try {
+          module_load_include('inc', 'search', 'search.pages');
+          $data = apachesolr_search_execute('', 'tid:' . $tids[0], variable_get('apachesolr_search_taxonomy_sort', 'created desc'), 'search/apachesolr_search', isset($_GET['page']) ? $_GET['page'] : 0);
+          $results = theme('search_results', $data, 'apachesolr_search');
+        }
+        catch (Exception $e) {
+          watchdog('Apache Solr', t('Error running search'));
+        }
 
-    // Set the title to the term name like taxonomy does.
-    drupal_set_title(check_plain($term->name));
+        if ($results) {
+          $results = theme('box', t('Results for %term', array('%term' => $term->name)), $results);
+        }
+        else {
+          $results = theme('box', t('Your search yielded no results'), variable_get('apachesolr_search_noresults', apachesolr_search_noresults()));
+        }
 
-    if ($results) {
-      $results = theme('box', t('Results for %term', array('%term' => $term->name)), $results);
+        drupal_add_feed(url('taxonomy/term/' . $str_tids . '/' . $depth . '/feed'), 'RSS - '. $title);
+        return drupal_get_form('search_form', NULL, '', 'apachesolr_search') . $results;
+      }
+
+      // Fallback to normal taxonomy/term page
+      require_once(drupal_get_path('module', 'taxonomy') .'/taxonomy.pages.inc');
+      return taxonomy_term_page($str_tids, $depth, $op);
     }
     else {
-      $results = theme('box', t('Your search yielded no results'), search_help('search#noresults', drupal_help_arg()));
+      drupal_not_found();
     }
-
-    return drupal_get_form('search_form', NULL, '', 'apachesolr_search') . $results;
   }
 }
