diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 4cb336f7ea8bd8244b4fe2df104c44437b6ae800..ab14c08948c5b0dc6ccef7f981d0a401ce8341f7 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -1354,7 +1354,6 @@ void LLFloater::bringToFront( S32 x, S32 y )
 // virtual
 void LLFloater::setVisibleAndFrontmost(BOOL take_focus)
 {
-	LLUI::clearPopups();
 	setVisible(TRUE);
 	setFrontmost(take_focus);
 }
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 0d56c5ed3131b2cfa6b9449e45fb834649fc42fc..fb4a9d032d6b1c5009ce6b35b1879cda0a04085a 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -3455,7 +3455,7 @@ LLView* const LLMenuHolderGL::getVisibleMenu() const
 	for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
 	{
 		LLView* viewp = *child_it;
-		if (viewp->getVisible() && dynamic_cast<LLMenuBarGL*>(viewp) == NULL)
+		if (viewp->getVisible() && dynamic_cast<LLMenuGL*>(viewp) != NULL)
 		{
 			return viewp;
 		}
@@ -3478,8 +3478,7 @@ BOOL LLMenuHolderGL::hideMenus()
 		for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
 		{
 			LLView* viewp = *child_it;
-			// clicks off of menu do not hide menu bar
-			if (dynamic_cast<LLMenuBarGL*>(viewp) == NULL && viewp->getVisible())
+			if (dynamic_cast<LLMenuGL*>(viewp) != NULL && viewp->getVisible())
 			{
 				viewp->setVisible(FALSE);
 			}
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 063caae5c98ad143860d44fdb6db7995b45c8223..134a732287f430a534b449533ebad0266590ae28 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -246,7 +246,7 @@ LLTextBase::~LLTextBase()
 {
 	// Menu, like any other LLUICtrl, is deleted by its parent - gMenuHolder
 
-	clearSegments();
+	mSegments.clear();
 }
 
 void LLTextBase::initFromParams(const LLTextBase::Params& p)
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index 120b584cd95099fcd98b41c9b1de3a5e6e431262..9b5e38d0aa1311e8ac83d1d0597cb6a885351546 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -68,15 +68,16 @@ const F32 TOTAL_LOGIN_TIME = 10.f;	// seconds, wild guess at time from GL contex
 S32 gLastStartAnimationFrame = 0;	// human-style indexing, first image = 1
 const S32 ANIMATION_FRAMES = 1; //13;
 
+static LLRegisterPanelClassWrapper<LLProgressView> r("progress_view");
+
+
 // XUI: Translate
-LLProgressView::LLProgressView(const LLRect &rect) 
+LLProgressView::LLProgressView() 
 :	LLPanel(),
 	mPercentDone( 0.f ),
 	mMouseDownInActiveArea( false ),
 	mUpdateEvents("LLProgressView")
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_progress.xml");
-	reshape(rect.getWidth(), rect.getHeight());
 	mUpdateEvents.listen("self", boost::bind(&LLProgressView::handleUpdate, this, _1));
 }
 
@@ -92,6 +93,9 @@ BOOL LLProgressView::postBuild()
 
 	getChild<LLTextBox>("message_text")->setClickedCallback(onClickMessage, this);
 
+	// hidden initially, until we need it
+	LLPanel::setVisible(FALSE);
+
 	sInstance = this;
 	return TRUE;
 }
@@ -126,19 +130,23 @@ BOOL LLProgressView::handleKeyHere(KEY key, MASK mask)
 
 void LLProgressView::setVisible(BOOL visible)
 {
+	// hiding progress view
 	if (getVisible() && !visible)
 	{
-
 		mFadeTimer.start();
+		// hiding progress view, so show menu bars
+		LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(TRUE);
 	}
+	// showing progress view
 	else if (!getVisible() && visible)
 	{
-		gViewerWindow->addPopup(this);
-
+		// showing progress view, so hide menu bars
+		LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(FALSE);
+		
 		setFocus(TRUE);
 		mFadeTimer.stop();
 		mProgressTimer.start();
-		LLPanel::setVisible(visible);
+		LLPanel::setVisible(TRUE);
 	}
 }
 
@@ -148,7 +156,7 @@ void LLProgressView::draw()
 	static LLTimer timer;
 
 	// Paint bitmap if we've got one
-	glPushMatrix();
+	glPushMatrix();	
 	if (gStartTexture)
 	{
 		LLGLSUIDefault gls_ui;
@@ -189,7 +197,7 @@ void LLProgressView::draw()
 			// Fade is complete, release focus
 			gFocusMgr.releaseFocusIfNeeded( this );
 			LLPanel::setVisible(FALSE);
-			gViewerWindow->removePopup(this);
+			mFadeTimer.stop();
 
 			gStartTexture = NULL;
 		}
diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h
index 6853674d88f2c1a82c84d0e3527b6ac69cae4bed..374b14be83c522bdc97a8cd70fb1b989d9866ab3 100644
--- a/indra/newview/llprogressview.h
+++ b/indra/newview/llprogressview.h
@@ -44,7 +44,7 @@ class LLProgressBar;
 class LLProgressView : public LLPanel
 {
 public:
-	LLProgressView(const LLRect& rect);
+	LLProgressView();
 	virtual ~LLProgressView();
 	
 	BOOL postBuild();
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index cb6844f9dfade1f401a5a473b21b1f8822eabfca..689476f5f1ec1b302aeb6eecf63c20a8853eaab1 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -435,7 +435,8 @@ void init_menus()
 	gMenuBarView->setRect(LLRect(0, top, 0, top - MENU_BAR_HEIGHT));
 	gMenuBarView->setBackgroundColor( color );
 
-	gMenuHolder->addChild(gMenuBarView);
+	LLView* menu_bar_holder = gViewerWindow->getRootView()->getChildView("menu_bar_holder");
+	menu_bar_holder->addChild(gMenuBarView);
   
     gViewerWindow->setMenuBackgroundColor(false, 
         LLViewerLogin::getInstance()->isInProductionGrid());
@@ -470,9 +471,10 @@ void init_menus()
 	gLoginMenuBarView = LLUICtrlFactory::getInstance()->createFromFile<LLMenuBarGL>("menu_login.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	gLoginMenuBarView->arrangeAndClear();
 	LLRect menuBarRect = gLoginMenuBarView->getRect();
-	gLoginMenuBarView->setRect(LLRect(menuBarRect.mLeft, menuBarRect.mTop, gViewerWindow->getRootView()->getRect().getWidth() - menuBarRect.mLeft,  menuBarRect.mBottom));
+	menuBarRect.setLeftTopAndSize(0, menu_bar_holder->getRect().getHeight(), menuBarRect.getWidth(), menuBarRect.getHeight());
+	gLoginMenuBarView->setRect(menuBarRect);
 	gLoginMenuBarView->setBackgroundColor( color );
-	gMenuHolder->addChild(gLoginMenuBarView);
+	menu_bar_holder->addChild(gLoginMenuBarView);
 	
 	// tooltips are on top of EVERYTHING, including menus
 	gViewerWindow->getRootView()->sendChildToFront(gToolTipView);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 16b8711561e16900d2dc72b40f1fc14f92d902a7..fd609637a6c2018e487c161a61e09422015b71d3 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1348,7 +1348,8 @@ LLViewerWindow::LLViewerWindow(
 	mStatesDirty(false),
 	mIsFullscreenChecked(false),
 	mCurrResolutionIndex(0),
-    mViewerWindowListener(new LLViewerWindowListener(this))
+    mViewerWindowListener(new LLViewerWindowListener(this)),
+	mProgressView(NULL)
 {
 	LLNotificationChannel::buildChannel("VW_alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert"));
 	LLNotificationChannel::buildChannel("VW_alertmodal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal"));
@@ -1585,8 +1586,7 @@ void LLViewerWindow::initBase()
 	gToolTipView = getRootView()->getChild<LLToolTipView>("tooltip view");
 
 	// Add the progress bar view (startup view), which overrides everything
-	mProgressView = new LLProgressView(full_window);
-	getRootView()->addChild(mProgressView);
+	mProgressView = getRootView()->getChild<LLProgressView>("progress_view");
 	setShowProgress(FALSE);
 	setProgressCancelButtonVisible(FALSE);
 
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 85853f39bbb377e3d09ea67fde8483b9079895a6..1ace760816c0d3aa690288f9a07b10e877b9bf53 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -143,12 +143,19 @@
   <panel mouse_opaque="false"
          follows="left|right|top"
          name="status_bar_container"
-                tab_stop="false"
+         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"/>
   <notify_box_view top="0"
                    follows="all"
                    height="768"
@@ -156,6 +163,15 @@
                    name="notify_container"
                    tab_group="-2"
                    width="1024"/>
+  <panel top="0"
+         follows="all"
+         height="768"
+         mouse_opaque="true"
+         name="progress_view"
+         filename="panel_progress.xml" 
+         class="progress_view"
+         width="1024"
+         visible="false"/>
   <panel top="0"
          follows="all"
          height="768"