--- taxonomy.module.orig	2004-04-01 09:12:37.557382306 -0500
+++ taxonomy.module	2004-04-01 09:43:51.743583747 -0500
@@ -730,6 +730,31 @@ function taxonomy_page() {
       case "feed":
         taxonomy_feed($taxonomy);
       break;
+      case 'vocabulary':
+      case 'children':
+        $tids = $taxonomy->tids;
+        // Unset str_tids and tids, as we will rebuild them
+        unset($taxonomy->str_tids);
+        unset($taxonomy->tids);
+        if (arg(1) == 'vocabulary') {
+          $taxonomy->str_vocabs = check_query(arg(3));
+          $result = db_query('SELECT tid FROM {term_data} WHERE vid in (%s)', $taxonomy->str_vocabs);
+          while ($term = db_fetch_object($result)) {
+            $taxonomy->tids[] = $term->tid;
+          }
+        }
+        elseif (arg(1) == 'children') {
+          foreach ($tids as $tid) {
+            $taxonomy->tids[] = $tid;
+            $result = db_query("SELECT t.tid FROM {term_hierarchy} h, {term_data} t WHERE h.tid = t.tid AND parent = %d", $tid);
+            while ($term = db_fetch_object($result)) {
+              $taxonomy->tids[] = $term->tid;
+            }
+          }
+        }
+        // build str_tids, set to 0 if no tids
+        $taxonomy->tids ? $taxonomy->str_tids = implode(",", $taxonomy->tids) : $taxonomy->str_tids = 0;
+        // Fall through and process tids
       default:
       // Build title:
       $sql = 'SELECT name FROM {term_data} WHERE tid IN (%s)';
