Index: VolumeWindow.cpp
===================================================================
--- VolumeWindow.cpp	(revision 37475)
+++ VolumeWindow.cpp	(working copy)
@@ -61,27 +61,6 @@
 	if (!fMenuBar)
 		return;
 
-	BVolume boot;
-	BVolumeRoster().GetBootVolume(&boot);
-
-	bool ejectableVolumeSelected = false;
-
-	int32 count = PoseView()->SelectionList()->CountItems();
-	for (int32 index = 0; index < count; index++) {
-		Model *model = PoseView()->SelectionList()->ItemAt(index)->TargetModel();
-		if (model->IsVolume()) {
-			BVolume volume;
-			volume.SetTo(model->NodeRef()->device);
-			if (volume != boot) {
-				ejectableVolumeSelected = true;
-				break;
-			}
-		}
-	}
-
-	BMenuItem *item = fMenuBar->FindItem("Unmount");
-	if (item)
-		item->SetEnabled(ejectableVolumeSelected);
 }
 
 
Index: PoseView.cpp
===================================================================
--- PoseView.cpp	(revision 37475)
+++ PoseView.cpp	(working copy)
@@ -7897,9 +7897,9 @@
 
 
 void
-BPoseView::OpenParent()
+BPoseView::OpenParent() 
 {
-	if (!TargetModel() || TargetModel()->IsRoot() || IsDesktopWindow())
+	if (!TargetModel() || IsDesktopWindow() || TargetModel()->IsRoot() )
 		return;
 
 	BEntry entry(TargetModel()->EntryRef());
@@ -7911,29 +7911,42 @@
 		|| entry.GetRef(&ref) != B_OK)
 		return;
 
-	BEntry root("/");
+// this fuctionality, if desired, is incomplete. 
+// blocks move a 'up' to root "/" if Disks Icon not on Desktop
+// however, related parts of code also need updating to support this behavior.
+/*	BEntry root("/");
 	if (!TrackerSettings().ShowDisksIcon() && entry == root
 		&& (modifiers() & B_CONTROL_KEY) == 0)
 		return;
-
+*/
 	Model parentModel(&ref);
 
 	BMessage message(B_REFS_RECEIVED);
 	message.AddRef("refs", &ref);
 
-	if (dynamic_cast<TTracker *>(be_app)) {
-		// add information about the child, so that we can select it
-		// in the parent view
-		message.AddData("nodeRefToSelect", B_RAW_TYPE, TargetModel()->NodeRef(),
-			sizeof (node_ref));
-
-		if ((modifiers() & B_OPTION_KEY) != 0 && !IsFilePanel())
-			// if option down, add instructions to close the parent
-			message.AddData("nodeRefsToClose", B_RAW_TYPE, TargetModel()->NodeRef(),
+	if (!ContainerWindow()->Navigator()){
+		if (dynamic_cast<TTracker *>(be_app)) {
+			// add information about the child, so that we can select it
+			// in the parent view
+			message.AddData("nodeRefToSelect", B_RAW_TYPE, TargetModel()->NodeRef(),
 				sizeof (node_ref));
+	
+			if ((modifiers() & B_OPTION_KEY) != 0 && !IsFilePanel())
+				// if option down, add instructions to close the parent
+				message.AddData("nodeRefsToClose", B_RAW_TYPE, TargetModel()->NodeRef(),
+					sizeof (node_ref));
+		}
+	
+		be_app->PostMessage(&message);
 	}
-
-	be_app->PostMessage(&message);
+	else {
+		message.what = kSwitchDirectory;
+		Window()->PostMessage(&message);
+		UnlockLooper();
+		if (TargetModel()->NodeRef()) 
+			dynamic_cast<TTracker *>(be_app)->SelectChildInParentSoon(&ref, TargetModel()->NodeRef());
+		LockLooper();
+	}
 }
 
 
Index: ContainerWindow.cpp
===================================================================
--- ContainerWindow.cpp	(revision 37475)
+++ ContainerWindow.cpp	(working copy)
@@ -353,7 +353,7 @@
 		return;
 
 	// we don't like the Trash icon (because it cannot be moved)
-	if (window->IsTrash() || window->IsPrintersDir())
+	if (window->IsTrash() || window->IsPrintersDir() || window->TargetModel()->IsRoot()) 
 		return;
 
 	uint32 buttons;
@@ -746,6 +746,7 @@
 		fIsTrash = model->IsTrash();
 		fInTrash = FSInTrashDir(model->EntryRef());
 		fIsPrinters = FSIsPrintersDir(&entry);
+
 	}
 }
 
@@ -927,8 +928,7 @@
 			fPoseView->VScrollBar()->ResizeBy(0, -(KeyMenuBar()->Bounds().Height()));
 		}
 
-		// add folder icon to menu bar
-		if (!TargetModel()->IsRoot() && !IsTrash()) {
+		if (!TargetModel()->IsRoot() && !IsTrash()) { 
 			float iconSize = fMenuBar->Bounds().Height() - 2;
 			if (iconSize < 16)
 				iconSize = 16;
@@ -1062,6 +1062,7 @@
 
 	if (Navigator())
 		Navigator()->UpdateLocation(PoseView()->TargetModel(), kActionUpdatePath);
+		
 }
 
 
@@ -1511,7 +1512,7 @@
 
 					if (wasInTrash ^ (IsTrash() || InTrash())
 						|| isRoot != PoseView()->TargetModel()->IsRoot())
-						RepopulateMenus();
+						RepopulateMenus();  
 
 					// Update Navigation bar
 					if (Navigator()) {
@@ -1529,15 +1530,39 @@
 						SetPathWatchingEnabled(true);
 
 					// Update draggable folder icon
-					BView *view = FindView("MenuBar");
-					if (view != NULL) {
-						view = view->FindView("ThisContainer");
-						if (view != NULL) {
+					BView *fMenuBar = FindView("MenuBar");
+
+					if ((fMenuBar != NULL) && (!TargetModel()->IsRoot() && !IsTrash())) { 
+						BView *view = fMenuBar->FindView("ThisContainer"); 
+										
+						if (view != NULL) { 
 							IconCache::sIconCache->IconChanged(TargetModel());
 							view->Invalidate();
 						}
-					}
-
+						else if (!TargetModel()->IsRoot() && !IsTrash()) { 
+							float iconSize = fMenuBar->Bounds().Height() - 2; 
+							if (iconSize < 16) 
+								iconSize = 16; 
+							float iconPosY = 1 + (fMenuBar->Bounds().Height() - 2 - iconSize) / 2; 
+							BView *icon = new DraggableContainerIcon(BRect(Bounds().Width() - 4 - iconSize + 1, 
+											iconPosY, Bounds().Width() - 4, iconPosY + iconSize - 1), 
+											"ThisContainer", B_FOLLOW_RIGHT); 
+							fMenuBar->AddChild(icon); 
+							
+							view = fMenuBar->FindView("ThisContainer"); 
+							if (view != NULL) { 
+								IconCache::sIconCache->IconChanged(TargetModel());
+								view->Invalidate();
+							}
+						}		
+					} 
+					else {
+						BView *view = fMenuBar->FindView("ThisContainer"); 
+						if (view != NULL) {
+							view->RemoveSelf(); 
+							fMenuBar->Invalidate();
+						}
+					}				
 					// Update window title
 					UpdateTitle();
 				}
@@ -1553,7 +1578,6 @@
 				//
 				entry_ref ref;
 				if (message->FindRef("refs", &ref) == B_OK) {
-					//printf("BContainerWindow::MessageReceived - refs received\n");
 					fWaitingForRefs = false;
 					BEntry entry(&ref, true);
 					//
@@ -1821,8 +1845,8 @@
 	if (!PoseView()->IsFilePanel())
 		menu->AddItem(new BMenuItem("Find"B_UTF8_ELLIPSIS,
 			new BMessage(kFindButton), 'F'));
-
-	if (!TargetModel()->IsQuery() && !IsTrash() && !IsPrintersDir()) {
+			
+	if (!TargetModel()->IsQuery() && !IsTrash() && !IsPrintersDir() && !TargetModel()->IsRoot()) { 
 		if (!PoseView()->IsFilePanel()) {
 			TemplatesMenu *templateMenu = new TemplatesMenu(PoseView());
 			menu->AddItem(templateMenu);
@@ -1849,7 +1873,11 @@
 		menu->AddItem(new BSeparatorItem(), 1);
 		menu->AddItem(new BMenuItem("Make active printer",
 			new BMessage(kMakeActivePrinter)));
-	} else {
+	} else if (TargetModel()->IsRoot()) {
+		menu->AddItem(new BMenuItem("Unmount", new BMessage(kUnmountVolume), 'U'));
+		menu->AddItem(new BMenuItem("Mount settings" B_UTF8_ELLIPSIS, new BMessage(kRunAutomounterSettings)));
+		
+	} else { 
 		menu->AddItem(new BMenuItem("Duplicate",new BMessage(kDuplicateSelection), 'D'));
 
 		menu->AddItem(new BMenuItem(TrackerSettings().DontMoveFilesToTrash() ?
@@ -1857,23 +1885,23 @@
 				new BMessage(kMoveToTrash), 'T'));
 
 		menu->AddSeparatorItem();
-
-		// The "Move To", "Copy To", "Create Link" menus are inserted
-		// at this place, have a look at:
-		// BContainerWindow::SetupMoveCopyMenus()
+		
 	}
-
 	BMenuItem *cutItem = NULL, *copyItem = NULL, *pasteItem = NULL;
-	if (!IsPrintersDir()) {
+	if (!IsPrintersDir() && !TargetModel()->IsRoot()) {
 		menu->AddSeparatorItem();
 
 		menu->AddItem(cutItem = new BMenuItem("Cut", new BMessage(B_CUT), 'X'));
 		menu->AddItem(copyItem = new BMenuItem("Copy", new BMessage(B_COPY), 'C'));
 		menu->AddItem(pasteItem = new BMenuItem("Paste", new BMessage(B_PASTE), 'V'));
-
+	}
 		menu->AddSeparatorItem();
 
+	if (!IsPrintersDir() && !TargetModel()->IsRoot()) {
 		menu->AddItem(new BMenuItem("Identify", new BMessage(kIdentifyEntry)));
+	}	
+	
+	if (!IsPrintersDir()) {
 		BMenu *addOnMenuItem = new BMenu(kAddOnsMenuName);
 		addOnMenuItem->SetFont(be_plain_font);
 		menu->AddItem(addOnMenuItem);
@@ -1886,6 +1914,7 @@
 		copyItem->SetTarget(this);
 	if (pasteItem)
 		pasteItem->SetTarget(this);
+
 }
 
 
@@ -1972,12 +2001,12 @@
 	item->SetTarget(PoseView());
 	menu->AddItem(item);
 
-	if (!IsTrash()) {
+//	if (!IsTrash()) {
 		item = new BMenuItem("Open parent", new BMessage(kOpenParentDir),
 			B_UP_ARROW);
 		item->SetTarget(PoseView());
 		menu->AddItem(item);
-	}
+//	}
 
 	item = new BMenuItem("Close", new BMessage(B_QUIT_REQUESTED), 'W');
 	item->SetTarget(this);
@@ -2052,6 +2081,32 @@
 
 	if (IsPrintersDir())
 		EnableNamedMenuItem(fFileMenu, "Make active printer", selectCount == 1);
+		
+	if (TargetModel()->IsRoot()) { 
+		
+		BVolume boot;
+		BVolumeRoster().GetBootVolume(&boot);
+	
+		bool ejectableVolumeSelected = false;
+	
+		int32 count = PoseView()->SelectionList()->CountItems();
+		for (int32 index = 0; index < count; index++) {
+			Model *model = PoseView()->SelectionList()->ItemAt(index)->TargetModel();
+			if (model->IsVolume()) {
+				BVolume volume;
+				volume.SetTo(model->NodeRef()->device);
+				if (volume != boot) {
+					ejectableVolumeSelected = true;
+					break;
+				}
+			}
+		}
+	
+		BMenuItem *item = fMenuBar->FindItem("Unmount");
+		if (item)
+			item->SetEnabled(ejectableVolumeSelected);
+	}
+		
 }
 
 
@@ -2337,8 +2392,8 @@
 void
 BContainerWindow::SetupMoveCopyMenus(const entry_ref *item_ref, BMenu *parent)
 {
-	if (IsTrash() || InTrash() || IsPrintersDir() || !fMoveToItem || !fCopyToItem || !fCreateLinkItem)
-		return;
+	if (IsTrash() || InTrash() || IsPrintersDir() || !fMoveToItem || !fCopyToItem || !fCreateLinkItem || PoseView()->TargetModel()->IsRoot())
+		return; 
 
 	// Grab the modifiers state since we use it twice
 	uint32 modifierKeys = modifiers();
@@ -2513,7 +2568,6 @@
 				// see the notes in SlowContextPopup::AttachedToWindow
 		
 				if (!FSIsPrintersDir(&entry) && !fDragContextMenu->IsShowing()) {
-					// printf("ShowContextMenu - target is %s %i\n", ref->name, IsShowing(ref));
 					fDragContextMenu->ClearMenu();
 		
 					// in case the ref is a symlink, resolve it
@@ -2611,11 +2665,11 @@
 	menu->AddItem(new BMenuItem("Get info", new BMessage(kGetInfo), 'I'));
 	menu->AddItem(new BMenuItem("Edit name", new BMessage(kEditItem), 'E'));
 
-	if (!IsTrash() && !InTrash() && !IsPrintersDir())
+	if (!IsTrash() && !InTrash() && !IsPrintersDir() && !TargetModel()->IsRoot())
 		menu->AddItem(new BMenuItem("Duplicate",
 			new BMessage(kDuplicateSelection), 'D'));
 
-	if (!IsTrash() && !InTrash()) {
+	if (!IsTrash() && !InTrash() && !TargetModel()->IsRoot()) {
 		menu->AddItem(new BMenuItem(TrackerSettings().DontMoveFilesToTrash() ?
 				"Delete" : "Move to Trash",
 				new BMessage(kMoveToTrash), 'T'));
Index: Tracker.cpp
===================================================================
--- Tracker.cpp	(revision 37475)
+++ Tracker.cpp	(working copy)
@@ -884,9 +884,6 @@
 			// clone the message, window adopts it for it's own use
 			refList = new BMessage(*originalRefsList);
 		window = new OpenWithContainerWindow(refList, &fWindowList);
-	} else if (model->IsRoot()) {
-		// window will adopt the model
-		window = new BVolumeWindow(&fWindowList, openFlags);
 	} else if (model->IsQuery()) {
 		// window will adopt the model
 		window = new BQueryContainerWindow(&fWindowList, openFlags);
