diff --git wp-includes/query.php wp-includes/query.php
index 04286aa..284bea3 100644
--- wp-includes/query.php
+++ wp-includes/query.php
@@ -2745,43 +2745,36 @@ class WP_Query {
 		}
 
 		// Put sticky posts at the top of the posts array
-		$sticky_posts = get_option('sticky_posts');
-		if ( $this->is_home && $page <= 1 && is_array($sticky_posts) && !empty($sticky_posts) && !$q['ignore_sticky_posts'] ) {
-			$num_posts = count($this->posts);
-			$sticky_offset = 0;
-			// Loop over posts and relocate stickies to the front.
-			for ( $i = 0; $i < $num_posts; $i++ ) {
-				if ( in_array($this->posts[$i]->ID, $sticky_posts) ) {
-					$sticky_post = $this->posts[$i];
+		$sticky_posts = get_option( 'sticky_posts' );
+		if ( $this->is_home && $page <= 1
+			&& is_array( $sticky_posts ) && ! empty( $sticky_posts )
+			&& ! $q['ignore_sticky_posts'] ) {
+
+			// Loop over posts and remove stickies.
+			foreach ( $this->posts as $i => $post ) {
+				if ( in_array( $post->ID, $sticky_posts ) ) {
 					// Remove sticky from current position
-					array_splice($this->posts, $i, 1);
-					// Move to front, after other stickies
-					array_splice($this->posts, $sticky_offset, 0, array($sticky_post));
-					// Increment the sticky offset. The next sticky will be placed at this offset.
-					$sticky_offset++;
-					// Remove post from sticky posts array
-					$offset = array_search($sticky_post->ID, $sticky_posts);
-					unset( $sticky_posts[$offset] );
+					array_splice( $this->posts, $i, 1 );
 				}
 			}
 
 			// If any posts have been excluded specifically, Ignore those that are sticky.
-			if ( !empty($sticky_posts) && !empty($q['post__not_in']) )
-				$sticky_posts = array_diff($sticky_posts, $q['post__not_in']);
+			if ( ! empty( $q['post__not_in'] ) )
+				$sticky_posts = array_diff( $sticky_posts, $q['post__not_in'] );
 
 			// Fetch sticky posts that weren't in the query results
-			if ( !empty($sticky_posts) ) {
+			if ( ! empty( $sticky_posts ) ) {
 				$stickies = get_posts( array(
 					'post__in' => $sticky_posts,
 					'post_type' => $post_type,
 					'post_status' => 'publish',
+					'order' => $q['order'],
+					'orderby' => $q['orderby'],
 					'nopaging' => true
 				) );
 
-				foreach ( $stickies as $sticky_post ) {
-					array_splice( $this->posts, $sticky_offset, 0, array( $sticky_post ) );
-					$sticky_offset++;
-				}
+				foreach ( $stickies as $i => $sticky_post )
+					array_splice( $this->posts, $i, 0, array( $sticky_post ) );
 			}
 		}
 
