Index: wp-includes/query.php
===================================================================
--- wp-includes/query.php	(revision 17507)
+++ wp-includes/query.php	(working copy)
@@ -2271,9 +2271,9 @@
 
 		// Order by
 		if ( empty($q['orderby']) ) {
-			$q['orderby'] = "$wpdb->posts.post_date " . $q['order'];
+			$orderby = "$wpdb->posts.post_date " . $q['order'];
 		} elseif ( 'none' == $q['orderby'] ) {
-			$q['orderby'] = '';
+			$orderby = '';
 		} else {
 			// Used to filter values
 			$allowed_keys = array('author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count');
@@ -2284,10 +2284,9 @@
 			}
 			$q['orderby'] = urldecode($q['orderby']);
 			$q['orderby'] = addslashes_gpc($q['orderby']);
-			$orderby_array = explode(' ', $q['orderby']);
-			$q['orderby'] = '';
 
-			foreach ( $orderby_array as $i => $orderby ) {
+			$orderby_array = array();
+			foreach ( explode( ' ', $q['orderby'] ) as $i => $orderby ) {
 				// Only allow certain values for safety
 				if ( ! in_array($orderby, $allowed_keys) )
 					continue;
@@ -2315,15 +2314,14 @@
 						$orderby = "$wpdb->posts.post_" . $orderby;
 				}
 
-				$q['orderby'] .= (($i == 0) ? '' : ',') . $orderby;
+				$orderby_array[] = $orderby;
 			}
+			$orderby = implode( ',', $orderby_array );
 
-			// append ASC or DESC at the end
-			if ( !empty($q['orderby']))
-				$q['orderby'] .= " {$q['order']}";
-
-			if ( empty($q['orderby']) )
-				$q['orderby'] = "$wpdb->posts.post_date ".$q['order'];
+			if ( empty( $orderby ) )
+				$orderby = "$wpdb->posts.post_date ".$q['order'];
+			else
+				$orderby .= " {$q['order']}";
 		}
 
 		if ( is_array( $post_type ) ) {
@@ -2512,8 +2510,6 @@
 				$where = "AND 0";
 		}
 
-		$orderby = $q['orderby'];
-
 		$pieces = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' );
 
 		// Apply post-paging filters on where and join.  Only plugins that
