diff --git a/indra/newview/llpanelnavmeshrebake.cpp b/indra/newview/llpanelnavmeshrebake.cpp
index 283d6dfff5cfe7d1a0be2383ca4a9c2d396a8468..b12c970da3114e7a04260754f9ac5890b9868faf 100644
--- a/indra/newview/llpanelnavmeshrebake.cpp
+++ b/indra/newview/llpanelnavmeshrebake.cpp
@@ -87,8 +87,11 @@ BOOL LLPanelNavMeshRebake::postBuild()
 
 void LLPanelNavMeshRebake::draw()
 {
-	updatePosition();
-	LLPanel::draw();
+	if (doDraw())
+	{
+		updatePosition();
+		LLPanel::draw();
+	}
 }
 
 BOOL LLPanelNavMeshRebake::handleToolTip( S32 x, S32 y, MASK mask )
@@ -104,9 +107,10 @@ BOOL LLPanelNavMeshRebake::handleToolTip( S32 x, S32 y, MASK mask )
 }
 
 LLPanelNavMeshRebake::LLPanelNavMeshRebake() 
-	: mCanRebakeRegion(TRUE),
-	mNavMeshRebakeButton( NULL ),
-	mNavMeshBakingButton( NULL ),
+	: mCanRebakeRegion(FALSE),
+	mRebakeNavMeshMode(kRebakeNavMesh_Default),
+	mNavMeshRebakeButton(NULL),
+	mNavMeshBakingButton(NULL),
 	mNavMeshSlot(),
 	mRegionCrossingSlot(),
 	mAgentStateSlot()
@@ -125,7 +129,6 @@ LLPanelNavMeshRebake* LLPanelNavMeshRebake::getPanel()
 {
 	LLPanelNavMeshRebake* panel = new LLPanelNavMeshRebake();
 	panel->buildFromFile("panel_navmesh_rebake.xml");
-	panel->setVisible(FALSE);
 	return panel;
 }
 
@@ -133,7 +136,7 @@ void LLPanelNavMeshRebake::setMode(ERebakeNavMeshMode pRebakeNavMeshMode)
 {
 	mNavMeshRebakeButton->setVisible(pRebakeNavMeshMode == kRebakeNavMesh_Available);
 	mNavMeshBakingButton->setVisible(pRebakeNavMeshMode == kRebakeNavMesh_RequestSent);
-	setVisible(pRebakeNavMeshMode != kRebakeNavMesh_NotAvailable);
+	mRebakeNavMeshMode = pRebakeNavMeshMode;
 }
 
 void LLPanelNavMeshRebake::onNavMeshRebakeClick()
@@ -144,8 +147,8 @@ void LLPanelNavMeshRebake::onNavMeshRebakeClick()
 
 void LLPanelNavMeshRebake::handleAgentState(BOOL pCanRebakeRegion)
 {
-	mCanRebakeRegion = pCanRebakeRegion;
 	llinfos << "STINSON DEBUG: canRebakeRegion => " << (pCanRebakeRegion ? "TRUE" : "FALSE") << llendl;
+	mCanRebakeRegion = pCanRebakeRegion;
 }
 
 void LLPanelNavMeshRebake::handleRebakeNavMeshResponse(bool pResponseStatus)
@@ -161,17 +164,13 @@ void LLPanelNavMeshRebake::handleNavMeshStatus(const LLPathfindingNavMeshStatus
 		switch (pNavMeshStatus.getStatus())
 		{
 		case LLPathfindingNavMeshStatus::kPending :
+		case LLPathfindingNavMeshStatus::kRepending :
 			rebakeNavMeshMode = kRebakeNavMesh_Available;
 			break;
 		case LLPathfindingNavMeshStatus::kBuilding :
-			rebakeNavMeshMode = kRebakeNavMesh_NotAvailable;
-			break;
 		case LLPathfindingNavMeshStatus::kComplete :
 			rebakeNavMeshMode = kRebakeNavMesh_NotAvailable;
 			break;
-		case LLPathfindingNavMeshStatus::kRepending :
-			rebakeNavMeshMode = kRebakeNavMesh_Available;
-			break;
 		default : 
 			rebakeNavMeshMode = kRebakeNavMesh_Default;
 			llassert(0);
@@ -194,6 +193,7 @@ void LLPanelNavMeshRebake::createNavMeshStatusListenerForCurrentRegion()
 	{
 		mNavMeshSlot.disconnect();
 	}
+	mCanRebakeRegion = FALSE;
 
 	LLViewerRegion *currentRegion = gAgent.getRegion();
 	if (currentRegion != NULL)
@@ -203,6 +203,11 @@ void LLPanelNavMeshRebake::createNavMeshStatusListenerForCurrentRegion()
 	}
 }
 
+bool LLPanelNavMeshRebake::doDraw() const
+{
+	return (mCanRebakeRegion && (mRebakeNavMeshMode != kRebakeNavMesh_NotAvailable));
+}
+
 void LLPanelNavMeshRebake::updatePosition()
 {
 	S32 y_pos = 0;
diff --git a/indra/newview/llpanelnavmeshrebake.h b/indra/newview/llpanelnavmeshrebake.h
index f4653ea4589d3e2042ec944d072a639b141d4a2e..ecd5ad2111bcd298baa5e6874d327bfad6e74278 100644
--- a/indra/newview/llpanelnavmeshrebake.h
+++ b/indra/newview/llpanelnavmeshrebake.h
@@ -80,11 +80,15 @@ class LLPanelNavMeshRebake : public LLPanel
 
 	void createNavMeshStatusListenerForCurrentRegion();
 
+	bool doDraw() const;
 	void updatePosition();
 
 	BOOL                                     mCanRebakeRegion;
+	ERebakeNavMeshMode                       mRebakeNavMeshMode;
+	
 	LLButton*                                mNavMeshRebakeButton;
 	LLButton*                                mNavMeshBakingButton;
+
 	LLPathfindingNavMesh::navmesh_slot_t     mNavMeshSlot;
 	boost::signals2::connection              mRegionCrossingSlot;
 	LLPathfindingManager::agent_state_slot_t mAgentStateSlot;