Index: nautilus-2.24.1/libnautilus-private/Makefile.am
===================================================================
--- nautilus-2.24.1.orig/libnautilus-private/Makefile.am	2008-11-17 21:01:14.000000000 -0500
+++ nautilus-2.24.1/libnautilus-private/Makefile.am	2008-11-17 21:02:09.000000000 -0500
@@ -32,6 +32,7 @@
 	$(TRACKER_LIBS)			\
 	$(top_builddir)/libnautilus-extension/libnautilus-extension.la \
 	$(CORE_LIBS)			\
+	-lvisualid			\
 	$(NULL)
 
 marshal_sources = \
Index: nautilus-2.24.1/libnautilus-private/Makefile.in
===================================================================
--- nautilus-2.24.1.orig/libnautilus-private/Makefile.in	2008-11-17 21:01:14.000000000 -0500
+++ nautilus-2.24.1/libnautilus-private/Makefile.in	2008-11-17 21:02:09.000000000 -0500
@@ -449,6 +449,7 @@
 	$(TRACKER_LIBS)			\
 	$(top_builddir)/libnautilus-extension/libnautilus-extension.la \
 	$(CORE_LIBS)			\
+	-lvisualid			\
 	$(NULL)
 
 marshal_sources = \
Index: nautilus-2.24.1/libnautilus-private/nautilus-file.c
===================================================================
--- nautilus-2.24.1.orig/libnautilus-private/nautilus-file.c	2008-11-17 21:02:09.000000000 -0500
+++ nautilus-2.24.1/libnautilus-private/nautilus-file.c	2008-11-17 21:02:09.000000000 -0500
@@ -60,12 +60,15 @@
 #include <gio/gio.h>
 #include <glib/gurifuncs.h>
 #include <libgnome/gnome-macros.h>
+#include <VisualIDs/paths.h>
 #include <glib/gfileutils.h>
 #include <libnautilus-extension/nautilus-file-info.h>
 #include <libxml/parser.h>
 #include <pwd.h>
 #include <stdlib.h>
 #include <sys/time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 #include <time.h>
 #include <unistd.h>
 #include <sys/stat.h>
@@ -3517,8 +3520,9 @@
 		modified_size = size * cached_thumbnail_size / NAUTILUS_ICON_SIZE_STANDARD; 
 	}
 
-	if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS &&
+	if (/* flags & NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS && */
 	    nautilus_file_should_show_thumbnail (file)) {
+	/* XXX need to use VisualIDs for broken symlinks too? */
 		if (file->details->thumbnail) {
 			int w, h, s;
 			double scale;
@@ -3567,8 +3571,29 @@
 			   !file->details->is_thumbnailing &&
 			   (!file->details->thumbnailing_failed ||
 			    !nautilus_has_valid_failed_thumbnail (file))) {
+ 			struct stat visualid_stat;
 			if (nautilus_can_thumbnail (file)) {
-				nautilus_create_thumbnail (file);
+				nautilus_create_thumbnail (file, NAUTILUS_TNTYPE_THUMBNAIL);
+			} else if (stat (visualid_cachedir (), &visualid_stat) == 0) {
+				struct stat statbuf;
+				char *file_uri = nautilus_file_get_uri (file);
+				char *icon_path = visualid_path_for_file (file_uri);
+				int visualid_exists = (stat (icon_path, &statbuf) == 0);
+				g_free (file_uri);
+
+				if (visualid_exists) {
+					GFile *icon_file = g_file_new_for_path (icon_path);
+					gicon = g_file_icon_new (icon_file);
+					icon = nautilus_icon_info_lookup (gicon, size);
+					g_object_unref (gicon);
+					g_object_unref (icon_file);
+					g_free (icon_path);
+					return icon;
+				}
+				else {
+					g_free (icon_path);
+					nautilus_create_thumbnail (file, NAUTILUS_TNTYPE_VISUALID);
+				}
 			}
 		}
 	}
@@ -5723,6 +5748,9 @@
 	char *keyword;
 	int i;
 	GIcon *icon;
+
+	char *file_uri, *visualid_path;
+	struct stat visualid_stat;
 	
 	if (file == NULL) {
 		return NULL;
@@ -5770,6 +5798,27 @@
 		icons = g_list_prepend (icons, icon);
 	}
 	
+	/* VisualID `branding'--file-type is auxiliary info,
+	   show type-indicators as emblems:  */
+
+        file_uri = nautilus_file_get_uri (file);
+        visualid_path = visualid_path_for_file (file_uri);
+        g_free (file_uri);
+
+	if (!nautilus_file_get_custom_icon (file) &&
+	    !NAUTILUS_IS_DESKTOP_ICON_FILE(file) &&
+	    !nautilus_file_is_nautilus_link (file) &&
+	    visualid_path && stat (visualid_path, &visualid_stat) == 0) {
+		/* Only for files for which it's useful,
+		   and only if the VisualID icon is ready */
+		/* XXX: how do we make the folder-icon `open' when
+		   it's prelit as a drop-target? */
+
+		icons = g_list_prepend
+			(icons,
+			 nautilus_file_get_gicon (file, NAUTILUS_FILE_ICON_FLAGS_NONE));
+	}
+
 	eel_g_list_free_deep (keywords);
 	
 	return icons;
Index: nautilus-2.24.1/libnautilus-private/nautilus-thumbnails.c
===================================================================
--- nautilus-2.24.1.orig/libnautilus-private/nautilus-thumbnails.c	2008-11-17 21:01:14.000000000 -0500
+++ nautilus-2.24.1/libnautilus-private/nautilus-thumbnails.c	2008-11-17 21:02:09.000000000 -0500
@@ -66,6 +66,7 @@
 	char *image_uri;
 	char *mime_type;
 	time_t original_file_mtime;
+	NautilusThumbnailType thumbnail_type;
 } NautilusThumbnailInfo;
 
 struct NautilusThumbnailAsyncLoadHandle {
@@ -807,18 +808,21 @@
 }
 
 void
-nautilus_create_thumbnail (NautilusFile *file)
+nautilus_create_thumbnail (NautilusFile *file, NautilusThumbnailType type)
 {
 	time_t file_mtime = 0;
 	NautilusThumbnailInfo *info;
 	NautilusThumbnailInfo *existing_info;
 	GList *existing, *node;
 
-	nautilus_file_set_is_thumbnailing (file, TRUE);
+	if (type == NAUTILUS_TNTYPE_THUMBNAIL) {
+		nautilus_file_set_is_thumbnailing (file, TRUE);
+	}
 
 	info = g_new0 (NautilusThumbnailInfo, 1);
 	info->image_uri = nautilus_file_get_uri (file);
 	info->mime_type = nautilus_file_get_mime_type (file);
+	info->thumbnail_type = type;
 	
 	/* Hopefully the NautilusFile will already have the image file mtime,
 	   so we can just use that. Otherwise we have to get it ourselves. */
@@ -978,6 +982,20 @@
 			   info->image_uri);
 #endif
 
+		if (info->thumbnail_type == NAUTILUS_TNTYPE_VISUALID) {
+
+			pid_t mkvisualid = fork ();
+			if (mkvisualid == 0) {
+				execlp ("mkvisualid", "mkvisualid",
+					"--autocache",
+					info->image_uri,
+					NULL);
+				sleep (2);
+				exit (1);
+			}
+
+			waitpid (mkvisualid, NULL, 0);
+		} else {
 		pixbuf = gnome_thumbnail_factory_generate_thumbnail (thumbnail_factory,
 								     info->image_uri,
 								     info->mime_type);
@@ -993,6 +1011,7 @@
 									 info->image_uri,
 									 current_orig_mtime);
 		}
+		}
 		/* We need to call nautilus_file_changed(), but I don't think that is
 		   thread safe. So add an idle handler and do it from the main loop. */
 		g_idle_add_full (G_PRIORITY_HIGH_IDLE,
Index: nautilus-2.24.1/libnautilus-private/nautilus-thumbnails.h
===================================================================
--- nautilus-2.24.1.orig/libnautilus-private/nautilus-thumbnails.h	2008-11-17 21:01:14.000000000 -0500
+++ nautilus-2.24.1/libnautilus-private/nautilus-thumbnails.h	2008-11-17 21:02:09.000000000 -0500
@@ -43,8 +43,15 @@
 #define NAUTILUS_THUMBNAIL_FRAME_RIGHT 6
 #define NAUTILUS_THUMBNAIL_FRAME_BOTTOM 6
 
+typedef enum {
+	NAUTILUS_TNTYPE_THUMBNAIL,
+	NAUTILUS_TNTYPE_VISUALID
+} NautilusThumbnailType;
+
+
 /* Returns NULL if there's no thumbnail yet. */
-void       nautilus_create_thumbnail                (NautilusFile *file);
+void       nautilus_create_thumbnail                (NautilusFile *file,
+						     NautilusThumbnailType type);
 gboolean   nautilus_can_thumbnail                   (NautilusFile *file);
 gboolean   nautilus_has_valid_failed_thumbnail      (NautilusFile *file);
 gboolean   nautilus_thumbnail_is_mimetype_limited_by_size
