diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 22d6f6ca52d5f58aafb49a5d83ee00f26517474c..838f93d3f9fcc54d3e7a2410cc93641e1cf86ef4 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2285,6 +2285,7 @@ void LLFloaterView::getMinimizePosition(S32 *left, S32 *bottom)
 	S32 floater_header_size = default_params.header_height;
 	static LLUICachedControl<S32> minimized_width ("UIMinimizedWidth", 0);
 	LLRect snap_rect_local = getLocalSnapRect();
+	snap_rect_local.mTop += mMinimizePositionVOffset;
 	for(S32 col = snap_rect_local.mLeft;
 		col < snap_rect_local.getWidth() - minimized_width;
 		col += minimized_width)
@@ -2382,6 +2383,19 @@ BOOL LLFloaterView::allChildrenClosed()
 	return true;
 }
 
+void LLFloaterView::shiftFloaters(S32 x_offset, S32 y_offset)
+{
+	for (child_list_const_iter_t it = getChildList()->begin(); it != getChildList()->end(); ++it)
+	{
+		LLFloater* floaterp = dynamic_cast<LLFloater*>(*it);
+
+		if (floaterp && floaterp->isMinimized())
+		{
+			floaterp->translate(x_offset, y_offset);
+		}
+	}
+}
+
 void LLFloaterView::refresh()
 {
 	// Constrain children to be entirely on the screen
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 42f422f91cbf24b79f37aeba9ad3532282705f9c..e7d365238b878c85a31b67cd37176b28fae5f2bb 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -455,6 +455,7 @@ class LLFloaterView : public LLUICtrl
 	// Given a child of gFloaterView, make sure this view can fit entirely onscreen.
 	void			adjustToFitScreen(LLFloater* floater, BOOL allow_partial_outside);
 
+	void			setMinimizePositionVerticalOffset(S32 offset) { mMinimizePositionVOffset = offset; }
 	void			getMinimizePosition( S32 *left, S32 *bottom);
 	void			restoreAll();		// un-minimize all floaters
 	typedef std::set<LLView*> skip_list_t;
@@ -471,6 +472,7 @@ class LLFloaterView : public LLUICtrl
 	// attempt to close all floaters
 	void			closeAllChildren(bool app_quitting);
 	BOOL			allChildrenClosed();
+	void			shiftFloaters(S32 x_offset, S32 y_offset);
 
 	LLFloater* getFrontmost() const;
 	LLFloater* getBackmost() const;
@@ -490,6 +492,7 @@ class LLFloaterView : public LLUICtrl
 	BOOL			mFocusCycleMode;
 	S32				mSnapOffsetBottom;
 	S32				mSnapOffsetRight;
+	S32				mMinimizePositionVOffset;
 };
 
 //
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index 68dc1cdf71c28130676588de925b0aca497934ba..e73d1fb7c28c77f375cf90f98f9fd12b19972535 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -161,6 +161,8 @@ BOOL LLPanelTopInfoBar::postBuild()
 	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
 			boost::bind(&LLPanelTopInfoBar::onAgentParcelChange, this));
 
+	setVisibleCallback(boost::bind(&LLPanelTopInfoBar::onVisibilityChange, this, _2));
+
 	return TRUE;
 }
 
@@ -174,6 +176,27 @@ void LLPanelTopInfoBar::onNavBarShowParcelPropertiesCtrlChanged()
 	setParcelInfoText(new_text);
 }
 
+// when panel is shown, all minimized floaters should be shifted downwards to prevent overlapping of
+// PanelTopInfoBar. See EXT-7951.
+void LLPanelTopInfoBar::onVisibilityChange(const LLSD& show)
+{
+	// this height is used as a vertical offset for ALREADY MINIMIZED floaters
+	// when PanelTopInfoBar visibility changes
+	S32 height = getRect().getHeight();
+
+	// this vertical offset is used for a start minimize position of floaters that
+	// are NOT MIMIMIZED YET
+	S32 minimize_pos_offset = 0;
+
+	if (show.asBoolean())
+	{
+		height = minimize_pos_offset = -height;
+	}
+
+	gFloaterView->shiftFloaters(0, height);
+	gFloaterView->setMinimizePositionVerticalOffset(minimize_pos_offset);
+}
+
 void LLPanelTopInfoBar::draw()
 {
 	updateParcelInfoText();
diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h
index 6e6fbc08abd479e5a15e05e0e6610f6a09a4ff0f..0603ee744f66ce7efbf62b88b0f5ed4172c668ae 100644
--- a/indra/newview/llpaneltopinfobar.h
+++ b/indra/newview/llpaneltopinfobar.h
@@ -58,6 +58,11 @@ class LLPanelTopInfoBar : public LLPanel, public LLSingleton<LLPanelTopInfoBar>,
 	 */
 	void handleLoginComplete();
 
+	/**
+	 * Called when the top info bar gets shown or hidden
+	 */
+	void onVisibilityChange(const LLSD& show);
+
 private:
 	class LLParcelChangeObserver;