diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 3c042afba7d7a44220636a75ca343376ed29586e..70c2bc52d6246faa999486c99676094740d51ec1 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -109,6 +109,7 @@ include_directories(SYSTEM
 
 set(viewer_SOURCE_FILES
     alchatcommand.cpp
+    alfloaterregiontracker.cpp
     alpanelquicksettings.cpp
     alpanelquicksettingspulldown.cpp
     groupchatlistener.cpp
@@ -717,6 +718,7 @@ set(viewer_HEADER_FILES
     CMakeLists.txt
     ViewerInstall.cmake
     alchatcommand.h
+    alfloaterregiontracker.h
     alpanelquicksettings.h
     alpanelquicksettingspulldown.h
     alscriptdefinitions.h
diff --git a/indra/newview/alfloaterregiontracker.cpp b/indra/newview/alfloaterregiontracker.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..210d2d6ab3c12afa20dc6c611ae8a8e3cd22553c
--- /dev/null
+++ b/indra/newview/alfloaterregiontracker.cpp
@@ -0,0 +1,275 @@
+/**
+* @file alfloaterregiontracker.cpp
+* @brief Region tracking floater
+*
+* $LicenseInfo:firstyear=2013&license=viewerlgpl$
+* Alchemy Viewer Source Code
+* Copyright (C) 2014, Alchemy Viewer Project.
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*
+* $/LicenseInfo$
+*/
+
+#include "llviewerprecompiledheaders.h"
+
+#include "alfloaterregiontracker.h"
+
+// library
+#include "llbutton.h"
+#include "lldir.h"
+#include "llfile.h"
+#include "llscrolllistctrl.h"
+#include "llsd.h"
+#include "llsdserialize.h"
+#include "llsdserialize_xml.h"
+#include "lltextbox.h"
+
+// newview
+#include "llagent.h"
+#include "llfloaterworldmap.h"
+#include "llfloaterreg.h"
+#include "llnotificationsutil.h"
+#include "llviewermessage.h"
+#include "llworldmap.h"
+#include "llworldmapmessage.h"
+
+#define TRACKER_FILE "tracked_regions.json"
+
+ALFloaterRegionTracker::ALFloaterRegionTracker(const LLSD& key)
+	: LLFloater(key),
+	  LLEventTimer(5.f),
+	  mRefreshRegionListBtn(NULL),
+	  mRemoveRegionBtn(NULL),
+	  mOpenMapBtn(NULL),
+	  mRegionScrollList(NULL)
+{
+	loadFromJSON();
+}
+
+ALFloaterRegionTracker::~ALFloaterRegionTracker()
+{
+	saveToJSON();
+}
+
+BOOL ALFloaterRegionTracker::postBuild()
+{
+	mRefreshRegionListBtn = getChild<LLButton>("refresh");
+	mRefreshRegionListBtn->setClickedCallback(boost::bind(&ALFloaterRegionTracker::refresh, this));
+
+	mRemoveRegionBtn = getChild<LLButton>("remove");
+	mRemoveRegionBtn->setClickedCallback(boost::bind(&ALFloaterRegionTracker::removeRegions, this));
+
+	mOpenMapBtn = getChild<LLButton>("open_map");
+	mOpenMapBtn->setClickedCallback(boost::bind(&ALFloaterRegionTracker::openMap, this));
+
+	mRegionScrollList = getChild<LLScrollListCtrl>("region_list");
+	mRegionScrollList->setCommitOnSelectionChange(TRUE);
+	mRegionScrollList->setCommitCallback(boost::bind(&ALFloaterRegionTracker::updateHeader, this));
+	mRegionScrollList->setDoubleClickCallback(boost::bind(&ALFloaterRegionTracker::openMap, this));
+
+	updateHeader();
+
+	return LLFloater::postBuild();
+}
+
+void ALFloaterRegionTracker::onOpen(const LLSD& key)
+{
+	requestRegionData();
+}
+
+void ALFloaterRegionTracker::updateHeader()
+{
+	S32 num_selected(mRegionScrollList->getNumSelected());
+	mRefreshRegionListBtn->setEnabled(mRegionMap.size() != 0);
+	mRemoveRegionBtn->setEnabled(!!num_selected);
+	mOpenMapBtn->setEnabled(num_selected == 1);
+}
+
+void ALFloaterRegionTracker::refresh()
+{
+	if (!mRegionMap.size())
+	{
+		updateHeader();
+		return;
+	}
+
+	const std::string& saved_selected_value = mRegionScrollList->getSelectedValue().asString();
+	mRegionScrollList->deleteAllItems();
+
+	const std::string& cur_region_name = gAgent.getRegion()->getName();
+
+	for (LLSD::map_const_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++)
+	{
+		const std::string& sim_name = it->first;
+		const LLSD& data = it->second;
+		if (data.isMap()) // Assume the rest is correct.
+		{
+			LLScrollListCell::Params label;
+			LLScrollListCell::Params maturity;
+			LLScrollListCell::Params region;
+			LLScrollListCell::Params count;
+			label.column("region_label").type("text").value(data["label"].asString());
+			maturity.column("region_maturity_icon").type("icon").font_halign(LLFontGL::HCENTER);
+			region.column("region_name").type("text").value(sim_name);
+			count.column("region_agent_count").type("text").value("...");
+			if (LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromName(sim_name))
+			{
+				maturity.value(info->getAccessIcon());
+
+				info->updateAgentCount(LLTimer::getElapsedSeconds());
+				S32 agent_count = info->getAgentCount();
+				if (info->isDown())
+				{
+					label.color(LLColor4::red);
+					maturity.color(LLColor4::red);
+					region.color(LLColor4::red);
+					count.color(LLColor4::red);
+					count.value(0);
+				}
+				else
+					count.value((sim_name == cur_region_name) ? agent_count + 1 : agent_count);
+			}
+			else
+			{
+				label.color(LLColor4::grey);
+				maturity.color(LLColor4::grey);
+				region.color(LLColor4::grey);
+				count.color(LLColor4::grey);
+
+				LLWorldMapMessage::getInstance()->sendNamedRegionRequest(sim_name);
+				if (!mEventTimer.getStarted()) mEventTimer.start();
+			}
+			LLScrollListItem::Params row;
+			row.value = sim_name;
+			row.columns.add(label);
+			row.columns.add(maturity);
+			row.columns.add(region);
+			row.columns.add(count);
+			mRegionScrollList->addRow(row);
+		}
+	}
+	if (!saved_selected_value.empty())
+		mRegionScrollList->selectByValue(saved_selected_value);
+}
+
+BOOL ALFloaterRegionTracker::tick()
+{
+	mEventTimer.stop();
+	refresh();
+	return FALSE;
+}
+
+void ALFloaterRegionTracker::requestRegionData()
+{
+	if (!mRegionMap.size())
+		return;
+
+	for (LLSD::map_const_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++)
+	{
+		const auto& name = it->first;
+		if (LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromName(name))
+		{
+			info->updateAgentCount(LLTimer::getElapsedSeconds());
+		}
+		else
+		{
+			LLWorldMapMessage::getInstance()->sendNamedRegionRequest(name);
+		}
+	}
+	mEventTimer.start();
+}
+
+void ALFloaterRegionTracker::removeRegions()
+{
+	for (auto* item : mRegionScrollList->getAllSelected())
+	{
+		mRegionMap.erase(item->getValue().asString());
+	}
+	mRegionScrollList->deleteSelectedItems();
+	saveToJSON();
+	updateHeader();
+}
+
+bool ALFloaterRegionTracker::saveToJSON()
+{
+	const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, TRACKER_FILE);
+	llofstream out_file;
+	out_file.open(filename);
+	if (out_file.is_open())
+	{
+		LLSDSerialize::toPrettyNotation(mRegionMap, out_file);
+		out_file.close();
+		return true;
+	}
+	return false;
+}
+
+bool ALFloaterRegionTracker::loadFromJSON()
+{
+	const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, TRACKER_FILE);
+	llifstream in_file;
+	in_file.open(filename);
+	if (in_file.is_open())
+	{
+		LLSDSerialize::fromNotation(mRegionMap, in_file, LLSDSerialize::SIZE_UNLIMITED);
+		in_file.close();
+		return true;
+	}
+	return false;
+}
+
+std::string ALFloaterRegionTracker::getRegionLabelIfExists(const std::string& name)
+{
+	return mRegionMap.get(name)["label"].asString();
+}
+
+void ALFloaterRegionTracker::onRegionAddedCallback(const LLSD& notification, const LLSD& response)
+{
+	const S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option == 0)
+	{
+		const std::string& name = notification["payload"]["name"].asString();
+		std::string label = response["label"].asString();
+		LLStringUtil::trim(label);
+		if (!name.empty() && !label.empty())
+		{
+			if (mRegionMap.has(name))
+			{
+				for (LLSD::map_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++)
+					if (it->first == name) it->second["label"] = label;
+			}
+			else
+			{
+				LLSD region;
+				region["label"] = label;
+				mRegionMap.insert(name, region);
+			}
+			saveToJSON();
+			refresh();
+		}
+	}
+}
+
+void ALFloaterRegionTracker::openMap()
+{
+	const std::string& region = mRegionScrollList->getFirstSelected()->getValue().asString();
+	LLFloaterWorldMap* worldmap_floaterp = LLFloaterWorldMap::getInstance();
+	if (!region.empty() && worldmap_floaterp)
+	{
+		worldmap_floaterp->trackURL(region, 128, 128, 0);
+		LLFloaterReg::showInstance("world_map", "center");
+	}
+}
diff --git a/indra/newview/alfloaterregiontracker.h b/indra/newview/alfloaterregiontracker.h
new file mode 100644
index 0000000000000000000000000000000000000000..4292dbb0bfe0a3cee07b9a711c77a17902b309d6
--- /dev/null
+++ b/indra/newview/alfloaterregiontracker.h
@@ -0,0 +1,65 @@
+/**
+* @file alfloaterregiontracker.h
+* @brief Region tracking floater
+*
+* $LicenseInfo:firstyear=2013&license=viewerlgpl$
+* Alchemy Viewer Source Code
+* Copyright (C) 2014, Alchemy Viewer Project.
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*
+* $/LicenseInfo$
+*/
+
+#pragma once
+
+#include "lleventtimer.h"
+#include "llfloater.h"
+
+class LLButton;
+class LLSD;
+class LLScrollListCtrl;
+
+class ALFloaterRegionTracker : public LLFloater, public LLEventTimer
+{
+	friend class LLFloaterReg;
+private:
+	ALFloaterRegionTracker(const LLSD& key);
+	virtual ~ALFloaterRegionTracker();
+public:
+	/*virtual*/ BOOL postBuild();
+	/*virtual*/ void onOpen(const LLSD& key);
+	/*virtual*/ void refresh();
+	/*virtual*/ BOOL tick();
+
+private:
+	void updateHeader();
+	void requestRegionData();
+	void removeRegions();
+	bool saveToJSON();
+	bool loadFromJSON();
+	void openMap();
+
+public:
+	std::string getRegionLabelIfExists(const std::string& name);
+	void onRegionAddedCallback(const LLSD& notification, const LLSD& response);
+
+private:
+	LLSD mRegionMap;
+	LLButton* mRefreshRegionListBtn;
+	LLButton* mRemoveRegionBtn;
+	LLButton* mOpenMapBtn;
+	LLScrollListCtrl* mRegionScrollList;
+};
\ No newline at end of file
diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml
index d1014aa24499fb5dca7655e9f58fad634a679cea..0d7a37bbb68ceddc835660c9e2f8c48818d91ca5 100755
--- a/indra/newview/app_settings/commands.xml
+++ b/indra/newview/app_settings/commands.xml
@@ -10,6 +10,16 @@
            is_running_function="Floater.IsOpen"
            is_running_parameters="about_land"
            />
+  <command name="regiontracker"
+           available_in_toybox="true"
+           icon="Command_RegionTracker_Icon"
+           label_ref="Command_RegionTracker_Label"
+           tooltip_ref="Command_RegionTracker_Tooltip"
+           execute_function="Floater.ToggleOrBringToFront"
+           execute_parameters="region_tracker"
+           is_running_function="Floater.IsOpen"
+           is_running_parameters="region_tracker"
+           />
   <command name="appearance"  
            available_in_toybox="true"
            icon="Command_Appearance_Icon"
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 4505d90368bda0db34a5ebbd63a20b9295a79e09..f7964178e1baab5d033ba0ff06cb7c6b2c4cffcd 100755
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -34,6 +34,7 @@
 
 #include "llfloaterworldmap.h"
 
+#include "alfloaterregiontracker.h"
 #include "llagent.h"
 #include "llagentcamera.h"
 #include "llbutton.h"
@@ -266,7 +267,8 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
 	mCommitCallbackRegistrar.add("WMap.ShowAgent",		boost::bind(&LLFloaterWorldMap::onShowAgentBtn, this));		
 	mCommitCallbackRegistrar.add("WMap.Clear",			boost::bind(&LLFloaterWorldMap::onClearBtn, this));		
 	mCommitCallbackRegistrar.add("WMap.CopySLURL",		boost::bind(&LLFloaterWorldMap::onCopySLURL, this));
-	
+	mCommitCallbackRegistrar.add("WMap.TrackRegion",	boost::bind(&LLFloaterWorldMap::onTrackRegion, this));
+
 	gSavedSettings.getControl("PreferredMaturity")->getSignal()->connect(boost::bind(&LLFloaterWorldMap::onChangeMaturity, this));
 }
 
@@ -492,6 +494,7 @@ void LLFloaterWorldMap::draw()
 	//	getChildView("Clear")->setEnabled((BOOL)tracking_status);
 	getChildView("Show Destination")->setEnabled((BOOL)tracking_status || LLWorldMap::getInstance()->isTracking());
 	getChildView("copy_slurl")->setEnabled((mSLURL.isValid()) );
+	getChild<LLButton>("track_region")->setEnabled((BOOL) tracking_status || LLWorldMap::getInstance()->isTracking());
 	
 	setMouseOpaque(TRUE);
 	getDragHandle()->setMouseOpaque(TRUE);
@@ -1303,6 +1306,28 @@ void LLFloaterWorldMap::onCopySLURL()
 	LLNotificationsUtil::add("CopySLURL", args);
 }
 
+void LLFloaterWorldMap::onTrackRegion()
+{
+	ALFloaterRegionTracker* floaterp = LLFloaterReg::getTypedInstance<ALFloaterRegionTracker>("region_tracker");
+	if (floaterp)
+	{
+		if (LLTracker::getTrackingStatus() != LLTracker::TRACKING_NOTHING)
+		{
+			std::string sim_name;
+			LLWorldMap::getInstance()->simNameFromPosGlobal(LLTracker::getTrackedPositionGlobal(), sim_name);
+			if (!sim_name.empty())
+			{
+				const std::string& temp_label = floaterp->getRegionLabelIfExists(sim_name);
+				LLSD args, payload;
+				args["REGION"] = sim_name;
+				args["LABEL"] = !temp_label.empty() ? temp_label : sim_name;
+				payload["name"] = sim_name;
+				LLNotificationsUtil::add("RegionTrackerAdd", args, payload, boost::bind(&ALFloaterRegionTracker::onRegionAddedCallback, floaterp, _1, _2));
+			}
+		}
+	}
+}
+
 // protected
 void LLFloaterWorldMap::centerOnTarget(BOOL animate)
 {
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 84ca5a7a71e2d1a36b41679ad9cd10e3eb5e6a54..31b4ba416179b84a5f05c919758e49dcee328dd8 100755
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -128,6 +128,7 @@ protected:
 	void			onShowTargetBtn();
 	void			onShowAgentBtn();
 	void			onCopySLURL();
+	void			onTrackRegion();
 
 	void			centerOnTarget(BOOL animate);
 	void			updateLocation();
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 10d51259565bce652d358309cc566b09aeb60ca2..58a4eab86548a4e6bf6b8390d33f4a4f6785ab74 100755
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -30,6 +30,7 @@
 #include "llfloaterreg.h"
 #include "llviewerfloaterreg.h"
 
+#include "alfloaterregiontracker.h"
 #include "llcommandhandler.h"
 #include "llcompilequeue.h"
 #include "llfasttimerview.h"
@@ -308,6 +309,7 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("region_debug_console", "floater_region_debug_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionDebugConsole>);
 	LLFloaterReg::add("region_info", "floater_region_info.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionInfo>);
 	LLFloaterReg::add("region_restarting", "floater_region_restarting.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionRestarting>);
+	LLFloaterReg::add("region_tracker", "floater_region_tracker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<ALFloaterRegionTracker>);
 	
 	LLFloaterReg::add("script_debug", "floater_script_debug.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptDebug>);
 	LLFloaterReg::add("script_debug_output", "floater_script_debug_panel.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptDebugOutput>);
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index bfae142812f7e97fd690d500648903aea3961032..5291541ae747a8d66ab7aa5b86ec29e22273adbd 100755
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -37,7 +37,7 @@
 #include "llgltexture.h"
 
 // Timers to temporise database requests
-const F32 AGENTS_UPDATE_TIMER = 60.0;			// Seconds between 2 agent requests for a region
+const F32 AGENTS_UPDATE_TIMER = 30.f;			// Seconds between 2 agent requests for a region
 const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f;	// Seconds before we consider re-requesting item data for the grid
 
 //---------------------------------------------------------------------------
diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h
index af873be770bbda9c1e0f2bb91fde2e651958a5a0..abfcf3aea7e711f352d9c8f8e9176c504d6d82bb 100755
--- a/indra/newview/llworldmap.h
+++ b/indra/newview/llworldmap.h
@@ -123,7 +123,8 @@ public:
 	std::string getName() const { return mName; }
 	const std::string getFlagsString() const { return LLViewerRegion::regionFlagsToString(mRegionFlags); }
 	const std::string getAccessString() const { return LLViewerRegion::accessToString((U8)mAccess); }
-	const std::string getShortAccessString() const { return LLViewerRegion::accessToShortString((U8)mAccess); } // <alchemy/>
+	const std::string getShortAccessString() const { return LLViewerRegion::accessToShortString(static_cast<U8>(mAccess)); } // <alchemy/>
+	const std::string getAccessIcon() const { return LLViewerRegion::getAccessIcon(static_cast<U8>(mAccess)); }
 
 	const S32 getAgentCount() const;				// Compute the total agents count
 	LLPointer<LLViewerFetchedTexture> getLandForSaleImage();	// Get the overlay image, fetch it if necessary
diff --git a/indra/newview/skins/default/xui/en/floater_region_tracker.xml b/indra/newview/skins/default/xui/en/floater_region_tracker.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bfe8543b04c4f3b7c7c7da349586d593be1206b6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_region_tracker.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ name="region_tracker"
+ title="REGION TRACKER"
+ help_topic="floater_region_tracker"
+ single_instance="true"
+ reuse_instance="true"
+ layout="topleft"
+ height="250"
+ width="408"
+ min_height="150"
+ min_width="30"
+ can_resize="true">
+ <text
+  follows="left|top" 
+  height="31" 
+  left="5" 
+  top="0" 
+  right="-8"
+  layout="topleft" 
+  valign="center"
+  font="SansSerifBig" 
+  name="region_label_text" 
+  value="Add regions from the World Map" />
+  <button
+   right="-76"
+   top_pad="-29"
+   halign="center" 
+   height="31" 
+   layout="topleft" 
+   follows="top|right"
+   width="31" 
+   mouse_opaque="true" 
+   name="refresh"
+   image_overlay="Refresh_Off" />
+  <button
+   left_pad="5"
+   halign="center" 
+   height="31" 
+   layout="topleft" 
+   follows="top|right"
+   width="31" 
+   mouse_opaque="true" 
+   name="remove"
+   image_overlay="TrashItem_Off" />
+  <button
+   left_pad="5"
+   halign="center" 
+   height="31" 
+   layout="topleft" 
+   follows="top|right"
+   width="31" 
+   mouse_opaque="true" 
+   name="open_map"
+   image_overlay="Command_Map_Icon" />
+  <scroll_list
+   name="region_list"
+   tool_tip="Double click an entry to open it on the world map."
+   height="210"
+   width="400"
+   layout="topleft"
+   follows="all" 
+   top_pad="5"
+   left="5"
+   multi_select="true"
+   draw_heading="true"
+   column_padding="0"
+   search_column="0">
+   <scroll_list.columns
+    name="region_label"
+    label="Label"
+    dynamicwidth="true"
+    width="100" />
+   <scroll_list.columns 
+    name="region_maturity_icon"
+    dynamicwidth="true"
+    width="26" />
+   <scroll_list.columns 
+    name="region_name"
+    label="Region"
+    dynamicwidth="true"
+    width="130" />
+   <scroll_list.columns 
+    name="region_agent_count"	
+    label="Count"	
+    dynamicwidth="true" 
+    width="30" />
+  </scroll_list>
+ </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index 26c7278f4869ee1ee1ddddfca15fafbbad93ceab..6b869a5308c63f94d2a91192c0f6f197e8bab046 100755
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -630,10 +630,23 @@
      top_pad="5"
      name="Show Destination"
      tool_tip="Center map on selected location"
-     width="213">
+     width="104">
 		<button.commit_callback
 		function="WMap.ShowTarget" />
     </button>
+    <button
+     enabled="false"
+     follows="right|bottom"
+     height="23"
+     label="Track Region"
+     left_pad="5"
+     name="track_region"
+     tool_tip="Add the region to the region tracker"
+	 top_delta="0"
+     width="104">
+		<button.commit_callback
+		function="WMap.TrackRegion" />
+    </button>
     </panel>
       <panel
     follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 879b5cb911ff2989be1591eb826bbb8b0265efdd..a5b2f9ecc5cbe7f2b2c2c571e8d004c29f47facd 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -10354,4 +10354,25 @@ Cannot create large prims that intersect other players.  Please re-try when othe
    type="notifytip">
     Dice Roll: [RESULT]
   </notification>
+
+  <notification
+   icon="alert.tga"
+   name="RegionTrackerAdd"
+   type="alert">
+What label would you like to use for
+the region &quot;[REGION]&quot;?
+    <tag>confirm</tag>
+    <form name="form">
+      <input name="label" type="text">[LABEL]</input>
+      <button
+       default="true"
+       index="0"
+       name="OK"
+       text="OK"/>
+      <button
+       index="1"
+       name="Cancel"
+       text="Cancel"/>
+    </form>
+  </notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index b619fba98b8368adf4724a097c91068e11c5bdec..55447a8cfe00328ff0be63e72cd56fb91f87058e 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -4061,6 +4061,7 @@ Try enclosing path to the editor with double quotes.
   <string name="Command_Preferences_Label">Preferences</string>
   <string name="Command_Profile_Label">Profile</string>
   <string name="Command_Quick_Settings_Label">Quick Settings</string>
+  <string name="Command_RegionTracker_Label">Region Tracker</string>
   <string name="Command_Scripts_Label">Scripts</string>
   <string name="Command_Stats_Label">Statistics</string>
   <string name="Command_Search_Label">Search</string>
@@ -4097,7 +4098,8 @@ Try enclosing path to the editor with double quotes.
   <string name="Command_Places_Tooltip">Places you've saved</string>
   <string name="Command_Preferences_Tooltip">Preferences</string>
   <string name="Command_Profile_Tooltip">Edit or view your profile</string>
-  <string name="Command_Quick_Settings_Tooltip">Quick Settings</string>
+  <string name="Command_Quick_Settings_Tooltip">Quick preferences</string>
+  <string name="Command_RegionTracker_Tooltip">Track various regions status</string>
   <string name="Command_Scripts_Tooltip">Scripts attached to your avatar</string>
   <string name="Command_Stats_Tooltip">Statistics like FPS, network usage and sim performance</string>
   <string name="Command_Search_Tooltip">Find places, events, people</string>