diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 0e93e28f2da12cbd1bdb85f5a8ebea42f6ea647a..4f40a0a532262933b30748ce97c4c4d919b69c0a 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -722,14 +722,12 @@ void LLLocationInputCtrl::refreshParcelIcons()
 		}
 
 		bool allow_buy      = vpm->canAgentBuyParcel(current_parcel, false);
-		bool allow_voice	= agent_region->isVoiceEnabled() && current_parcel->getParcelFlagAllowVoice();
-		bool allow_fly		= !agent_region->getBlockFly() && current_parcel->getAllowFly();
-		bool allow_push		= !agent_region->getRestrictPushObject() && !current_parcel->getRestrictPushObject();
-		bool allow_build	= current_parcel->getAllowModify(); // true when anyone is allowed to build. See EXT-4610.
-		bool allow_scripts	= !(agent_region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) &&
-							  !(agent_region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) &&
-							  current_parcel->getAllowOtherScripts();
-		bool allow_damage	= agent_region->getAllowDamage() || current_parcel->getAllowDamage();
+		bool allow_voice	= vpm->allowAgentVoice(agent_region, current_parcel);
+		bool allow_fly		= vpm->allowAgentFly(agent_region, current_parcel);
+		bool allow_push		= vpm->allowAgentPush(agent_region, current_parcel);
+		bool allow_build	= vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610.
+		bool allow_scripts	= vpm->allowAgentScripts(agent_region, current_parcel);
+		bool allow_damage	= vpm->allowAgentDamage(agent_region, current_parcel);
 
 		// Most icons are "block this ability"
 		mForSaleBtn->setVisible(allow_buy);
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 9b31ef23a26cfd879df373db46dc860675b298b9..9e5f9da0ea609f2f0cb143b431e0a4e31f6596c5 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -340,8 +340,10 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 	std::string on = getString("on");
 	std::string off = getString("off");
 
+	LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
+
 	// Processing parcel characteristics
-	if (region->isVoiceEnabled() && parcel->getParcelFlagAllowVoice())
+	if (vpm->allowAgentVoice(region, parcel))
 	{
 		mVoiceIcon->setValue(icon_voice);
 		mVoiceText->setText(on);
@@ -352,7 +354,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 		mVoiceText->setText(off);
 	}
 
-	if (!region->getBlockFly() && parcel->getAllowFly())
+	if (vpm->allowAgentFly(region, parcel))
 	{
 		mFlyIcon->setValue(icon_fly);
 		mFlyText->setText(on);
@@ -363,18 +365,18 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 		mFlyText->setText(off);
 	}
 
-	if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
+	if (vpm->allowAgentPush(region, parcel))
 	{
-		mPushIcon->setValue(icon_push_no);
-		mPushText->setText(off);
+		mPushIcon->setValue(icon_push);
+		mPushText->setText(on);
 	}
 	else
 	{
-		mPushIcon->setValue(icon_push);
-		mPushText->setText(on);
+		mPushIcon->setValue(icon_push_no);
+		mPushText->setText(off);
 	}
 
-	if (parcel->getAllowModify())
+	if (vpm->allowAgentBuild(parcel))
 	{
 		mBuildIcon->setValue(icon_build);
 		mBuildText->setText(on);
@@ -385,20 +387,18 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 		mBuildText->setText(off);
 	}
 
-	if ((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) ||
-	    (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
-	    !parcel->getAllowOtherScripts())
+	if (vpm->allowAgentScripts(region, parcel))
 	{
-		mScriptsIcon->setValue(icon_scripts_no);
-		mScriptsText->setText(off);
+		mScriptsIcon->setValue(icon_scripts);
+		mScriptsText->setText(on);
 	}
 	else
 	{
-		mScriptsIcon->setValue(icon_scripts);
-		mScriptsText->setText(on);
+		mScriptsIcon->setValue(icon_scripts_no);
+		mScriptsText->setText(off);
 	}
 
-	if (region->getAllowDamage() || parcel->getAllowDamage())
+	if (vpm->allowAgentDamage(region, parcel))
 	{
 		mDamageIcon->setValue(icon_damage);
 		mDamageText->setText(on);
@@ -461,12 +461,8 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
 	S32 claim_price;
 	S32 rent_price;
 	F32 dwell;
-	BOOL for_sale = parcel->getForSale();
-	LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
-													 &claim_price,
-													 &rent_price,
-													 &for_sale,
-													 &dwell);
+	BOOL for_sale;
+	vpm->getDisplayInfo(&area, &claim_price, &rent_price, &for_sale, &dwell);
 	if (for_sale)
 	{
 		const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index b85b42c710034aa495ac1efcbd2be50b3b480989..7ec650629dd389282c93e02bc86032e934426b1f 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -666,31 +666,38 @@ bool LLViewerParcelMgr::allowAgentBuild() const
 	}
 }
 
+// Return whether anyone can build on the given parcel
+bool LLViewerParcelMgr::allowAgentBuild(const LLParcel* parcel) const
+{
+	return parcel->getAllowModify();
+}
+
 bool LLViewerParcelMgr::allowAgentVoice() const
 {
-	LLViewerRegion* region = gAgent.getRegion();
+	return allowAgentVoice(gAgent.getRegion(), mAgentParcel);
+}
+
+bool LLViewerParcelMgr::allowAgentVoice(const LLViewerRegion* region, const LLParcel* parcel) const
+{
 	return region && region->isVoiceEnabled()
-		&& mAgentParcel	&& mAgentParcel->getParcelFlagAllowVoice();
+		&& parcel	&& parcel->getParcelFlagAllowVoice();
 }
 
-bool LLViewerParcelMgr::allowAgentFly() const
+bool LLViewerParcelMgr::allowAgentFly(const LLViewerRegion* region, const LLParcel* parcel) const
 {
-	LLViewerRegion* region = gAgent.getRegion();
 	return region && !region->getBlockFly()
-		&& mAgentParcel && mAgentParcel->getAllowFly();
+		&& parcel && parcel->getAllowFly();
 }
 
 // Can the agent be pushed around by LLPushObject?
-bool LLViewerParcelMgr::allowAgentPush() const
+bool LLViewerParcelMgr::allowAgentPush(const LLViewerRegion* region, const LLParcel* parcel) const
 {
-	LLViewerRegion* region = gAgent.getRegion();
 	return region && !region->getRestrictPushObject()
-		&& mAgentParcel && !mAgentParcel->getRestrictPushObject();
+		&& parcel && !parcel->getRestrictPushObject();
 }
 
-bool LLViewerParcelMgr::allowAgentScripts() const
+bool LLViewerParcelMgr::allowAgentScripts(const LLViewerRegion* region, const LLParcel* parcel) const
 {
-	LLViewerRegion* region = gAgent.getRegion();
 	// *NOTE: This code does not take into account group-owned parcels
 	// and the flag to allow group-owned scripted objects to run.
 	// This mirrors the traditional menu bar parcel icon code, but is not
@@ -698,15 +705,14 @@ bool LLViewerParcelMgr::allowAgentScripts() const
 	return region
 		&& !(region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS)
 		&& !(region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS)
-		&& mAgentParcel
-		&& mAgentParcel->getAllowOtherScripts();
+		&& parcel
+		&& parcel->getAllowOtherScripts();
 }
 
-bool LLViewerParcelMgr::allowAgentDamage() const
+bool LLViewerParcelMgr::allowAgentDamage(const LLViewerRegion* region, const LLParcel* parcel) const
 {
-	LLViewerRegion* region = gAgent.getRegion();
 	return (region && region->getAllowDamage())
-		|| (mAgentParcel && mAgentParcel->getAllowDamage());
+		|| (parcel && parcel->getAllowDamage());
 }
 
 BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index 379190789b09e98e64e61129d12bde672a15ee07..98be8e2c7b4c0f1c68f13472b3d856af71f8ed15 100644
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -171,26 +171,28 @@ public:
 	// Can this agent build on the parcel he is on?
 	// Used for parcel property icons in nav bar.
 	bool	allowAgentBuild() const;
+	bool	allowAgentBuild(const LLParcel* parcel) const;
 	
 	// Can this agent speak on the parcel he is on?
 	// Used for parcel property icons in nav bar.
 	bool	allowAgentVoice() const;
-	
+	bool	allowAgentVoice(const LLViewerRegion* region, const LLParcel* parcel) const;
+
 	// Can this agent start flying on this parcel?
 	// Used for parcel property icons in nav bar.
-	bool	allowAgentFly() const;
+	bool	allowAgentFly(const LLViewerRegion* region, const LLParcel* parcel) const;
 	
 	// Can this agent be pushed by llPushObject() on this parcel?
 	// Used for parcel property icons in nav bar.
-	bool	allowAgentPush() const;
+	bool	allowAgentPush(const LLViewerRegion* region, const LLParcel* parcel) const;
 	
 	// Can scripts written by non-parcel-owners run on the agent's current
 	// parcel?  Used for parcel property icons in nav bar.
-	bool	allowAgentScripts() const;
+	bool	allowAgentScripts(const LLViewerRegion* region, const LLParcel* parcel) const;
 	
 	// Can the agent be damaged here?
 	// Used for parcel property icons in nav bar.
-	bool	allowAgentDamage() const;
+	bool	allowAgentDamage(const LLViewerRegion* region, const LLParcel* parcel) const;
 
 	F32		getHoverParcelWidth() const		
 				{ return F32(mHoverEastNorth.mdV[VX] - mHoverWestSouth.mdV[VX]); }