diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index 173fde8e766b17ab08e2a4c69e2253e70dec6e40..ed7fd02e14ac83b2c7493d64541005e6c9e1ab56 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -129,12 +129,6 @@ BOOL LLToolTipView::handleScrollWheel( S32 x, S32 y, S32 clicks )
 	return FALSE;
 }
 
-void LLToolTipView::onMouseLeave(S32 x, S32 y, MASK mask)
-{
-	LLToolTipMgr::instance().blockToolTips();
-}
-
-
 void LLToolTipView::drawStickyRect()
 {
 	gl_rect_2d(LLToolTipMgr::instance().getMouseNearRect(), LLColor4::white, false);
diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h
index c0811c56c38d112b624eac64d7511f406c3d8f69..24e32b9b24a4ae803e3f7a956826ff4990ebc4b6 100644
--- a/indra/llui/lltooltip.h
+++ b/indra/llui/lltooltip.h
@@ -56,8 +56,6 @@ class LLToolTipView : public LLView
 	/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL handleScrollWheel( S32 x, S32 y, S32 clicks );
 
-	/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
-
 	void drawStickyRect();
 
 	/*virtual*/ void draw();
diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp
index 3480abcf4035e774d2670458636cc834fdc0a87c..9753fd9b548b3343b50b106be2693a9bfc32c8db 100644
--- a/indra/newview/llpanelnearbymedia.cpp
+++ b/indra/newview/llpanelnearbymedia.cpp
@@ -184,22 +184,26 @@ void LLPanelNearByMedia::handleVisibilityChange ( BOOL new_visibility )
 	if (new_visibility)	
 	{
 		mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
-		gFocusMgr.setTopCtrl(this);
+		//gFocusMgr.setTopCtrl(this);
 	}
 	else
 	{
 		mHoverTimer.stop();
-		if (gFocusMgr.getTopCtrl() == this)
-		{
-			gFocusMgr.setTopCtrl(NULL);
-		}
+		//if (gFocusMgr.getTopCtrl() == this)
+		//{
+		//	gFocusMgr.setTopCtrl(NULL);
+		//}
 	}
 }
 
 /*virtual*/ 
 void LLPanelNearByMedia::onTopLost ()
 {
-	setVisible(FALSE);
+	//LLUICtrl* new_top = gFocusMgr.getTopCtrl();
+	//if (!new_top || !new_top->hasAncestor(this))
+	//{
+	//	setVisible(FALSE);
+	//}
 }
 
 /*virtual*/
@@ -220,6 +224,13 @@ const F32 AUTO_CLOSE_FADE_TIME_END = 5.0f;
 
 void LLPanelNearByMedia::draw()
 {
+	//LLUICtrl* new_top = gFocusMgr.getTopCtrl();
+	//if (new_top != this)
+	//{
+	//	// reassert top ctrl
+	//	gFocusMgr.setTopCtrl(this);
+	//}
+
 	// keep bottom of panel on screen
 	LLRect screen_rect = calcScreenRect();
 	if (screen_rect.mBottom < 0)
diff --git a/indra/newview/llrootview.h b/indra/newview/llrootview.h
index 760b1a7a4c384728f89be3d3673506d815a673c7..38029e3a9d88c767b9286c74ed8561d5caebf618 100644
--- a/indra/newview/llrootview.h
+++ b/indra/newview/llrootview.h
@@ -35,6 +35,7 @@
 
 #include "llview.h"
 #include "lluictrlfactory.h"
+#include "lltooltip.h"
 
 class LLRootViewRegistry : public LLChildRegistry<LLRootViewRegistry>
 {};
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 025f03dc5af3c4a3e2380a90713155ec9a55ce2f..5423b3e99f11bd29b82c1383a9e91fa7fcd6707b 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -50,6 +50,7 @@
 #include "llkeyboard.h"
 #include "lllineeditor.h"
 #include "llmenugl.h"
+#include "llrootview.h"
 #include "llsd.h"
 #include "lltextbox.h"
 #include "llui.h"
@@ -242,7 +243,11 @@ BOOL LLStatusBar::postBuild()
 	addChild(mPanelVolumePulldown);
 
 	mPanelNearByMedia = new LLPanelNearByMedia();
-	addChild(mPanelNearByMedia);
+	LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
+	popup_holder->addChild(mPanelNearByMedia);
+	gViewerWindow->getRootView()->addMouseDownCallback(boost::bind(&LLStatusBar::onClickScreen, this, _1, _2));
+	mPanelNearByMedia->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
+	mPanelNearByMedia->setVisible(FALSE);
 
 	LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect();
 	LLButton* volbtn =  getChild<LLButton>( "volume_btn" );
@@ -256,21 +261,6 @@ BOOL LLStatusBar::postBuild()
 	mPanelVolumePulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
 	mPanelVolumePulldown->setVisible(FALSE);
 
-	LLRect nearby_media_rect = mPanelNearByMedia->getRect();
-	LLButton* nearby_media_btn =  getChild<LLButton>( "media_toggle_btn" );
-	nearby_media_rect.setLeftTopAndSize(nearby_media_btn->getRect().mLeft -
-	     (volume_pulldown_rect.getWidth() - nearby_media_btn->getRect().getWidth())/2,
-			       nearby_media_btn->calcScreenRect().mBottom,
-			       nearby_media_rect.getWidth(),
-			       nearby_media_rect.getHeight());
-	// force onscreen
-	nearby_media_rect.translate(getRect().getWidth() - nearby_media_rect.mRight, 0);
-
-	mPanelNearByMedia->setShape(nearby_media_rect);
-	mPanelNearByMedia->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
-	mPanelNearByMedia->setVisible(FALSE);
-	
-
 	return TRUE;
 }
 
@@ -542,7 +532,20 @@ void LLStatusBar::onMouseEnterVolume()
 
 void LLStatusBar::onMouseEnterNearbyMedia()
 {
+	LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
+	LLRect nearby_media_rect = mPanelNearByMedia->getRect();
+	LLButton* nearby_media_btn =  getChild<LLButton>( "media_toggle_btn" );
+	LLRect nearby_media_btn_rect = nearby_media_btn->calcScreenRect();
+	nearby_media_rect.setLeftTopAndSize(nearby_media_btn_rect.mLeft - 
+		(nearby_media_rect.getWidth() - nearby_media_btn_rect.getWidth())/2,
+		nearby_media_btn_rect.mBottom,
+		nearby_media_rect.getWidth(),
+		nearby_media_rect.getHeight());
+	// force onscreen
+	nearby_media_rect.translate(popup_holder->getRect().getWidth() - nearby_media_rect.mRight, 0);
+
 	// show the master volume pull-down
+	mPanelNearByMedia->setShape(nearby_media_rect);
 	mPanelNearByMedia->setVisible(TRUE);
 }
 
@@ -631,6 +634,18 @@ void LLStatusBar::onClickStatGraph(void* data)
 	LLFloaterReg::showInstance("lagmeter");
 }
 
+void LLStatusBar::onClickScreen(S32 x, S32 y)
+{
+	if (mPanelNearByMedia->getVisible())
+	{
+		LLRect screen_rect = mPanelNearByMedia->calcScreenRect();
+		if (!screen_rect.pointInRect(x, y))
+		{
+			mPanelNearByMedia->setVisible(FALSE);
+		}
+	}
+}
+
 BOOL can_afford_transaction(S32 cost)
 {
 	return((cost <= 0)||((gStatusBar) && (gStatusBar->getBalance() >=cost)));
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index c37c27299f2ec531895bc21261289cd439a4729c..e5240fcc3e40ab3463c7bdd550f3460a677b7928 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -99,6 +99,7 @@ class LLStatusBar
 
 	void onMouseEnterVolume();
 	void onMouseEnterNearbyMedia();
+	void onClickScreen(S32 x, S32 y);
 	static void onClickStatGraph(void* data);
 
 	static void onClickMediaToggle(void* data);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b76a2e150fdb4b068f3e1d9854d9105b60486b92..f258be039767e771f707e5fe4582ae9500246a0f 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -982,6 +982,7 @@ void LLViewerWindow::handleMouseLeave(LLWindow *window)
 	// Note: we won't get this if we have captured the mouse.
 	llassert( gFocusMgr.getMouseCapture() == NULL );
 	mMouseInWindow = FALSE;
+	LLToolTipMgr::instance().blockToolTips();
 }
 
 BOOL LLViewerWindow::handleCloseRequest(LLWindow *window)
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 1d4377e339a1a8d77304b11a81f1edc879118738..7b6081d7bebebdf5e7e19e70cec756cce4c00aa7 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -162,6 +162,12 @@
                mouse_opaque="false"
                name="Menu Holder"
                width="1024"/>
+  <panel top="0"
+         follows="all"
+         height="768"
+         mouse_opaque="false"
+         name="popup_holder"
+         width="1024"/>
   <snapshot_floater_view enabled="false"
                          follows="all"
                          height="768"