Index: wp-includes/class-wp.php
===================================================================
--- wp-includes/class-wp.php	(revision 21531)
+++ wp-includes/class-wp.php	(working copy)
@@ -286,17 +286,22 @@
 			if ( $t->query_var && isset( $this->query_vars[$t->query_var] ) )
 				$this->query_vars[$t->query_var] = str_replace( ' ', '+', $this->query_vars[$t->query_var] );
 
-		// Limit publicly queried post_types to those that are publicly_queryable
-		if ( isset( $this->query_vars['post_type']) ) {
-			$queryable_post_types = get_post_types( array('publicly_queryable' => true) );
-			if ( ! is_array( $this->query_vars['post_type'] ) ) {
-				if ( ! in_array( $this->query_vars['post_type'], $queryable_post_types ) )
-					unset( $this->query_vars['post_type'] );
-			} else {
-				$this->query_vars['post_type'] = array_intersect( $this->query_vars['post_type'], $queryable_post_types );
+		// Limit publicly queried post_types & taxonomies to those that are publicly_queryable & public respectively
+		foreach ( array( 'post_type', 'taxonomy', ) as $qv ) {
+			if ( isset( $this->query_vars[$qv]) ) {
+				if ( 'post_type' == $qv )
+					$queryable = get_post_types( array('publicly_queryable' => true) );
+				else
+					$queryable = get_taxonomies( array( 'public' => true ) );
+				if ( ! is_array( $this->query_vars[$qv] ) ) {
+					if ( ! in_array( $this->query_vars[$qv], $queryable ) )
+						unset( $this->query_vars[$qv] );
+				} else {
+					$this->query_vars[$qv] = array_intersect( $this->query_vars[$qv], $queryable );
+				}
 			}
 		}
-
+		
 		foreach ( (array) $this->private_query_vars as $var) {
 			if ( isset($this->extra_query_vars[$var]) )
 				$this->query_vars[$var] = $this->extra_query_vars[$var];
