Index: query.php
===================================================================
--- query.php	(revision 18649)
+++ query.php	(working copy)
@@ -2323,6 +2323,10 @@
 				$allowed_keys[] = 'meta_value';
 				$allowed_keys[] = 'meta_value_num';
 			}
+			if ( !empty($q['tax_name']) ) {
+				$allowed_keys[] = $q['tax_name'];
+				$allowed_keys[] = 'tax';
+			}
 			$q['orderby'] = urldecode($q['orderby']);
 			$q['orderby'] = addslashes_gpc($q['orderby']);
 
@@ -2351,6 +2355,10 @@
 					case 'comment_count':
 						$orderby = "$wpdb->posts.comment_count";
 						break;
+					case $q['tax_name']:
+					case 'tax':
+						$orderby = "$wpdb->terms.name";
+						break;
 					default:
 						$orderby = "$wpdb->posts.post_" . $orderby;
 				}
@@ -2364,7 +2372,22 @@
 			else
 				$orderby .= " {$q['order']}";
 		}
-
+		
+		//Order by Tax Added in Join and Where clauses.
+		if ( $q['orderby'] == 'tax' || !empty( $q['tax_name'] ) ) {
+			$q['tax_name'] = urldecode($q['tax_name']);
+			$q['tax_name'] = addslashes_gpc($q['tax_name']);
+			if ( taxonomy_exists( $q['tax_name'] ) ) {
+				$join .= " INNER JOIN $wpdb->term_relationships as taxSort ON ( $wpdb->posts.ID = taxSort.object_id ) ";
+				$join .= " RIGHT JOIN $wpdb->term_taxonomy ON ( taxSort.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id ) ";
+				$join .= " RIGHT JOIN $wpdb->terms ON ( $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id ) ";
+				$where .= " AND $wpdb->term_taxonomy.taxonomy = '" . $q['tax_name'] . "' ";
+			} else {
+				//if the tax isn't valid, let reset the order by.
+				$orderby = "$wpdb->posts.post_date ".$q['order'];
+			}
+		}
+		
 		if ( is_array( $post_type ) ) {
 			$post_type_cap = 'multiple_post_type';
 		} else {
