Index: wp-includes/canonical.php
===================================================================
--- wp-includes/canonical.php	(revision 10333)
+++ wp-includes/canonical.php	(working copy)
@@ -91,9 +91,17 @@
 				$redirect_url = trailingslashit( $redirect_url ) . user_trailingslashit( get_query_var( 'page' ), 'single_paged' );
 				$redirect['query'] = remove_query_arg( 'page', $redirect['query'] );
 			}
+		} elseif ( is_single() && !empty($_GET['name']) ) {
+			$_post = get_posts( array( 'name' => get_query_var('name') ) );
+			if ( $_post && $redirect_url = get_permalink( $_post[0]->ID ) )
+				$redirect['query'] = remove_query_arg('name', $redirect['query']);
 		} elseif ( is_page() && !empty($_GET['page_id']) && ! $redirect_url ) {
 			if ( $redirect_url = get_permalink(get_query_var('page_id')) )
 				$redirect['query'] = remove_query_arg('page_id', $redirect['query']);
+		} elseif ( is_page() && !empty($_GET['pagename']) ) {
+			$_post = get_posts( array( 'pagename' => get_query_var('pagename') ) );
+			if ( $_post && $redirect_url = get_permalink( $_post[0]->ID ) )
+				$redirect['query'] = remove_query_arg('pagename', $redirect['query']);
 		} elseif ( !empty($_GET['m']) && ( is_year() || is_month() || is_day() ) ) {
 			$m = get_query_var('m');
 			switch ( strlen($m) ) {
Index: wp-includes/query.php
===================================================================
--- wp-includes/query.php	(revision 10333)
+++ wp-includes/query.php	(working copy)
@@ -1669,10 +1671,7 @@
 		if ( $q['day'] )
 			$where .= " AND DAYOFMONTH($wpdb->posts.post_date)='" . $q['day'] . "'";
 
-		if ('' != $q['name']) {
-			$q['name'] = sanitize_title($q['name']);
-			$where .= " AND $wpdb->posts.post_name = '" . $q['name'] . "'";
-		} else if ('' != $q['pagename']) {
+		if ('' != $q['pagename']) {
 			if ( isset($this->queried_object_id) )
 				$reqpage = $this->queried_object_id;
 			else {
@@ -1689,7 +1688,8 @@
 				$page_paths = '/' . trim($q['pagename'], '/');
 				$q['pagename'] = sanitize_title(basename($page_paths));
 				$q['name'] = $q['pagename'];
-				$where .= " AND ($wpdb->posts.ID = '$reqpage')";
+				if ( !empty($reqpage) )
+					$where .= " AND $wpdb->posts.ID = '$reqpage'";
 				$reqpage_obj = get_page($reqpage);
 				if ( is_object($reqpage_obj) && 'attachment' == $reqpage_obj->post_type ) {
 					$this->is_attachment = true;
@@ -1702,9 +1702,13 @@
 			$attach_paths = '/' . trim($q['attachment'], '/');
 			$q['attachment'] = sanitize_title(basename($attach_paths));
 			$q['name'] = $q['attachment'];
-			$where .= " AND $wpdb->posts.post_name = '" . $q['attachment'] . "'";
 		}
 
+		if ('' != $q['name']) {
+			$q['name'] = sanitize_title($q['name']);
+			$where .= " AND $wpdb->posts.post_name = '" . $q['name'] . "'";
+		}
+
 		if ( $q['w'] )
 			$where .= " AND WEEK($wpdb->posts.post_date, 1)='" . $q['w'] . "'";
 