diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 33c6a8b6aca10ba1c9de9dec50857635bfc17906..0255061b12b9bc1d44071e4174184de09a9345a0 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -1003,6 +1003,11 @@ void LLButton::setImageDisabledSelected(LLPointer<LLUIImage> image)
 	mFadeWhenDisabled = TRUE;
 }
 
+void LLButton::setImagePressed(LLPointer<LLUIImage> image)
+{
+	mImagePressed = image;
+}
+
 void LLButton::setImageHoverSelected(LLPointer<LLUIImage> image)
 {
 	mImageHoverSelected = image;
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 6a1e3a9425b200e55b0232d2d611839b34f29edd..a4d81ed6c36f6165d9e27a228427d4b2dce7ca8e 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -246,6 +246,7 @@ class LLButton
 	void			setImageHoverUnselected(LLPointer<LLUIImage> image);
 	void			setImageDisabled(LLPointer<LLUIImage> image);
 	void			setImageDisabledSelected(LLPointer<LLUIImage> image);
+	void			setImagePressed(LLPointer<LLUIImage> image);
 
 	void			setCommitOnReturn(BOOL commit) { mCommitOnReturn = commit; }
 	BOOL			getCommitOnReturn() const { return mCommitOnReturn; }
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 4e0be81f622bc445d8cc429e9151dd6572bbf724..7abb4f4f16b50bc00baa444277466e4bc229d751 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -38,6 +38,7 @@
 // common includes
 #include "llbutton.h"
 #include "llfocusmgr.h"
+#include "llhelp.h"
 #include "llmenugl.h"
 #include "llparcel.h"
 #include "llstring.h"
@@ -177,6 +178,7 @@ static LLDefaultChildRegistry::Register<LLLocationInputCtrl> r("location_input")
 LLLocationInputCtrl::Params::Params()
 :	icon_maturity_general("icon_maturity_general"),
 	icon_maturity_adult("icon_maturity_adult"),
+	icon_maturity_moderate("icon_maturity_moderate"),
 	add_landmark_image_enabled("add_landmark_image_enabled"),
 	add_landmark_image_disabled("add_landmark_image_disabled"),
 	add_landmark_image_hover("add_landmark_image_hover"),
@@ -186,14 +188,15 @@ LLLocationInputCtrl::Params::Params()
 	add_landmark_button("add_landmark_button"),
 	for_sale_button("for_sale_button"),
 	info_button("info_button"),
-	maturity_icon("maturity_icon"),
+	maturity_button("maturity_button"),
 	voice_icon("voice_icon"),
 	fly_icon("fly_icon"),
 	push_icon("push_icon"),
 	build_icon("build_icon"),
 	scripts_icon("scripts_icon"),
 	damage_icon("damage_icon"),
-	damage_text("damage_text")
+	damage_text("damage_text"),
+	maturity_help_topic("maturity_help_topic")
 {
 }
 
@@ -208,7 +211,9 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	mLandmarkImageOn(NULL),
 	mLandmarkImageOff(NULL),
 	mIconMaturityGeneral(NULL),
-	mIconMaturityAdult(NULL)
+	mIconMaturityAdult(NULL),
+	mIconMaturityModerate(NULL),
+	mMaturityHelpTopic(p.maturity_help_topic)
 {
 	// Lets replace default LLLineEditor with LLLocationLineEditor
 	// to make needed escaping while copying and cutting url
@@ -276,10 +281,15 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 	{
 		mIconMaturityAdult = p.icon_maturity_adult;
 	}
+	if(p.icon_maturity_moderate())
+	{
+		mIconMaturityModerate = p.icon_maturity_moderate;
+	}
 
-	LLIconCtrl::Params maturity_icon = p.maturity_icon;
-	mMaturityIcon = LLUICtrlFactory::create<LLIconCtrl>(maturity_icon);
-	addChild(mMaturityIcon);
+	LLButton::Params maturity_button = p.maturity_button;
+	mMaturityButton = LLUICtrlFactory::create<LLButton>(maturity_button);
+	addChild(mMaturityButton);
+	mMaturityButton->setClickedCallback(boost::bind(&LLLocationInputCtrl::onMaturityButtonClicked, this));
 
 	LLButton::Params for_sale_button = p.for_sale_button;
 	for_sale_button.tool_tip = LLTrans::getString("LocationCtrlForSaleTooltip");
@@ -576,7 +586,7 @@ void LLLocationInputCtrl::reshape(S32 width, S32 height, BOOL called_from_parent
 
 	if (isHumanReadableLocationVisible)
 	{
-		refreshMaturityIcon();
+		refreshMaturityButton();
 	}
 }
 
@@ -613,6 +623,11 @@ void LLLocationInputCtrl::onAgentParcelChange()
 	refresh();
 }
 
+void LLLocationInputCtrl::onMaturityButtonClicked()
+{
+	LLUI::sHelpImpl->showTopic(mMaturityHelpTopic);
+}
+
 void LLLocationInputCtrl::onLandmarkLoaded(LLLandmark* lm)
 {
 	(void) lm;
@@ -736,7 +751,7 @@ void LLLocationInputCtrl::refreshLocation()
 	setText(location_name);
 	isHumanReadableLocationVisible = true;
 
-	refreshMaturityIcon();
+	refreshMaturityButton();
 }
 
 // returns new right edge
@@ -852,37 +867,54 @@ void LLLocationInputCtrl::refreshHealth()
 	}
 }
 
-void LLLocationInputCtrl::refreshMaturityIcon()
+void LLLocationInputCtrl::refreshMaturityButton()
 {
 	// Updating maturity rating icon.
 	LLViewerRegion* region = gAgent.getRegion();
 	if (!region)
 		return;
 
+	bool button_visible = true;
+	LLPointer<LLUIImage> rating_image = NULL;
+	std::string rating_tooltip;
+
 	U8 sim_access = region->getSimAccess();
 	switch(sim_access)
 	{
 	case SIM_ACCESS_PG:
-		mMaturityIcon->setValue(mIconMaturityGeneral->getName());
-		mMaturityIcon->setVisible(TRUE);
+		rating_image = mIconMaturityGeneral;
+		rating_tooltip = LLTrans::getString("LocationCtrlGeneralIconTooltip");
 		break;
 
 	case SIM_ACCESS_ADULT:
-		mMaturityIcon->setValue(mIconMaturityAdult->getName());
-		mMaturityIcon->setVisible(TRUE);
+		rating_image = mIconMaturityAdult;
+		rating_tooltip = LLTrans::getString("LocationCtrlAdultIconTooltip");
+		break;
+
+	case SIM_ACCESS_MATURE:
+		rating_image = mIconMaturityModerate;
+		rating_tooltip = LLTrans::getString("LocationCtrlModerateIconTooltip");
 		break;
 
 	default:
-		mMaturityIcon->setVisible(FALSE);
+		button_visible = false;
+		break;
 	}
 
-	if (mMaturityIcon->getVisible())
+	mMaturityButton->setVisible(button_visible);
+	mMaturityButton->setToolTip(rating_tooltip);
+	if(rating_image)
+	{
+		mMaturityButton->setImageUnselected(rating_image);
+		mMaturityButton->setImagePressed(rating_image);
+	}
+	if (mMaturityButton->getVisible())
 	{
-		positionMaturityIcon();
+		positionMaturityButton();
 	}
 }
 
-void LLLocationInputCtrl::positionMaturityIcon()
+void LLLocationInputCtrl::positionMaturityButton()
 {
 	const LLFontGL* font = mTextEntry->getFont();
 	if (!font)
@@ -894,11 +926,11 @@ void LLLocationInputCtrl::positionMaturityIcon()
 	// Calculate the right edge of rendered text + a whitespace.
 	left_pad = left_pad + font->getWidth(mTextEntry->getText()) + font->getWidth(" ");
 
-	LLRect rect = mMaturityIcon->getRect();
-	mMaturityIcon->setRect(rect.setOriginAndSize(left_pad, rect.mBottom, rect.getWidth(), rect.getHeight()));
+	LLRect rect = mMaturityButton->getRect();
+	mMaturityButton->setRect(rect.setOriginAndSize(left_pad, rect.mBottom, rect.getWidth(), rect.getHeight()));
 
 	// Hide icon if it text area is not width enough to display it, show otherwise.
-	mMaturityIcon->setVisible(rect.mRight < mTextEntry->getRect().getWidth() - right_pad);
+	mMaturityButton->setVisible(rect.mRight < mTextEntry->getRect().getWidth() - right_pad);
 }
 
 void LLLocationInputCtrl::rebuildLocationHistory(const std::string& filter)
@@ -1014,7 +1046,7 @@ void LLLocationInputCtrl::changeLocationPresentation()
 		mTextEntry->setText(LLAgentUI::buildSLURL(false));
 		mTextEntry->selectAll();
 
-		mMaturityIcon->setVisible(FALSE);
+		mMaturityButton->setVisible(FALSE);
 
 		isHumanReadableLocationVisible = false;
 	}
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index f790140f0799655caa682bb43b6c6ddf620ba049..fc7adf60b08579fbcf80b7dd8743866e5086afd3 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -66,17 +66,19 @@ class LLLocationInputCtrl
 	{
 		Optional<LLUIImage*>				icon_maturity_general,
 											icon_maturity_adult,
+											icon_maturity_moderate,
 											add_landmark_image_enabled,
 											add_landmark_image_disabled,
 											add_landmark_image_hover,
 											add_landmark_image_selected;
+		Optional<std::string>				maturity_help_topic;
 		Optional<S32>						icon_hpad,
 											add_landmark_hpad;
-		Optional<LLButton::Params>			add_landmark_button,
+		Optional<LLButton::Params>			maturity_button,
+											add_landmark_button,
 											for_sale_button,
 											info_button;
-		Optional<LLIconCtrl::Params>		maturity_icon,
-											voice_icon,
+		Optional<LLIconCtrl::Params>		voice_icon,
 											fly_icon,
 											push_icon,
 											build_icon,
@@ -136,8 +138,8 @@ class LLLocationInputCtrl
 	void					refreshParcelIcons();
 	// Refresh the value in the health percentage text field
 	void					refreshHealth();
-	void					refreshMaturityIcon();
-	void					positionMaturityIcon();
+	void					refreshMaturityButton();
+	void					positionMaturityButton();
 	
 	void					rebuildLocationHistory(const std::string& filter = LLStringUtil::null);
 	bool 					findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);
@@ -156,6 +158,7 @@ class LLLocationInputCtrl
 	void					onForSaleButtonClicked();
 	void					onAddLandmarkButtonClicked();
 	void					onAgentParcelChange();
+	void					onMaturityButtonClicked();
 	// callbacks
 	bool					onLocationContextMenuItemEnabled(const LLSD& userdata);
 	void 					onLocationContextMenuItemClicked(const LLSD& userdata);
@@ -168,7 +171,7 @@ class LLLocationInputCtrl
 	S32						mIconHPad;			// pad between all icons
 	S32						mAddLandmarkHPad;	// pad to left of landmark star
 
-	LLIconCtrl*	mMaturityIcon;
+	LLButton*	mMaturityButton;
 	LLIconCtrl*	mParcelIcon[ICON_COUNT];
 	LLTextBox* mDamageText;
 
@@ -182,14 +185,16 @@ class LLLocationInputCtrl
 	boost::signals2::connection	mLocationHistoryConnection;
 	LLUIImage* mLandmarkImageOn;
 	LLUIImage* mLandmarkImageOff;
-	LLUIImage* mIconMaturityGeneral;
-	LLUIImage* mIconMaturityAdult;
+	LLPointer<LLUIImage> mIconMaturityGeneral;
+	LLPointer<LLUIImage> mIconMaturityAdult;
+	LLPointer<LLUIImage> mIconMaturityModerate;
 
 	std::string mAddLandmarkTooltip;
 	std::string mEditLandmarkTooltip;
 	// this field holds a human-readable form of the location string, it is needed to be able to compare copy-pated value and real location
 	std::string mHumanReadableLocation;
 	bool isHumanReadableLocationVisible;
+	std::string mMaturityHelpTopic;
 };
 
 #endif
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 91c0af118f9fc653a788d9be999ec914b38cd912..023aba8d7bd02bc9e95022fdebdcf38b68261113 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2897,6 +2897,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
   <string name="LocationCtrlBuildTooltip">Building/dropping objects not allowed</string>
   <string name="LocationCtrlScriptsTooltip">Scripts not allowed</string>
   <string name="LocationCtrlDamageTooltip">Health</string>
+  <string name="LocationCtrlAdultIconTooltip">Adult Region</string>
+  <string name="LocationCtrlModerateIconTooltip">Moderate Region</string>
+  <string name="LocationCtrlGeneralIconTooltip">General Region</string>
 
   <!-- Strings used by the (currently Linux) auto-updater app -->
 	<string name="UpdaterWindowTitle">
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 1d61447e31bb302d4ae76c3947ac8b73d112400c..02ea661da31130f125023941642fcf006eecae2f 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -6,6 +6,8 @@
 <location_input font="SansSerifSmall"
                 icon_maturity_general="Parcel_PG_Light"
                 icon_maturity_adult="Parcel_R_Light"
+                icon_maturity_moderate="Parcel_M_Light"
+                maturity_help_topic="TODO"
                 add_landmark_image_enabled="Favorite_Star_Active"
                 add_landmark_image_disabled="Favorite_Star_Off"
                 add_landmark_image_hover="Favorite_Star_Over"
@@ -43,7 +45,7 @@
                           scale_image="false"
 			  top="19"
 			  left="-3" />
-  <maturity_icon
+  <maturity_button
     name="maturity_icon"
     width="18"
     height="16"