diff --git a/modules/taxonomy.module b/modules/taxonomy.module
index dc0600f9695f39cdf76c14dba6c12ed9739e9ac9..29ccd3ae0aed3f0d4cf42f7f3036a05d1d1498c8 100644
--- a/modules/taxonomy.module
+++ b/modules/taxonomy.module
@@ -548,6 +548,26 @@ function taxonomy_form($vid, $value = 0, $help = NULL, $name = 'taxonomy') {
   return _taxonomy_term_select(check_plain($vocabulary->name), $name, $value, $vid, $help, intval($vocabulary->multiple), $blank);
 }
 
+/**
+ * Generate a set of options for selecting a term from all vocabularies. Can be
+ * passed to form_select.
+ */
+function taxonomy_form_all($free_tags = 0) {
+  $vocabularies = taxonomy_get_vocabularies();
+  $options = array();
+  foreach ($vocabularies as $vid => $vocabulary) {
+    if ($vocabulary->tags && !$free_tags) { continue; }
+    $tree = taxonomy_get_tree($vid);
+    $options[$vocabulary->name] = array();
+    if ($tree) {
+      foreach ($tree as $term) {
+        $options[$vocabulary->name][$term->tid] = _taxonomy_depth($term->depth, '-') . $term->name;
+      }
+    }
+  }
+  return $options;
+}
+
 /**
  * Return an array of all vocabulary objects.
  *
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index dc0600f9695f39cdf76c14dba6c12ed9739e9ac9..29ccd3ae0aed3f0d4cf42f7f3036a05d1d1498c8 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -548,6 +548,26 @@ function taxonomy_form($vid, $value = 0, $help = NULL, $name = 'taxonomy') {
   return _taxonomy_term_select(check_plain($vocabulary->name), $name, $value, $vid, $help, intval($vocabulary->multiple), $blank);
 }
 
+/**
+ * Generate a set of options for selecting a term from all vocabularies. Can be
+ * passed to form_select.
+ */
+function taxonomy_form_all($free_tags = 0) {
+  $vocabularies = taxonomy_get_vocabularies();
+  $options = array();
+  foreach ($vocabularies as $vid => $vocabulary) {
+    if ($vocabulary->tags && !$free_tags) { continue; }
+    $tree = taxonomy_get_tree($vid);
+    $options[$vocabulary->name] = array();
+    if ($tree) {
+      foreach ($tree as $term) {
+        $options[$vocabulary->name][$term->tid] = _taxonomy_depth($term->depth, '-') . $term->name;
+      }
+    }
+  }
+  return $options;
+}
+
 /**
  * Return an array of all vocabulary objects.
  *