--- nautilus-window-menus.c.orig	2004-04-26 15:28:38.000000000 -0600
+++ nautilus-window-menus.c	2004-04-27 13:53:04.246759896 -0600
@@ -317,18 +317,6 @@
 #endif
 
 static void
-go_menu_location_callback (BonoboUIComponent *component,
-			   gpointer user_data,
-			   const char *verb)
-{
-	NautilusWindow *window;
-
-	window = NAUTILUS_WINDOW (user_data);
-
-	nautilus_window_prompt_for_location (window);
-}			   
-
-static void
 stop_button_callback (BonoboUIComponent *component, 
 			       gpointer user_data, 
 			       const char *verb)
@@ -345,70 +333,71 @@
 		(NAUTILUS_WINDOW (user_data)->application->undo_manager);
 }
 
-static void
-go_menu_up_callback (BonoboUIComponent *component, 
-		     gpointer user_data, 
-		     const char *verb) 
-{
-	nautilus_window_go_up (NAUTILUS_WINDOW (user_data), FALSE);
-}
-
-static void
-go_menu_home_callback (BonoboUIComponent *component, 
-		       gpointer user_data, 
-		       const char *verb) 
-{
-	nautilus_window_go_home (NAUTILUS_WINDOW (user_data));
-}
-
-static void
-go_menu_start_here_callback (BonoboUIComponent *component, 
-			     gpointer user_data, 
-			     const char *verb) 
-{
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       START_HERE_URI);
-}
-
-static void
-go_menu_go_to_computer_callback (BonoboUIComponent *component, 
-				 gpointer user_data, 
-				 const char *verb) 
-{
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       COMPUTER_URI);
-}
-
-static void
-go_menu_go_to_templates_callback (BonoboUIComponent *component, 
-				 gpointer user_data, 
-				 const char *verb) 
-{
-	char *uri;
-
-	nautilus_create_templates_directory ();
-	uri = nautilus_get_templates_directory_uri ();
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       uri);
-	g_free (uri);
-}
+void
+go_menu_places_callback (BonoboUIComponent *component,
+		     gpointer user_data,
+		     const char *verb)
+{
+	char *cmpverb, *uri;
+	gboolean jumped = FALSE;
+	NautilusWindow *window = NAUTILUS_WINDOW (user_data);
+
+	// Handle "custom" entries (from "nautilus-spatial-window-ui.xml")
+	BonoboUINode *node = bonobo_ui_component_get_tree (window->details->shell_ui, "/menu/Places", TRUE, NULL);
+	if (node) node = bonobo_ui_node_children (node);
+	while (node) {
+		if (bonobo_ui_node_has_attr (node, "uri")) {
+			cmpverb = bonobo_ui_node_get_attr (node, "verb");
+			if (strcmp(cmpverb, verb) == 0) {
+				uri = bonobo_ui_node_get_attr (node, "uri");
+				nautilus_window_go_to (window, uri);
+				bonobo_ui_node_free_string (uri);
+				jumped = TRUE;
+				break;
+			}
+			bonobo_ui_node_free_string (cmpverb);
+		}
+		node = bonobo_ui_node_next (node);
+	}
 
-static void
-go_menu_go_to_trash_callback (BonoboUIComponent *component, 
-			      gpointer user_data, 
-			      const char *verb) 
-{
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       EEL_TRASH_URI);
-}
+	// Handle "special" entries
+	if (!jumped) {
+		if (strcmp(verb, "Up") == 0) {
+			nautilus_window_go_up (window, FALSE);
+			jumped = TRUE;
+		} else if (strcmp(verb, "Home") == 0) {
+			nautilus_window_go_home (window);
+			jumped = TRUE;
+		} else if (strcmp(verb, "Start Here") == 0) {
+			nautilus_window_go_to (window, START_HERE_URI);
+			jumped = TRUE;
+		} else if (strcmp(verb, "Go to Computer") == 0) {
+			nautilus_window_go_to (window, COMPUTER_URI);
+			jumped = TRUE;
+		} else if (strcmp(verb, "Go to Templates") == 0) {
+			char *uri;
+			nautilus_create_templates_directory ();
+			uri = nautilus_get_templates_directory_uri ();
+			nautilus_window_go_to (window, uri);
+			g_free (uri);
+			jumped = TRUE;
+		} else if (strcmp(verb, "Go to Trash") == 0) {
+			nautilus_window_go_to (window, EEL_TRASH_URI);
+			jumped = TRUE;
+		} else if (strcmp(verb, "Go to Burn CD") == 0) {
+			nautilus_window_go_to (window, BURN_CD_URI);
+			jumped = TRUE;
+		} else if (strcmp(verb, "Go to Location") == 0) {
+			NautilusWindow *window;
+			nautilus_window_prompt_for_location (window);
+			jumped = TRUE;
+		}
+	}
 
-static void
-go_menu_go_to_burn_cd_callback (BonoboUIComponent *component, 
-				gpointer user_data, 
-				const char *verb) 
-{
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       BURN_CD_URI);
+	if (!jumped) {
+// change this to a DEBUG thing...
+		printf("verb '%s' not handled in go_menu_places_callback\n", verb);
+	}
 }
 
 static void
@@ -675,14 +664,16 @@
 #endif
 		BONOBO_UI_VERB ("Undo", edit_menu_undo_callback),
 		BONOBO_UI_VERB ("Backgrounds and Emblems", backgrounds_and_emblems_callback),
-		BONOBO_UI_VERB ("Up", go_menu_up_callback),
-		BONOBO_UI_VERB ("Home", go_menu_home_callback),
-		BONOBO_UI_VERB ("Start Here", go_menu_start_here_callback),
-		BONOBO_UI_VERB ("Go to Computer", go_menu_go_to_computer_callback),
-		BONOBO_UI_VERB ("Go to Templates", go_menu_go_to_templates_callback),
-		BONOBO_UI_VERB ("Go to Trash", go_menu_go_to_trash_callback),
-		BONOBO_UI_VERB ("Go to Burn CD", go_menu_go_to_burn_cd_callback),
-		BONOBO_UI_VERB ("Go to Location", go_menu_location_callback),
+
+		BONOBO_UI_VERB ("Up", go_menu_places_callback),
+		BONOBO_UI_VERB ("Home", go_menu_places_callback),
+		BONOBO_UI_VERB ("Start Here", go_menu_places_callback),
+		BONOBO_UI_VERB ("Go to Computer", go_menu_places_callback),
+		BONOBO_UI_VERB ("Go to Templates", go_menu_places_callback),
+		BONOBO_UI_VERB ("Go to Trash", go_menu_places_callback),
+		BONOBO_UI_VERB ("Go to Burn CD", go_menu_places_callback),
+		BONOBO_UI_VERB ("Go to Location", go_menu_places_callback),
+
 		BONOBO_UI_VERB ("Reload", view_menu_reload_callback),
 		BONOBO_UI_VERB ("Zoom In", view_menu_zoom_in_callback),
 		BONOBO_UI_VERB ("Zoom Out", view_menu_zoom_out_callback),
--- nautilus-spatial-window.c.orig	2004-04-26 15:28:29.000000000 -0600
+++ nautilus-spatial-window.c	2004-04-27 13:51:23.798030424 -0600
@@ -84,6 +84,8 @@
 
 #define MAX_TITLE_LENGTH 180
 
+static void go_menu_places_callback(BonoboUIComponent *component, gpointer user_data, const char *verb);
+
 struct _NautilusSpatialWindowDetails {        
 	char *last_geometry;	
         guint save_geometry_timeout_id;	  
@@ -317,8 +319,10 @@
 static void
 real_merge_menus (NautilusWindow *nautilus_window)
 {
+	char *verb;
 	NautilusSpatialWindow *window;
 	BonoboControl *control;
+	BonoboUINode *node;
 	BonoboUIVerb verbs [] = {
 		BONOBO_UI_VERB ("Close Parent Folders", file_menu_close_parent_windows_callback),
 		BONOBO_UI_VERB ("UpCloseCurrent", go_up_close_current_window_callback),
@@ -338,6 +342,17 @@
 	bonobo_ui_component_add_verb_list_with_data (nautilus_window->details->shell_ui,
 						     verbs, window);
 
+	node = bonobo_ui_component_get_tree (nautilus_window->details->shell_ui, "/menu/Places", TRUE, NULL);
+	if (node) node = bonobo_ui_node_children (node);
+	while (node) {
+		if (bonobo_ui_node_has_attr (node, "uri")) {
+			verb = bonobo_ui_node_get_attr (node, "verb");
+			bonobo_ui_component_add_verb (nautilus_window->details->shell_ui, verb, go_menu_places_callback, nautilus_window);
+			bonobo_ui_node_free_string (verb);
+		}
+		node = bonobo_ui_node_next(node);
+	}
+
 	control = bonobo_control_new (window->details->location_statusbar);
 	bonobo_ui_component_object_set (nautilus_window->details->shell_ui,
 		       			"/status/StatusButton",
