diff --git a/indra/newview/llfloaterpathfindingconsole.cpp b/indra/newview/llfloaterpathfindingconsole.cpp
index 1f73f10b9b03d600e2f3f17ac064aa4bcd9551bb..d1606cbd496ff4a370d4526d4c41eb1778b0a111 100644
--- a/indra/newview/llfloaterpathfindingconsole.cpp
+++ b/indra/newview/llfloaterpathfindingconsole.cpp
@@ -48,6 +48,7 @@
 #include "llviewercontrol.h"
 #include "llpathfindingnavmeshzone.h"
 #include "llpathfindingmanager.h"
+#include "llenvmanager.h"
 
 #include "LLPathingLib.h"
 
@@ -157,7 +158,6 @@ BOOL LLFloaterPathfindingConsole::postBuild()
 void LLFloaterPathfindingConsole::onOpen(const LLSD& pKey)
 {
 	LLFloater::onOpen(pKey);
-	setHeartBeat( true );
 	//make sure we have a pathing system
 	if ( !LLPathingLib::getInstance() )
 	{
@@ -177,10 +177,7 @@ void LLFloaterPathfindingConsole::onOpen(const LLSD& pKey)
 		}
 
 		mIsNavMeshUpdating = false;
-		mNavMeshZone.initialize();
-
-		mNavMeshZone.enable();
-		mNavMeshZone.refresh();
+		initializeNavMeshZoneForCurrentRegion();
 	}		
 
 	if (!mAgentStateSlot.connected())
@@ -188,12 +185,22 @@ void LLFloaterPathfindingConsole::onOpen(const LLSD& pKey)
 		mAgentStateSlot = LLPathfindingManager::getInstance()->registerAgentStateListener(boost::bind(&LLFloaterPathfindingConsole::onAgentStateCB, this, _1));
 	}
 
+	if (!mRegionBoundarySlot.connected())
+	{
+		mRegionBoundarySlot = LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterPathfindingConsole::onRegionBoundaryCross, this));
+	}
+
 	setAgentState(LLPathfindingManager::getInstance()->getAgentState());
 	updatePathTestStatus();
 }
 
 void LLFloaterPathfindingConsole::onClose(bool pIsAppQuitting)
 {
+	if (mRegionBoundarySlot.connected())
+	{
+		mRegionBoundarySlot.disconnect();
+	}
+
 	if (mAgentStateSlot.connected())
 	{
 		mAgentStateSlot.disconnect();
@@ -210,7 +217,6 @@ void LLFloaterPathfindingConsole::onClose(bool pIsAppQuitting)
 	}
 
 	LLFloater::onClose(pIsAppQuitting);
-	setHeartBeat( false );
 	setConsoleState(kConsoleStateUnknown);
 	//Reset all the checkboxes to default
 	mShowNavMeshCheckBox->set( false );
@@ -529,11 +535,11 @@ LLFloaterPathfindingConsole::LLFloaterPathfindingConsole(const LLSD& pSeed)
 	mNavMeshZone(),
 	mIsNavMeshUpdating(false),
 	mAgentStateSlot(),
+	mRegionBoundarySlot(),
 	mConsoleState(kConsoleStateUnknown),
 	mPathData(),
 	mHasStartPoint(false),
-	mHasEndPoint(false),
-	mHeartBeat( false )
+	mHasEndPoint(false)
 {
 	mSelfHandle.bind(this);
 }
@@ -673,6 +679,11 @@ void LLFloaterPathfindingConsole::onAgentStateCB(LLPathfindingManager::EAgentSta
 	setAgentState(pAgentState);
 }
 
+void LLFloaterPathfindingConsole::onRegionBoundaryCross()
+{
+	initializeNavMeshZoneForCurrentRegion();
+}
+
 void LLFloaterPathfindingConsole::setConsoleState(EConsoleState pConsoleState)
 {
 	mConsoleState = pConsoleState;
@@ -868,6 +879,14 @@ std::string LLFloaterPathfindingConsole::getSimulatorStatusText() const
 	return simulatorStatusText;
 }
 
+void LLFloaterPathfindingConsole::initializeNavMeshZoneForCurrentRegion()
+{
+	mNavMeshZone.disable();
+	mNavMeshZone.initialize();
+	mNavMeshZone.enable();
+	mNavMeshZone.refresh();
+}
+
 void LLFloaterPathfindingConsole::setAgentState(LLPathfindingManager::EAgentState pAgentState)
 {
 	switch (LLPathfindingManager::getInstance()->getLastKnownNonErrorAgentState())
@@ -1001,15 +1020,6 @@ U32 LLFloaterPathfindingConsole::getRenderShapeFlags()
 	return mShapeRenderFlags;
 }
 
-void LLFloaterPathfindingConsole::regionCrossingOccured()
-{	
-	std::string statusText("");	
-	LLStyle::Params styleParams;	
-	styleParams.color = LLUIColorTable::instance().getColor("DrYellow");
-	statusText = getString("navmesh_update_needed");
-	mPathfindingViewerStatus->setText((LLStringExplicit)statusText, styleParams);
-}
-
 void LLFloaterPathfindingConsole::fillInColorsForNavMeshVisualization()
 {
 
@@ -1070,5 +1080,3 @@ void LLFloaterPathfindingConsole::fillInColorsForNavMeshVisualization()
 
 	LLPathingLib::getInstance()->setNavMeshColors( colors );
 }
-
-
diff --git a/indra/newview/llfloaterpathfindingconsole.h b/indra/newview/llfloaterpathfindingconsole.h
index 3ead048fc7d798342ab7b7d3946cb396f61992a9..0aff0a8f739acab8cecd4f919436b6e8489bfad2 100644
--- a/indra/newview/llfloaterpathfindingconsole.h
+++ b/indra/newview/llfloaterpathfindingconsole.h
@@ -1,208 +1,210 @@
-/** 
- * @file llfloaterpathfindingconsole.h
- * @author William Todd Stinson
- * @brief "Pathfinding console" floater, allowing manipulation of the Havok AI pathfinding settings.
- *
- * $LicenseInfo:firstyear=2002&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * 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
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLFLOATERPATHFINDINGCONSOLE_H
-#define LL_LLFLOATERPATHFINDINGCONSOLE_H
-
-#include "llfloater.h"
-#include "llhandle.h"
-#include "LLPathingLib.h"
-#include "llpathfindingmanager.h"
-#include "llpathfindingnavmeshzone.h"
-
-class LLSD;
-class LLPanel;
-class LLSliderCtrl;
-class LLLineEditor;
-class LLTextBase;
-class LLCheckBoxCtrl;
-class LLTabContainer;
-class LLComboBox;
-class LLButton;
-
-class LLFloaterPathfindingConsole
-:	public LLFloater
-{
-	friend class LLFloaterReg;
-
-public:
-	typedef enum
-	{
-		kRenderHeatmapNone,
-		kRenderHeatmapA,
-		kRenderHeatmapB,
-		kRenderHeatmapC,
-		kRenderHeatmapD
-	} ERenderHeatmapType;
-
-	typedef enum
-	{
-		kCharacterTypeNone,
-		kCharacterTypeA,
-		kCharacterTypeB,
-		kCharacterTypeC,
-		kCharacterTypeD
-	} ECharacterType;
-
-	virtual BOOL postBuild();
-	virtual void onOpen(const LLSD& pKey);
-	virtual void onClose(bool pIsAppQuitting);
-	virtual BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktype, BOOL down);
-
-	BOOL isGeneratePathMode(MASK mask, EClickType clicktype, BOOL down) const;
-
-	static LLHandle<LLFloaterPathfindingConsole> getInstanceHandle();
-
-	BOOL isRenderPath() const;
-
-	BOOL isRenderNavMesh() const;
-	void setRenderNavMesh(BOOL pIsRenderNavMesh);
-
-	BOOL isRenderWalkables() const;
-	void setRenderWalkables(BOOL pIsRenderWalkables);
-
-	BOOL isRenderStaticObstacles() const;
-	void setRenderStaticObstacles(BOOL pIsRenderStaticObstacles);
-
-	BOOL isRenderMaterialVolumes() const;
-	void setRenderMaterialVolumes(BOOL pIsRenderMaterialVolumes);
-
-	BOOL isRenderExclusionVolumes() const;
-	void setRenderExclusionVolumes(BOOL pIsRenderExclusionVolumes);
-
-	BOOL isRenderWorld() const;
-	void setRenderWorld(BOOL pIsRenderWorld);
-	
-	BOOL isRenderAnyShapes() const;
-	U32  getRenderShapeFlags();
-
-	ERenderHeatmapType getRenderHeatmapType() const;
-	void               setRenderHeatmapType(ERenderHeatmapType pRenderHeatmapType);
-
-    F32            getCharacterWidth() const;
-    void           setCharacterWidth(F32 pCharacterWidth);
-
-    ECharacterType getCharacterType() const;
-    void           setCharacterType(ECharacterType pCharacterType);
-
-	bool getHeartBeat() const { return mHeartBeat;}
-	void setHeartBeat( bool state ) { mHeartBeat=state; }
-	void regionCrossingOccured();
-	int getHeatMapType() const;
-
-protected:
-
-private:
-	typedef enum
-	{
-		kConsoleStateUnknown,
-		kConsoleStateLibraryNotImplemented,
-		kConsoleStateRegionNotEnabled,
-		kConsoleStateCheckingVersion,
-		kConsoleStateDownloading,
-		kConsoleStateHasNavMesh,
-		kConsoleStateError
-	} EConsoleState;
-
-	// Does its own instance management, so clients not allowed
-	// to allocate or destroy.
-	LLFloaterPathfindingConsole(const LLSD& pSeed);
-	virtual ~LLFloaterPathfindingConsole();
-
-	void onShowWalkabilitySet();
-	void onShowWorldToggle();
-	void onCharacterWidthSet();
-	void onCharacterTypeSwitch();
-	void onViewCharactersClicked();
-	void onUnfreezeClicked();
-	void onFreezeClicked();
-	void onViewEditLinksetClicked();
-	void onClearPathClicked();
-	void onNavMeshZoneCB(LLPathfindingNavMeshZone::ENavMeshZoneRequestStatus pNavMeshZoneRequestStatus);
-	void onAgentStateCB(LLPathfindingManager::EAgentState pAgentState);
-
-	void setConsoleState(EConsoleState pConsoleState);
-
-	void        updateControlsOnConsoleState();
-	void        updateStatusOnConsoleState();
-	std::string getSimulatorStatusText() const;
-
-	void setAgentState(LLPathfindingManager::EAgentState pAgentState);
-
-	void generatePath();
-	void updatePathTestStatus();
-	void resetShapeRenderFlags() { mShapeRenderFlags = 0; }
-	void setShapeRenderFlag( LLPathingLib::LLShapeType type ) { mShapeRenderFlags |= (1<<type); }
-	void fillInColorsForNavMeshVisualization();
-
-	LLRootHandle<LLFloaterPathfindingConsole>     mSelfHandle;
-	LLCheckBoxCtrl                                *mShowNavMeshCheckBox;
-	LLComboBox                                    *mShowNavMeshWalkabilityComboBox;
-	LLCheckBoxCtrl                                *mShowWalkablesCheckBox;
-	LLCheckBoxCtrl                                *mShowStaticObstaclesCheckBox;
-	LLCheckBoxCtrl                                *mShowMaterialVolumesCheckBox;
-	LLCheckBoxCtrl                                *mShowExclusionVolumesCheckBox;
-	LLCheckBoxCtrl                                *mShowWorldCheckBox;
-	LLTextBase                                    *mPathfindingViewerStatus;
-	LLTextBase                                    *mPathfindingSimulatorStatus;
-	LLButton                                      *mViewCharactersButton;
-	LLTabContainer                                *mEditTestTabContainer;
-	LLPanel                                       *mEditTab;
-	LLPanel                                       *mTestTab;
-	LLTextBase                                    *mUnfreezeLabel;
-	LLButton                                      *mUnfreezeButton;
-	LLTextBase                                    *mLinksetsLabel;
-	LLButton                                      *mLinksetsButton;
-	LLTextBase                                    *mFreezeLabel;
-	LLButton                                      *mFreezeButton;
-	LLSliderCtrl                                  *mCharacterWidthSlider;
-	LLComboBox                                    *mCharacterTypeComboBox;
-	LLTextBase                                    *mPathTestingStatus;
-	LLButton                                      *mClearPathButton;
-
-	LLPathfindingNavMeshZone::navmesh_zone_slot_t mNavMeshZoneSlot;
-	LLPathfindingNavMeshZone                      mNavMeshZone;
-	bool                                          mIsNavMeshUpdating;
-
-	LLPathfindingManager::agent_state_slot_t      mAgentStateSlot;
-
-	EConsoleState                                 mConsoleState;
-
-	//Container that is populated and subsequently submitted to the LLPathingSystem for processing
-	LLPathingLib::PathingPacket		mPathData;
-	bool							mHasStartPoint;
-	bool							mHasEndPoint;
-	U32								mShapeRenderFlags;
-	bool							mHeartBeat;
-
-	static LLHandle<LLFloaterPathfindingConsole> sInstanceHandle;
+/** 
+ * @file llfloaterpathfindingconsole.h
+ * @author William Todd Stinson
+ * @brief "Pathfinding console" floater, allowing manipulation of the Havok AI pathfinding settings.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATERPATHFINDINGCONSOLE_H
+#define LL_LLFLOATERPATHFINDINGCONSOLE_H
+
+#include "llfloater.h"
+#include "llhandle.h"
+#include "LLPathingLib.h"
+#include "llpathfindingmanager.h"
+#include "llpathfindingnavmeshzone.h"
+
+#include <boost/signals2.hpp>
+
+class LLSD;
+class LLPanel;
+class LLSliderCtrl;
+class LLLineEditor;
+class LLTextBase;
+class LLCheckBoxCtrl;
+class LLTabContainer;
+class LLComboBox;
+class LLButton;
+
+class LLFloaterPathfindingConsole
+:	public LLFloater
+{
+	friend class LLFloaterReg;
+
+public:
+	typedef enum
+	{
+		kRenderHeatmapNone,
+		kRenderHeatmapA,
+		kRenderHeatmapB,
+		kRenderHeatmapC,
+		kRenderHeatmapD
+	} ERenderHeatmapType;
+
+	typedef enum
+	{
+		kCharacterTypeNone,
+		kCharacterTypeA,
+		kCharacterTypeB,
+		kCharacterTypeC,
+		kCharacterTypeD
+	} ECharacterType;
+
+	virtual BOOL postBuild();
+	virtual void onOpen(const LLSD& pKey);
+	virtual void onClose(bool pIsAppQuitting);
+	virtual BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktype, BOOL down);
+
+	BOOL isGeneratePathMode(MASK mask, EClickType clicktype, BOOL down) const;
+
+	static LLHandle<LLFloaterPathfindingConsole> getInstanceHandle();
+
+	BOOL isRenderPath() const;
+
+	BOOL isRenderNavMesh() const;
+	void setRenderNavMesh(BOOL pIsRenderNavMesh);
+
+	BOOL isRenderWalkables() const;
+	void setRenderWalkables(BOOL pIsRenderWalkables);
+
+	BOOL isRenderStaticObstacles() const;
+	void setRenderStaticObstacles(BOOL pIsRenderStaticObstacles);
+
+	BOOL isRenderMaterialVolumes() const;
+	void setRenderMaterialVolumes(BOOL pIsRenderMaterialVolumes);
+
+	BOOL isRenderExclusionVolumes() const;
+	void setRenderExclusionVolumes(BOOL pIsRenderExclusionVolumes);
+
+	BOOL isRenderWorld() const;
+	void setRenderWorld(BOOL pIsRenderWorld);
+	
+	BOOL isRenderAnyShapes() const;
+	U32  getRenderShapeFlags();
+
+	ERenderHeatmapType getRenderHeatmapType() const;
+	void               setRenderHeatmapType(ERenderHeatmapType pRenderHeatmapType);
+
+    F32            getCharacterWidth() const;
+    void           setCharacterWidth(F32 pCharacterWidth);
+
+    ECharacterType getCharacterType() const;
+    void           setCharacterType(ECharacterType pCharacterType);
+
+	int getHeatMapType() const;
+
+protected:
+
+private:
+	typedef enum
+	{
+		kConsoleStateUnknown,
+		kConsoleStateLibraryNotImplemented,
+		kConsoleStateRegionNotEnabled,
+		kConsoleStateCheckingVersion,
+		kConsoleStateDownloading,
+		kConsoleStateHasNavMesh,
+		kConsoleStateError
+	} EConsoleState;
+
+	// Does its own instance management, so clients not allowed
+	// to allocate or destroy.
+	LLFloaterPathfindingConsole(const LLSD& pSeed);
+	virtual ~LLFloaterPathfindingConsole();
+
+	void onShowWalkabilitySet();
+	void onShowWorldToggle();
+	void onCharacterWidthSet();
+	void onCharacterTypeSwitch();
+	void onViewCharactersClicked();
+	void onUnfreezeClicked();
+	void onFreezeClicked();
+	void onViewEditLinksetClicked();
+	void onClearPathClicked();
+	void onNavMeshZoneCB(LLPathfindingNavMeshZone::ENavMeshZoneRequestStatus pNavMeshZoneRequestStatus);
+	void onAgentStateCB(LLPathfindingManager::EAgentState pAgentState);
+	void onRegionBoundaryCross();
+
+	void setConsoleState(EConsoleState pConsoleState);
+
+	void        updateControlsOnConsoleState();
+	void        updateStatusOnConsoleState();
+	std::string getSimulatorStatusText() const;
+
+	void initializeNavMeshZoneForCurrentRegion();
+
+	void setAgentState(LLPathfindingManager::EAgentState pAgentState);
+
+	void generatePath();
+	void updatePathTestStatus();
+	void resetShapeRenderFlags() { mShapeRenderFlags = 0; }
+	void setShapeRenderFlag( LLPathingLib::LLShapeType type ) { mShapeRenderFlags |= (1<<type); }
+	void fillInColorsForNavMeshVisualization();
+
+	LLRootHandle<LLFloaterPathfindingConsole>     mSelfHandle;
+	LLCheckBoxCtrl                                *mShowNavMeshCheckBox;
+	LLComboBox                                    *mShowNavMeshWalkabilityComboBox;
+	LLCheckBoxCtrl                                *mShowWalkablesCheckBox;
+	LLCheckBoxCtrl                                *mShowStaticObstaclesCheckBox;
+	LLCheckBoxCtrl                                *mShowMaterialVolumesCheckBox;
+	LLCheckBoxCtrl                                *mShowExclusionVolumesCheckBox;
+	LLCheckBoxCtrl                                *mShowWorldCheckBox;
+	LLTextBase                                    *mPathfindingViewerStatus;
+	LLTextBase                                    *mPathfindingSimulatorStatus;
+	LLButton                                      *mViewCharactersButton;
+	LLTabContainer                                *mEditTestTabContainer;
+	LLPanel                                       *mEditTab;
+	LLPanel                                       *mTestTab;
+	LLTextBase                                    *mUnfreezeLabel;
+	LLButton                                      *mUnfreezeButton;
+	LLTextBase                                    *mLinksetsLabel;
+	LLButton                                      *mLinksetsButton;
+	LLTextBase                                    *mFreezeLabel;
+	LLButton                                      *mFreezeButton;
+	LLSliderCtrl                                  *mCharacterWidthSlider;
+	LLComboBox                                    *mCharacterTypeComboBox;
+	LLTextBase                                    *mPathTestingStatus;
+	LLButton                                      *mClearPathButton;
+
+	LLPathfindingNavMeshZone::navmesh_zone_slot_t mNavMeshZoneSlot;
+	LLPathfindingNavMeshZone                      mNavMeshZone;
+	bool                                          mIsNavMeshUpdating;
+
+	LLPathfindingManager::agent_state_slot_t      mAgentStateSlot;
+	boost::signals2::connection                   mRegionBoundarySlot;
+
+	EConsoleState                                 mConsoleState;
+
+	//Container that is populated and subsequently submitted to the LLPathingSystem for processing
+	LLPathingLib::PathingPacket		mPathData;
+	bool							mHasStartPoint;
+	bool							mHasEndPoint;
+	U32								mShapeRenderFlags;
+
+	static LLHandle<LLFloaterPathfindingConsole> sInstanceHandle;
 	
 public:
-		LLPathingLib::NavMeshColors					mNavMeshColors;
-};
-
-#endif // LL_LLFLOATERPATHFINDINGCONSOLE_H
+		LLPathingLib::NavMeshColors					mNavMeshColors;
+};
+
+#endif // LL_LLFLOATERPATHFINDINGCONSOLE_H
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index e508f768b49963a3cfd04a37ff5459bf1dafc251..936bafb4883e1ba52eb5e4ab1dd43c521245f2a8 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -55,7 +55,6 @@
 #include "message.h"
 #include "pipeline.h"
 #include "llappviewer.h"		// for do_disconnect()
-#include "llfloaterpathfindingconsole.h"
 
 #include <deque>
 #include <queue>
@@ -1092,14 +1091,6 @@ void process_region_handshake(LLMessageSystem* msg, void** user_data)
 	}
 
 	regionp->unpackRegionHandshake();
-	 
-	LLFloaterPathfindingConsole* pWindow = LLFloaterPathfindingConsole::getInstanceHandle().get();
-	if ( pWindow && pWindow->getHeartBeat() )
-	{
-		pWindow->regionCrossingOccured();
-		return;
-	}
-
 }
 
 
diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml
index adcd7f0fbf4176217eb9184f2a60ec0f76779580..d6435ab95d87bf365c973d3f09c68b899cdd73b0 100644
--- a/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml
@@ -31,7 +31,6 @@
   <floater.string name="pathing_choose_start_point">Please choose start point.</floater.string>
   <floater.string name="pathing_choose_end_point">Please choose end point.</floater.string>
   <floater.string name="pathing_path_valid">Path is shown in orange.</floater.string>
-  <floater.string name="navmesh_update_needed">Region boundary hit, navmesh may not be accurate.</floater.string>
   <text
       height="13"
       word_wrap="true"