diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index ab054fabdea47db1a0bcd112728dc243bdb3071d..faef7d5b45a82b6838f5144280c6ef3026760cfc 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -4595,6 +4595,18 @@ void handle_take_copy()
 	derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id);
 }
 
+void handle_link_objects()
+{
+	if (LLSelectMgr::getInstance()->getSelection()->isEmpty())
+	{
+		LLFloaterReg::toggleInstanceOrBringToFront("places");
+	}
+	else
+	{
+		LLSelectMgr::getInstance()->linkObjects();
+	}
+}
+
 // You can return an object to its owner if it is on your land.
 class LLObjectReturn : public view_listener_t
 {
@@ -8980,7 +8992,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLToolsSnapObjectXY(), "Tools.SnapObjectXY");
 	view_listener_t::addMenu(new LLToolsUseSelectionForGrid(), "Tools.UseSelectionForGrid");
 	view_listener_t::addMenu(new LLToolsSelectNextPartFace(), "Tools.SelectNextPart");
-	commit.add("Tools.Link", boost::bind(&LLSelectMgr::linkObjects, LLSelectMgr::getInstance()));
+	commit.add("Tools.Link", boost::bind(&handle_link_objects));
 	commit.add("Tools.Unlink", boost::bind(&LLSelectMgr::unlinkObjects, LLSelectMgr::getInstance()));
 	view_listener_t::addMenu(new LLToolsStopAllAnimations(), "Tools.StopAllAnimations");
 	view_listener_t::addMenu(new LLToolsReleaseKeys(), "Tools.ReleaseKeys");
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 181f529893ae763a91946e31cf9e0f0197aa0f9f..aab47d0d0ddbe170804aeab5f4ccffb7894c5d0f 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -59,8 +59,7 @@
        name="Places"
        shortcut="control|L">
         <menu_item_call.on_click
-         function="Floater.ToggleOrBringToFront"
-         parameter="places" />
+         function="Tools.Link"/>
       </menu_item_call>
       <menu_item_call
        label="Picks..."