diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index 7cf574b6e594621cc163ed002164a55f6c0e689c..68dc1cdf71c28130676588de925b0aca497934ba 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -36,12 +36,16 @@
 
 #include "llagent.h"
 #include "llagentui.h"
+#include "llclipboard.h"
+#include "lllandmarkactions.h"
 #include "lllocationinputctrl.h"
 #include "llnotificationsutil.h"
 #include "llparcel.h"
 #include "llsidetray.h"
+#include "llslurl.h"
 #include "llstatusbar.h"
 #include "llviewercontrol.h"
+#include "llviewerinventory.h"
 #include "llviewermenu.h"
 #include "llviewerparcelmgr.h"
 #include "llviewerregion.h"
@@ -65,6 +69,9 @@ class LLPanelTopInfoBar::LLParcelChangeObserver : public LLParcelObserver
 
 LLPanelTopInfoBar::LLPanelTopInfoBar(): mParcelChangedObserver(0)
 {
+	LLUICtrl::CommitCallbackRegistry::currentRegistrar()
+			.add("TopInfoBar.Action", boost::bind(&LLPanelTopInfoBar::onContextMenuItemClicked, this, _2));
+
 	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_topinfo_bar.xml");
 }
 
@@ -120,7 +127,7 @@ void LLPanelTopInfoBar::handleLoginComplete()
 
 BOOL LLPanelTopInfoBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
 {
-	show_navbar_context_menu(this, x, y);
+	show_topinfobar_context_menu(this, x, y);
 	return TRUE;
 }
 
@@ -387,6 +394,32 @@ void LLPanelTopInfoBar::onAgentParcelChange()
 	update();
 }
 
+void LLPanelTopInfoBar::onContextMenuItemClicked(const LLSD::String& item)
+{
+	if (item == "landmark")
+	{
+		LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
+
+		if(landmark == NULL)
+		{
+			LLSideTray::getInstance()->showPanel("panel_places", LLSD().with("type", "create_landmark"));
+		}
+		else
+		{
+			LLSideTray::getInstance()->showPanel("panel_places",
+					LLSD().with("type", "landmark").with("id",landmark->getUUID()));
+		}
+	}
+	else if (item == "copy")
+	{
+		LLSLURL slurl;
+		LLAgentUI::buildSLURL(slurl, false);
+		LLUIString location_str(slurl.getSLURLString());
+
+		gClipboard.copyFromString(location_str);
+	}
+}
+
 void LLPanelTopInfoBar::onInfoButtonClicked()
 {
 	LLSideTray::getInstance()->showPanel("panel_places", LLSD().with("type", "agent"));
diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h
index 4a85bbcd76cbb2f252b265501986ded282ffa20f..e417a06a64eec560c9844d0451df2f3a494cdd84 100644
--- a/indra/newview/llpaneltopinfobar.h
+++ b/indra/newview/llpaneltopinfobar.h
@@ -94,6 +94,11 @@ class LLPanelTopInfoBar : public LLPanel, public LLSingleton<LLPanelTopInfoBar>
 	 */
 	void onAgentParcelChange();
 
+	/**
+	 * Called when context menu item is clicked.
+	 */
+	void onContextMenuItemClicked(const LLSD::String& userdata);
+
 	/**
 	 * Called when user checks/unchecks Show Coordinates menu item.
 	 */
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index f4b4954cbd48489da8b3176a04fac321be8a42a2..f2c9fbf78d8fc11fd0b5a23619a10ff04a2d9f8a 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -462,7 +462,11 @@ bool toggle_agent_pause(const LLSD& newvalue)
 
 bool toggle_show_navigation_panel(const LLSD& newvalue)
 {
-	LLNavigationBar::getInstance()->showNavigationPanel(newvalue.asBoolean());
+	bool value = newvalue.asBoolean();
+
+	LLNavigationBar::getInstance()->showNavigationPanel(value);
+	gSavedSettings.setBOOL("ShowMiniLocationPanel", !value);
+
 	return true;
 }
 
@@ -474,7 +478,11 @@ bool toggle_show_favorites_panel(const LLSD& newvalue)
 
 bool toggle_show_mini_location_panel(const LLSD& newvalue)
 {
-	LLPanelTopInfoBar::getInstance()->setVisible(newvalue.asBoolean());
+	bool value = newvalue.asBoolean();
+
+	LLPanelTopInfoBar::getInstance()->setVisible(value);
+	gSavedSettings.setBOOL("ShowNavbarNavigationPanel", !value);
+
 	return true;
 }
 
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 36650af6cb0122ee2a67a0b0e1d987ad436797f9..635cc361f31c3e11e91058913ad57b3d2ce98118 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7693,6 +7693,31 @@ void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y)
 	LLMenuGL::showPopup(ctrl, show_navbar_context_menu, x, y);
 }
 
+void show_topinfobar_context_menu(LLView* ctrl, S32 x, S32 y)
+{
+	static LLMenuGL* show_topbarinfo_context_menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_topinfobar.xml",
+			gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+
+	LLMenuItemGL* landmark_item = show_topbarinfo_context_menu->getChild<LLMenuItemGL>("Landmark");
+	if (!LLLandmarkActions::landmarkAlreadyExists())
+	{
+		landmark_item->setLabel(LLTrans::getString("AddLandmarkNavBarMenu"));
+	}
+	else
+	{
+		landmark_item->setLabel(LLTrans::getString("EditLandmarkNavBarMenu"));
+	}
+
+	if(gMenuHolder->hasVisibleMenu())
+	{
+		gMenuHolder->hideMenus();
+	}
+
+	show_topbarinfo_context_menu->buildDrawLabels();
+	show_topbarinfo_context_menu->updateParent(LLMenuGL::sMenuContainer);
+	LLMenuGL::showPopup(ctrl, show_topbarinfo_context_menu, x, y);
+}
+
 void initialize_edit_menu()
 {
 	view_listener_t::addMenu(new LLEditUndo(), "Edit.Undo");
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index ad88fcea9a0753368c3d109e8e3c6b94b8e7c9ed..e0497139a5eafe54d8a2c541bb504f0ea52586f6 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -53,6 +53,7 @@ void toggle_debug_menus(void*);
 void show_context_menu( S32 x, S32 y, MASK mask );
 void show_build_mode_context_menu(S32 x, S32 y, MASK mask);
 void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y);
+void show_topinfobar_context_menu(LLView* ctrl, S32 x, S32 y);
 BOOL enable_save_into_inventory(void*);
 void handle_reset_view();
 void handle_cut(void*);
diff --git a/indra/newview/skins/default/xui/en/menu_topinfobar.xml b/indra/newview/skins/default/xui/en/menu_topinfobar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cbe249ed4d8a14b385bf33ee94a23af1a190c274
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_topinfobar.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu
+ height="201"
+ layout="topleft"
+ left="100"
+ mouse_opaque="false"
+ name="menu_topinfobar"
+ top="624"
+ visible="false"
+ width="128">
+    <menu_item_check
+         label="Show Coordinates"
+         name="Show Coordinates">
+           <on_click
+             function="ToggleControl"
+             parameter="NavBarShowCoordinates" />
+             <on_check
+             function="CheckControl"
+             parameter="NavBarShowCoordinates" />
+    </menu_item_check>
+    <menu_item_check
+      label="Show Parcel Properties"
+      name="Show Parcel Properties">
+      <on_click
+        function="ToggleControl"
+        parameter="NavBarShowParcelProperties" />
+      <on_check
+        function="CheckControl"
+        parameter="NavBarShowParcelProperties" />
+    </menu_item_check>
+    <menu_item_separator
+     name="Separator" />
+    <!-- Label of 'Landmark' item is changing in runtime, 
+    see  AddLandmarkNavBarMenu/EditLandmarkNavBarMenu in strings.xml -->
+    <menu_item_call
+     label="Landmark"
+     name="Landmark">
+        <on_click
+         function="TopInfoBar.Action"
+         parameter="landmark" />
+    </menu_item_call>
+    <menu_item_separator
+     name="Separator" />
+    <menu_item_call
+     label="Copy"
+     name="Copy">
+        <on_click
+         function="TopInfoBar.Action"
+         parameter="copy" />
+    </menu_item_call>
+</menu>