diff --git a/indra/newview/alchatcommand.cpp b/indra/newview/alchatcommand.cpp
index 41dfa26d5d99fbc3c4f9fe5412aaf577bee94352..cfcf726fb4e085fb9670d2fc298922b6ea539bf5 100644
--- a/indra/newview/alchatcommand.cpp
+++ b/indra/newview/alchatcommand.cpp
@@ -135,17 +135,7 @@ bool ALChatCommand::parseCommand(std::string data)
 			msg->nextBlockFast(_PREHASH_AgentData);
 			msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
 			msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-			LLUUID group_id = gAgent.getGroupID();
-			if (gSavedSettings.getBOOL("AlchemyRezUnderLandGroup"))
-			{
-				LLParcel* land_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-				// Is the agent in the land group
-				if (gAgent.isInGroup(land_parcel->getGroupID()))
-					group_id = land_parcel->getGroupID();
-				// Is the agent in the land group (the group owns the land)
-				else if (gAgent.isInGroup(land_parcel->getOwnerID()))
-					group_id = land_parcel->getOwnerID();
-			}
+			LLUUID group_id = gAgent.getGroupForRezzing();
 			msg->addUUIDFast(_PREHASH_GroupID, group_id);
 			msg->nextBlockFast(_PREHASH_ObjectData);
 			msg->addU8Fast(_PREHASH_PCode, LL_PCODE_VOLUME);
diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml
index 5bf29f2db7be2d5d30bd33a69ac5e207284b0a57..b2aa387070871d47c2fbddf7e5dcfecab7bb8bc7 100644
--- a/indra/newview/app_settings/settings_alchemy.xml
+++ b/indra/newview/app_settings/settings_alchemy.xml
@@ -255,6 +255,28 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>AlchemyHudTextFadeDistance</key>
+    <map>
+      <key>Comment</key>
+      <string>Distance at which hover text starts fading.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>4.0</real>
+    </map>
+    <key>AlchemyHudTextFadeRange</key>
+    <map>
+      <key>Comment</key>
+      <string>Distance over which hover text will fade out.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>8.0</real>
+    </map>
     <key>AlchemyLookAtShow</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 26edbec4ea364aa9d21c77d1cb00148336327b81..f7e50950cec04f07502ccddca9fa007a48ec44a0 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -5195,4 +5195,19 @@ void LLTeleportRequestViaLocationLookAt::restartTeleport()
 //    gAgent.doTeleportViaLocationLookAt(getPosGlobal());
 }
 
+LLUUID LLAgent::getGroupForRezzing()
+{
+	if (gSavedSettings.getBOOL("AlchemyRezUnderLandGroup"))
+	{
+		LLParcel* land_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+		// Is the agent in the land group
+		if (gAgent.isInGroup(land_parcel->getGroupID()))
+			return land_parcel->getGroupID();
+		// Is the agent in the land group (the group owns the land)
+		else if (gAgent.isInGroup(land_parcel->getOwnerID()))
+			return land_parcel->getOwnerID();
+	}
+	return LLUUID::null;
+}
+
 // EOF
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index fb5ef12c65907db4ea46904a380e7924f40e4a39..77ff3507fbf826e9f396c432dcd55b06e0a347ad 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -905,6 +905,7 @@ class LLAgent : public LLOldEvents::LLObservable
 public:
 	void			setHideGroupTitle(BOOL hide)	{ mHideGroupTitle = hide; }
 	BOOL			isGroupTitleHidden() const 		{ return mHideGroupTitle; }
+	LLUUID			getGroupForRezzing();
 private:
 	std::string		mGroupTitle; 					// Honorific, like "Sir"
 	BOOL			mHideGroupTitle;
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 62314039b4c448184f9b4be5e9fb5f8ff29e2bd1..6f5561b13e7075586a7556af68b5f972e93a4a54 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -89,8 +89,8 @@ LLHUDText::LLHUDText(const U8 type) :
 {
 	mColor = LLColor4(1.f, 1.f, 1.f, 1.f);
 	mDoFade = TRUE;
-	mFadeDistance = 8.f;
-	mFadeRange = 4.f;
+	mFadeDistance = gSavedSettings.getF32("AlchemyHudTextFadeDistance");
+	mFadeRange = gSavedSettings.getF32("AlchemyHudTextFadeRange");
 	mZCompare = TRUE;
 	mOffscreen = FALSE;
 	mRadius = 0.1f;
@@ -129,7 +129,7 @@ void LLHUDText::renderText()
 	LLColor4 text_color = mColor;
 	if (mDoFade)
 	{
-		if (mLastDistance > mFadeDistance)
+		if (mLastDistance > mFadeDistance && mFadeRange > 0.f)
 		{
 			alpha_factor = llmax(0.f, 1.f - (mLastDistance - mFadeDistance)/mFadeRange);
 			text_color.mV[3] = text_color.mV[3]*alpha_factor;
@@ -690,3 +690,15 @@ void LLHUDText::refreshAllObjectText(EObjectTextFilter eObjFilter)
 	}
 }
 // [/RLVa:KB]
+
+void LLHUDText::onFadeSettingsChanged()
+{
+	for (LLHUDText* text : sTextObjects)
+	{
+		if (text)
+		{
+			text->mFadeDistance = gSavedSettings.getF32("AlchemyHudTextFadeDistance");
+			text->mFadeRange = gSavedSettings.getF32("AlchemyHudTextFadeRange");
+		}
+	}
+}
\ No newline at end of file
diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
index 1a548cf9de7c278e38f5a6cbccb9e859b03082c2..7043d7afad3c179be5f8cc8a53d6a110bf74293c 100644
--- a/indra/newview/llhudtext.h
+++ b/indra/newview/llhudtext.h
@@ -131,6 +131,7 @@ class LLHUDText final : public LLHUDObject
 	enum EObjectTextFilter { OTF_NONE, OTF_HUD_ATTACHMENTS };
 	static void        refreshAllObjectText(EObjectTextFilter eObjFilter = OTF_NONE);
 // [/RLVa:KB]
+	static void onFadeSettingsChanged();
 protected:
 	LLHUDText(const U8 type);
 
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 1a327a3778acc0e802abf027dffe1f8704717a19..86c31e22a8877e1546d6b11a009af7f076165024 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -4077,7 +4077,7 @@ void LLSelectMgr::packDuplicateOnRayHead(void *user_data)
 	msg->nextBlockFast(_PREHASH_AgentData);
 	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
 	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
-	msg->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupID() );
+	msg->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupForRezzing() );
 	msg->addVector3Fast(_PREHASH_RayStart, data->mRayStartRegion );
 	msg->addVector3Fast(_PREHASH_RayEnd, data->mRayEndRegion );
 	msg->addBOOLFast(_PREHASH_BypassRaycast, data->mBypassRaycast );
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index f65ae6d63785866230bcbf6cf774183a8423d844..00703d4fe2d345c8b3f83f2c5d72ed65dacb04fe 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -1330,7 +1330,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
 	msg->nextBlockFast(_PREHASH_AgentData);
 	msg->addUUIDFast(_PREHASH_AgentID,  gAgent.getID());
 	msg->addUUIDFast(_PREHASH_SessionID,  gAgent.getSessionID());
-	msg->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupID());
+	msg->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupForRezzing());
 
 	msg->nextBlock("RezData");
 	// if it's being rezzed from task inventory, we need to enable
diff --git a/indra/newview/lltoolplacer.cpp b/indra/newview/lltoolplacer.cpp
index 34d33743b9403b080d656a27f122c4577133ab91..b87659ad3691c37042536bdd4b323828d4a733bc 100644
--- a/indra/newview/lltoolplacer.cpp
+++ b/indra/newview/lltoolplacer.cpp
@@ -245,7 +245,7 @@ BOOL LLToolPlacer::addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics )
 	gMessageSystem->nextBlockFast(_PREHASH_AgentData);
 	gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
 	gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-	gMessageSystem->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupID());
+	gMessageSystem->addUUIDFast(_PREHASH_GroupID, gAgent.getGroupForRezzing());
 	gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
 	gMessageSystem->addU8Fast(_PREHASH_Material,	material);
 
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index fc5abcdbe4817d97a48142f3629453b05896164d..a5f26dced310cff4a474120b7fbd32aa722b1802 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -43,6 +43,7 @@
 #include "llfeaturemanager.h"
 #include "llviewershadermgr.h"
 
+#include "llhudtext.h"
 #include "llsky.h"
 #include "llvieweraudio.h"
 #include "llviewermenu.h"
@@ -799,6 +800,8 @@ void settings_setup_listeners()
 // [RLVa:KB] - Checked: 2015-12-27 (RLVa-1.5.0)
 	gSavedSettings.getControl(RlvSettingNames::Main)->getSignal()->connect(boost::bind(&RlvSettings::onChangedSettingMain, _2));
 // [/RLVa:KB]
+	gSavedSettings.getControl("AlchemyHudTextFadeDistance")->getSignal()->connect(boost::bind(&LLHUDText::onFadeSettingsChanged));
+	gSavedSettings.getControl("AlchemyHudTextFadeRange")->getSignal()->connect(boost::bind(&LLHUDText::onFadeSettingsChanged));
 }
 
 #if TEST_CACHED_CONTROL
diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index 0608a822152eb79f34e4df7dfa9482399df19287..d687bfaa2852eda2917cbbb3ba94171151bdeb68 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -174,6 +174,11 @@ https://accounts.secondlife.com/change_email/
          label="Skinning"
          layout="topleft"
          name="skins" />
+        <panel
+         filename="panel_preferences_interface.xml"
+         label="Interface"
+         layout="topleft"
+         name="interface" />
     </tab_container>
 
 </floater>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index c0686fea9e0554db9933b450042afc91fe6450dc..b1679025d2784224cc4f53efc4c730d2256c5f29 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -258,19 +258,6 @@
     <check_box.commit_callback
       function="Pref.RenderOptionUpdate" />
   </check_box>
-  <check_box
-    control_name="AlchemyCinematicModeHideHoverText"
-    height="16"
-    initial_value="true"
-    label="Hide Hover Text in Cinematic Mode"
-    layout="topleft"
-    left="30"
-    name="HideHoverTextInCinematicMode"
-    top_delta="24"
-    width="256">
-    <check_box.commit_callback
-      function="Pref.RenderOptionUpdate" />
-  </check_box>
   <slider
     control_name="IndirectMaxComplexity"
     tool_tip="Controls at what point a visually complex avatar is drawn as a JellyDoll"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_interface.xml b/indra/newview/skins/default/xui/en/panel_preferences_interface.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e2b7a386feadaca62a33519cb8f5e8829b3af16c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_preferences_interface.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="true"
+ follows="left|top|right|bottom"
+ height="408"
+ label="Interface"
+ layout="topleft"
+ left="102"
+ name="Interface panel"
+ top="1"
+ width="517">
+  <text
+     type="string"
+     length="1"
+     follows="left|top"
+     height="10"
+     layout="topleft"
+     left="30"
+     name="Network:"
+     mouse_opaque="false"
+     top="10"
+     width="300">
+    Floating Text:
+  </text>
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left="50"
+   name="Maximum bandwidth"
+   mouse_opaque="false"
+   top_pad="10"
+   width="200">
+    Fade Distance
+  </text>
+  <slider
+   can_edit_text="true"
+   control_name="AlchemyHudTextFadeDistance"
+   decimal_digits="2"
+   follows="left|top"
+   height="15"
+   increment="0.05"
+   initial_value="4.0"
+   layout="topleft"
+   left_delta="150"
+   max_val="128"
+   min_val="1"
+   name="text_draw_distance"
+   top_delta="0"
+   width="180" />
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_pad="6"
+   mouse_opaque="false"
+   name="text_box2"
+   top_delta="1"
+   width="200">
+    m
+  </text>
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left="50"
+   name="Maximum bandwidth"
+   mouse_opaque="false"
+   top_pad="10"
+   width="200">
+    Fade Range
+  </text>
+  <slider
+   can_edit_text="true"
+   control_name="AlchemyHudTextFadeRange"
+   decimal_digits="2"
+   follows="left|top"
+   height="15"
+   increment="0.05"
+   initial_value="8.0"
+   layout="topleft"
+   left_delta="150"
+   max_val="64"
+   min_val="1"
+   name="text_draw_distance"
+   top_delta="0"
+   width="180" />
+  <text
+   type="string"
+   length="1"
+   follows="left|top"
+   height="10"
+   layout="topleft"
+   left_pad="6"
+   mouse_opaque="false"
+   name="text_box2"
+   top_delta="1"
+   width="200">
+    m
+  </text>
+  <check_box
+    control_name="AlchemyCinematicModeHideHoverText"
+    height="16"
+    initial_value="true"
+    label="Hide in Cinematic Mode"
+    layout="topleft"
+    left="45"
+    name="HideHoverTextInCinematicMode"
+    top_delta="20"
+    width="256">
+    <check_box.commit_callback
+      function="Pref.RenderOptionUpdate" />
+  </check_box>
+</panel>