diff -Npur nautilus-old/libnautilus-private/nautilus-directory-async.c nautilus-new/libnautilus-private/nautilus-directory-async.c
--- nautilus-old/libnautilus-private/nautilus-directory-async.c	2010-11-02 15:45:47.000000000 +0800
+++ nautilus-new/libnautilus-private/nautilus-directory-async.c	2010-11-02 15:53:47.000000000 +0800
@@ -55,6 +55,8 @@
 #define DEBUG_START_STOP
 #endif
 
+#define READ_LOCAL_LINKS_SYNC
+
 #define DIRECTORY_LOAD_ITEMS_PER_CALLBACK 100
 
 /* Keep async. jobs down to this number for all directories. */
@@ -3723,9 +3725,21 @@ link_info_start (NautilusDirectory *dire
 	if (!nautilus_style_link) {
 		link_info_done (directory, file, NULL, NULL, NULL, FALSE, FALSE);
 	} else if (should_read_link_info_sync (file)) {
-		result = g_file_load_contents (location, NULL, &file_contents, &file_size, NULL, NULL);
-		link_info_got_data (directory, file, result, file_size, file_contents);
-		g_free (file_contents);
+		char *link_uri, *filename, *uri, *name, *icon;
+		gboolean is_launcher, is_foreign;
+
+		link_uri = nautilus_file_get_uri (file);
+		filename = g_filename_from_uri (link_uri, NULL, NULL);
+		nautilus_link_get_link_info_given_file (filename, link_uri,
+						 &uri, &name, &icon, &is_launcher, &is_foreign);
+		link_info_done (directory, file, uri, name, icon, is_launcher, is_foreign);
+		nautilus_file_changed (file);
+
+		g_free (link_uri);
+		g_free (filename);
+		g_free (uri);
+		g_free (name);
+		g_free (icon);
 	} else {
 		if (!async_job_start (directory, "link info")) {
 			g_object_unref (location);
diff -Npur nautilus-old/libnautilus-private/nautilus-link.c nautilus-new/libnautilus-private/nautilus-link.c
--- nautilus-old/libnautilus-private/nautilus-link.c	2010-11-02 15:45:57.000000000 +0800
+++ nautilus-new/libnautilus-private/nautilus-link.c	2010-11-02 15:53:21.000000000 +0800
@@ -528,6 +528,59 @@ string_array_contains (char **array,
 }
 
 void
+nautilus_link_get_link_info_given_file (const char *filename,
+						 const char  *file_uri,
+						 char       **uri,
+						 char       **name,
+						 char       **icon,
+						 gboolean    *is_launcher,
+						 gboolean    *is_foreign)
+{
+	GKeyFile *key_file;
+	char *type;
+	char **only_show_in;
+	char **not_show_in;
+
+	key_file = g_key_file_new ();
+	if (!g_key_file_load_from_file (key_file,
+					filename,
+					G_KEY_FILE_NONE,
+					NULL)) {
+		g_key_file_free (key_file);
+		return; 
+	}
+
+	*uri = nautilus_link_get_link_uri_from_desktop (key_file, file_uri);
+	*name = nautilus_link_get_link_name_from_desktop (key_file);
+	*icon = nautilus_link_get_link_icon_from_desktop (key_file);
+
+	*is_launcher = FALSE;
+	type = g_key_file_get_string (key_file, MAIN_GROUP, "Type", NULL);
+	if (g_strcmp0 (type, "Application") == 0 &&
+	    g_key_file_has_key (key_file, MAIN_GROUP, "Exec", NULL)) {
+		*is_launcher = TRUE;
+	}
+	g_free (type);
+
+	*is_foreign = FALSE;
+	only_show_in = g_key_file_get_string_list (key_file, MAIN_GROUP,
+						   "OnlyShowIn", NULL, NULL);
+	if (only_show_in && !string_array_contains (only_show_in, "GNOME")) {
+		*is_foreign = TRUE;
+	}
+	g_strfreev (only_show_in);
+
+	not_show_in = g_key_file_get_string_list (key_file, MAIN_GROUP,
+						  "NotShowIn", NULL, NULL);
+	if (not_show_in && string_array_contains (not_show_in, "GNOME")) {
+		*is_foreign = TRUE;
+	}
+	g_strfreev (not_show_in);
+
+	g_key_file_free (key_file);
+}
+
+void
 nautilus_link_get_link_info_given_file_contents (const char  *file_contents,
 						 int          link_file_size,
 						 const char  *file_uri,
diff -Npur nautilus-old/libnautilus-private/nautilus-link.h nautilus-new/libnautilus-private/nautilus-link.h
--- nautilus-old/libnautilus-private/nautilus-link.h	2010-11-02 15:46:01.000000000 +0800
+++ nautilus-new/libnautilus-private/nautilus-link.h	2010-11-02 15:52:59.000000000 +0800
@@ -50,5 +50,12 @@ void             nautilus_link_get_link_
 								  char             **icon,
 								  gboolean          *is_launcher,
 								  gboolean          *is_foreign);
+void             nautilus_link_get_link_info_given_file           (const char        *filename,
+								  const char       *file_uri, 
+								  char             **uri,
+								  char             **name,
+								  char             **icon,
+								  gboolean          *is_launcher,
+								  gboolean          *is_foreign);
 
 #endif /* NAUTILUS_LINK_H */
