diff -Npur nau-old/libnautilus-private/nautilus-file-operations.c nau-new/libnautilus-private/nautilus-file-operations.c
--- nau-old/libnautilus-private/nautilus-file-operations.c	2009-09-03 16:22:41.000000000 +0800
+++ nau-new/libnautilus-private/nautilus-file-operations.c	2010-02-02 05:04:46.000000000 +0800
@@ -3817,7 +3817,7 @@ copy_move_file (CopyMoveJob *copy_job,
 	GFile *dest, *new_dest;
 	GError *error;
 	GFileCopyFlags flags;
-	char *primary, *secondary, *details;
+	char *primary, *secondary, *details = NULL;
 	int response;
 	ProgressData pdata;
 	gboolean would_recurse, is_merge;
@@ -4035,11 +4035,40 @@ copy_move_file (CopyMoveJob *copy_job,
 					       dest_dir);
 			}
 		} else {
-			primary = f (_("A file named \"%B\" already exists.  Do you want to replace it?"), 
-				     dest);
+			NautilusFile *dest_file, *src_file;
+			gchar *dest_mtime_msg, *src_mtime_msg;
+			gchar *dest_size, *src_size;
+			time_t dest_mtime, src_mtime;
+	
+			dest_file = nautilus_file_get (dest);
+			dest_mtime_msg = nautilus_file_fit_modified_date_as_string (dest_file, -1, NULL, NULL, NULL);
+			dest_mtime = nautilus_file_get_mtime (dest_file);
+			dest_size = nautilus_file_get_string_attribute (dest_file, "size");
+
+			src_file = nautilus_file_get (src);
+			src_mtime_msg = nautilus_file_fit_modified_date_as_string (src_file, -1, NULL, NULL, NULL);
+			src_mtime = nautilus_file_get_mtime (src_file);
+			src_size = nautilus_file_get_string_attribute (src_file, "size");
+
+			/* TRANSLATORS: %s can be "It is newer.  " or empty string. */
+			primary = f (_("A file named \"%B\" already exists.  %sDo you want to replace it?"), 
+			/* TRANSLATORS: Keep space after the period as your language uses. It is inserted between two sentences. */
+				     dest, dest_mtime > src_mtime ? _("It is newer.  ") : "");
 			secondary = f (_("The file already exists in \"%F\".  "
 					 "Replacing it will overwrite its content."), 
 				       dest_dir);
+	
+			details = f (_("%F\n%s %s\n%s %s\n\n"
+				      "%F\n%s %s\n%s %s"),
+					dest, 
+					_("Size:"), dest_size, 
+					_("Modified:"), dest_mtime_msg, 
+					src, 
+					_("Size:"), src_size, 
+					_("Modified:"), src_mtime_msg);
+
+			nautilus_file_unref (dest_file);
+			nautilus_file_unref (src_file);
 		}
 
 		if ((is_merge && job->merge_all) ||
@@ -4063,7 +4092,7 @@ copy_move_file (CopyMoveJob *copy_job,
 		response = run_warning (job,
 					primary,
 					secondary,
-					NULL,
+					details, 
 					(source_info->num_files - transfer_info->num_files) > 1,
 					GTK_STOCK_CANCEL,
 					SKIP_ALL,
@@ -4505,7 +4534,7 @@ move_file_prepare (CopyMoveJob *move_job
 	GError *error;
 	CommonJob *job;
 	gboolean overwrite;
-	char *primary, *secondary, *details;
+	char *primary, *secondary, *details = NULL;
 	int response;
 	GFileCopyFlags flags;
 	MoveFileCopyFallback *fallback;
@@ -4624,11 +4653,40 @@ move_file_prepare (CopyMoveJob *move_job
 					       dest_dir);
 			}
 		} else {
-			primary = f (_("A file named \"%B\" already exists.  Do you want to replace it?"), 
-				     dest);
+			NautilusFile *dest_file, *src_file;
+			gchar *dest_mtime_msg, *src_mtime_msg;
+			gchar *dest_size, *src_size;
+			time_t dest_mtime, src_mtime;
+	
+			dest_file = nautilus_file_get (dest);
+			dest_mtime_msg = nautilus_file_fit_modified_date_as_string (dest_file, -1, NULL, NULL, NULL);
+			dest_mtime = nautilus_file_get_mtime (dest_file);
+			dest_size = nautilus_file_get_string_attribute (dest_file, "size");
+
+			src_file = nautilus_file_get (src);
+			src_mtime_msg = nautilus_file_fit_modified_date_as_string (src_file, -1, NULL, NULL, NULL);
+			src_mtime = nautilus_file_get_mtime (src_file);
+			src_size = nautilus_file_get_string_attribute (src_file, "size");
+
+			/* TRANSLATORS: %s can be "It is newer.  " or empty string. */
+			primary = f (_("A file named \"%B\" already exists.  %sDo you want to replace it?"), 
+			/* TRANSLATORS: Keep space after the period as your language uses. It is inserted between two sentences. */
+				     dest, dest_mtime > src_mtime ? _("It is newer.  ") : "");
 			secondary = f (_("The file already exists in \"%F\".  "
 					 "Replacing it will overwrite its content."), 
 				       dest_dir);
+	
+			details = f (_("%F\n%s %s\n%s %s\n\n"
+				      "%F\n%s %s\n%s %s"),
+					dest, 
+					_("Size:"), dest_size, 
+					_("Modified:"), dest_mtime_msg, 
+					src, 
+					_("Size:"), src_size, 
+					_("Modified:"), src_mtime_msg);
+
+			nautilus_file_unref (dest_file);
+			nautilus_file_unref (src_file);
 		}
 
 		if ((is_merge && job->merge_all) ||
@@ -4646,11 +4704,10 @@ move_file_prepare (CopyMoveJob *move_job
 			
 			goto out;
 		}
-		
 		response = run_warning (job,
 					primary,
 					secondary,
-					NULL,
+					details,
 					files_left > 1,
 					GTK_STOCK_CANCEL,
 					SKIP_ALL,
