diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 406c77a365d71e872e48900bba27196fb496dd7b..bd5734312a3185b629e3fcea22ef5a2787fa7eb0 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -323,6 +323,19 @@ void LLLineEditor::setMaxTextLength(S32 max_text_length)
 	mMaxLengthBytes = max_len;
 } 
 
+void LLLineEditor::getTextPadding(S32 *left, S32 *right)
+{
+	*left = mTextPadLeft;
+	*right = mTextPadRight;
+}
+
+void LLLineEditor::setTextPadding(S32 left, S32 right)
+{
+	mTextPadLeft = left;
+	mTextPadRight = right;
+	updateTextPadding();
+}
+
 void LLLineEditor::updateTextPadding()
 {
 	static LLUICachedControl<S32> line_editor_hpad ("UILineEditorHPad", 0);
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index 4474963b1aff534468df87306f18ccb4f8dfd9dc..4c4b00094d4feedaed59d13848f0669d850b499e 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -226,6 +226,9 @@ class LLLineEditor
 	void			setKeystrokeCallback(callback_t callback, void* user_data);
 
 	void			setMaxTextLength(S32 max_text_length);
+	// Manipulate left and right padding for text
+	void getTextPadding(S32 *left, S32 *right);
+	void setTextPadding(S32 left, S32 right);
 
 	// Prevalidation controls which keystrokes can affect the editor
 	void			setPrevalidate( LLLinePrevalidateFunc func );
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 0626a5c3d31c98cb6adc7ea0963c02bc73b20d4b..59537c1e6518d0f40582f52add6d5849b3b5a51c 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -52,6 +52,7 @@
 #include "llviewerwindow.h"
 #include "llpanelgroup.h"
 #include "llgroupactions.h"
+#include "llnotifications.h"
 #include "lluictrlfactory.h"
 #include <boost/regex.hpp>
 
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 5d2a0aa3824299d363740ce6d37d28378e3a24ac..063e98a8119dc463ea4020d65a69147094d127d1 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -52,6 +52,7 @@
 #include "llteleporthistory.h"
 #include "llsidetray.h"
 #include "llslurl.h"
+#include "llstatusbar.h"			// getHealth()
 #include "lltrans.h"
 #include "llviewerinventory.h"
 #include "llviewerparcelmgr.h"
@@ -165,7 +166,8 @@ LLLocationInputCtrl::Params::Params()
 	push_icon("push_icon"),
 	build_icon("build_icon"),
 	scripts_icon("scripts_icon"),
-	damage_icon("damage_icon")
+	damage_icon("damage_icon"),
+	damage_text("damage_text")
 {
 }
 
@@ -200,7 +202,7 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	params.commit_on_focus_lost(false);
 	params.follows.flags(FOLLOWS_ALL);
 	mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params);
-	this->addChild(mTextEntry);
+	addChild(mTextEntry);
 	// LLLineEditor is replaced with LLLocationLineEditor
 
 	// "Place information" button.
@@ -261,7 +263,10 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	LLIconCtrl::Params damage_icon = p.damage_icon;
 	mParcelIcon[DAMAGE_ICON] = LLUICtrlFactory::create<LLIconCtrl>(damage_icon);
 	addChild(mParcelIcon[DAMAGE_ICON]);
-	// TODO: health number?
+	
+	LLTextBox::Params damage_text = p.damage_text;
+	mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text);
+	addChild(mDamageText);
 	
 	// Register callbacks and load the location field context menu (NB: the order matters).
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2));
@@ -405,11 +410,8 @@ void LLLocationInputCtrl::onTextEntry(LLLineEditor* line_editor)
  */
 void LLLocationInputCtrl::setText(const LLStringExplicit& text)
 {
-	if (mTextEntry)
-	{
-		mTextEntry->setText(text);
-		mHasAutocompletedText = FALSE;
-	}
+	mTextEntry->setText(text);
+	mHasAutocompletedText = FALSE;
 }
 
 void LLLocationInputCtrl::setFocus(BOOL b)
@@ -444,10 +446,18 @@ void LLLocationInputCtrl::onFocusLost()
 }
 
 void LLLocationInputCtrl::draw()
-{	
-	if(!hasFocus() && gSavedSettings.getBOOL("NavBarShowCoordinates")){
+{
+	static LLUICachedControl<bool> show_coords("NavBarShowCoordinates", false);
+	if(!hasFocus() && show_coords)
+	{
 		refreshLocation();
 	}
+	
+	static LLUICachedControl<bool> show_icons("NavBarShowParcelProperties", false);
+	if (show_icons)
+	{
+		refreshHealth();
+	}
 	LLComboBox::draw();
 }
 
@@ -544,10 +554,12 @@ void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data)
 	
 	mList->mouseOverHighlightNthItem(-1); // Clear highlight on the last selected item.
 }
+
 bool LLLocationInputCtrl::findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter)
 {
 	return item.mTitle.find(filter) != std::string::npos;
 }
+
 void LLLocationInputCtrl::onTextEditorRightClicked(S32 x, S32 y, MASK mask)
 {
 	if (mLocationContextMenu)
@@ -596,51 +608,82 @@ void LLLocationInputCtrl::refreshLocation()
 
 void LLLocationInputCtrl::refreshParcelIcons()
 {
+	// Our "cursor" moving right to left
+	S32 x = mAddLandmarkBtn->getRect().mLeft - mIconHPad;
+	
 	static LLUICachedControl<bool> show_properties("NavBarShowParcelProperties", false);
-	if (!show_properties)
+	if (show_properties)
+	{
+		LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
+		// *TODO buy
+		//bool allow_buy      = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false);
+		bool allow_voice	= vpm->allowAgentVoice();
+		bool allow_fly		= vpm->allowAgentFly();
+		bool allow_push		= vpm->allowAgentPush();
+		bool allow_build	= vpm->allowAgentBuild();
+		bool allow_scripts	= vpm->allowAgentScripts();
+		bool allow_damage	= vpm->allowAgentDamage();
+		
+		// Most icons are "block this ability"
+		mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice );
+		mParcelIcon[FLY_ICON]->setVisible(     !allow_fly );
+		mParcelIcon[PUSH_ICON]->setVisible(    !allow_push );
+		mParcelIcon[BUILD_ICON]->setVisible(   !allow_build );
+		mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
+		mParcelIcon[DAMAGE_ICON]->setVisible(  allow_damage );
+		mDamageText->setVisible(allow_damage);
+		
+		// Slide the parcel icons rect from right to left, adjusting rectangles of
+		// visible icons.  Assumes all icon rects are the same.
+		for (S32 i = 0; i < ICON_COUNT; ++i)
+		{
+			LLIconCtrl* icon = mParcelIcon[i];
+			if (icon->getVisible())
+			{
+				LLRect r = icon->getRect();
+				r.mLeft = x - r.getWidth();
+				r.mRight = x;
+				icon->setRect( r );
+				x -= r.getWidth() + mIconHPad;
+			}
+		}
+		LLRect text_rect = mDamageText->getRect();
+		text_rect.mLeft = x - text_rect.getWidth();
+		text_rect.mRight = x;
+		mDamageText->setRect(text_rect);
+		x -= text_rect.getWidth() + mIconHPad;
+	}
+	else
 	{
 		for (S32 i = 0; i < ICON_COUNT; ++i)
 		{
 			mParcelIcon[i]->setVisible(false);
 		}
-		return;
+		mDamageText->setVisible(false);
 	}
 	
-	LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
-	// *TODO buy
-	//bool allow_buy      = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false);
-	bool allow_voice	= vpm->allowAgentVoice();
-	bool allow_fly		= vpm->allowAgentFly();
-	bool allow_push		= vpm->allowAgentPush();
-	bool allow_build	= vpm->allowAgentBuild();
-	bool allow_scripts	= vpm->allowAgentScripts();
-	bool allow_damage	= vpm->allowAgentDamage();
-
-	// Most icons are "block this ability"
-	mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice );
-	mParcelIcon[FLY_ICON]->setVisible(     !allow_fly );
-	mParcelIcon[PUSH_ICON]->setVisible(    !allow_push );
-	mParcelIcon[BUILD_ICON]->setVisible(   !allow_build );
-	mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
-	mParcelIcon[DAMAGE_ICON]->setVisible(  allow_damage );
-	// *TODO damage meter
-
-	// Slide the parcel icons rect from right to left, adjusting rectangles of
-	// visible icons.  Assumes all icon rects are the same.
-	LLRect icon_rect = mParcelIcon[0]->getRect();
-	S32 icon_width = icon_rect.getWidth();
-	icon_rect.mRight = mAddLandmarkBtn->getRect().mLeft - mIconHPad;
-	icon_rect.mLeft = icon_rect.mRight - icon_width;
-	
-	for (S32 i = 0; i < ICON_COUNT; ++i)
+	S32 left_pad, right_pad;
+	mTextEntry->getTextPadding(&left_pad, &right_pad);
+	right_pad = mTextEntry->getRect().mRight - x;
+	llinfos << "JAMESDEBUG text entry rect " << mTextEntry->getRect()
+	<< " x " << x << " left_pad " << left_pad << " right_pad " << right_pad << llendl;
+	mTextEntry->setTextPadding(left_pad, right_pad);
+}
+
+void LLLocationInputCtrl::refreshHealth()
+{
+	// *FIXME: Status bar owns health information, should be in agent
+	if (gStatusBar)
 	{
-		if (mParcelIcon[i]->getVisible())
+		static S32 last_health = -1;
+		S32 health = gStatusBar->getHealth();
+		if (health != last_health)
 		{
-			mParcelIcon[i]->setRect( icon_rect );
-			icon_rect.translate( -icon_width - mIconHPad, 0);
+			std::string text = llformat("%d%%", health);
+			mDamageText->setText(text);
+			last_health = health;
 		}
 	}
-	// *TODO: health meter
 }
 
 void LLLocationInputCtrl::rebuildLocationHistory(std::string filter)
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index fefd0f7fec63e30cabf161ea217ea3a009fdbbc7..3bd23e80a98a4ad615d3418ccc3f5afe07d3c386 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -35,6 +35,7 @@
 
 #include "llcombobox.h"
 #include "lliconctrl.h"		// Params
+#include "lltextbox.h"		// Params
 
 class LLLandmark;
 
@@ -73,6 +74,7 @@ class LLLocationInputCtrl
 											build_icon,
 											scripts_icon,
 											damage_icon;
+		Optional<LLTextBox::Params>			damage_text;
 		Params();
 	};
 
@@ -111,6 +113,9 @@ class LLLocationInputCtrl
 	void					refresh();
 	void					refreshLocation();
 	void					refreshParcelIcons();
+	// Refresh the value in the health percentage text field
+	void					refreshHealth();
+	
 	void					rebuildLocationHistory(std::string filter = "");
 	bool 					findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);
 	void					setText(const LLStringExplicit& text);
@@ -147,7 +152,7 @@ class LLLocationInputCtrl
 		ICON_COUNT
 	};
 	LLIconCtrl*	mParcelIcon[ICON_COUNT];
-	// TODO: Health meter?
+	LLTextBox* mDamageText;
 
 	LLAddLandmarkObserver*		mAddLandmarkObserver;
 	LLRemoveLandmarkObserver*	mRemoveLandmarkObserver;
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index dbe0ec3b86e9c8f98719815afd5b42836f38468a..4237681c800f61d88791882045ad3e6da319a066 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -41,6 +41,7 @@
 
 #include "llpanelobjectinventory.h"
 
+#include "llmenugl.h"
 #include "roles_constants.h"
 
 #include "llagent.h"
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index 3ce35499615a99c6ee942ba73ccd93dfea05bf8f..bdaacce981d653b584e0eef1e848658ba5071aef 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -34,7 +34,6 @@
 #define LL_LLSTATUSBAR_H
 
 #include "llpanel.h"
-#include <llmenugl.h>
 
 // "Constants" loaded from settings.xml at start time
 extern S32 STATUS_BAR_HEIGHT;
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index 1fed1c075a6ec4d736f292790a1b01dd10718884..17b1479ec4df7d03f980820a195ef587c3ed26c4 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -81,8 +81,18 @@
 	top="21"
     image_name="parcel_lght_Damage"
     />
+  <!-- Default text color is invisible on top of nav bar background -->
+  <damage_text
+    name="damage_text"
+	width="50"
+	height="18"
+	top="16"
+	halign="right"
+	font="SansSerifSmall"
+	text_color="TextFgColor"
+	/>
 
-    <combo_button name="Location History"
+  <combo_button name="Location History"
                           label=""
                           pad_right="0"/>
   <combo_list bg_writeable_color="MenuDefaultBgColor" page_lines="10"