Index: nautilus-2.26.2/src/nautilus-pathbar.c
===================================================================
--- nautilus-2.26.2.orig/src/nautilus-pathbar.c	2009-06-28 20:44:18.000000000 -0400
+++ nautilus-2.26.2/src/nautilus-pathbar.c	2009-06-28 20:44:35.000000000 -0400
@@ -1496,7 +1496,7 @@
 			  ButtonData *button_data)
 {
 	GFile *location, *current_location, *parent, *button_parent;
-	ButtonData *current_button_data;
+	ButtonData *current_button_data, *temp_button_data;
 	char *display_name;
 	NautilusPathBar *path_bar;
 	gboolean renamed, child;
@@ -1514,6 +1514,7 @@
 
 	location = nautilus_file_get_location (file);
 	if (!g_file_equal (button_data->path, location)) {
+		/* this happens when we do the operation w/in nautilus */
 		parent = g_file_get_parent (location);
 		button_parent = g_file_get_parent (button_data->path);
 
@@ -1529,7 +1530,7 @@
 
 		if (renamed) {
 			button_data->path = g_object_ref (location);
-		} else {
+		} else if (button_data == BUTTON_DATA (g_list_last (path_bar->button_list))) {
 			/* the file has been moved.
 			 * If it was below the currently displayed location, remove it.
 			 * If it was not below the currently displayed location, update the path bar
@@ -1554,8 +1555,28 @@
 			g_object_unref (location);
 			g_object_unref (current_location);
 			return;
+		} else {
+			/* no need to handle/recurse, as a callback will happen for the parent */
+#if 0
+			button_list = g_list_find (path_bar->button_list, button_data);
+			g_assert (button_list != NULL);
+			if (button_list->prev) {
+				// recurse w: (parent, BUTTON_DATA (button_list->prev->data))
+			}
+			g_object_unref (location);
+			return;
+#endif
 		}
 
+	} else if (nautilus_file_is_gone (file)) {
+		/* remove this button and following */
+		g_assert (g_list_find (path_bar->button_list, button_data));
+		while ((temp_button_data = BUTTON_DATA (g_list_last (path_bar->button_list->data))) != button_data) {
+			gtk_container_remove (GTK_CONTAINER (path_bar), temp_button_data->button);
+		}
+		gtk_container_remove (GTK_CONTAINER (path_bar), button_data->button);
+		g_object_unref (location);
+		return;
 	}
 	g_object_unref (location);
 
@@ -1609,7 +1630,7 @@
                 case DESKTOP_BUTTON:
 		case MOUNT_BUTTON:
                         button_data->label = gtk_label_new (NULL);
-                        gtk_label_set_ellipsize (button_data->label, PANGO_ELLIPSIZE_MIDDLE);
+                        gtk_label_set_ellipsize (GTK_LABEL (button_data->label), PANGO_ELLIPSIZE_MIDDLE);
                         label_alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
                         gtk_container_add (GTK_CONTAINER (label_alignment), button_data->label);
                         child = gtk_hbox_new (FALSE, 2);
@@ -1619,7 +1640,7 @@
 		case NORMAL_BUTTON:
     		default:
 			button_data->label = gtk_label_new (NULL);
-			gtk_label_set_ellipsize (button_data->label, PANGO_ELLIPSIZE_MIDDLE);
+			gtk_label_set_ellipsize (GTK_LABEL (button_data->label), PANGO_ELLIPSIZE_MIDDLE);
 			label_alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
 			gtk_container_add (GTK_CONTAINER (label_alignment), button_data->label);
 			child = gtk_hbox_new (FALSE, 2);
