diff --git a/.hgtags b/.hgtags
index 437d1285c1a938e83112471ad156a8eeb6c40c50..af4a6200c5c0268720d275574b8a59c8dd79a401 100755
--- a/.hgtags
+++ b/.hgtags
@@ -363,5 +363,6 @@ e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193
 4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191
 7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196
 b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2
+248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203
 37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200
 182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3
diff --git a/autobuild.xml b/autobuild.xml
index d5fd639673e274fe5b43b03bbc3b0784652d04c7..2f6e67ad653f84ca1cc3bb465203364bcb09ef0e 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -2459,6 +2459,18 @@
               </map>
               <key>configure</key>
               <map>
+                <key>arguments</key>
+                <array>
+                  <string>..\indra</string>
+                  <string>&amp;&amp;</string>
+                  <string>..\indra\tools\vstool\VSTool.exe</string>
+                  <string>--solution</string>
+                  <string>SecondLife.sln</string>
+                  <string>--config</string>
+                  <string>Debug</string>
+                  <string>--startup</string>
+                  <string>secondlife-bin</string>
+                </array>
                 <key>options</key>
                 <array>
                   <string>-G</string>
@@ -2535,6 +2547,18 @@
               </map>
               <key>configure</key>
               <map>
+                <key>arguments</key>
+                <array>
+                  <string>..\indra</string>
+                  <string>&amp;&amp;</string>
+                  <string>..\indra\tools\vstool\VSTool.exe</string>
+                  <string>--solution</string>
+                  <string>SecondLife.sln</string>
+                  <string>--config</string>
+                  <string>RelWithDebInfo</string>
+                  <string>--startup</string>
+                  <string>secondlife-bin</string>
+                </array>
                 <key>options</key>
                 <array>
                   <string>-G</string>
@@ -2611,6 +2635,18 @@
               </map>
               <key>configure</key>
               <map>
+                <key>arguments</key>
+                <array>
+                  <string>..\indra</string>
+                  <string>&amp;&amp;</string>
+                  <string>..\indra\tools\vstool\VSTool.exe</string>
+                  <string>--solution</string>
+                  <string>SecondLife.sln</string>
+                  <string>--config</string>
+                  <string>Release</string>
+                  <string>--startup</string>
+                  <string>secondlife-bin</string>
+                </array>
                 <key>options</key>
                 <array>
                   <string>-G</string>
diff --git a/doc/contributions.txt b/doc/contributions.txt
index df504e4a8a544ed726b7caa24259e1f4d482c71f..3218624f76e3882494938c555332de4b692c1db8 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -174,6 +174,7 @@ Ansariel Hiller
 	VWR-26150
 	STORM-1685
 	STORM-1713
+	STORM-1899
 Aralara Rajal
 Ardy Lay
 	STORM-859
@@ -636,6 +637,7 @@ Jonathan Yap
 	STORM-1809
 	STORM-1793
 	STORM-1810
+	STORM-1877
 	STORM-1860
 	STORM-1852
 	STORM-1870
@@ -644,6 +646,7 @@ Jonathan Yap
 	STORM-1862
 Kadah Coba
 	STORM-1060
+    STORM-1843
 Jondan Lundquist
 Josef Munster
 Josette Windlow
@@ -739,6 +742,7 @@ Marianne McCann
 Marine Kelley
     STORM-281
 MartinRJ Fayray
+    STORM-1844
     STORM-1845
 Matthew Anthony
 Matthew Dowd
@@ -1108,9 +1112,12 @@ Sudane Erato
 Synystyr Texan
 Takeda Terrawyng
 TankMaster Finesmith
+	OPEN-140
+	OPEN-142
 	STORM-1100
-	STORM-1602
 	STORM-1258
+	STORM-1602
+	STORM-1868
     VWR-26622
 Talamasca
 Tali Rosca
@@ -1228,6 +1235,8 @@ Watty Berkson
 Westley Schridde
 Westley Streeter
 Whimsy Winx
+Whirly Fizzle
+	STORM-1895
 Whoops Babii
 	VWR-631
 	VWR-1640
diff --git a/etc/message.xml b/etc/message.xml
index 7b133ab20570bf4ae3da5025c590fe034d23d29f..6d8160abb5319f00837a87d722b9093ec3711a76 100644
--- a/etc/message.xml
+++ b/etc/message.xml
@@ -385,14 +385,6 @@
 					<key>trusted-sender</key>
 					<boolean>true</boolean>
 				</map>
-
-				<key>ParcelMediaURLFilter</key>
-				<map>
-					<key>flavor</key>
-					<string>llsd</string>
-					<key>trusted-sender</key>
-					<boolean>false</boolean>
-				</map>
 				
 				<key>ParcelNavigateMedia</key>
 				<map>
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 00baf626d20a86f37ffcbf0ec902f675eda24156..487b58105683d2fef3775ab4c9f8a74cc80d5741 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -51,6 +51,7 @@ if (WINDOWS)
   set(CMAKE_CXX_FLAGS_RELEASE
       "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
       CACHE STRING "C++ compiler release options" FORCE)
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
 
   set(CMAKE_CXX_STANDARD_LIBRARIES "")
   set(CMAKE_C_STANDARD_LIBRARIES "")
diff --git a/indra/llcharacter/llhandmotion.cpp b/indra/llcharacter/llhandmotion.cpp
index 63937d825518f383ba346384547a19e044a86974..696dba0d95d0779c0e5faba1cea38bbd285f4c01 100644
--- a/indra/llcharacter/llhandmotion.cpp
+++ b/indra/llcharacter/llhandmotion.cpp
@@ -132,18 +132,68 @@ BOOL LLHandMotion::onUpdate(F32 time, U8* joint_mask)
 	{
 		if (mNewPose != HAND_POSE_RELAXED && mNewPose != mCurrentPose)
 		{
-			mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
+			// Only set param weight for poses other than
+			// default (HAND_POSE_SPREAD); HAND_POSE_SPREAD
+			// is not an animatable morph!
+			if (mNewPose != HAND_POSE_SPREAD)
+			{
+				mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
+			}
+
+			// Reset morph weight for current pose back to its
+			// full extend or it might be stuck somewhere in the middle if a
+			// pose is requested and the old pose is requested again shortly
+			// after while still blending to the other pose!
+			if (mCurrentPose != HAND_POSE_SPREAD)
+			{
+				mCharacter->setVisualParamWeight(gHandPoseNames[mCurrentPose], 1.f);
+			}
+
+			// Update visual params now if we won't blend
+			if (mCurrentPose == HAND_POSE_RELAXED)
+			{
+				mCharacter->updateVisualParams();
+			}
 		}
 		mNewPose = HAND_POSE_RELAXED;
 	}
 	else
 	{
-		// this is a new morph we didn't know about before
-		if (*requestedHandPose != mNewPose && mNewPose != mCurrentPose && mNewPose != HAND_POSE_SPREAD)
+		// Sometimes we seem to get garbage here, with poses that are out of bounds.
+		// So check for a valid pose first.
+		if (*requestedHandPose >= 0 && *requestedHandPose < NUM_HAND_POSES)
+		{
+			// This is a new morph we didn't know about before:
+			// Reset morph weight for both current and new pose
+			// back their starting values while still blending.
+			if (*requestedHandPose != mNewPose && mNewPose != mCurrentPose)
+			{
+				if (mNewPose != HAND_POSE_SPREAD)
+				{
+					mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
+				}
+
+				// Reset morph weight for current pose back to its full extend
+				// or it might be stuck somewhere in the middle if a pose is
+				// requested and the old pose is requested again shortly after
+				// while still blending to the other pose!
+				if (mCurrentPose != HAND_POSE_SPREAD)
+				{
+					mCharacter->setVisualParamWeight(gHandPoseNames[mCurrentPose], 1.f);
+				}
+
+				// Update visual params now if we won't blend
+				if (mCurrentPose == *requestedHandPose)
+				{
+					mCharacter->updateVisualParams();
+				}
+			}
+			mNewPose = *requestedHandPose;
+		}
+		else
 		{
-			mCharacter->setVisualParamWeight(gHandPoseNames[mNewPose], 0.f);
+			llwarns << "Requested hand pose out of range. Ignoring requested pose." << llendl;
 		}
-		mNewPose = *requestedHandPose;
 	}
 
 	mCharacter->removeAnimationData("Hand Pose");
diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp
index 433076c7a95799120b911c4145c6bc71c9f75302..a871bcbb25c3ced13be8e1b6ea70a53ba4220d3e 100644
--- a/indra/llinventory/llparcel.cpp
+++ b/indra/llinventory/llparcel.cpp
@@ -193,8 +193,6 @@ void LLParcel::init(const LLUUID &owner_id,
 	mMediaWidth = 0;
 	mMediaHeight = 0;
 	setMediaCurrentURL(LLStringUtil::null);
-	mMediaURLFilterEnable = FALSE;
-	mMediaURLFilterList = LLSD::emptyArray();
 	mMediaAllowNavigate = TRUE;
 	mMediaURLTimeout = 0.0f;
 	mMediaPreventCameraZoom = FALSE;
@@ -336,38 +334,6 @@ void LLParcel::setMediaURLResetTimer(F32 time)
 	mMediaResetTimer.setTimerExpirySec(time);
 }
 
-void LLParcel::setMediaURLFilterList(LLSD list)
-{
-	// sanity check LLSD
-	// must be array of strings
-	if (!list.isArray())
-	{
-		return;
-	}
-
-	for (S32 i = 0; i < list.size(); i++)
-	{
-		if (!list[i].isString())
-			return;
-	}
-
-	// can't be too big
-	const S32 MAX_SIZE = 50;
-	if (list.size() > MAX_SIZE)
-	{
-		LLSD new_list = LLSD::emptyArray();
-
-		for (S32 i = 0; i < llmin(list.size(), MAX_SIZE); i++)
-		{
-			new_list.append(list[i]);
-		}
-
-		list = new_list;
-	}
-	
-	mMediaURLFilterList = list;
-}
-
 // virtual
 void LLParcel::setLocalID(S32 local_id)
 {
@@ -622,34 +588,6 @@ BOOL LLParcel::importAccessEntry(std::istream& input_stream, LLAccessEntry* entr
     return input_stream.good();
 }
 
-BOOL LLParcel::importMediaURLFilter(std::istream& input_stream, std::string& url)
-{
-	skip_to_end_of_next_keyword("{", input_stream);
-
-	while(input_stream.good())
-	{
-		skip_comments_and_emptyspace(input_stream);
-		std::string line, keyword, value;
-		get_line(line, input_stream, MAX_STRING);
-		get_keyword_and_value(keyword, value, line);
-
-		if ("}" == keyword)
-		{
-			break;
-		}
-		else if ("url" == keyword)
-		{
-			url = value;
-		}
-		else
-		{
-			llwarns << "Unknown keyword in parcel media url filter section: <"
-					<< keyword << ">" << llendl;
-		}
-	}
-	return input_stream.good();
-}
-
 // Assumes we are in a block "ParcelData"
 void LLParcel::packMessage(LLMessageSystem* msg)
 {
@@ -696,8 +634,6 @@ void LLParcel::packMessage(LLSD& msg)
 	msg["media_allow_navigate"] = getMediaAllowNavigate();
 	msg["media_prevent_camera_zoom"] = getMediaPreventCameraZoom();
 	msg["media_url_timeout"] = getMediaURLTimeout();
-	msg["media_url_filter_enable"] = getMediaURLFilterEnable();
-	msg["media_url_filter_list"] = getMediaURLFilterList();
 	msg["group_id"] = getGroupID();
 	msg["pass_price"] = mPassPrice;
 	msg["pass_hours"] = mPassHours;
@@ -789,7 +725,6 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)
 		msg->getString("MediaLinkSharing", "MediaCurrentURL", buffer);
 		setMediaCurrentURL(buffer);
 		msg->getU8 ( "MediaLinkSharing", "MediaAllowNavigate", mMediaAllowNavigate );
-		msg->getU8 ( "MediaLinkSharing", "MediaURLFilterEnable", mMediaURLFilterEnable );
 		msg->getU8 ( "MediaLinkSharing", "MediaPreventCameraZoom", mMediaPreventCameraZoom );
 		msg->getF32( "MediaLinkSharing", "MediaURLTimeout", mMediaURLTimeout);
 	}
@@ -1250,8 +1185,6 @@ void LLParcel::clearParcel()
 	mMediaWidth = 0;
 	mMediaHeight = 0;
 	setMediaCurrentURL(LLStringUtil::null);
-	setMediaURLFilterList(LLSD::emptyArray());
-	setMediaURLFilterEnable(FALSE);
 	setMediaAllowNavigate(TRUE);
 	setMediaPreventCameraZoom(FALSE);
 	setMediaURLTimeout(0.0f);
diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h
index f0b2caca3db02e56559662ffb8a0a3084b9db277..499f690e7609e79ab79d407e67d624de3e5d326c 100644
--- a/indra/llinventory/llparcel.h
+++ b/indra/llinventory/llparcel.h
@@ -247,8 +247,6 @@ public:
 	void setMediaWidth(S32 width);
 	void setMediaHeight(S32 height);
 	void setMediaCurrentURL(const std::string& url);
-	void setMediaURLFilterEnable(U8 enable) { mMediaURLFilterEnable = enable; }
-	void setMediaURLFilterList(LLSD list);
 	void setMediaAllowNavigate(U8 enable) { mMediaAllowNavigate = enable; }
 	void setMediaURLTimeout(F32 timeout) { mMediaURLTimeout = timeout; }
 	void setMediaPreventCameraZoom(U8 enable) { mMediaPreventCameraZoom = enable; }
@@ -310,7 +308,6 @@ public:
 
 //	BOOL	importStream(std::istream& input_stream);
 	BOOL	importAccessEntry(std::istream& input_stream, LLAccessEntry* entry);
-	BOOL    importMediaURLFilter(std::istream& input_stream, std::string& url);
 	// BOOL	exportStream(std::ostream& output_stream);
 
 	void	packMessage(LLMessageSystem* msg);
@@ -354,8 +351,6 @@ public:
 	U8				getMediaAutoScale() const	{ return mMediaAutoScale; }
 	U8              getMediaLoop() const        { return mMediaLoop; }
 	const std::string&  getMediaCurrentURL() const { return mMediaCurrentURL; }
-	U8              getMediaURLFilterEnable() const   { return mMediaURLFilterEnable; }
-	LLSD            getMediaURLFilterList() const     { return mMediaURLFilterList; }
 	U8              getMediaAllowNavigate() const { return mMediaAllowNavigate; }
 	F32				getMediaURLTimeout() const { return mMediaURLTimeout; }
 	U8              getMediaPreventCameraZoom() const { return mMediaPreventCameraZoom; }
@@ -651,8 +646,6 @@ protected:
 	U8                  mMediaLoop;
 	std::string         mMediaCurrentURL;
 	LLUUID				mMediaID;
-	U8                  mMediaURLFilterEnable;
-	LLSD                mMediaURLFilterList;
 	U8                  mMediaAllowNavigate;
 	U8					mMediaPreventCameraZoom;
 	F32					mMediaURLTimeout;
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 8ca1e685a96922a823d5b182590f53ea90b7cc01..90251ac7c657b77036d6db1f06c90ece4a60c954 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -748,6 +748,10 @@ void LLFloater::closeFloater(bool app_quitting)
 					dependee->setFocus(TRUE);
 				}
 			}
+
+			// STORM-1879: since this floater has focus, treat the closeFloater- call
+			// like a click on the close-button, and close gear- and contextmenus
+			LLMenuGL::sMenuContainer->hideMenus();
 		}
 
 		dirtyRect();
diff --git a/indra/llui/lltoggleablemenu.cpp b/indra/llui/lltoggleablemenu.cpp
index d29260750f88e1886a4162aa508eb04de5a81672..e4d1a37569ef939f56cdc6c81693c4ff166dd428 100644
--- a/indra/llui/lltoggleablemenu.cpp
+++ b/indra/llui/lltoggleablemenu.cpp
@@ -57,7 +57,9 @@ void LLToggleableMenu::handleVisibilityChange (BOOL curVisibilityIn)
 	S32 x,y;
 	LLUI::getMousePositionLocal(LLUI::getRootView(), &x, &y);
 
-	if (!curVisibilityIn && mButtonRect.pointInRect(x, y))
+	// STORM-1879: also check MouseCapture to see if the button was really
+        // clicked (otherwise the VisibilityChange was triggered via keyboard shortcut)
+	if (!curVisibilityIn && mButtonRect.pointInRect(x, y) && gFocusMgr.getMouseCapture())
 	{
 		mClosedByButtonClick = true;
 	}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
index 46d2aa4877e610ab84ef1256cbc487476c4f2be6..bfd9b9b3eb4a143cfd35094d1a93f1a4a9473dca 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
@@ -46,6 +46,6 @@ void main()
 	frag_data[0] = vec4(diff.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0);
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
index 680eadb852444a5db066a5bbdfae06ca509f2a30..23c4ea2fffd2de983595a64a35b8de10e99eee2d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
@@ -52,5 +52,5 @@ void main()
 	frag_data[1] = vertex_color.aaaa; // spec
 	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
 	vec3 nvn = normalize(tnorm);
-	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
index b2027d3a5d0287753c7660d52726734f7bc56787..c1fa9e4aac1b44b4cb9769b5b6ab57b2f679d523 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
@@ -49,6 +49,6 @@ void main()
 	frag_data[0] = vec4(col.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0); // spec
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
index ead384b07c192b7406023c06ed9266c0467c95a3..4c68123fac1680ec3d9ddfb98c64b7321c4bb7a1 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
@@ -48,5 +48,5 @@ void main()
 	frag_data[0] = vec4(col.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0);
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
index f73fa6f2310141570a41f6dc6d57e003398312cb..ad65c7d3309c8e4f7629b26d62e383a365c43753 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
@@ -49,6 +49,6 @@ void main()
 	frag_data[0] = vec4(col.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0); // spec
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
index 227aa2aae3c4f9c19df00a376314b5a5c55adcf4..86390bdd839c108bc7b061e9f6402c28bc787212 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
@@ -42,6 +42,6 @@ void main()
 	frag_data[1] = vertex_color.aaaa; // spec
 	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
index d442e5403a47ad3f37b90ee330635d852318cdfb..788b966af88bf35cb6d06fc2da80ba853a7fd334 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
@@ -41,5 +41,5 @@ void main()
 	frag_data[1] = vertex_color.aaaa; // spec
 	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
index 4d01eeb64e581f09f23b19fa97722643e075d8fd..7e79317543f4f7441049e57037bfbbb126306640 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
@@ -79,7 +79,7 @@ void main()
 	}
 	
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+	norm = (norm.xyz-0.5)*2.0; // unpack norm
 	norm = normalize(norm);
 	vec4 spec = texture2DRect(specularRect, frag.xy);
 	vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
index f671d5b750e3123895d09710f4e6262a105036d6..75757b26c83f36af3f135b22962948974fde3095 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
@@ -84,7 +84,7 @@ void main()
 	}
 	
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+	norm = (norm.xyz-0.5)*2.0; // unpack norm
 	float da = dot(norm, lv);
 	if (da < 0.0)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index 66e3cf6d13f4a152594985e240743358ee1e6217..89448e2167a2dddf414aa7f6baff508775f5dc80 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -277,7 +277,7 @@ void main()
 	float depth = texture2DRect(depthMap, tc.xy).r;
 	vec3 pos = getPosition_d(tc, depth).xyz;
 	vec3 norm = texture2DRect(normalMap, tc).xyz;
-	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+	norm = (norm.xyz-0.5)*2.0; // unpack norm
 		
 	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
 	
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
index 2422d73a3ea2db7d15ef415aac5ca3a084b1bf4f..bac74cbbeff15f0c145434f5343e21908b58588a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
@@ -123,7 +123,7 @@ void main()
 	vec4 pos = getPosition(pos_screen);
 	
 	vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
-	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+	norm = (norm.xyz-0.5)*2.0; // unpack norm
 		
 	frag_color[0] = 1.0;
 	frag_color[1] = calcAmbientOcclusion(pos, norm);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
index 8a5e482e80a76197773141548ff022ccdbaa6c20..daf1cc7ea202bc89b7338f90e84647c1f2c400b3 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
@@ -56,6 +56,6 @@ void main()
 	frag_data[0] = vec4(outColor.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0);
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
index 6cf6106b5191f23e5f16b3e97ede0a1bed732fa6..da253846efc42eaa4f004dae2ea91d1bda188f0f 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
@@ -48,5 +48,5 @@ void main()
 	frag_data[0] = vec4(vertex_color.rgb*col.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0);
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
index 42dc7c09807002826a87c1816fedc0ce8d2f1335..3427d6db57926257622b9055e16c61c2086aecff 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
@@ -161,5 +161,5 @@ void main()
 	
 	frag_data[0] = vec4(color.rgb, 0.5); // diffuse
 	frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
-	frag_data[2] = vec4(screenspacewavef.xy*0.5+0.5, screenspacewavef.z, screenspacewavef.z*0.5); // normalxyz, displace
+	frag_data[2] = vec4(screenspacewavef.xyz*0.5+0.5, screenspacewavef.z*0.5); // normalxyz, displace
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
index f7f1f649ced54a71ab5d56f6e2f466fe86a524ac..5621e47ab70989761a7d7249fb43edb503c7b8a6 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -154,7 +154,7 @@ void main()
 	}
 	
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+	norm = (norm.xyz-0.5)*2.0; // unpack norm
 	
 	norm = normalize(norm);
 	float l_dist = -dot(lv, proj_n);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index a137bea30f1dc0202cf182c04e3003909fd1221e..9df9d7590577d7ecce14892d8bd95057ac014242 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -279,7 +279,7 @@ void main()
 	float depth = texture2DRect(depthMap, tc.xy).r;
 	vec3 pos = getPosition_d(tc, depth).xyz;
 	vec3 norm = texture2DRect(normalMap, tc).xyz;
-	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+	norm = (norm.xyz-0.5)*2.0; // unpack norm
 		
 	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
 	
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
index ab077d9e026a50751235a098e08fb8d4116c1c09..6d6ad6d5655560e5e07ce8008edf82c6500adb8d 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -154,7 +154,7 @@ void main()
 	}
 	
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+	norm = (norm.xyz-0.5)*2.0; // unpack norm
 	
 	norm = normalize(norm);
 	float l_dist = -dot(lv, proj_n);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
index c1495b145e10709f47c5a42c2aa05b64d3f25d0d..890486c4b1dcab790fd6c9e33eb82255dcefab0b 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
@@ -126,7 +126,7 @@ void main()
 	vec4 pos = getPosition(pos_screen);
 	
 	vec4 nmap4 = texture2DRect(normalMap, pos_screen);
-	nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm
+	nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm
 	float displace = nmap4.w;
 	vec3 norm = nmap4.xyz;
 	
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
index 039fca9df2078902df83fd0afcf0ca7492e22526..2dcd3d656fd8ca480d3f50c8e841f8f4e3ef9d0b 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
@@ -187,7 +187,7 @@ void main()
 	vec4 pos = getPosition(pos_screen);
 	
 	vec4 nmap4 = texture2DRect(normalMap, pos_screen);
-	nmap4 = vec4((nmap4.xy-0.5)*2.0,nmap4.z,nmap4.w); // unpack norm
+	nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm
 	float displace = nmap4.w;
 	vec3 norm = nmap4.xyz;
 	
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index b819100b9bbdba0efc8a877396705c5569cc7358..fce0b7c9c92ebe0a4a6eb16e510d17fdeb596f62 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -71,6 +71,9 @@
 #include "llviewerwindow.h"
 #include "llvoavatarself.h"
 #include "llwearablelist.h"
+#include "lllandmarkactions.h"
+
+void copy_slurl_to_clipboard_callback_inv(const std::string& slurl);
 
 // Marketplace outbox current disabled
 #define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU	1
@@ -1399,6 +1402,29 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
 		const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
 		copy_item_to_outbox(itemp, outbox_id, LLUUID::null, LLToolDragAndDrop::getOperationId());
 	}
+	else if ("copy_slurl" == action)
+	{
+		LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem());
+		if(item)
+		{
+			LLUUID asset_id = item->getAssetUUID();
+			LLLandmark* landmark = gLandmarkList.getAsset(asset_id);
+			if (landmark)
+			{
+				LLVector3d global_pos;
+				landmark->getGlobalPos(global_pos);
+				LLLandmarkActions::getSLURLfromPosGlobal(global_pos, &copy_slurl_to_clipboard_callback_inv, true);
+			}
+		}
+	}
+}
+
+void copy_slurl_to_clipboard_callback_inv(const std::string& slurl)
+{
+	gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(slurl));
+	LLSD args;
+	args["SLURL"] = slurl;
+	LLNotificationsUtil::add("CopySLURL", args);
 }
 
 void LLItemBridge::selectItem()
@@ -4403,6 +4429,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		}
 
 		items.push_back(std::string("Landmark Separator"));
+		items.push_back(std::string("url_copy"));
 		items.push_back(std::string("About Landmark"));
 	}
 
@@ -4411,6 +4438,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	// info panel can be shown at a time.
 	if ((flags & FIRST_SELECTED_ITEM) == 0)
 	{
+		disabled_items.push_back(std::string("url_copy"));
 		disabled_items.push_back(std::string("About Landmark"));
 	}
 
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index dc9e88d54d84fb2c048609a5478eb0ad6b335098..118430efe124acf3629f7c619ce639da9081a012 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -197,6 +197,8 @@ public:
 				 const LLUUID& uuid) :
 		LLInvFVBridge(inventory, root, uuid) {}
 
+	typedef boost::function<void(std::string& slurl)> slurl_callback_t;
+
 	virtual void performAction(LLInventoryModel* model, std::string action);
 	virtual void selectItem();
 	virtual void restoreItem();
@@ -214,7 +216,6 @@ public:
 	virtual BOOL isItemCopyable() const;
 	virtual BOOL hasChildren() const { return FALSE; }
 	virtual BOOL isUpToDate() const { return TRUE; }
-
 	/*virtual*/ void clearDisplayName() { mDisplayName.clear(); }
 
 	LLViewerInventoryItem* getItem() const;
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index a7059eb519be3abc7f7b3fb0dfcf5dc1d5fc673b..54522bb7f66c32401e25d61a73b4c6ff0a1556f7 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -44,6 +44,8 @@
 
 #include "llmutelist.h"
 
+#include "pipeline.h"
+
 #include <boost/tokenizer.hpp>
 
 #include "lldispatcher.h"
@@ -192,6 +194,23 @@ BOOL LLMuteList::isLinden(const std::string& name) const
 	return last_name == "Linden";
 }
 
+static LLVOAvatar* find_avatar(const LLUUID& id)
+{
+	LLViewerObject *obj = gObjectList.findObject(id);
+	while (obj && obj->isAttachment())
+	{
+		obj = (LLViewerObject *)obj->getParent();
+	}
+
+	if (obj && obj->isAvatar())
+	{
+		return (LLVOAvatar*)obj;
+	}
+	else
+	{
+		return NULL;
+	}
+}
 
 BOOL LLMuteList::add(const LLMute& mute, U32 flags)
 {
@@ -288,6 +307,12 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
 						LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);
 					}
 				}
+				//mute local lights that are attached to the avatar
+				LLVOAvatar *avatarp = find_avatar(localmute.mID);
+				if (avatarp)
+				{
+					LLPipeline::removeMutedAVsLights(avatarp);
+				}
 				return TRUE;
 			}
 		}
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 89240c982f57d28bad29551c72809a17fa60c02f..ff69c6e9fd7d1f95b6ca8e7f71ad22f0576db784 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -469,7 +469,7 @@ void LLStatusBar::onMouseEnterVolume()
 	LLRect vol_btn_rect = volbtn->getRect();
 	LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect();
 	volume_pulldown_rect.setLeftTopAndSize(vol_btn_rect.mLeft -
-	     (volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth())/2,
+	     (volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth()),
 			       vol_btn_rect.mBottom,
 			       volume_pulldown_rect.getWidth(),
 			       volume_pulldown_rect.getHeight());
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index d629f3abac361816a40f8fe6542fdadf4d28b61d..602b924398d47e3217c71f083c857bb0cb36d3d2 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -334,32 +334,24 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
 	}
 
 	U32 ignore_btn_width = 0;
+	U32 mute_btn_pad = 0;
 	if (mIsScriptDialog && ignore_btn != NULL)
 	{
 		LLRect ignore_btn_rect(ignore_btn->getRect());
-		S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH
-		S32 ignore_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row	- 1) * h_pad - ignore_btn_rect.getWidth();
-		if (ignore_btn_left + ignore_btn_rect.getWidth() > max_width)// make sure that the ignore button is in panel
-		{
-			ignore_btn_left = max_width - ignore_btn_rect.getWidth() - 2 * HPAD;
-		}
+		S32 ignore_btn_left = max_width - ignore_btn_rect.getWidth();
 		ignore_btn_rect.setOriginAndSize(ignore_btn_left, BOTTOM_PAD,// always move ignore button at the bottom
 				ignore_btn_rect.getWidth(), ignore_btn_rect.getHeight());
 		ignore_btn->setRect(ignore_btn_rect);
 		ignore_btn_width = ignore_btn_rect.getWidth();
 		mControlPanel->addChild(ignore_btn, -1);
+		mute_btn_pad = 4 * HPAD; //only use a 4 * HPAD padding if an ignore button exists
 	}
 
 	if (mIsScriptDialog && mute_btn != NULL)
 	{
 		LLRect mute_btn_rect(mute_btn->getRect());
-		S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH
 		// Place mute (Block) button to the left of the ignore button.
-		S32 mute_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row	- 1) * h_pad - mute_btn_rect.getWidth() - ignore_btn_width - (h_pad / 2);
-		if (mute_btn_left + mute_btn_rect.getWidth() > max_width) // make sure that the mute button is in panel
-		{
-			mute_btn_left = max_width - mute_btn_rect.getWidth() - 2 * HPAD;
-		}
+		S32 mute_btn_left = max_width - mute_btn_rect.getWidth() - ignore_btn_width - mute_btn_pad;
 		mute_btn_rect.setOriginAndSize(mute_btn_left, BOTTOM_PAD,// always move mute button at the bottom
 				mute_btn_rect.getWidth(), mute_btn_rect.getHeight());
 		mute_btn->setRect(mute_btn_rect);
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 2bb2e9227981681adba88f0151a9a3c3d11085c2..77e382b8c71956ca3c1b35130c30645183a899c4 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1658,9 +1658,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
 			// Request access list information for this land
 			parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN);
 
-			// Request the media url filter list for this land
-			parcel_mgr.requestParcelMediaURLFilter();
-
 			// Request dwell for this land, if it's not public land.
 			parcel_mgr.mSelectedDwell = DWELL_NAN;
 			if (0 != local_id)
@@ -1989,67 +1986,6 @@ void LLViewerParcelMgr::sendParcelAccessListUpdate(U32 which)
 	}
 }
 
-class LLParcelMediaURLFilterResponder : public LLHTTPClient::Responder
-{
-	virtual void result(const LLSD& content)
-	{
-		LLViewerParcelMgr::getInstance()->receiveParcelMediaURLFilter(content);
-	}
-};
-
-void LLViewerParcelMgr::requestParcelMediaURLFilter()
-{
-	if (!mSelected)
-	{
-		return;
-	}
-
-	LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( mWestSouth );
-	if (!region)
-	{
-		return;
-	}
-
-	LLParcel* parcel = mCurrentParcel;
-	if (!parcel)
-	{
-		llwarns << "no parcel" << llendl;
-		return;
-	}
-
-	LLSD body;
-	body["local-id"] = parcel->getLocalID();
-	body["list"] = parcel->getMediaURLFilterList();
-
-	std::string url = region->getCapability("ParcelMediaURLFilterList");
-	if (!url.empty())
-	{
-		LLHTTPClient::post(url, body, new LLParcelMediaURLFilterResponder);
-	}
-	else
-	{
-		llwarns << "can't get ParcelMediaURLFilterList cap" << llendl;
-	}
-}
-
-
-void LLViewerParcelMgr::receiveParcelMediaURLFilter(const LLSD &content)
-{
-	if (content.has("list"))
-	{
-		LLParcel* parcel = LLViewerParcelMgr::getInstance()->mCurrentParcel;
-		if (!parcel) return;
-		
-		if (content["local-id"].asInteger() == parcel->getLocalID())
-		{
-			parcel->setMediaURLFilterList(content["list"]);
-			
-			LLViewerParcelMgr::getInstance()->notifyObservers();
-		}
-	}
-}
-
-
 void LLViewerParcelMgr::deedLandToGroup()
 {
 	std::string group_name;
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index 2a115494266b419a0d19a6f9d8adc065c0e560cd..6183b7e90ecbe3177af114e828a91b332f53902d 100644
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -223,11 +223,6 @@ public:
 	// Takes an Access List flag, like AL_ACCESS or AL_BAN
 	void	sendParcelAccessListRequest(U32 flags);
 
-	// asks for the parcel's media url filter list
-	void    requestParcelMediaURLFilter();
-	// receive the response
-	void    receiveParcelMediaURLFilter(const LLSD &content);
-	
 	// Dwell is not part of the usual parcel update information because the
 	// simulator doesn't actually know the per-parcel dwell.  Ack!  We have
 	// to get it out of the database.
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 05c7ef538103090efb6e059ec99f20613e2ca3b8..effa368b7ac251e6603e7ba4edd945b1f1f5c561 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1553,7 +1553,6 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
 	capabilityNames.append("NewFileAgentInventory");
 	capabilityNames.append("ObjectNavMeshProperties");
 	capabilityNames.append("ParcelPropertiesUpdate");
-	capabilityNames.append("ParcelMediaURLFilterList");
 	capabilityNames.append("ParcelNavigateMedia");
 	capabilityNames.append("ParcelVoiceInfoRequest");
 	capabilityNames.append("ProductInfoRequest");
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 75eb8c460ed9d879e4c907259eba1081ec342528..920bac93a2184085120b52ed27fa66596917e200 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -1680,6 +1680,21 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)
 
 }
 
+//static
+void LLPipeline::removeMutedAVsLights(LLVOAvatar* muted_avatar)
+{
+	LLFastTimer t(FTM_REMOVE_FROM_LIGHT_SET);
+	for (light_set_t::iterator iter = gPipeline.mNearbyLights.begin();
+		 iter != gPipeline.mNearbyLights.end(); iter++)
+	{
+		if (iter->drawable->getVObj()->isAttachment() && iter->drawable->getVObj()->getAvatar() == muted_avatar)
+		{
+			gPipeline.mLights.erase(iter->drawable);
+			gPipeline.mNearbyLights.erase(iter);
+		}
+	}
+}
+
 U32 LLPipeline::addObject(LLViewerObject *vobj)
 {
 	LLMemType mt_ao(LLMemType::MTYPE_PIPELINE_ADD_OBJECT);
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 0ecae40d496a8092385c250d3e4a8fa17036136b..fd2a1e06cd47f094135fce9f89d1e56fa28f84bc 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -151,6 +151,8 @@ public:
 
 	void		 unlinkDrawable(LLDrawable*);
 
+	static void removeMutedAVsLights(LLVOAvatar*);
+
 	// Object related methods
 	void        markVisible(LLDrawable *drawablep, LLCamera& camera);
 	void		markOccluder(LLSpatialGroup* group);
diff --git a/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e6ab9165d7554e71d6f203513e3a6cd2e63e6567
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="volumepulldown_floater" width="240">
+	<button left="217" name="prefs_btn"/>
+	<slider label="Master" name="System Volume" label_width="80" width="180"/>
+    <slider label="Schaltflächen" label_width="80" width="180" name="UI Volume"/>
+    <slider label="Umgebung" label_width="80" width="180" name="Wind Volume"/>
+    <slider label="Soundeffekte" label_width="80" width="180" name="SFX Volume"/>
+	<check_box name="gesture_audio_play_btn" tool_tip="Sounds von Gesten abspielen"/>
+    <slider label="Musikstream" label_width="80" width="180" name="Music Volume"/>
+	<check_box tool_tip="Musikstream aktivieren" name="enable_music"/>
+    <slider label="Medien" label_width="80" width="180" name="Media Volume"/>
+	<check_box tool_tip="Medienstream aktivieren" name="enable_media"/>
+    <slider label="Voice-Chat" label_width="80" width="180" name="Voice Volume"/>
+	<check_box tool_tip="Voice-Chat aktivieren" name="enable_voice_check"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index b13bf5b5086d7594984a3e446139fdf410f2f8ae..13dc0b941ad36df6026eea6e2e02b26792f60206 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -537,6 +537,14 @@
      layout="topleft"
      name="Landmark Separator" />
     <menu_item_call
+    label="Copy SLurl"
+    layout="topleft"
+    name="url_copy">
+       <menu_item_call.on_click
+        function="Inventory.DoToSelected"
+        parameter="copy_slurl" />
+   </menu_item_call> 
+   <menu_item_call
      label="About Landmark"
      layout="topleft"
      name="About Landmark">
diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml
index a4883c21e25e99d71913f9bc42da4682b66da834..81b2281adbf575ecc6074149cc21bd5dad16fffa 100644
--- a/indra/newview/skins/default/xui/en/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml
@@ -198,7 +198,7 @@
      layout="topleft"
      left_pad="155"
      name="cancel_restart_btn"
-     tool_tip="Delay region restart by one hour"
+     tool_tip="Cancel region restart"
      top_delta="0"
      width="150" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 3aa34439f13210f1f1b51cd88d147bc29f3831b6..dd2a0c6627aa9405c16037c4247eecc69a19114f 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -129,6 +129,5 @@
      left_pad="5"
      top="2"
      name="volume_btn"
-     tool_tip="Global Volume Control"
      width="16" />
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
index 7b22b2cce1c48cfd90aa3308e2ad434afdd238b9..6adede036217bca4375000bc87a97b791317ccdb 100644
--- a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
+++ b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
@@ -8,41 +8,289 @@
  border="false"
  chrome="true"
  follows="bottom"
- height="150"
+ height="155"
  layout="topleft"
  name="volumepulldown_floater"
- width="32">
- <slider
-  control_name="AudioLevelMaster"
-  follows="left|top"
-  left="0"
-  top="1"
-  orientation="vertical"
-  height="120"
-  increment="0.05"
-  initial_value="0.5"
-  layout="topleft"
-  name="mastervolume"
-  show_text="false"
-  slider_label.halign="right"
-  top_pad="2"
-  volume="true">
-  <slider.commit_callback
-   function="Vol.setControlFalse"
-   parameter="MuteAudio" />
-  </slider>
-  <button
-    left="10"
-    top_pad="9"
-    width="12"
-    height="12"
-    follows="top|left"
-    name="prefs_btn"
-    image_unselected="Icon_Gear_Foreground"
-    image_disabled="Icon_Gear_Background"
-    image_pressed="Icon_Gear_Press"
-    scale_image="false">
-    <button.commit_callback
-       function="Vol.GoAudioPrefs" />
-  </button>
+ width="225">
+      <slider
+     control_name="AudioLevelMaster"
+     follows="top|left"
+     font.style="BOLD"
+     height="15"
+     increment="0.025"
+     initial_value="0.5"
+     label="Master"
+     label_width="60"
+     left="10"
+     width="160"
+     layout="topleft"
+     name="System Volume"
+     show_text="false"
+     top="10"
+     volume="true">
+        <slider.commit_callback
+         function="Pref.setControlFalse"
+         parameter="MuteAudio" />
+    </slider>
+    <button
+     control_name="MuteAudio"
+     follows="top|left"
+     height="16"
+     image_selected="AudioMute_Off"
+     image_unselected="Audio_Off"
+     is_toggle="true"
+     layout="topleft"
+     left_pad="5"
+     name="mute_audio"
+     tab_stop="false"
+     width="16" />
+    <slider
+        control_name="AudioLevelUI"
+        disabled_control="MuteAudio"
+        follows="left|top"
+        height="15"
+        increment="0.025"
+        initial_value="0.5"
+        label="Buttons"
+        label_width="60"
+        left="10"
+        width="160"
+        layout="topleft"
+        name="UI Volume"
+        show_text="false"
+        top_pad="4"
+        volume="true">
+    <slider.commit_callback
+        function="Pref.setControlFalse"
+        parameter="MuteUI" />
+    </slider>
+    <button
+        control_name="MuteUI"
+        disabled_control="MuteAudio"
+        follows="top|left"
+        height="16"
+        image_selected="AudioMute_Off"
+        image_unselected="Audio_Off"
+        is_toggle="true"
+        layout="topleft"
+        left_pad="5"
+        name="mute_audio"
+        tab_stop="false"
+        width="16" />
+    <slider
+     control_name="AudioLevelAmbient"
+     disabled_control="MuteAudio"
+     follows="left|top"
+     height="15"
+     increment="0.025"
+     initial_value="0.5"
+     label="Ambient"
+     label_width="60"
+     left="10"
+     width="160"
+     layout="topleft"
+     name="Wind Volume"
+     show_text="false"
+     top_pad="4"
+     volume="true">
+        <slider.commit_callback
+         function="Pref.setControlFalse"
+         parameter="MuteAmbient" />
+    </slider>
+    <button
+     control_name="MuteAmbient"
+     disabled_control="MuteAudio"
+     follows="top|left"
+     height="16"
+     image_selected="AudioMute_Off"
+     image_unselected="Audio_Off"
+     is_toggle="true"
+     layout="topleft"
+     left_pad="5"
+     name="mute_audio"
+     tab_stop="false"
+     width="16" />
+    <slider
+     control_name="AudioLevelSFX"
+     disabled_control="MuteAudio"
+     follows="left|top"
+     height="15"
+     increment="0.025"
+     initial_value="0.5"
+     label="Sounds"
+     label_width="60"
+     left="10"
+     width="160"
+     layout="topleft"
+     name="SFX Volume"
+     show_text="false"
+     top_pad="4"
+     volume="true">
+        <slider.commit_callback
+         function="Pref.setControlFalse"
+         parameter="MuteSounds" />
+    </slider>
+    <button
+     control_name="MuteSounds"
+     disabled_control="MuteAudio"
+     follows="top|left"
+     height="16"
+     image_selected="AudioMute_Off"
+     image_unselected="Audio_Off"
+     is_toggle="true"
+     layout="topleft"
+     left_pad="5"
+     name="mute_audio"
+     tab_stop="false"
+     width="16">
+      <button.commit_callback
+      function="Pref.SetSounds"/>
+    </button>
+  <check_box
+    name="gesture_audio_play_btn"
+		control_name="EnableGestureSounds"
+    disabled_control="MuteAudio"
+    height="16"
+    layout="topleft"
+    left_pad="5"
+    tool_tip="Enable sounds from gestures"
+    top_delta="2"
+    width="350"/>
+    <slider
+     control_name="AudioLevelMusic"
+     disabled_control="MuteAudio"
+     follows="left|top"
+     height="15"
+     increment="0.025"
+     initial_value="0.5"
+     label="Music"
+     label_width="60"
+     left="10"
+     width="160"
+     layout="topleft"
+     name="Music Volume"
+     show_text="false"
+     top_pad="4"
+     volume="true">
+        <slider.commit_callback
+         function="Pref.setControlFalse"
+         parameter="MuteMusic" />
+    </slider>
+    <button
+     control_name="MuteMusic"
+     disabled_control="MuteAudio"
+     follows="top|left"
+     height="16"
+     image_selected="AudioMute_Off"
+     image_unselected="Audio_Off"
+     is_toggle="true"
+     layout="topleft"
+     left_pad="5"
+     name="mute_audio"
+     tab_stop="false"
+     width="16" />
+    <check_box
+        control_name="AudioStreamingMusic"
+        height="16"
+        tool_tip="Enable Streaming Music"
+        layout="topleft"
+        left_pad="5"
+        name="enable_music"
+        top_delta="2"
+        width="350">
+        <check_box.commit_callback
+            function="Pref.updateMediaAutoPlayCheckbox"/>
+    </check_box>
+    <slider
+        control_name="AudioLevelMedia"
+        disabled_control="MuteAudio"
+        follows="left|top"
+        height="16"
+        increment="0.025"
+        initial_value="0.5"
+        label="Media"
+        label_width="60"
+        left="10"
+        width="160"
+        layout="topleft"
+        name="Media Volume"
+        show_text="false"
+        top_pad="4"
+        volume="true">
+      <slider.commit_callback
+        function="Pref.setControlFalse"
+        parameter="MuteMedia" />
+    </slider>
+    <button
+        control_name="MuteMedia"
+        disabled_control="MuteAudio"
+        follows="top|left"
+        height="16"
+        image_selected="AudioMute_Off"
+        image_unselected="Audio_Off"
+        is_toggle="true"
+        layout="topleft"
+        left_pad="5"
+        name="mute_audio"
+        tab_stop="false"
+        width="16" />
+    <check_box
+        label_text.halign="left"
+        follows="left|top"
+        height="16"
+        control_name ="AudioStreamingMedia"
+        tool_tip="Enable Streaming Media"
+        layout="topleft"
+        top_delta="2"
+        left_pad="5"
+        name="enable_media"
+        width="110">
+        <check_box.commit_callback
+            function="Pref.updateMediaAutoPlayCheckbox"/>
+    </check_box>
+    <slider
+        control_name="AudioLevelVoice"
+        disabled_control="MuteAudio"
+        follows="left|top"
+        height="16"
+        increment="0.025"
+        initial_value="0.5"
+        label="Voice"
+        label_width="60"
+        left="10"
+        width="160"
+        layout="topleft"
+        top_pad="4"
+        name="Voice Volume"
+        show_text="false"
+        volume="true">
+    <slider.commit_callback
+        function="Pref.setControlFalse"
+        parameter="MuteVoice" />
+    </slider>
+    <button
+        control_name="MuteVoice"
+        disabled_control="MuteAudio"
+        follows="top|left"
+        height="16"
+        image_selected="AudioMute_Off"
+        image_unselected="Audio_Off"
+        is_toggle="true"
+        layout="topleft"
+        left_pad="5"
+        name="mute_audio"
+        tab_stop="false"
+        width="16" />
+    <check_box
+        label_text.halign="left"
+        follows="left|top"
+        height="16"
+        control_name ="EnableVoiceChat"
+        disabled_control="CmdLineDisableVoice"
+        tool_tip="Enable Voice Chat"
+        layout="topleft"
+        top_delta="2"
+        left_pad="5"
+        name="enable_voice_check"
+        width="110"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index d5186e4c1bcd575f76f03c8dc710d3fe52cdef95..15eb46c348fa7613c92f65c51091ebc87a0b7af5 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2272,11 +2272,15 @@ Drag folders to this area and click "Send to Marketplace" to list them for sale
   <!-- historically default name of the Favorites folder can start from either "f" or "F" letter.
   We should localize both of them with the same value -->
 	<string name="InvFolder favorite">My Favorites</string>
+	<string name="InvFolder Favorites">My Favorites</string>
+	<string name="InvFolder favorites">My Favorites</string>
 	<string name="InvFolder Current Outfit">Current Outfit</string>
 	<string name="InvFolder Initial Outfits">Initial Outfits</string>
 	<string name="InvFolder My Outfits">My Outfits</string>
 	<string name="InvFolder Accessories">Accessories</string>
 	<string name="InvFolder Meshes">Meshes</string>
+	<string name="InvFolder Received Items">Received Items</string>
+	<string name="InvFolder Merchant Outbox">Merchant Outbox</string>
 
   <!-- are used for Friends and Friends/All folders in Inventory "Calling cards" folder. See EXT-694-->
 	<string name="InvFolder Friends">Friends</string>
diff --git a/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9193da6cde55597218a607c56c4da4dbeb574bd3
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="volumepulldown_floater" width="215">
+	<slider label="Maestro" name="System Volume" label_width="55" width="155"/>
+	<slider label="Botones" name="UI Volume" label_width="55" width="155"/>
+	<slider label="Ambiente" name="Wind Volume" label_width="55" width="155"/>
+	<slider label="Sonidos" name="SFX Volume" label_width="55" width="155"/>
+	<check_box name="gesture_audio_play_btn" tool_tip="Activa el sonido de los gestos"/>
+	<slider label="Música" name="Music Volume" label_width="55" width="155"/>
+	<check_box tool_tip="Activa el flujo de audio" name="enable_music"/>
+	<slider label="Medios" name="Media Volume" label_width="55" width="155"/>
+	<check_box tool_tip="Activa el flujo de medios" name="enable_media"/>
+	<slider label="Voz" name="Voice Volume" label_width="55" width="155"/>
+	<check_box tool_tip="Activar chat de voz" name="enable_voice_check"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/it/panel_volume_pulldown.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1792b094135eb65181bba7f0922edf29c4767baa
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_volume_pulldown.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="volumepulldown_floater" width="220">
+    <button left="197" name="prefs_btn"/>
+    <slider label="Generale" name="System Volume" label_width="60" width="160"/>
+    <slider label="Interfaccia" name="UI Volume" label_width="60" width="160"/>
+    <slider label="Ambiente" name="Wind Volume" label_width="60" width="160"/>
+    <slider label="Suoni" name="SFX Volume" label_width="60" width="160"/>
+    <check_box name="gesture_audio_play_btn" tool_tip="Attiva suoni Gesture"/>
+    <slider label="Musica" name="Music Volume" label_width="60" width="160"/>
+    <check_box tool_tip="Abilita musica in streaming" name="enable_music"/>
+    <slider label="Media" name="Media Volume" label_width="60" width="160"/>
+    <check_box tool_tip="Abilita riproduzione media" name="enable_media"/>
+    <slider label="Voice" name="Voice Volume" label_width="60" width="160"/>
+    <check_box tool_tip="Abilita il voice" name="enable_voice_check"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/pl/panel_volume_pulldown.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1611900700ff20d1305cafc5d57f4df990ffe29b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/panel_volume_pulldown.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel name="volumepulldown_floater">
+    <slider label="Główny" name="System Volume"/>
+    <slider label="Przyciski" name="UI Volume"/>
+    <slider label="Okolica" name="Wind Volume"/>
+    <slider label="Efekty" name="SFX Volume"/>
+    <check_box name="gesture_audio_play_btn" tool_tip="Włącz dźwięki gestów"/>
+    <slider label="Muzyka" name="Music Volume"/>
+    <check_box tool_tip="Włącz muzykę strumieniową" name="enable_music"/>
+    <slider label="Media" name="Media Volume"/>
+    <check_box tool_tip="Włącz media strumieniowe" name="enable_media"/>
+    <slider label="Głos" name="Voice Volume"/>
+    <check_box tool_tip="Włącz rozmowy głosowe" name="enable_voice_check"/>
+</panel>