diff -rpu nautilus/libnautilus-private/nautilus-metafile.c nautilus-copy-thumbnails/libnautilus-private/nautilus-metafile.c
--- nautilus/libnautilus-private/nautilus-metafile.c	2004-11-22 16:24:36.000000000 +0100
+++ nautilus-copy-thumbnails/libnautilus-private/nautilus-metafile.c	2005-05-15 00:43:17.959166032 +0200
@@ -1396,6 +1396,8 @@ copy_file_metadata (NautilusMetafile *so
 {
 	xmlNodePtr source_node, node, root;
 	GHashTable *hash, *changes;
+	
+	char *source_file_uri, *destination_file_uri;
 
 	g_return_if_fail (NAUTILUS_IS_METAFILE (source_metafile));
 	g_return_if_fail (source_file_name != NULL);
@@ -1438,9 +1440,12 @@ copy_file_metadata (NautilusMetafile *so
 		}
 	}
 
-	/* FIXME: Do we want to copy the thumbnail here like in the
-	 * rename and remove cases?
-	 */
+	/* Rename the thumbnails for the file, if any. */
+	source_file_uri = metafile_get_file_uri (source_metafile, source_file_name);
+	destination_file_uri = metafile_get_file_uri (destination_metafile, destination_file_name);
+	nautilus_update_thumbnail_file_copied (source_file_uri, destination_file_uri);
+	g_free (source_file_uri);
+	g_free (destination_file_uri); 
 }
 
 static void
diff -rpu nautilus/libnautilus-private/nautilus-thumbnails.c nautilus-copy-thumbnails/libnautilus-private/nautilus-thumbnails.c
--- nautilus/libnautilus-private/nautilus-thumbnails.c	2005-05-08 18:14:51.000000000 +0200
+++ nautilus-copy-thumbnails/libnautilus-private/nautilus-thumbnails.c	2005-05-15 00:42:09.921509328 +0200
@@ -178,7 +178,7 @@ thumbnail_thread_starter_cb (gpointer da
 }
 
 void
-nautilus_update_thumbnail_file_renamed (const char *old_file_uri, const char *new_file_uri)
+nautilus_update_thumbnail_file_copied_or_renamed (const char *old_file_uri, const char *new_file_uri, const gboolean copy)
 {
 	char *old_thumbnail_path;
 	GdkPixbuf *pixbuf;
@@ -209,12 +209,26 @@ nautilus_update_thumbnail_file_renamed (
 			
 			unlink (old_thumbnail_path);
 		}
-		gnome_vfs_file_info_unref (file_info);
+		
+		if (!copy)
+			gnome_vfs_file_info_unref (file_info);
 	}
 
 	g_free (old_thumbnail_path);
 }
 
+void
+nautilus_update_thumbnail_file_copied (const char *old_file_uri, const char *new_file_uri)
+{
+	nautilus_update_thumbnail_file_copied_or_renamed (old_file_uri, new_file_uri, TRUE);
+}
+
+void
+nautilus_update_thumbnail_file_renamed (const char *old_file_uri, const char *new_file_uri)
+{
+	nautilus_update_thumbnail_file_copied_or_renamed (old_file_uri, new_file_uri, FALSE);
+}
+
 void 
 nautilus_remove_thumbnail_for_file (const char *old_file_uri)
 {
diff -rpu nautilus/libnautilus-private/nautilus-thumbnails.h nautilus-copy-thumbnails/libnautilus-private/nautilus-thumbnails.h
--- nautilus/libnautilus-private/nautilus-thumbnails.h	2004-12-15 12:20:41.000000000 +0100
+++ nautilus-copy-thumbnails/libnautilus-private/nautilus-thumbnails.h	2005-05-15 00:38:45.458592416 +0200
@@ -32,8 +32,15 @@
 void       nautilus_create_thumbnail                (NautilusFile *file);
 void       nautilus_thumbnail_frame_image           (GdkPixbuf **pixbuf);
 GdkPixbuf *nautilus_thumbnail_load_framed_image     (const char   *path);
-void       nautilus_update_thumbnail_file_renamed   (const char   *old_file_uri,
+/* copy or move thumbnail for a file */
+void       nautilus_update_thumbnail_file_copied_or_renamed   (const char   	*old_file_uri,
+						     	       const char   	*new_file_uri,
+						     	       const gboolean	copy);
+/* wrappers around the above function */
+void	   nautilus_update_thumbnail_file_copied    (const char	  *old_file_uri,
 						     const char   *new_file_uri);
+void	   nautilus_update_thumbnail_file_renamed   (const char	  *old_file_uri,
+						     const char   *new_file_uri);						     
 void       nautilus_remove_thumbnail_for_file       (const char   *old_file_uri);
 
 /* Queue handling: */
