Index: wp-admin/edit.php
===================================================================
--- wp-admin/edit.php	(revision 14218)
+++ wp-admin/edit.php	(working copy)
@@ -205,6 +205,9 @@
 
 if ( isset($_GET['untrashed']) && (int) $_GET['untrashed'] ) {
 	printf( _n( 'Item restored from the Trash.', '%s items restored from the Trash.', $_GET['untrashed'] ), number_format_i18n( $_GET['untrashed'] ) );
+	if ( isset($_GET['conflict']) && (int) $_GET['conflict']) {
+		_e( ' There was a permalink conflict with the restored post.  The restored post\'s permalink was updated to:  <a href="' .esc_url( get_permalink( $_GET['conflict'] ) ). '">' .get_permalink( $_GET['conflict'] ).'</a>' );
+	}
 	unset($_GET['undeleted']);
 }
 
Index: wp-admin/post.php
===================================================================
--- wp-admin/post.php	(revision 14218)
+++ wp-admin/post.php	(working copy)
@@ -233,10 +233,16 @@
 	if ( !current_user_can($post_type_object->delete_cap, $post_id) )
 		wp_die( __('You are not allowed to move this item out of the Trash.') );
 
+	$orig_permalink = get_permalink($post_id);
+
 	if ( ! wp_untrash_post($post_id) )
 		wp_die( __('Error in restoring from Trash.') );
 
-	wp_redirect( add_query_arg('untrashed', 1, $sendback) );
+	if( $orig_permalink != get_permalink($post_id) ) { 
+		 $permalink_conflict=$post_id; 
+	} 
+
+	wp_redirect( add_query_arg(array('untrashed' => 1,'conflict' => $permalink_conflict), $sendback) );
 	exit();
 	break;
 
Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 14218)
+++ wp-includes/post.php	(working copy)
@@ -2437,7 +2437,7 @@
 	} elseif ( in_array( $post_type, $hierarchical_post_types ) ) {
 		// Page slugs must be unique within their own trees. Pages are in a separate
 		// namespace than posts so page slugs are allowed to overlap post slugs.
-		$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( '" . implode( "', '", esc_sql( $hierarchical_post_types ) ) . "' ) AND ID != %d AND post_parent = %d LIMIT 1";
+		$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( '" . implode( "', '", esc_sql( $hierarchical_post_types ) ) . "' ) AND ID != %d AND post_parent = %d AND post_status <> 'trash' LIMIT 1";
 		$post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_ID, $post_parent ) );
 
 		if ( $post_name_check || in_array( $slug, $feeds ) || preg_match( '@^(page)?\d+$@', $slug ) ) {
@@ -2451,7 +2451,7 @@
 		}
 	} else {
 		// Post slugs must be unique across all posts.
-		$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d LIMIT 1";
+		$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d AND post_status <> 'trash' LIMIT 1";
 		$post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID ) );
 
 		if ( $post_name_check || in_array( $slug, $feeds ) ) {
