Index: nautilus-2.30.0/libnautilus-private/nautilus-global-preferences.h
===================================================================
--- nautilus-2.30.0.orig/libnautilus-private/nautilus-global-preferences.h	2010-05-05 10:28:54.000000000 -0400
+++ nautilus-2.30.0/libnautilus-private/nautilus-global-preferences.h	2010-05-05 10:31:08.000000000 -0400
@@ -73,6 +73,7 @@
 #define NAUTILUS_PREFERENCES_SHOW_BACKUP_FILES  		"/desktop/gnome/file_views/show_backup_files"
 #define NAUTILUS_PREFERENCES_SHOW_ADVANCED_PERMISSIONS		"preferences/show_advanced_permissions"
 #define NAUTILUS_PREFERENCES_DATE_FORMAT			"preferences/date_format"
+#define NAUTILUS_PREFERENCES_CONCEAL_ROOT     		"preferences/conceal_root"
 
 /* Mouse */
 #define NAUTILUS_PREFERENCES_MOUSE_USE_EXTRA_BUTTONS 		"preferences/mouse_use_extra_buttons"
Index: nautilus-2.30.0/src/file-manager/fm-tree-view.c
===================================================================
--- nautilus-2.30.0.orig/src/file-manager/fm-tree-view.c	2010-05-05 10:28:54.000000000 -0400
+++ nautilus-2.30.0/src/file-manager/fm-tree-view.c	2010-05-05 10:31:08.000000000 -0400
@@ -1370,9 +1370,11 @@
 	fm_tree_model_add_root_uri (view->details->child_model, home_uri, _("Home Folder"), icon, NULL);
 	g_object_unref (icon);
 	g_free (home_uri);
-	icon = g_themed_icon_new (NAUTILUS_ICON_FILESYSTEM);
-	fm_tree_model_add_root_uri (view->details->child_model, "file:///", _("File System"), icon, NULL);
-	g_object_unref (icon);
+	if (!eel_preferences_get_boolean (NAUTILUS_PREFERENCES_CONCEAL_ROOT)) {
+		icon = g_themed_icon_new (NAUTILUS_ICON_FILESYSTEM);
+		fm_tree_model_add_root_uri (view->details->child_model, "file:///", _("File System"), icon, NULL);
+		g_object_unref (icon);
+	}
 #ifdef NOT_YET_USABLE /* Do we really want this? */
 	icon = g_themed_icon_new (NAUTILUS_ICON_NETWORK);
 	fm_tree_model_add_root_uri (view->details->child_model, "network:///", _("Network Neighbourhood"), icon, NULL);
Index: nautilus-2.30.0/src/nautilus-pathbar.c
===================================================================
--- nautilus-2.30.0.orig/src/nautilus-pathbar.c	2010-05-05 10:28:54.000000000 -0400
+++ nautilus-2.30.0/src/nautilus-pathbar.c	2010-05-05 10:31:08.000000000 -0400
@@ -1238,6 +1238,9 @@
 {
 	if (button_data->type == DESKTOP_BUTTON) {
 		return _("Desktop");
+	} else if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_CONCEAL_ROOT) &&
+		button_data->type == HOME_BUTTON) {
+		return _("Home Folder");
 	} else {
 		return button_data->dir_name;
 	}
@@ -1769,6 +1772,10 @@
 
                 new_buttons = g_list_prepend (new_buttons, button_data);
 
+		if (button_data->fake_root &&
+		    eel_preferences_get_boolean (NAUTILUS_PREFERENCES_CONCEAL_ROOT))
+			parent_file = NULL; // Pretend file is a top-level root
+
 		if (parent_file != NULL &&
 		    button_data->fake_root) {
 			fake_root = new_buttons;
Index: nautilus-2.30.0/src/nautilus-places-sidebar.c
===================================================================
--- nautilus-2.30.0.orig/src/nautilus-places-sidebar.c	2010-05-05 10:31:07.000000000 -0400
+++ nautilus-2.30.0/src/nautilus-places-sidebar.c	2010-05-05 10:31:08.000000000 -0400
@@ -325,15 +325,17 @@
 	g_free (mount_uri);
 	g_free (desktop_path);
 	
- 	mount_uri = "file:///"; /* No need to strdup */
-	icon = g_themed_icon_new (NAUTILUS_ICON_FILESYSTEM);
-	last_iter = add_place (sidebar, PLACES_BUILT_IN,
-			       _("File System"), icon,
-			       mount_uri, NULL, NULL, NULL, 0,
-			       _("Open the contents of the File System"));
-	g_object_unref (icon);
-	if (eel_strcmp (location, mount_uri) == 0) {
-		gtk_tree_selection_select_iter (selection, &last_iter);
+	if (!eel_preferences_get_boolean (NAUTILUS_PREFERENCES_CONCEAL_ROOT)) {
+		mount_uri = "file:///"; /* No need to strdup */
+		icon = g_themed_icon_new (NAUTILUS_ICON_FILESYSTEM);
+		last_iter = add_place (sidebar, PLACES_BUILT_IN,
+				       _("File System"), icon,
+				       mount_uri, NULL, NULL, NULL, 0,
+				       _("Open the contents of the File System"));
+		g_object_unref (icon);
+		if (eel_strcmp (location, mount_uri) == 0) {
+			gtk_tree_selection_select_iter (selection, &last_iter);
+		}
 	}
 
  	mount_uri = "network:///"; /* No need to strdup */
Index: nautilus-2.30.0/src/nautilus-window-manage-views.c
===================================================================
--- nautilus-2.30.0.orig/src/nautilus-window-manage-views.c	2010-05-05 10:28:54.000000000 -0400
+++ nautilus-2.30.0/src/nautilus-window-manage-views.c	2010-05-05 10:31:08.000000000 -0400
@@ -292,6 +292,40 @@
 #endif
 }
 
+static gboolean is_fake_root (GFile *file)
+{
+	GVolumeMonitor *volume_monitor;
+	GList *mounts, *l;
+	GMount *mount;
+	gboolean result;
+	GFile *root, *default_location, *home;
+
+	result = FALSE;
+
+	home = g_file_new_for_path (g_get_home_dir ());
+	if (g_file_equal (file, home))
+		result = TRUE;
+
+	volume_monitor = g_volume_monitor_get ();
+	mounts = g_volume_monitor_get_mounts (volume_monitor);
+	for (l = mounts; l != NULL; l = l->next) {
+		mount = l->data;
+		if (result || g_mount_is_shadowed (mount))
+			continue;
+		root = g_mount_get_root (mount);
+		default_location = g_mount_get_default_location (mount);
+		if (g_file_equal (file, root) ||
+		    g_file_equal (file, default_location))
+			result = TRUE;
+		g_object_unref (default_location);
+		g_object_unref (root);
+	}
+
+	g_object_unref (home);
+	eel_g_object_list_free (mounts);
+	return result;
+}
+
 void
 nautilus_window_update_up_button (NautilusWindow *window)
 {
@@ -310,6 +344,11 @@
 		}
 	}
 
+	if (allowed &&
+	    eel_preferences_get_boolean (NAUTILUS_PREFERENCES_CONCEAL_ROOT) &&
+	    is_fake_root (slot->location))
+		allowed = FALSE;
+
 	nautilus_window_allow_up (window, allowed);
 }
 
Index: nautilus-2.30.0/libnautilus-private/nautilus-global-preferences.c
===================================================================
--- nautilus-2.30.0.orig/libnautilus-private/nautilus-global-preferences.c	2010-05-05 10:28:54.000000000 -0400
+++ nautilus-2.30.0/libnautilus-private/nautilus-global-preferences.c	2010-05-05 10:31:08.000000000 -0400
@@ -315,6 +315,10 @@
 	  PREFERENCE_BOOLEAN,
 	  GINT_TO_POINTER (FALSE)
 	},
+	{ NAUTILUS_PREFERENCES_CONCEAL_ROOT,
+	  PREFERENCE_BOOLEAN,
+	  GINT_TO_POINTER (FALSE)
+	},
 	{ NAUTILUS_PREFERENCES_SORT_DIRECTORIES_FIRST,
 	  PREFERENCE_BOOLEAN,
 	  GINT_TO_POINTER (FALSE)
Index: nautilus-2.30.0/libnautilus-private/apps_nautilus_preferences.schemas.in
===================================================================
--- nautilus-2.30.0.orig/libnautilus-private/apps_nautilus_preferences.schemas.in	2010-05-05 10:31:11.000000000 -0400
+++ nautilus-2.30.0/libnautilus-private/apps_nautilus_preferences.schemas.in	2010-05-05 10:33:10.000000000 -0400
@@ -470,6 +470,22 @@
     </schema>
     
     <schema>
+      <key>/schemas/apps/nautilus/preferences/conceal_root</key>
+      <applyto>/apps/nautilus/preferences/conceal_root</applyto>
+      <owner>nautilus</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+         <short>Hide root filesystem when possible</short>
+	 <long>
+	  If set to true, then Nautilus conceals the existence of the root
+	  filesystem when possible.  Notably, your home directory and mounts
+	  will appear as if they were top-level directories.
+         </long>
+      </locale>
+    </schema>
+    
+    <schema>
       <key>/schemas/apps/nautilus/preferences/sort_directories_first</key>
       <applyto>/apps/nautilus/preferences/sort_directories_first</applyto>
       <owner>nautilus</owner>
