diff --git a/modules/node/node.admin.inc b/modules/node/node.admin.inc
index a6ea1b5..dd0e0b2 100644
--- a/modules/node/node.admin.inc
+++ b/modules/node/node.admin.inc
@@ -106,6 +106,15 @@ function node_filters() {
       ) + $languages,
     );
   }
+
+  // The taxonomy filter
+  if ($taxonomy = module_invoke('taxonomy', 'form_all')) {
+    $filters['term'] = array(
+      'title' => t('category'),
+      'options' => array('[any]' => t('any')) + $taxonomy
+    );
+  }
+
   return $filters;
 }
 
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 50d2fd6..a21cac4 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -1729,5 +1729,24 @@ function taxonomy_taxonomy_term_delete($term) {
 }
 
 /**
+ * Generate a set of options for selecting a term from all vocabularies.
+ */
+function taxonomy_form_all() {
+  $vocabularies = taxonomy_get_vocabularies();
+  $options = array();
+  foreach ($vocabularies as $vid => $vocabulary) {
+    $tree = taxonomy_get_tree($vid);
+    if ($tree && (count($tree) > 0)) {
+      $options[$vocabulary->name] = array();
+      foreach ($tree as $term) {
+        $options[$vocabulary->name][$term->tid] = str_repeat('-', $term->depth) . $term->name;
+      }
+    }
+  }
+  return $options;
+}
+
+
+/**
  * @} End of "defgroup taxonomy_index"
  */
