diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index badba7a416cc0f3a8227fdd96aa0236cdd138c6b..3ef8d8ff35e49e3317a894b09bf32ad9bfaebdff 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -1731,7 +1731,7 @@ void LLMenuGL::setCanTearOff(BOOL tear_off)
 	{
 		LLMenuItemTearOffGL::Params p;
 		mTearOffItem = LLUICtrlFactory::create<LLMenuItemTearOffGL>(p);
-		addChildInBack(mTearOffItem);
+		addChild(mTearOffItem);
 	}
 	else if (!tear_off && mTearOffItem != NULL)
 	{
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 5077a0a596bc450bdcf19b198fa54f64dad975d5..4d02093d2e2601677ce44d3f35084484f4813286 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1217,7 +1217,7 @@ bool LLAppViewer::mainLoop()
 			if (gViewerWindow)
 			{
 				LLFastTimer t2(FTM_MESSAGES);
-				gViewerWindow->mWindow->processMiscNativeEvents();
+				gViewerWindow->getWindow()->processMiscNativeEvents();
 			}
 		
 			pingMainloopTimeout("Main:GatherInput");
@@ -1230,7 +1230,7 @@ bool LLAppViewer::mainLoop()
 					llwarns << " Someone took over my signal/exception handler (post messagehandling)!" << llendl;
 				}
 
-				gViewerWindow->mWindow->gatherInput();
+				gViewerWindow->getWindow()->gatherInput();
 			}
 
 #if 1 && !LL_RELEASE_FOR_DOWNLOAD
@@ -1259,9 +1259,9 @@ bool LLAppViewer::mainLoop()
 				// Scan keyboard for movement keys.  Command keys and typing
 				// are handled by windows callbacks.  Don't do this until we're
 				// done initializing.  JC
-				if ((gHeadlessClient || gViewerWindow->mWindow->getVisible())
+				if ((gHeadlessClient || gViewerWindow->getWindow()->getVisible())
 					&& gViewerWindow->getActive()
-					&& !gViewerWindow->mWindow->getMinimized()
+					&& !gViewerWindow->getWindow()->getMinimized()
 					&& LLStartUp::getStartupState() == STATE_STARTED
 					&& (gHeadlessClient || !gViewerWindow->getShowProgress())
 					&& !gFocusMgr.focusLocked())
@@ -1340,7 +1340,7 @@ bool LLAppViewer::mainLoop()
 				}
 
 				// yield cooperatively when not running as foreground window
-				if (   (gViewerWindow && !gViewerWindow->mWindow->getVisible())
+				if (   (gViewerWindow && !gViewerWindow->getWindow()->getVisible())
 						|| !gFocusMgr.getAppHasFocus())
 				{
 					// Sleep if we're not rendering, or the window is minimized.
@@ -2920,7 +2920,7 @@ bool LLAppViewer::initWindow()
 		
 	if (gSavedSettings.getBOOL("WindowMaximized"))
 	{
-		gViewerWindow->mWindow->maximize();
+		gViewerWindow->getWindow()->maximize();
 	}
 
 	//
@@ -2963,7 +2963,7 @@ bool LLAppViewer::initWindow()
 
 	if (gSavedSettings.getBOOL("WindowMaximized"))
 	{
-		gViewerWindow->mWindow->maximize();
+		gViewerWindow->getWindow()->maximize();
 	}
 
 	LLUI::sWindow = gViewerWindow->getWindow();
@@ -2975,7 +2975,7 @@ bool LLAppViewer::initWindow()
 	gViewerWindow->initBase();
 
 	// show viewer window
-	//gViewerWindow->mWindow->show();
+	//gViewerWindow->getWindow()->show();
 
 	LL_INFOS("AppInit") << "Window initialization done." << LL_ENDL;
 	return true;
@@ -3009,12 +3009,12 @@ void LLAppViewer::cleanupSavedSettings()
 	// as we don't track it in callbacks
 	if(NULL != gViewerWindow)
 	{
-		BOOL maximized = gViewerWindow->mWindow->getMaximized();
+		BOOL maximized = gViewerWindow->getWindow()->getMaximized();
 		if (!maximized)
 		{
 			LLCoordScreen window_pos;
 			
-			if (gViewerWindow->mWindow->getPosition(&window_pos))
+			if (gViewerWindow->getWindow()->getPosition(&window_pos))
 			{
 				gSavedSettings.setS32("WindowX", window_pos.mX);
 				gSavedSettings.setS32("WindowY", window_pos.mY);
diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp
index dd243397a1a4f65c314b75c25e2c6d401468772e..1e03582a29176f2fb11c06baebfd7bde3f3ae7c6 100644
--- a/indra/newview/lldirpicker.cpp
+++ b/indra/newview/lldirpicker.cpp
@@ -217,12 +217,12 @@ OSStatus	LLDirPicker::doNavChooseDialog()
 
 	error = NavCreateChooseFolderDialog(&mNavOptions, &doNavCallbackEvent, NULL, NULL, &navRef);
 
-	gViewerWindow->mWindow->beforeDialog();
+	gViewerWindow->getWindow()->beforeDialog();
 
 	if (error == noErr)
 		error = NavDialogRun(navRef);
 
-	gViewerWindow->mWindow->afterDialog();
+	gViewerWindow->getWindow()->afterDialog();
 
 	if (error == noErr)
 		error = NavDialogGetReply(navRef, &navReply);
diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp
index 8c0ed298551cdb32294b472fd98a668a21516930..4897cf18859602201274e9f328231f2bb4d40bd0 100644
--- a/indra/newview/llfilepicker.cpp
+++ b/indra/newview/llfilepicker.cpp
@@ -653,12 +653,12 @@ OSStatus	LLFilePicker::doNavChooseDialog(ELoadFilter filter)
 	//   (It is destroyed by NavDialogDispose() below.)
 	error = NavCreateChooseFileDialog(&mNavOptions, NULL, NULL, NULL, navOpenFilterProc, (void*)(&filter), &navRef);
 
-	gViewerWindow->mWindow->beforeDialog();
+	gViewerWindow->getWindow()->beforeDialog();
 
 	if (error == noErr)
 		error = NavDialogRun(navRef);
 
-	gViewerWindow->mWindow->afterDialog();
+	gViewerWindow->getWindow()->afterDialog();
 
 	if (error == noErr)
 		error = NavDialogGetReply(navRef, &navReply);
@@ -808,13 +808,13 @@ OSStatus	LLFilePicker::doNavSaveDialog(ESaveFilter filter, const std::string& fi
 		}
 	}
 	
-	gViewerWindow->mWindow->beforeDialog();
+	gViewerWindow->getWindow()->beforeDialog();
 
 	// Run the dialog
 	if (error == noErr)
 		error = NavDialogRun(navRef);
 
-	gViewerWindow->mWindow->afterDialog();
+	gViewerWindow->getWindow()->afterDialog();
 
 	if (error == noErr)
 		error = NavDialogGetReply(navRef, &navReply);
@@ -1204,7 +1204,7 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename
 		return FALSE;
 	}
 
-	gViewerWindow->mWindow->beforeDialog();
+	gViewerWindow->getWindow()->beforeDialog();
 
 	reset();
 	
@@ -1284,7 +1284,7 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename
 		rtn = (getFileCount() == 1);
 	}
 
-	gViewerWindow->mWindow->afterDialog();
+	gViewerWindow->getWindow()->afterDialog();
 
 	return rtn;
 }
@@ -1299,7 +1299,7 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )
 		return FALSE;
 	}
 
-	gViewerWindow->mWindow->beforeDialog();
+	gViewerWindow->getWindow()->beforeDialog();
 
 	reset();
 	
@@ -1337,7 +1337,7 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )
 		rtn = (getFileCount() == 1);
 	}
 
-	gViewerWindow->mWindow->afterDialog();
+	gViewerWindow->getWindow()->afterDialog();
 
 	return rtn;
 }
@@ -1352,7 +1352,7 @@ BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter )
 		return FALSE;
 	}
 
-	gViewerWindow->mWindow->beforeDialog();
+	gViewerWindow->getWindow()->beforeDialog();
 
 	reset();
 	
@@ -1370,7 +1370,7 @@ BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter )
 		rtn = !mFiles.empty();
 	}
 
-	gViewerWindow->mWindow->afterDialog();
+	gViewerWindow->getWindow()->afterDialog();
 
 	return rtn;
 }
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 2066cbc6b228159d34de92449a67ad2fa9d1250d..9fe73fc940397739accf96b2b69af0322f75d0eb 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1185,7 +1185,7 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
 		std::string buffer;
 		asset_id.toString(buffer);
 
-		gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(buffer));
+		gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(buffer));
 		return;
 	}
 	else if ("copy" == action)
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index f2aec20611a1e51407b6051bf73c046827cc3cba..6625a194fb7e1d0f4e0faf5ce5b12b8b3ee15d9f 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -413,7 +413,7 @@ void LLLandmarkActions::copySLURLtoClipboard(const LLUUID& landmarkInventoryItem
 
 void copy_slurl_to_clipboard_callback(const std::string& slurl)
 {
-	gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(slurl));
+	gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(slurl));
 	LLSD args;
 	args["SLURL"] = slurl;
 	LLNotificationsUtil::add("CopySLURL", args);
diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
index 7977faeab7f07622c04222a69b0962bb28342a40..72735742031eab6f1408299a43b85ba441f77e06 100644
--- a/indra/newview/lltoolbarview.cpp
+++ b/indra/newview/lltoolbarview.cpp
@@ -456,3 +456,10 @@ void LLToolBarView::onEndDrag()
 	}
 	stopDragTool();
 }
+
+void LLToolBarView::setToolBarsVisible(bool visible)
+{
+	mToolbarBottom->getParent()->setVisible(visible);
+	mToolbarLeft->getParent()->setVisible(visible);
+	mToolbarRight->getParent()->setVisible(visible);
+}
diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h
index 6623e63f8a92945a0bf33ecd60e38d450d293ea3..01ff137c1550e2e2ad109d3b3c62ef339a2915f2 100644
--- a/indra/newview/lltoolbarview.h
+++ b/indra/newview/lltoolbarview.h
@@ -72,6 +72,8 @@ class LLToolBarView : public LLUICtrl
 	// Loads the toolbars from the existing user or default settings
 	bool loadToolbars(bool force_default = false);	// return false if load fails
 	
+	void setToolBarsVisible(bool visible);
+
 	static bool loadDefaultToolbars();
 	
 	static void startDragTool( S32 x, S32 y, const LLUUID& uuid);
diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp
index 68af3d73d27faaa8562c6e6b1cbc25a158b14279..857d1053618a44fab58f872a52639f00efa86103 100644
--- a/indra/newview/lltoolgun.cpp
+++ b/indra/newview/lltoolgun.cpp
@@ -56,7 +56,7 @@ void LLToolGun::handleSelect()
 {
 	gViewerWindow->hideCursor();
 	gViewerWindow->moveCursorToCenter();
-	gViewerWindow->mWindow->setMouseClipping(TRUE);
+	gViewerWindow->getWindow()->setMouseClipping(TRUE);
 	mIsSelected = TRUE;
 }
 
@@ -64,7 +64,7 @@ void LLToolGun::handleDeselect()
 {
 	gViewerWindow->moveCursorToCenter();
 	gViewerWindow->showCursor();
-	gViewerWindow->mWindow->setMouseClipping(FALSE);
+	gViewerWindow->getWindow()->setMouseClipping(FALSE);
 	mIsSelected = FALSE;
 }
 
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 19326c4e305c834af2dd47dedddb33bd0bd36ace..d6512207aebe3db0c5150792ffb247a3fdd78d34 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -114,8 +114,8 @@ void render_disconnected_background();
 void display_startup()
 {
 	if (   !gViewerWindow->getActive()
-		|| !gViewerWindow->mWindow->getVisible() 
-		|| gViewerWindow->mWindow->getMinimized() )
+		|| !gViewerWindow->getWindow()->getVisible() 
+		|| gViewerWindow->getWindow()->getMinimized() )
 	{
 		return; 
 	}
@@ -157,7 +157,7 @@ void display_startup()
 	LLGLState::checkStates();
 	LLGLState::checkTextureChannels();
 
-	gViewerWindow->mWindow->swapBuffers();
+	gViewerWindow->getWindow()->swapBuffers();
 	glClear(GL_DEPTH_BUFFER_BIT);
 }
 
@@ -223,7 +223,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	{ //skip render on frames where window has been resized
 		gGL.flush();
 		glClear(GL_COLOR_BUFFER_BIT);
-		gViewerWindow->mWindow->swapBuffers();
+		gViewerWindow->getWindow()->swapBuffers();
 		gPipeline.resizeScreenTexture();
 		gResizeScreenTexture = FALSE;
 		gWindowResized = FALSE;
@@ -260,8 +260,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	// In fact, must explicitly check the minimized state before drawing.
 	// Attempting to draw into a minimized window causes a GL error. JC
 	if (   !gViewerWindow->getActive()
-		|| !gViewerWindow->mWindow->getVisible() 
-		|| gViewerWindow->mWindow->getMinimized() )
+		|| !gViewerWindow->getWindow()->getVisible() 
+		|| gViewerWindow->getWindow()->getMinimized() )
 	{
 		// Clean up memory the pools may have allocated
 		if (rebuild)
@@ -1237,7 +1237,7 @@ void render_ui(F32 zoom_factor, int subfield)
 	if (gDisplaySwapBuffers)
 	{
 		LLFastTimer t(FTM_SWAP);
-		gViewerWindow->mWindow->swapBuffers();
+		gViewerWindow->getWindow()->swapBuffers();
 	}
 	gDisplaySwapBuffers = TRUE;
 }
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index bc0f38dd779f5467e5f72f38318df5790ec55e81..da1b149b59470c471a24bef12515cdcfb79dda60 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -446,11 +446,13 @@ void init_menus()
 	{
 		color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" );
 	}
+
+	LLView* menu_bar_holder = gViewerWindow->getRootView()->getChildView("menu_bar_holder");
+
 	gMenuBarView = LLUICtrlFactory::getInstance()->createFromFile<LLMenuBarGL>("menu_viewer.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-	gMenuBarView->setRect(LLRect(0, top, 0, top - MENU_BAR_HEIGHT));
+	gMenuBarView->setRect(LLRect(0, menu_bar_holder->getRect().mTop, 0, menu_bar_holder->getRect().mTop - MENU_BAR_HEIGHT));
 	gMenuBarView->setBackgroundColor( color );
 
-	LLView* menu_bar_holder = gViewerWindow->getRootView()->getChildView("menu_bar_holder");
 	menu_bar_holder->addChild(gMenuBarView);
   
     gViewerWindow->setMenuBackgroundColor(false, 
@@ -3762,6 +3764,15 @@ class LLViewDefaultUISize : public view_listener_t
 	}
 };
 
+class LLViewToggleUI : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		gViewerWindow->setUIVisibility(!gViewerWindow->getUIVisibility());
+		return true;
+	}
+};
+
 class LLEditDuplicate : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
@@ -7926,6 +7937,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLZoomer(1/1.2f), "View.ZoomIn");
 	view_listener_t::addMenu(new LLZoomer(DEFAULT_FIELD_OF_VIEW, false), "View.ZoomDefault");
 	view_listener_t::addMenu(new LLViewDefaultUISize(), "View.DefaultUISize");
+	view_listener_t::addMenu(new LLViewToggleUI(), "View.ToggleUI");
 
 	view_listener_t::addMenu(new LLViewEnableMouselook(), "View.EnableMouselook");
 	view_listener_t::addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam");
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index fae3ee9081cabd33c98d1a50d7359f1d28ae356f..2473d41a35b994e155ac4df9db1dd1b2c46eaad0 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -76,7 +76,6 @@
 #include "lltimer.h"
 #include "timing.h"
 #include "llviewermenu.h"
-#include "lltoolbarview.h"
 #include "lltooltip.h"
 #include "llmediaentry.h"
 #include "llurldispatcher.h"
@@ -147,6 +146,7 @@
 #include "lltexturefetch.h"
 #include "lltextureview.h"
 #include "lltool.h"
+#include "lltoolbarview.h"
 #include "lltoolcomp.h"
 #include "lltooldraganddrop.h"
 #include "lltoolface.h"
@@ -1339,7 +1339,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
 {
 	if (activated)
 	{
-		mActive = TRUE;
+		mActive = true;
 		send_agent_resume();
 		gAgent.clearAFK();
 		
@@ -1348,7 +1348,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
 	}
 	else
 	{
-		mActive = FALSE;
+		mActive = false;
 				
 		// if the user has chosen to go Away automatically after some time, then go Away when minimizing
 		if (gSavedSettings.getS32("AFKTimeout"))
@@ -1531,7 +1531,8 @@ LLViewerWindow::LLViewerWindow(
 	BOOL fullscreen, BOOL ignore_pixel_depth) // fullscreen is no longer used
 	:
 	mWindow(NULL),
-	mActive(TRUE),
+	mActive(true),
+	mUIVisible(true),
 	mWindowRectRaw(0, height, width, 0),
 	mWindowRectScaled(0, height, width, 0),
 	mWorldViewRectRaw(0, height, width, 0),
@@ -1771,7 +1772,6 @@ void LLViewerWindow::initBase()
 
 	// placeholder widget that controls where "world" is rendered
 	mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle();
-	mFloaterViewHolder = main_view->getChildView("floater_view_holder")->getHandle();
 	mPopupView = main_view->getChild<LLPopupView>("popup_holder");
 	mHintHolder = main_view->getChild<LLView>("hint_holder")->getHandle();
 	mLoginPanelHolder = main_view->getChild<LLView>("login_panel_holder")->getHandle();
@@ -1882,7 +1882,7 @@ void LLViewerWindow::initWorldUI()
 	gStatusBar->setShape(status_bar_container->getLocalRect());
 	// sync bg color with menu bar
 	gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() );
-	status_bar_container->addChild(gStatusBar);
+	status_bar_container->addChildInBack(gStatusBar);
 	status_bar_container->setVisible(TRUE);
 
 	// Navigation bar
@@ -1922,8 +1922,7 @@ void LLViewerWindow::initWorldUI()
 			hud_rect.mTop -= gMenuBarView->getRect().getHeight();
 		}
 		gHUDView = new LLHUDView(hud_rect);
-		// put behind everything else in the UI
-		getRootView()->addChildInBack(gHUDView);
+		getRootView()->addChild(gHUDView);
 	}
 
 	LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container");
@@ -4084,7 +4083,7 @@ static S32 BORDERWIDTH = 0;
 void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
 {
 	LLCoordScreen size;
-	gViewerWindow->mWindow->getSize(&size);
+	gViewerWindow->getWindow()->getSize(&size);
 	if (  (size.mX != new_width + BORDERWIDTH)
 		||(size.mY != new_height + BORDERHEIGHT))
 	{
@@ -4095,7 +4094,7 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
 		BORDERHEIGHT = size.mY- y;
 		LLCoordScreen new_size(new_width + BORDERWIDTH, 
 							   new_height + BORDERHEIGHT);
-		gViewerWindow->mWindow->setSize(new_size);
+		gViewerWindow->getWindow()->setSize(new_size);
 	}
 }
 
@@ -4979,6 +4978,29 @@ bool LLViewerWindow::onAlert(const LLSD& notify)
 	return false;
 }
 
+void LLViewerWindow::setUIVisibility(bool visible)
+{
+	mUIVisible = visible;
+
+	if (gToolBarView)
+	{
+		gToolBarView->setToolBarsVisible(visible);
+	}
+
+	mRootView->getChildView("nav_bar_container")->setVisible(visible);
+	mRootView->getChildView("status_bar_container")->setVisible(visible);
+
+	if (!visible)
+	{
+		gFloaterView->closeAllChildren(false);
+	}
+}
+
+bool LLViewerWindow::getUIVisibility()
+{
+	return mUIVisible;
+}
+
 ////////////////////////////////////////////////////////////////////////////
 //
 // LLPickInfo
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 872eb1275397aaad394a65070bad03300d11d250..3afca3073d26a5812ed0eed262ee04ef9f54c2aa 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -143,6 +143,8 @@ class LLViewerWindow : public LLWindowCallbacks
 	void			adjustRectanglesForFirstUse(const LLRect& window);
 	void            adjustControlRectanglesForFirstUse(const LLRect& window);
 	void			initWorldUI();
+	void			setUIVisibility(bool);
+	bool			getUIVisibility();
 
 	BOOL handleAnyMouseClick(LLWindow *window,  LLCoordGL pos, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down);
 
@@ -282,7 +284,6 @@ class LLViewerWindow : public LLWindowCallbacks
 	void				updateKeyboardFocus();		
 
 	void			updateWorldViewRect(bool use_full_window=false);
-	LLView*			getFloaterViewHolder() { return mFloaterViewHolder.get(); }
 	LLView*			getToolBarHolder() { return mToolBarHolder.get(); }
 	LLView*			getHintHolder() { return mHintHolder.get(); }
 	LLView*			getLoginPanelHolder() { return mLoginPanelHolder.get(); }
@@ -394,11 +395,10 @@ class LLViewerWindow : public LLWindowCallbacks
 	S32				getChatConsoleBottomPad(); // Vertical padding for child console rect, varied by bottom clutter
 	LLRect			getChatConsoleRect(); // Get optimal cosole rect.
 
-public:
+private:
 	LLWindow*		mWindow;						// graphical window object
-
-protected:
-	BOOL			mActive;
+	bool			mActive;
+	bool			mUIVisible;
 
 	LLRect			mWindowRectRaw;				// whole window, including UI
 	LLRect			mWindowRectScaled;			// whole window, scaled by UI size
@@ -444,7 +444,6 @@ class LLViewerWindow : public LLWindowCallbacks
 	std::string		mInitAlert;			// Window / GL initialization requires an alert
 
 	LLHandle<LLView> mWorldViewPlaceholder;	// widget that spans the portion of screen dedicated to rendering the 3d world
-	LLHandle<LLView> mFloaterViewHolder;	// container for floater_view
 	LLHandle<LLView> mToolBarHolder;		// container for toolbars
 	LLHandle<LLView> mHintHolder;			// container for hints
 	LLHandle<LLView> mLoginPanelHolder;		// container for login panel
@@ -458,13 +457,11 @@ class LLViewerWindow : public LLWindowCallbacks
 
     boost::scoped_ptr<LLViewerWindowListener> mViewerWindowListener;
 
-protected:
 	static std::string sSnapshotBaseName;
 	static std::string sSnapshotDir;
 
 	static std::string sMovieBaseName;
 	
-private:
 	// Object temporarily hovered over while dragging
 	LLPointer<LLViewerObject>	mDragHoveredObject;
 };
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 96d070ae50942424a4003af9b651c3ebefc88252..2c07e8e35fb879d50f8d14e249e0bbcd158eec71 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -8,98 +8,71 @@
  tab_stop="false" 
  name="main_view"
  width="1024">
+  <view top="0"
+      follows="all"
+      height="768"
+      left="0"
+      mouse_opaque="false"
+      name="world_view_rect"
+      width="1024"/>
   <layout_stack border_size="0"
                 follows="all"
                 mouse_opaque="false"
-                height="749"
+                height="768"
                 name="menu_stack"
                 orientation="vertical"
-                top="19">
+                top="0">
+    <layout_panel mouse_opaque="false"
+              follows="left|right|top"
+              name="status_bar_container"
+              tab_stop="false"
+              height="19"
+              left="0"
+              top="0"
+              width="1024"
+              user_resize="false"
+              auto_resize="false"
+              visible="true">
+      <view mouse_opaque="false"
+            follows="all"
+            name="menu_bar_holder"
+            left="0"
+            top="0"
+            width="1024"
+            height="19"/>
+    </layout_panel>
     <layout_panel auto_resize="false"
                   height="34"
                   mouse_opaque="false"
                   name="nav_bar_container"
                   tab_stop="false"
                   width="1024"
-                  user_resize="false" 
-                  visible="false">
-    </layout_panel>
-    <layout_panel auto_resize="true"
+                  user_resize="false"
+                  visible="false"/>
+    <layout_panel auto_resize="true"  
                   follows="all"
                   height="500"
                   layout="topleft"
                   mouse_opaque="false"
                   tab_stop="false" 
-                  name="hud"
+                  name="world_panel"
                   width="1024">
-      <layout_stack border_size="0"
-                    follows="all"
-                    height="500"
-                    left="0"
-                    mouse_opaque="false"
-                    name="hud_stack"
-                    orientation="horizontal"
-                    top="0"
-                    width="1024">
-        <layout_panel auto_resize="true"
-               follows="all"
-               height="500"
-               layout="topleft"
-               mouse_opaque="false"
-               tab_stop="false"
-               name="non_side_tray_view"
-               user_resize="false"
-               width="500">
-          <view bottom="500"
-                follows="all"
-                height="500"
-                left="0"
-                mouse_opaque="false"
-                name="world_view_rect"
-                width="500"/>
-          <layout_stack border_size="0"
-                        bottom="500"
-                        follows="all"
-                        height="500"
-                        left="0"
-                        mouse_opaque="false"
-                        name="world_stack"
-                        orientation="vertical">
-            <layout_panel auto_resize="true"
-                          follows="all"
-                          height="500"
-                          layout="topleft"
-                          tab_stop="false"
-                          mouse_opaque="false"
-                          user_resize="false" 
-                          name="hud container"
-                          width="500">
-              <panel follows="left|top"
-                     height="19"
-                     left="0"
-                     mouse_opaque="false"
-                     name="topinfo_bar_container"
-                     tab_stop="false"
-                     top="0"
-                     visible="false"
-                     width="1024"/>
-            </layout_panel>
-            <!--<layout_panel auto_resize="false"
-                   min_height="33"
-                   height="33" 
-                   mouse_opaque="false"
-                   name="bottom_tray_container"
-                   visible="false"/>-->
-          </layout_stack>
-        </layout_panel>
-      </layout_stack>
+      <panel follows="left|top|right"
+             height="19"
+             left="0"
+             mouse_opaque="false"
+             name="topinfo_bar_container"
+             tab_stop="false"
+             top="0"
+             visible="false"
+             width="1024"/>
       <panel top="0"
-         follows="all"
-         height="500"
-         mouse_opaque="false"
-         name="login_panel_holder"
-         width="1024"/>
-
+             left="0"
+             follows="all"
+             height="500"
+             mouse_opaque="false"
+             name="login_panel_holder"
+             width="1024"/>
       <debug_view follows="all"
                   left="0"
                   top="0"
@@ -107,55 +80,27 @@
                   height="500"
                   name="DebugView"
                   width="1024"/>
-
-      <panel follows="all"
+      <floater_view follows="all"
                     height="500"
                     left="0"
                     mouse_opaque="false"
-                    name="floater_view_holder"
+                    name="Floater View"
                     tab_group="-1"
                     tab_stop="false"
                     top="0"
-                    width="1024">
-        <floater_view follows="all"
-                      height="500"
-                      left="0"
-                      mouse_opaque="false"
-                      name="Floater View"
-                      tab_group="-1"
-                      tab_stop="false"
-                      top="0"
-                      width="1024"/>
-      </panel>
+                    width="1024"/>
       <panel name="toolbar_view_holder"
-	    follows="all"
-		layout="topleft"
-        height="500"
-        width="1024"
-        top="0"
-        left="0"
-        mouse_opaque="false"
-        tab_stop="false">
-       </panel>
+             follows="all"
+             layout="topleft"
+             height="500"
+             width="1024"
+             top="0"
+             left="0"
+             mouse_opaque="false"
+             tab_stop="false"/>
     </layout_panel>
   </layout_stack>
-  <panel mouse_opaque="false"
-         follows="left|right|top"
-         name="status_bar_container"
-         tab_stop="false"
-         height="19"
-         left="0" 
-         top="0" 
-         width="1024"
-         visible="false"/>
-  
-  <view mouse_opaque="false"
-        follows="all"
-        name="menu_bar_holder"
-        left="0"
-        top="0"
-        width="1024"
-        height="768"/>
+ 
   <panel top="0"
         follows="all"
         mouse_opaque="false"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index efa61dbd11d1b678c9ab7462468df4555e1729b2..fdbc3d18826d09fa56ce5b4b80e2db40a33409e9 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -1719,6 +1719,13 @@
                 <menu_item_call.on_click
                  function="View.DefaultUISize" />
             </menu_item_call>
+            <menu_item_call
+               label="Toggle UI"
+               name="Toggle UI"
+               shortcut="control|shift|U">
+                <menu_item_call.on_click
+                 function="View.ToggleUI" />
+              </menu_item_call>
             <!-- This second, alternative shortcut for Show Advanced Menu is for backward compatibility.  The main shortcut has been changed so it's Linux-friendly, where the old shortcut is typically eaten by the window manager. -->
             <menu_item_check
                label="Show Advanced Menu - legacy shortcut"