diff --git a/BuildParams b/BuildParams
index ea3f4455cca5007c7506b685595b8490db97a18d..b9b90d7316e3149b43b2e9e9e04fe2d6c42eb056 100644
--- a/BuildParams
+++ b/BuildParams
@@ -39,8 +39,9 @@ snowstorm_viewer-development.email = viewer-development-builds@lists.secondlife.
 # ========================================
 # Viewer Beta
 # ========================================
-viewer-beta.viewer_channel = "Second Life Beta"
-viewer-beta.login_channel = "Second Life Beta"
+viewer-beta.viewer_channel = "Second Life Beta Viewer"
+viewer-beta.login_channel = "Second Life Beta Viewer"
+viewer-beta.build_debug_release_separately = true
 viewer-beta.build_viewer_update_version_manager = true
 
 # ========================================
@@ -48,6 +49,7 @@ viewer-beta.build_viewer_update_version_manager = true
 # ========================================
 viewer-release.viewer_channel = "Second Life Release"
 viewer-release.login_channel = "Second Life Release"
+viewer-release.build_debug_release_separately = true
 viewer-release.build_viewer_update_version_manager = true
 
 # ========================================
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 8739bfd1bea9144a2f0c044860fc3f70ae8e317c..d179c0fb8cd1f7154bc71b390ef246b17cd72d9e 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -20,6 +20,7 @@ Aimee Trescothick
 	SNOW-227
 	SNOW-570
 	SNOW-572
+	SNOW-575
 	VWR-3321
 	VWR-3336
 	VWR-3903
@@ -33,6 +34,7 @@ Aimee Trescothick
 	VWR-6550
 	VWR-6583
 	VWR-6482
+	VWR-6918
 	VWR-7109
 	VWR-7383
 	VWR-7800
@@ -59,6 +61,8 @@ Aimee Trescothick
 Alejandro Rosenthal
 	VWR-1184
 Aleric Inglewood
+	SNOW-522
+	SNOW-764
 	VWR-10001
 	VWR-10759
 	VWR-10837
@@ -167,6 +171,7 @@ Boroondas Gupte
 	SNOW-737
 	VWR-233
 	VWR-20583
+	VWR-20891
 	WEB-262
 Bulli Schumann
 	CT-218
@@ -383,6 +388,7 @@ Matthew Dowd
 	VWR-1761
 	VWR-2681
 McCabe Maxsted
+	SNOW-387
 	VWR-1318
 	VWR-4065
 	VWR-4826
@@ -551,6 +557,8 @@ Robin Cornelius
 	SNOW-514
 	SNOW-520
 	SNOW-585
+	SNOW-599
+	SNOW-747
 	VWR-2488
 	VWR-9557
 	VWR-11128
@@ -559,6 +567,7 @@ Robin Cornelius
 	VWR-12758
 	VWR-12763
 	VWR-12995
+	VWR-20911
 Ryozu Kojima
 	VWR-53
 	VWR-287
@@ -648,11 +657,15 @@ Teardrops Fall
 	VWR-5366
 Techwolf Lupindo
 	SNOW-92
+	SNOW-592
 	SNOW-649
+	SNOW-650
 	SNOW-687
 	SNOW-680
 	SNOW-681
+	SNOW-685
 	SNOW-690
+	SNOW-746
 	VWR-12385
 tenebrous pau
 	VWR-247
@@ -663,8 +676,9 @@ Thickbrick Sleaford
 	SNOW-390
 	SNOW-421
 	SNOW-462
-	SNOW-635
 	SNOW-586
+	SNOW-592
+	SNOW-635
 	SNOW-743
 	VWR-7109
 	VWR-9287
diff --git a/indra/cmake/FindGoogleBreakpad.cmake b/indra/cmake/FindGoogleBreakpad.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..1a0493be5ed9d782374a391f153d2a21a26a0f66
--- /dev/null
+++ b/indra/cmake/FindGoogleBreakpad.cmake
@@ -0,0 +1,40 @@
+# -*- cmake -*-
+
+# - Find Google BreakPad
+# Find the Google BreakPad includes and library
+# This module defines
+#  BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR, where to find exception_handler.h, etc.
+#  BREAKPAD_EXCEPTION_HANDLER_LIBRARIES, the libraries needed to use Google BreakPad.
+#  BREAKPAD_EXCEPTION_HANDLER_FOUND, If false, do not try to use Google BreakPad.
+# also defined, but not for general use are
+#  BREAKPAD_EXCEPTION_HANDLER_LIBRARY, where to find the Google BreakPad library.
+
+FIND_PATH(BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR google_breakpad/exception_handler.h)
+
+SET(BREAKPAD_EXCEPTION_HANDLER_NAMES ${BREAKPAD_EXCEPTION_HANDLER_NAMES} breakpad_client)
+FIND_LIBRARY(BREAKPAD_EXCEPTION_HANDLER_LIBRARY
+  NAMES ${BREAKPAD_EXCEPTION_HANDLER_NAMES}
+  )
+
+IF (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR)
+    SET(BREAKPAD_EXCEPTION_HANDLER_LIBRARIES ${BREAKPAD_EXCEPTION_HANDLER_LIBRARY})
+    SET(BREAKPAD_EXCEPTION_HANDLER_FOUND "YES")
+ELSE (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR)
+    SET(BREAKPAD_EXCEPTION_HANDLER_FOUND "NO")
+ENDIF (BREAKPAD_EXCEPTION_HANDLER_LIBRARY AND BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR)
+
+
+IF (BREAKPAD_EXCEPTION_HANDLER_FOUND)
+   IF (NOT BREAKPAD_EXCEPTION_HANDLER_FIND_QUIETLY)
+      MESSAGE(STATUS "Found Google BreakPad: ${BREAKPAD_EXCEPTION_HANDLER_LIBRARIES}")
+   ENDIF (NOT BREAKPAD_EXCEPTION_HANDLER_FIND_QUIETLY)
+ELSE (BREAKPAD_EXCEPTION_HANDLER_FOUND)
+   IF (BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED)
+      MESSAGE(FATAL_ERROR "Could not find Google BreakPad library")
+   ENDIF (BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED)
+ENDIF (BREAKPAD_EXCEPTION_HANDLER_FOUND)
+
+MARK_AS_ADVANCED(
+  BREAKPAD_EXCEPTION_HANDLER_LIBRARY
+  BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR
+  )
diff --git a/indra/cmake/GoogleBreakpad.cmake b/indra/cmake/GoogleBreakpad.cmake
index 8270c0fabb0024b6cac4a88c573c812a10059947..7498674042a9707c3e35f8e1e7ba95dad735cf49 100644
--- a/indra/cmake/GoogleBreakpad.cmake
+++ b/indra/cmake/GoogleBreakpad.cmake
@@ -2,8 +2,8 @@
 include(Prebuilt)
 
 if (STANDALONE)
-  MESSAGE(FATAL_ERROR "*TODO standalone support for google breakad is unimplemented")
-  # *TODO - implement this include(FindGoogleBreakpad)
+  set(BREAKPAD_EXCEPTION_HANDLER_FIND_REQUIRED ON)
+  include(FindGoogleBreakpad)
 else (STANDALONE)
   use_prebuilt_binary(google_breakpad)
   if (DARWIN)
diff --git a/indra/cmake/PulseAudio.cmake b/indra/cmake/PulseAudio.cmake
index f8087a80831cc85b19050b0cd3b3596c250e3e08..e918de0198aca68e0b4de20e6e376b3868f88459 100644
--- a/indra/cmake/PulseAudio.cmake
+++ b/indra/cmake/PulseAudio.cmake
@@ -1,28 +1,28 @@
 # -*- cmake -*-
 include(Prebuilt)
 
-if (STANDALONE)
-  include(FindPkgConfig)
+set(PULSEAUDIO ON CACHE BOOL "Build with PulseAudio support, if available.")
 
-  pkg_check_modules(PULSEAUDIO REQUIRED libpulse-mainloop-glib)
+if (PULSEAUDIO)
+  if (STANDALONE)
+    include(FindPkgConfig)
+
+    pkg_check_modules(PULSEAUDIO libpulse)
 
-elseif (LINUX)
-  use_prebuilt_binary(pulseaudio)
-  set(PULSEAUDIO_FOUND ON FORCE BOOL)
-  set(PULSEAUDIO_INCLUDE_DIRS
-      ${LIBS_PREBUILT_DIR}/include
+  elseif (LINUX)
+    use_prebuilt_binary(pulseaudio)
+    set(PULSEAUDIO_FOUND ON FORCE BOOL)
+    set(PULSEAUDIO_INCLUDE_DIRS
+        ${LIBS_PREBUILT_DIR}/include
+        )
+    # We don't need to explicitly link against pulseaudio itself, because
+    # the viewer probes for the system's copy at runtime.
+    set(PULSEAUDIO_LIBRARIES
+      # none needed!
       )
-  # We don't need to explicitly link against pulseaudio itself, because
-  # the viewer probes for the system's copy at runtime.
-  set(PULSEAUDIO_LIBRARIES
-    # none needed!
-    )
-endif (STANDALONE)
+  endif (STANDALONE)
+endif (PULSEAUDIO)
 
 if (PULSEAUDIO_FOUND)
-  set(PULSEAUDIO ON CACHE BOOL "Build with PulseAudio support, if available.")
-endif (PULSEAUDIO_FOUND)
-
-if (PULSEAUDIO)
   add_definitions(-DLL_PULSEAUDIO_ENABLED=1)
-endif (PULSEAUDIO)
+endif (PULSEAUDIO_FOUND)
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index bfaf3f4f26fc4d88958f0652c96f075c01623d5e..230e228c6257002685bbf904d2ef1cbcfa879984 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -54,19 +54,20 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
   set(LINUX ON BOOl FORCE)
 
   # If someone has specified a word size, use that to determine the
-  # architecture.  Otherwise, let the architecture specify the word size.
+  # architecture.  Otherwise, let the compiler specify the word size.
+  # Using uname will break under chroots and other cross arch compiles. RC
   if (WORD_SIZE EQUAL 32)
     set(ARCH i686)
   elseif (WORD_SIZE EQUAL 64)
     set(ARCH x86_64)
   else (WORD_SIZE EQUAL 32)
-    execute_process(COMMAND uname -m COMMAND sed s/i.86/i686/
-                    OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
-    if (ARCH STREQUAL x86_64)
-      set(WORD_SIZE 64)
-    else (ARCH STREQUAL x86_64)
+    if(CMAKE_SIZEOF_VOID_P MATCHES 4)
+      set(ARCH i686)
       set(WORD_SIZE 32)
-    endif (ARCH STREQUAL x86_64)
+    else(CMAKE_SIZEOF_VOID_P MATCHES 4)
+      set(ARCH x86_64)
+      set(WORD_SIZE 64)
+    endif(CMAKE_SIZEOF_VOID_P MATCHES 4)
   endif (WORD_SIZE EQUAL 32)
 
   set(LL_ARCH ${ARCH}_linux)
diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp
index 7d69e1c5cdf052391bd475c44b7dc85c56531e28..516a58db8836115afd18cf276a95c0b30e445b5c 100644
--- a/indra/llplugin/slplugin/slplugin.cpp
+++ b/indra/llplugin/slplugin/slplugin.cpp
@@ -281,7 +281,7 @@ int main(int argc, char **argv)
 			}
 			
 			// Check for a change in this process's frontmost window.
-			if(FrontWindow() != front_window)
+			if(GetFrontWindowOfClass(kAllWindowClasses, true) != front_window)
 			{
 				ProcessSerialNumber self = { 0, kCurrentProcess };
 				ProcessSerialNumber parent = { 0, kNoProcess };
@@ -307,7 +307,7 @@ int main(int argc, char **argv)
 					}
 				}
 								
-				if((FrontWindow() != NULL) && (front_window == NULL))
+				if((GetFrontWindowOfClass(kAllWindowClasses, true) != NULL) && (front_window == NULL))
 				{
 					// Opening the first window
 					
@@ -319,7 +319,7 @@ int main(int argc, char **argv)
 
 					if(layer_group)
 					{
-						SetWindowGroup(FrontWindow(), layer_group);
+						SetWindowGroup(GetFrontWindowOfClass(kAllWindowClasses, true), layer_group);
 					}
 					
 					if(parent_is_front_process)
@@ -328,9 +328,9 @@ int main(int argc, char **argv)
 						(void) SetFrontProcess( &self );
 					}
 
-					ActivateWindow(FrontWindow(), true);					
+					ActivateWindow(GetFrontWindowOfClass(kAllWindowClasses, true), true);
 				}
-				else if((FrontWindow() == NULL) && (front_window != NULL))
+				else if((GetFrontWindowOfClass(kAllWindowClasses, true) == NULL) && (front_window != NULL))
 				{
 					// Closing the last window
 					
@@ -350,7 +350,7 @@ int main(int argc, char **argv)
 					window_hack_state = 2;
 				}
 
-				front_window = FrontWindow();
+				front_window = GetFrontWindowOfClass(kAllWindowClasses, true);
 
 			}
 		}
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index b7da5f4a1b8794db4c1748ee1ae83cd120a7d874..e28ef1f25d24dc32a53583a08d3235619c3fcb4a 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -141,6 +141,7 @@ LLAccordionCtrlTab::LLAccordionCtrlTabHeader::LLAccordionCtrlTabHeader(
 	textboxParams.use_ellipses = true;
 	textboxParams.bg_visible = false;
 	textboxParams.mouse_opaque = false;
+	textboxParams.parse_urls = false;
 	mHeaderTextbox = LLUICtrlFactory::create<LLTextBox>(textboxParams);
 	addChild(mHeaderTextbox);
 }
diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp
index 1f16d12adda1e5eb177439df6dd615e87fd5fb30..43e5f6b051d4f344c7e65f91a2fabc6bc67ab4dc 100644
--- a/indra/llui/llfocusmgr.cpp
+++ b/indra/llui/llfocusmgr.cpp
@@ -315,6 +315,20 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( const LLFocusableElement* f
 	}
 }
 
+bool LLFocusMgr::keyboardFocusHasAccelerators() const
+{
+	LLView* focus_view = dynamic_cast<LLView*>(mKeyboardFocus);
+	while( focus_view )
+	{
+		if(focus_view->hasAccelerators())
+		{
+			return true;
+		}
+
+		focus_view = focus_view->getParent();
+	}
+	return false;
+}
 
 void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor )
 {
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
index eef82a3b5ab4bc706eebf7c3b7a5a56b21404a11..22c1895075e70b8a5e1f5ee9d94841c79b507064 100644
--- a/indra/llui/llfocusmgr.h
+++ b/indra/llui/llfocusmgr.h
@@ -118,6 +118,8 @@ class LLFocusMgr
 	void			unlockFocus();
 	BOOL			focusLocked() const { return mLockedView != NULL; }
 
+	bool			keyboardFocusHasAccelerators() const;
+
 private:
 	LLUICtrl*			mLockedView;
 
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 5b2e7590b10e36e8d73f825116e3e1abe68d16ff..92fa6ada54d1314d35afdbeff3eccdc2b78d66f0 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -1404,7 +1404,7 @@ bool LLNotifications::loadTemplates()
 	LLNotificationTemplate::Notifications params;
 	LLXUIParser parser;
 	parser.readXUI(root, params, full_filename);
-	
+
 	if(!params.validateBlock())
 	{
 		llerrs << "Problem reading UI Notifications file: " << full_filename << llendl;
@@ -1645,7 +1645,7 @@ bool LLNotifications::getIgnoreAllNotifications()
 {
 	return mIgnoreAllNotifications; 
 }
-
+													
 bool LLNotifications::isVisibleByRules(LLNotificationPtr n)
 {
 	if(n->isRespondedTo())
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index 98ff035170c70f101c999a5f497e5508a4e087d9..5298549b58eece8b728fa1d7f6ae6ef390a906c7 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -580,7 +580,7 @@ friend class LLNotifications;
 	std::string summarize() const;
 
 	bool hasUniquenessConstraints() const;
-	
+
 	bool matchesTag(const std::string& tag);
 
 	virtual ~LLNotification() {}
@@ -863,7 +863,7 @@ class LLNotifications :
 	// load notification descriptions from file; 
 	// OK to call more than once because it will reload
 	bool loadTemplates();  
-
+	
 	// load visibility rules from file; 
 	// OK to call more than once because it will reload
 	bool loadVisibilityRules();  
@@ -929,7 +929,7 @@ class LLNotifications :
 
 	void setIgnoreAllNotifications(bool ignore);
 	bool getIgnoreAllNotifications();
-	
+
 	bool isVisibleByRules(LLNotificationPtr pNotification);
 	
 private:
@@ -950,7 +950,7 @@ class LLNotifications :
 	// put your template in
 	bool addTemplate(const std::string& name, LLNotificationTemplatePtr theTemplate);
 	TemplateMap mTemplates;
-	
+
 	VisibilityRuleList mVisibilityRules;
 
 	std::string mFileName;
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 654e99563e284ed2777abd266a78b8d61236c2f7..a5d8e31640ea23ca846294e4cdaec7cb40db9c52 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -274,6 +274,11 @@ class LLView : public LLMouseHandler, public LLMortician, public LLFocusableElem
 	BOOL focusNextRoot();
 	BOOL focusPrevRoot();
 
+	// Normally we want the app menus to get priority on accelerated keys
+	// However, sometimes we want to give specific views a first chance
+	// iat handling them. (eg. the script editor)
+	virtual bool	hasAccelerators() const { return false; };
+
 	// delete all children. Override this function if you need to
 	// perform any extra clean up such as cached pointers to selected
 	// children, etc.
diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp
index 6ccac45569aacbd545b84db17bc02f24d760f5ab..a1c6669b974952ea329b9e1dcbb9abd2da09f27b 100644
--- a/indra/llvfs/lldir_linux.cpp
+++ b/indra/llvfs/lldir_linux.cpp
@@ -93,7 +93,7 @@ LLDir_Linux::LLDir_Linux()
 #else
 	mAppRODataDir = tmp_str;
 #endif
-    U32 indra_pos = mExecutableDir.find("/indra");
+    std::string::size_type indra_pos = mExecutableDir.find("/indra");
     if (indra_pos != std::string::npos)
     {
 		// ...we're in a dev checkout
diff --git a/indra/media_plugins/gstreamer010/CMakeLists.txt b/indra/media_plugins/gstreamer010/CMakeLists.txt
index 9f0ff654fca67653b5b18769c80f22232c4fedc3..a5127ae5f4b89af3945926c3fe47c5f743501a7c 100644
--- a/indra/media_plugins/gstreamer010/CMakeLists.txt
+++ b/indra/media_plugins/gstreamer010/CMakeLists.txt
@@ -42,13 +42,6 @@ set(media_plugin_gstreamer010_HEADER_FILES
     llmediaimplgstreamertriviallogging.h
     )
 
-if (${CXX_VERSION_NUMBER} MATCHES "4[23456789].")
-    # Work around a bad interaction between broken gstreamer headers and
-    # g++ >= 4.2's increased strictness.
-    set_source_files_properties(llmediaimplgstreamervidplug.cpp PROPERTIES
-                                COMPILE_FLAGS -Wno-write-strings)
-endif (${CXX_VERSION_NUMBER} MATCHES "4[23456789].")
-
 add_library(media_plugin_gstreamer010
     SHARED
     ${media_plugin_gstreamer010_SOURCE_FILES}
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
index a51a8aa9e1213d7e3ff0433d22ced77de9ddcffc..cdb7f4faeb7e04380f28021037538ff44b9ac956 100644
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
@@ -48,7 +48,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_slvideo_debug);
 #define SLV_ALLCAPS GST_VIDEO_CAPS_RGBx SLV_SIZECAPS
 
 static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE (
-    "sink",
+    (gchar*)"sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
     GST_STATIC_CAPS (SLV_ALLCAPS)
@@ -508,18 +508,18 @@ plugin_init (GstPlugin * plugin)
    some g++ versions buggily avoid __attribute__((constructor)) functions -
    so we provide an explicit plugin init function.
  */
+#define PACKAGE (gchar*)"packagehack"
+// this macro quietly refers to PACKAGE internally
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+		   GST_VERSION_MINOR,
+		   (gchar*)"private-slvideoplugin", 
+		   (gchar*)"SL Video sink plugin",
+		   plugin_init, (gchar*)"1.0", (gchar*)"LGPL",
+		   (gchar*)"Second Life",
+		   (gchar*)"http://www.secondlife.com/");
+#undef PACKAGE
 void gst_slvideo_init_class (void)
 {
-#define PACKAGE "packagehack"
-	// this macro quietly refers to PACKAGE internally
-	static GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-				  GST_VERSION_MINOR,
-				  "private-slvideoplugin", 
-				  "SL Video sink plugin",
-				  plugin_init, "0.1", GST_LICENSE_UNKNOWN,
-				  "Second Life",
-				  "http://www.secondlife.com/");
-#undef PACKAGE
 	ll_gst_plugin_register_static (&gst_plugin_desc);
 	DEBUGMSG("CLASS INIT");
 }
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index d576638dd7ed4febb52889b417319a589bf138b7..57478ddf27b107fb622c70e40cf785a76276d2b0 100644
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -51,9 +51,11 @@ set(media_plugin_webkit_LINK_LIBRARIES
 
 # Select which VolumeCatcher implementation to use
 if (LINUX)
-  if (PULSEAUDIO)
+  if (PULSEAUDIO_FOUND)
     list(APPEND media_plugin_webkit_SOURCE_FILES linux_volume_catcher.cpp)
-  endif (PULSEAUDIO)
+  else (PULSEAUDIO_FOUND)
+    list(APPEND media_plugin_webkit_SOURCE_FILES dummy_volume_catcher.cpp)
+  endif (PULSEAUDIO_FOUND)
   list(APPEND media_plugin_webkit_LINK_LIBRARIES
        ${UI_LIBRARIES}     # for glib/GTK
        )
@@ -67,9 +69,6 @@ elseif (DARWIN)
        )
 elseif (WINDOWS)
   list(APPEND media_plugin_webkit_SOURCE_FILES windows_volume_catcher.cpp)
-else (LINUX)
-  # All other platforms use the dummy volume catcher for now.
-  list(APPEND media_plugin_webkit_SOURCE_FILES dummy_volume_catcher.cpp)
 endif (LINUX)
 
 set_source_files_properties(${media_plugin_webkit_HEADER_FILES}
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index b24de891030c698e6c99be0df2fa529b397da45f..04d1137ac820c0eda5bf380e3659dcf98538221d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7976,6 +7976,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>RenderHighlightSelections</key>
+    <map>
+      <key>Comment</key>
+      <string>Show selection outlines on objects</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>RenderHiddenSelections</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index b9ae976e58f2c59bb42bd585283a060910524490..79b0c63b387b2892bcf389ebabb384c88c5072af 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -49,6 +49,7 @@
 #include "llfloaterpay.h"
 #include "llfloaterworldmap.h"
 #include "llgiveinventory.h"
+#include "llinventorybridge.h"
 #include "llinventorymodel.h"	// for gInventory.findCategoryUUIDForType
 #include "llinventorypanel.h"
 #include "llimview.h"			// for gIMMgr
@@ -443,17 +444,27 @@ namespace action_give_inventory
 	}
 
 	/**
-	 * Checks My Inventory visibility.
+	 * @return active inventory panel, or NULL if there's no such panel
 	 */
-	static bool is_give_inventory_acceptable()
+	static LLInventoryPanel* get_active_inventory_panel()
 	{
 		LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
 		if (!active_panel)
 		{
 			active_panel = get_outfit_editor_inventory_panel();
-			if (!active_panel) return false;
 		}
 
+		return active_panel;
+	}
+
+	/**
+	 * Checks My Inventory visibility.
+	 */
+	static bool is_give_inventory_acceptable()
+	{
+		LLInventoryPanel* active_panel = get_active_inventory_panel();
+		if (!active_panel) return false;
+
 		// check selection in the panel
 		const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
 		if (inventory_selected_uuids.empty()) return false; // nothing selected
@@ -543,12 +554,8 @@ namespace action_give_inventory
 			return;
 		}
 
-		LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
-		if (!active_panel)
-		{
-			active_panel = get_outfit_editor_inventory_panel();
-			if (!active_panel) return;
-		}
+		LLInventoryPanel* active_panel = get_active_inventory_panel();
+		if (!active_panel) return;
 
 		const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
 		if (inventory_selected_uuids.empty())
@@ -632,12 +639,8 @@ namespace action_give_inventory
 		llassert(avatar_names.size() == avatar_uuids.size());
 
 
-		LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
-		if (!active_panel)
-		{
-			active_panel = get_outfit_editor_inventory_panel();
-			if (!active_panel) return;
-		}
+		LLInventoryPanel* active_panel = get_active_inventory_panel();
+		if (!active_panel) return;
 
 		const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
 		if (inventory_selected_uuids.empty())
@@ -672,6 +675,53 @@ void LLAvatarActions::shareWithAvatars()
 	LLNotificationsUtil::add("ShareNotification");
 }
 
+
+// static
+bool LLAvatarActions::canShareSelectedItems(LLInventoryPanel* inv_panel /* = NULL*/)
+{
+	using namespace action_give_inventory;
+
+	if (!inv_panel)
+	{
+		LLInventoryPanel* active_panel = get_active_inventory_panel();
+		if (!active_panel) return false;
+		inv_panel = active_panel;
+	}
+
+	// check selection in the panel
+	LLFolderView* root_folder = inv_panel->getRootFolder();
+	const uuid_set_t inventory_selected_uuids = root_folder->getSelectionList();
+	if (inventory_selected_uuids.empty()) return false; // nothing selected
+
+	bool can_share = true;
+	uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
+	const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
+	for (; it != it_end; ++it)
+	{
+		LLViewerInventoryCategory* inv_cat = gInventory.getCategory(*it);
+		// any category can be offered.
+		if (inv_cat)
+		{
+			continue;
+		}
+
+		// check if inventory item can be given
+		LLFolderViewItem* item = root_folder->getItemByID(*it);
+		if (!item) return false;
+		LLInvFVBridge* bridge = dynamic_cast<LLInvFVBridge*>(item->getListener());
+		if (bridge && bridge->canShare())
+		{
+			continue;
+		}
+
+		// there are neither item nor category in inventory
+		can_share = false;
+		break;
+	}
+
+	return can_share;
+}
+
 // static
 void LLAvatarActions::toggleBlock(const LLUUID& id)
 {
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 6313ae075931c75d8216223ff27521736891d9f5..44bd3778da2e8ee4893aa965cf7dd5ab0aadd19d 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -34,6 +34,8 @@
 #include <string>
 #include <vector>
 
+class LLInventoryPanel;
+
 /**
  * Friend-related actions (add, remove, offer teleport, etc)
  */
@@ -183,6 +185,15 @@ class LLAvatarActions
 	 */
 	static bool canOfferTeleport(const uuid_vec_t& ids);
 
+	/**
+	 * Checks whether all items selected in the given inventory panel can be shared
+	 *
+	 * @param inv_panel Inventory panel to get selection from. If NULL, the active inventory panel is used.
+	 *
+	 * @return false if the selected items cannot be shared or the active inventory panel cannot be obtained
+	 */
+	static bool canShareSelectedItems(LLInventoryPanel* inv_panel = NULL);
+
 private:
 	static bool callbackAddFriend(const LLSD& notification, const LLSD& response);
 	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index b5fa198bae5a8c4214d40ab5a837acc746befbd8..e47009c5404d5a66348acc1ed9aa34d4562c2eb8 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -67,10 +67,10 @@ BOOL LLBottomtrayButton::handleHover(S32 x, S32 y, MASK mask)
 {
 	if (mCanDrag)
 	{
-		S32 screenX, screenY;
-		localPointToScreen(x, y, &screenX, &screenY);
-		// pass hover to bottomtray
-		LLBottomTray::getInstance()->onDraggableButtonHover(screenX, screenY);
+	S32 screenX, screenY;
+	localPointToScreen(x, y, &screenX, &screenY);
+	// pass hover to bottomtray
+	LLBottomTray::getInstance()->onDraggableButtonHover(screenX, screenY);
 		return TRUE;
 	}
 	else
@@ -83,10 +83,10 @@ BOOL LLBottomtrayButton::handleMouseUp(S32 x, S32 y, MASK mask)
 {
 	if (mCanDrag)
 	{
-		S32 screenX, screenY;
-		localPointToScreen(x, y, &screenX, &screenY);
-		// pass mouse up to bottomtray
-		LLBottomTray::getInstance()->onDraggableButtonMouseUp(this, screenX, screenY);
+	S32 screenX, screenY;
+	localPointToScreen(x, y, &screenX, &screenY);
+	// pass mouse up to bottomtray
+	LLBottomTray::getInstance()->onDraggableButtonMouseUp(this, screenX, screenY);
 	}
 	return LLButton::handleMouseUp(x, y, mask);
 }
@@ -95,10 +95,10 @@ BOOL LLBottomtrayButton::handleMouseDown(S32 x, S32 y, MASK mask)
 {
 	if (mCanDrag)
 	{
-		S32 screenX, screenY;
-		localPointToScreen(x, y, &screenX, &screenY);
-		// pass mouse up to bottomtray
-		LLBottomTray::getInstance()->onDraggableButtonMouseDown(this, screenX, screenY);
+	S32 screenX, screenY;
+	localPointToScreen(x, y, &screenX, &screenY);
+	// pass mouse up to bottomtray
+	LLBottomTray::getInstance()->onDraggableButtonMouseDown(this, screenX, screenY);
 	}
 	return LLButton::handleMouseDown(x, y, mask);
 }
@@ -774,7 +774,7 @@ void LLBottomTray::loadButtonsOrder()
 	}
 	// Nearbychat is not stored in order settings file, but it must be the first of the panels, so moving it
 	// manually here
-	mToolbarStack->movePanel(mNearbyChatBar, NULL, true);
+	mToolbarStack->movePanel(mChatBarContainer, NULL, true);
 }
 
 void LLBottomTray::onDraggableButtonMouseUp(LLUICtrl* ctrl, S32 x, S32 y)
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index dd1f92a25c2f451e25d2ba754f24d0befa1a60a9..3981b887ade3c4230965fb8707ce418416fd334f 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -290,20 +290,6 @@ class LLFavoriteLandmarkToggleableMenu : public LLToggleableMenu
 		return TRUE;
 	}
 
-	void setVisible(BOOL b)
-	{
-		// Overflow menu shouldn't hide when it still has focus. See EXT-4217.
-		if (!b && hasFocus())
-			return;
-		LLToggleableMenu::setVisible(b);
-		setFocus(b);
-	}
-
-	void onFocusLost()
-	{
-		setVisible(FALSE);
-	}
-
 protected:
 	LLFavoriteLandmarkToggleableMenu(const LLToggleableMenu::Params& p):
 		LLToggleableMenu(p)
@@ -790,7 +776,6 @@ void LLFavoritesBarCtrl::updateButtons()
 		LLToggleableMenu* overflow_menu = static_cast <LLToggleableMenu*> (mPopupMenuHandle.get());
 		if (overflow_menu && overflow_menu->getVisible())
 		{
-			overflow_menu->setFocus(FALSE);
 			overflow_menu->setVisible(FALSE);
 			if (mUpdateDropDownItems)
 				showDropDownMenu();
@@ -911,8 +896,6 @@ void LLFavoritesBarCtrl::showDropDownMenu()
 
 	if (menu)
 	{
-		// Release focus to allow changing of visibility.
-		menu->setFocus(FALSE);
 		if (!menu->toggleVisibility())
 			return;
 
@@ -1093,6 +1076,14 @@ void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)
 	{
 		gInventory.removeItem(mSelectedItemID);
 	}
+
+	// Pop-up the overflow menu again (it gets hidden whenever the user clicks a context menu item).
+	// See EXT-4217 and STORM-207.
+	LLToggleableMenu* menu = (LLToggleableMenu*) mPopupMenuHandle.get();
+	if (menu && !menu->getVisible())
+	{
+		showDropDownMenu();
+	}
 }
 
 BOOL LLFavoritesBarCtrl::isClipboardPasteable() const
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index df0d22561e6a798a22574917f00db183130c0e1f..e124263db5b2a60e37b376faa1e781e8ed3d3298 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -565,7 +565,10 @@ void LLPanelLandGeneral::refresh()
 		if (regionp)
 		{
 			insert_maturity_into_textbox(mContentRating, gFloaterView->getParentFloater(this), MATURITY);
-			mLandType->setText(LLTrans::getString(regionp->getSimProductName()));
+
+			std::string land_type;
+			bool is_land_type_localized = LLTrans::findString(land_type, regionp->getSimProductName());
+			mLandType->setText(is_land_type_localized ? land_type : regionp->getSimProductName());
 		}
 
 		// estate owner/manager cannot edit other parts of the parcel
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index ff6df548c46288cb8f17bf85c6f09683ef85c74d..41f85ae29d6fd5d585826bb58c5f07e5208777d5 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -323,8 +323,9 @@ BOOL LLFloaterPreference::postBuild()
 	if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
 		tabcontainer->selectFirstTab();
 
+	getChild<LLUICtrl>("cache_location")->setEnabled(FALSE); // make it read-only but selectable (STORM-227)
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
-	getChild<LLUICtrl>("cache_location")->setValue(cache_location);
+	setCacheLocation(cache_location);
 
 	// if floater is opened before login set default localized busy message
 	if (LLStartUp::getStartupState() < STATE_STARTED)
@@ -414,7 +415,7 @@ void LLFloaterPreference::apply()
 	fov_slider->setMaxValue(LLViewerCamera::getInstance()->getMaxView());
 	
 	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
-	getChild<LLUICtrl>("cache_location")->setValue(cache_location);		
+	setCacheLocation(cache_location);
 	
 	LLViewerMedia::setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue());
 	
@@ -1310,6 +1311,12 @@ void LLFloaterPreference::getUIColor(LLUICtrl* ctrl, const LLSD& param)
 	color_swatch->setOriginal(LLUIColorTable::instance().getColor(param.asString()));
 }
 
+void LLFloaterPreference::setCacheLocation(const LLStringExplicit& location)
+{
+	LLUICtrl* cache_location_editor = getChild<LLUICtrl>("cache_location");
+	cache_location_editor->setValue(location);
+	cache_location_editor->setToolTip(location);
+}
 
 //----------------------------------------------------------------------------
 static LLRegisterPanelClassWrapper<LLPanelPreference> t_places("panel_preference");
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index d1e15d5ab8621ee59eec6025cfcca9999b2871ed..e99731b92e41c0d3b0808283ac2e99ca7cd25f88 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -103,6 +103,8 @@ class LLFloaterPreference : public LLFloater
 
 public:
 
+	void setCacheLocation(const LLStringExplicit& location);
+
 	void onClickSetCache();
 	void onClickResetCache();
 	void onClickSkin(LLUICtrl* ctrl,const LLSD& userdata);
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index c42b39725239d49da2ef8dd1271fe96d63ea7236..5393678a6b04c11dce321c699e7a968f302d783c 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -235,7 +235,7 @@ static bool isGroupUIVisible()
 {
 	static LLPanel* panel = 0;
 	if(!panel)
-		panel = LLSideTray::getInstance()->findChild<LLPanel>("panel_group_info_sidetray");
+		panel = LLSideTray::getInstance()->getPanel("panel_group_info_sidetray");
 	if(!panel)
 		return false;
 	return panel->isInVisibleChain();
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 7a81efeed79388711d99b48fa5f289118e73bc8f..01e1c3caa0ccb41a93a5e8c161f3844fda7e9f44 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -495,6 +495,11 @@ LLIMModel::LLIMSession* LLIMModel::findAdHocIMSession(const uuid_vec_t& ids)
 	return NULL;
 }
 
+bool LLIMModel::LLIMSession::isOutgoingAdHoc()
+{
+	return IM_SESSION_CONFERENCE_START == mType;
+}
+
 bool LLIMModel::LLIMSession::isAdHoc()
 {
 	return IM_SESSION_CONFERENCE_START == mType || (IM_SESSION_INVITE == mType && !gAgent.isInGroup(mSessionID));
@@ -1032,24 +1037,25 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
 			// to Recent People to prevent showing of an item with (???)(???). See EXT-8246.
 			// Concrete participants will be added into this list once they sent message in chat.
 			if (IM_SESSION_INVITE == dialog) return;
-
 			// Add only online members to recent (EXT-8658)
-			LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id);
-			LLSpeakerMgr::speaker_list_t speaker_list;
-			if(speaker_mgr != NULL)
-			{
-				speaker_mgr->getSpeakerList(&speaker_list, true);
-			}
-			for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++)
-			{
-				const LLPointer<LLSpeaker>& speakerp = *it;
-
-				LLRecentPeople::instance().add(speakerp->mID);
-			}
+			addSpeakersToRecent(im_session_id);			
 		}
 	}
+}
 
-	
+void LLIMModel::addSpeakersToRecent(const LLUUID& im_session_id)
+{
+	LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id);
+	LLSpeakerMgr::speaker_list_t speaker_list;
+	if(speaker_mgr != NULL)
+	{
+		speaker_mgr->getSpeakerList(&speaker_list, true);
+	}
+	for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++)
+	{
+		const LLPointer<LLSpeaker>& speakerp = *it;
+		LLRecentPeople::instance().add(speakerp->mID);
+	}
 }
 
 void session_starter_helper(
@@ -2280,9 +2286,6 @@ void LLIMMgr::addMessage(
 	if (new_session)
 	{
 		LLIMModel::getInstance()->newSession(new_session_id, fixed_session_name, dialog, other_participant_id);
-		// When addidng messages further here, name of session is used instead of "name", because they may not be the
-		// same if it is an adhoc session (in this case name is localized in LLIMSession constructor).
-		fixed_session_name = LLIMModel::getInstance()->getName(new_session_id);
 
 		// When we get a new IM, and if you are a god, display a bit
 		// of information about the source. This is to help liaisons
@@ -2302,13 +2305,13 @@ void LLIMMgr::addMessage(
 			//<< "*** region_id: " << region_id << std::endl
 			//<< "*** position: " << position << std::endl;
 
-			LLIMModel::instance().addMessage(new_session_id, fixed_session_name, other_participant_id, bonus_info.str());
+			LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str());
 		}
 
 		make_ui_sound("UISndNewIncomingIMSession");
 	}
 
-	LLIMModel::instance().addMessage(new_session_id, fixed_session_name, other_participant_id, msg);
+	LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);
 }
 
 void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& message_name, const LLSD& args)
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index ba8c7ae489ecce39cf59b55817b3bb55efc35915..f7a4406f006fe051f47505a5e6115e85aafd853a 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -84,6 +84,7 @@ class LLIMModel :  public LLSingleton<LLIMModel>
 		/** @deprecated */
 		static void chatFromLogFile(LLLogChat::ELogLineType type, const LLSD& msg, void* userdata);
 
+		bool isOutgoingAdHoc();
 		bool isAdHoc();
 		bool isP2P();
 		bool isOtherParticipantAvaline();
@@ -273,6 +274,9 @@ class LLIMModel :  public LLSingleton<LLIMModel>
 	static void sendMessage(const std::string& utf8_text, const LLUUID& im_session_id,
 								const LLUUID& other_participant_id, EInstantMessage dialog);
 
+	// Adds people from speakers list (people with whom you are currently speaking) to the Recent People List
+	static void addSpeakersToRecent(const LLUUID& im_session_id);
+
 	void testMessages();
 
 	/**
diff --git a/indra/newview/llnamebox.cpp b/indra/newview/llnamebox.cpp
index 74d4217899dd5255e3dde8c8959d7906716d60cd..c31da84f78cb0dab9b9bd7561369fbd78aca4569 100644
--- a/indra/newview/llnamebox.cpp
+++ b/indra/newview/llnamebox.cpp
@@ -47,6 +47,7 @@ LLNameBox::LLNameBox(const Params& p)
 {
 	mNameID = LLUUID::null;
 	mLink = p.link;
+	mParseHTML = mLink; // STORM-215
 	mInitialValue = p.initial_value().asString();
 	LLNameBox::sInstances.insert(this);
 	setText(LLStringUtil::null);
@@ -119,7 +120,7 @@ void LLNameBox::setName(const std::string& name, BOOL is_group)
 		std::string url;
 
 		if (is_group)
-			url = "[secondlife:///app/group/" + LLURI::escape(name) + "/about " + name + "]";
+			url = "[secondlife:///app/group/" + mNameID.asString() + "/about " + name + "]";
 		else
 			url = "[secondlife:///app/agent/" + mNameID.asString() + "/about " + name + "]";
 
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 62ed7acb1519416407a8753d1bc9a956276943cf..76b85d5bec3ab46fb70a49505ae529374c97858c 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -597,7 +597,7 @@ void LLPanelGroup::showNotice(const std::string& subject,
 //static
 void LLPanelGroup::refreshCreatedGroup(const LLUUID& group_id)
 {
-	LLPanelGroup* panel = LLSideTray::getInstance()->findChild<LLPanelGroup>("panel_group_info_sidetray");
+	LLPanelGroup* panel = LLSideTray::getInstance()->getPanel<LLPanelGroup>("panel_group_info_sidetray");
 	if(!panel)
 		return;
 	panel->setGroupID(group_id);
@@ -612,7 +612,7 @@ void LLPanelGroup::showNotice(const std::string& subject,
 					   const std::string& inventory_name,
 					   LLOfferInfo* inventory_offer)
 {
-	LLPanelGroup* panel = LLSideTray::getInstance()->findChild<LLPanelGroup>("panel_group_info_sidetray");
+	LLPanelGroup* panel = LLSideTray::getInstance()->getPanel<LLPanelGroup>("panel_group_info_sidetray");
 	if(!panel)
 		return;
 
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index b09360a2d697413634d37fd8bc11f56201d95297..c4a484d368b413b328805c90666a7fa4da389592 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -1245,7 +1245,12 @@ void LLLandmarksPanel::doProcessParcelInfo(LLLandmark* landmark,
 	landmark->getGlobalPos(landmark_global_pos);
 
 	// let's toggle pick panel into  panel places
-	LLPanel* panel_places =  LLSideTray::getInstance()->getChild<LLPanel>("panel_places");//-> sidebar_places
+	LLPanel* panel_places =  LLSideTray::getInstance()->getPanel("panel_places");//-> sidebar_places
+	if (!panel_places)
+	{
+		llassert(NULL != panel_places);
+		return;
+	}
 	panel_places->addChild(panel_pick);
 	LLRect paren_rect(panel_places->getRect());
 	panel_pick->reshape(paren_rect.getWidth(),paren_rect.getHeight(), TRUE);
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 627010bb53f0455f23f4d76c65450924295a3665..cf2ea3828808d0c4d53f5a1296386f1e62d12280 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -138,6 +138,9 @@ class LLFloaterScriptSearch : public LLFloater
 	LLScriptEdCore* getEditorCore() { return mEditorCore; }
 	static LLFloaterScriptSearch* getInstance() { return sInstance; }
 
+	virtual bool hasAccelerators() const;
+	virtual BOOL handleKeyHere(KEY key, MASK mask);
+
 private:
 
 	LLScriptEdCore* mEditorCore;
@@ -242,7 +245,24 @@ void LLFloaterScriptSearch::handleBtnReplaceAll()
 	mEditorCore->mEditor->replaceTextAll(getChild<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("replace_text")->getValue().asString(), caseChk->get());
 }
 
+bool LLFloaterScriptSearch::hasAccelerators() const
+{
+	if (mEditorCore)
+	{
+		return mEditorCore->hasAccelerators();
+	}
+	return FALSE;
+}
+
+BOOL LLFloaterScriptSearch::handleKeyHere(KEY key, MASK mask)
+{
+	if (mEditorCore)
+	{
+		return mEditorCore->handleKeyHere(key, mask);
+	}
 
+	return FALSE;
+}
 
 /// ---------------------------------------------------------------------------
 /// LLScriptEdCore
diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index ef4f0d9c2041913270b1eaf03143233052b9f5c4..f4b31e5962f5a4b5926c661ec058f7829ad70855 100644
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -87,6 +87,8 @@ class LLScriptEdCore : public LLPanel
 	static void		onBtnInsertSample(void*);
 	static void		onBtnInsertFunction(LLUICtrl*, void*);
 
+	virtual bool	hasAccelerators() const { return true; }
+
 private:
 	void		onBtnHelp();
 	void		onBtnDynamicHelp();
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 9260abb2aced535c48d775f88e71a77354ed090c..da891d1c51526a8fa1bfd68178289db8d3d70029 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -181,6 +181,7 @@ template class LLSelectMgr* LLSingleton<class LLSelectMgr>::getInstance();
 //-----------------------------------------------------------------------------
 LLSelectMgr::LLSelectMgr()
  : mHideSelectedObjects(LLCachedControl<bool>(gSavedSettings, "HideSelectedObjects", FALSE)),
+   mRenderHighlightSelections(LLCachedControl<bool>(gSavedSettings, "RenderHighlightSelections", TRUE)),
    mAllowSelectAvatar( LLCachedControl<bool>(gSavedSettings, "AllowSelectAvatar", FALSE)),
    mDebugSelectMgr(LLCachedControl<bool>(gSavedSettings, "DebugSelectMgr", FALSE))
 {
@@ -4898,7 +4899,7 @@ void LLSelectMgr::updateSelectionSilhouette(LLObjectSelectionHandle object_handl
 }
 void LLSelectMgr::renderSilhouettes(BOOL for_hud)
 {
-	if (!mRenderSilhouettes)
+	if (!mRenderSilhouettes || !mRenderHighlightSelections)
 	{
 		return;
 	}
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index e6db264377b16f57eeb277df9f214e0320277b9f..7478ed5f9a3db2d1ff850a048c2f7c632e9d8d17 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -347,6 +347,7 @@ class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
 	static LLColor4				sContextSilhouetteColor;
 
 	LLCachedControl<bool>					mHideSelectedObjects;
+	LLCachedControl<bool>					mRenderHighlightSelections;
 	LLCachedControl<bool>					mAllowSelectAvatar;
 	LLCachedControl<bool>					mDebugSelectMgr;
 
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 23e96c22fa841681db02024977fcfd1d41aad7f2..31ea542743db43c87dd5b52cfe715a37fc318e44 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -182,8 +182,26 @@ void LLSidepanelInventory::performActionOnSelection(const std::string &action)
 
 void LLSidepanelInventory::onWearButtonClicked()
 {
-	performActionOnSelection("wear");
-	performActionOnSelection("attach");
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
+	if (!panel_main_inventory)
+	{
+		llassert(panel_main_inventory != NULL);
+		return;
+	}
+
+	// Get selected items set.
+	const std::set<LLUUID> selected_uuids_set = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
+	if (selected_uuids_set.empty()) return; // nothing selected
+
+	// Convert the set to a vector.
+	uuid_vec_t selected_uuids_vec;
+	for (std::set<LLUUID>::const_iterator it = selected_uuids_set.begin(); it != selected_uuids_set.end(); ++it)
+	{
+		selected_uuids_vec.push_back(*it);
+	}
+
+	// Wear all selected items.
+	wear_multiple(selected_uuids_vec, true);
 }
 
 void LLSidepanelInventory::onPlayButtonClicked()
@@ -286,7 +304,7 @@ void LLSidepanelInventory::updateVerbs()
 		case LLInventoryType::IT_OBJECT:
 		case LLInventoryType::IT_ATTACHMENT:
 			mWearBtn->setVisible(TRUE);
-			mWearBtn->setEnabled(get_can_item_be_worn(item->getLinkedUUID()));
+			mWearBtn->setEnabled(canWearSelected());
 		 	mShopBtn->setVisible(FALSE);
 			break;
 		case LLInventoryType::IT_SOUND:
@@ -311,18 +329,39 @@ bool LLSidepanelInventory::canShare()
 	LLPanelMainInventory* panel_main_inventory =
 		mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 
-	LLFolderView* root_folder =
-		panel_main_inventory->getActivePanel()->getRootFolder();
+	if (!panel_main_inventory)
+	{
+		llwarns << "Failed to get the main inventory panel" << llendl;
+		return false;
+	}
+
+	LLInventoryPanel* active_panel = panel_main_inventory->getActivePanel();
+	// Avoid flicker in the Recent tab while inventory is being loaded.
+	if (!active_panel->getRootFolder()->hasVisibleChildren()) return false;
+
+	return LLAvatarActions::canShareSelectedItems(active_panel);
+}
 
-	LLFolderViewItem* current_item = root_folder->hasVisibleChildren()
-		? root_folder->getCurSelectedItem()
-		: NULL;
+bool LLSidepanelInventory::canWearSelected()
+{
+	LLPanelMainInventory* panel_main_inventory =
+		mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 
-	LLInvFVBridge* bridge = current_item
-		? dynamic_cast <LLInvFVBridge*> (current_item->getListener())
-		: NULL;
+	if (!panel_main_inventory)
+	{
+		llassert(panel_main_inventory != NULL);
+		return false;
+	}
+
+	std::set<LLUUID> selected_uuids = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
+	for (std::set<LLUUID>::const_iterator it = selected_uuids.begin();
+		it != selected_uuids.end();
+		++it)
+	{
+		if (!get_can_item_be_worn(*it)) return false;
+	}
 
-	return bridge ? bridge->canShare() : false;
+	return true;
 }
 
 LLInventoryItem *LLSidepanelInventory::getSelectedItem()
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 4776dd753032804879c26c799b63535ed7f03916..32c98bc034b71b479b8c0fb3348d1d7bea06f16d 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -65,6 +65,8 @@ class LLSidepanelInventory : public LLPanel
 	void performActionOnSelection(const std::string &action);
 	void updateVerbs();
 
+	bool canWearSelected(); // check whether selected items can be worn
+
 	//
 	// UI Elements
 	//
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 4e79007c13d624454348e43d3f8394664a5154ba..4c23a1920b1e2f27ad7282db7ab71ffdf048c60f 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -109,6 +109,22 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
     LLPanel*	getPanel		(const std::string& panel_name);
     LLPanel*	getActivePanel	();
     bool		isPanelActive	(const std::string& panel_name);
+
+	/*
+	 * get the panel of given type T (don't show it or do anything else with it)
+	 */
+	template <typename T>
+	T* getPanel(const std::string& panel_name)
+	{
+		T* panel = dynamic_cast<T*>(getPanel(panel_name));
+		if (!panel)
+		{
+			llwarns << "Child named \"" << panel_name << "\" of type " << typeid(T*).name() << " not found" << llendl;
+			return NULL;
+		}
+		return panel;
+	}
+
 	/*
 	 * get currently active tab
 	 */
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index c3e4775fe1be33b5677a2736722ceb939061fb66..e9fc25404a56cce34049a97b6a918d95fbec8442 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -217,8 +217,6 @@ BOOL LLStatusBar::postBuild()
 	mSGPacketLoss->mPerSec = FALSE;
 	addChild(mSGPacketLoss);
 
-	getChild<LLTextBox>("stat_btn")->setClickedCallback(onClickStatGraph);
-
 	mPanelVolumePulldown = new LLPanelVolumePulldown();
 	addChild(mPanelVolumePulldown);
 	mPanelVolumePulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
@@ -516,12 +514,6 @@ void LLStatusBar::onClickMediaToggle(void* data)
 	LLViewerMedia::setAllMediaEnabled(enable);
 }
 
-// static
-void LLStatusBar::onClickStatGraph(void* data)
-{
-	LLFloaterReg::showInstance("lagmeter");
-}
-
 BOOL can_afford_transaction(S32 cost)
 {
 	return((cost <= 0)||((gStatusBar) && (gStatusBar->getBalance() >=cost)));
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index 8840db2c4a1da5ca9794e360bbaad3c14e7968eb..2388aeb0c85e74c9f0b2fb25947a5a8e195e150c 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -92,7 +92,6 @@ class LLStatusBar
 	void onMouseEnterVolume();
 	void onMouseEnterNearbyMedia();
 	void onClickScreen(S32 x, S32 y);
-	static void onClickStatGraph(void* data);
 
 	static void onClickMediaToggle(void* data);
 
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 4e9ebce4d1037a164dfdf25e4dc8769f583f1cf2..fafef84aa22af0ca4cf553a9d3e271d77dfbb2be 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -847,10 +847,16 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		if(mCanUseHTTP)
 		{
 			//NOTE:
-			//it seems ok to let sim control the UDP traffic
-			//so there is no throttle for http here.
+			//control the number of the http requests issued for:
+			//1, not openning too many file descriptors at the same time;
+			//2, control the traffic of http so udp gets bandwidth.
 			//
-			
+			static const S32 MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE = 32 ;
+			if(mFetcher->getNumHTTPRequests() > MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE)
+			{
+				return false ; //wait.
+			}
+
 			mFetcher->removeFromNetworkQueue(this, false);
 			
 			S32 cur_size = 0;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 33c74e74657c0a512a5f05a3bd00555414ce6888..26b7e0fb6de18a7ec8cc010818107d8fe806ae3c 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6453,7 +6453,7 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
 	LLPanelLandCovenant::updateEstateOwnerName(owner_name);
 	LLFloaterBuyLand::updateEstateOwnerName(owner_name);
 
-	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->getPanel<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateEstateName(estate_name);
@@ -6587,7 +6587,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
 	LLPanelLandCovenant::updateCovenantText(covenant_text);
 	LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
 
-	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile");
+	LLPanelPlaceProfile* panel = LLSideTray::getInstance()->getPanel<LLPanelPlaceProfile>("panel_place_profile");
 	if (panel)
 	{
 		panel->updateCovenantText(covenant_text);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 63d178457daca984eac2ca4836963b356830c10e..c6ed3f897929560e76fc608f5a7c0f3b086c7473 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1349,8 +1349,8 @@ LLViewerWindow::LLViewerWindow(
 	if (!LLAppViewer::instance()->restoreErrorTrap())
 	{
 		LL_WARNS("Window") << " Someone took over my signal/exception handler (post createWindow)!" << LL_ENDL;
-    }
- 
+	}
+
 	LLCoordScreen scr;
     mWindow->getSize(&scr);
 
@@ -2146,10 +2146,20 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
 		return TRUE;
 	}
 
+	LLFocusableElement* keyboard_focus = gFocusMgr.getKeyboardFocus();
+
 	// give menus a chance to handle modified (Ctrl, Alt) shortcut keys before current focus 
 	// as long as focus isn't locked
 	if (mask & (MASK_CONTROL | MASK_ALT) && !gFocusMgr.focusLocked())
 	{
+		// Check the current floater's menu first, if it has one.
+		if (gFocusMgr.keyboardFocusHasAccelerators()
+			&& keyboard_focus 
+			&& keyboard_focus->handleKey(key,mask,FALSE))
+		{
+			return TRUE;
+		}
+
 		if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask))
 			||(gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask)))
 		{
@@ -2185,7 +2195,6 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
 	}
 
 	// Traverses up the hierarchy
-	LLFocusableElement* keyboard_focus = gFocusMgr.getKeyboardFocus();
 	if( keyboard_focus )
 	{
 		LLLineEditor* chat_editor = LLBottomTray::instanceExists() ? LLBottomTray::getInstance()->getNearbyChatBar()->getChatBox() : NULL;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 46d8f65d23d97220a94d1b8b90522dbc0696ec8f..c31714de5af8590336378381613e59fa69c66cbe 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -6089,9 +6089,9 @@ void LLVOAvatar::updateMeshTextures()
 			// use the last-known good baked texture until it finish the first
 			// render of the new layerset.
 
-			const BOOL layerset_invalid = !mBakedTextureDatas[i].mTexLayerSet 
-										  || !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized()
-										  || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable();
+			const BOOL layerset_invalid = mBakedTextureDatas[i].mTexLayerSet 
+										  && ( !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized()
+										  || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable() );
 
 			use_lkg_baked_layer[i] = (!is_layer_baked[i] 
 									  && (mBakedTextureDatas[i].mLastTextureIndex != IMG_DEFAULT_AVATAR) 
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 9e3d61ae441a3f6c33c01eda3e1694f62676fbff..b692093fb9bf8afe2964678210b306d8d7252e41 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -497,14 +497,28 @@ void LLVoiceChannelGroup::activate()
 			mURI,
 			mCredentials);
 
-#if 0 // *TODO
 		if (!gAgent.isInGroup(mSessionID)) // ad-hoc channel
 		{
-			// Add the party to the list of people with which we've recently interacted.
-			for (/*people in the chat*/)
-				LLRecentPeople::instance().add(buddy_id);
+			LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(mSessionID);
+			// Adding ad-hoc call participants to Recent People List.
+			// If it's an outgoing ad-hoc, we can use mInitialTargetIDs that holds IDs of people we
+			// called(both online and offline) as source to get people for recent (STORM-210).
+			if (session->isOutgoingAdHoc())
+			{
+				for (uuid_vec_t::iterator it = session->mInitialTargetIDs.begin();
+					it!=session->mInitialTargetIDs.end();++it)
+				{
+					const LLUUID id = *it;
+					LLRecentPeople::instance().add(id);
+				}
+			}
+			// If this ad-hoc is incoming then trying to get ids of people from mInitialTargetIDs
+			// would lead to EXT-8246. So in this case we get them from speakers list.
+			else
+			{
+				LLIMModel::addSpeakersToRecent(mSessionID);
+			}
 		}
-#endif
 
 		//Mic default state is OFF on initiating/joining Ad-Hoc/Group calls
 		if (LLVoiceClient::getInstance()->getUserPTTState() && LLVoiceClient::getInstance()->getPTTIsToggle())
diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
index d3f0d6d78f66322841cd9ff8f78c1ba82e5c6123..8f99fc933c269082329e3384fdec1707983e00ba 100644
--- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
@@ -43,7 +43,7 @@
 		Jeder:
 	</text>
 	<check_box label="Kopieren" name="everyone_copy"/>
-	<text name="NextOwnerLabel" top="160" left="10" width="200">
+	<text name="NextOwnerLabel">
 		Nächster Eigentümer:
 	</text>
 	<check_box label="Bearbeiten" name="next_owner_modify"/>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 12ae9898c326e82ebdae21a63cc1a29150229408..3de3718f6628118791adf987d9a9032521a4d73f 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -71,8 +71,8 @@
 	<text label="Beide Seiten dehnen" name="checkbox uniform label">
 		Beide Seiten dehnen
 	</text>
-	<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures"/>
-	<check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="10"/>
+	<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures" top_pad="-5"/>
+	<check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="15"/>
 	<combo_box name="combobox grid mode" tool_tip="Wählen Sie ein Rasterlineal zum Positionieren des Objekts aus.">
 		<combo_box.item label="Globales Raster" name="World"/>
 		<combo_box.item label="Lokales Raster" name="Local"/>
diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
index d007ceff984eed1da2d15ea1eb512413354f49ed..457142f11c812fd14f24a4cda2b72c988c9011d7 100644
--- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
@@ -7,7 +7,7 @@
  name="floaterbulkperms"
  help_topic="floaterbulkperms"
  title="EDIT CONTENT PERMISSIONS"
- width="270">
+ width="300">
     <floater.string
      name="nothing_to_modify_text">
         Selection contains no editable contents.
@@ -164,7 +164,7 @@
      label="√ All"
      left="180"
      top="26"
-     width="70">
+     width="115">
       <button.commit_callback
        function="BulkPermission.CheckAll" />
     </button>
@@ -176,7 +176,7 @@
      layout="topleft"
      top_pad="8"
      name="check_none"
-     width="70" >
+     width="115" >
       <button.commit_callback
        function="BulkPermission.UncheckAll"/>
     </button>
@@ -199,10 +199,11 @@
        length="1"
       follows="left|top"
       layout="topleft"
-       height="16"
+       height="28"
      left="10"
       name="GroupLabel"
-       width="88">
+      width="92"
+      word_wrap="true">
        Group:
     </text>
     <check_box
@@ -212,17 +213,18 @@
      layout="topleft"
      top_pad="0"
      name="share_with_group"
-     width="88" />
+     width="92" />
         <text
      type="string"
      length="1"
      follows="left|top"
-     height="16"
+     height="28"
      layout="topleft"
      name="AnyoneLabel"
-     left="100"
+     left="104"
      top="110"
-     width="88">
+     width="92"
+     word_wrap="true">
         Anyone:
     </text>
     <check_box
@@ -232,17 +234,18 @@
      layout="topleft"
      top_pad="0"
      name="everyone_copy"
-     width="88" />
+     width="92" />
     <text
      type="string"
      length="1"
      follows="left|top"
-     height="16"
+     height="28"
      layout="topleft"
      name="NextOwnerLabel"
      top="110"
-     left="185"
-     width="88">
+     left="189"
+     width="92"
+     word_wrap="true">
         Next owner:
     </text>
     <check_box
@@ -252,7 +255,7 @@
      layout="topleft"
      name="next_owner_modify"
      top_pad="0"
-     width="83" />
+     width="92" />
     <check_box
      control_name="BulkChangeNextOwnerCopy"
      height="16"
@@ -260,7 +263,7 @@
      layout="topleft"
      top_pad="0"
      name="next_owner_copy"
-     width="88">
+     width="92">
       <check_box.commit_callback
        function="BulkPermission.CommitCopy"/>
      </check_box>
@@ -274,7 +277,7 @@
      layout="topleft"
      name="next_owner_transfer"
      tool_tip="Next owner can give away or resell this object"
-     width="106" />
+     width="92" />
     <scroll_list
      enabled="false"
      follows="all"
@@ -289,7 +292,7 @@
      height="23"
      label="OK"
      layout="topleft"
-     left="65"
+     left="95"
      name="apply"
      top_pad="10"
      width="90">
diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
index 0c90df24f03f67cd514cfae9836aa1c168bad18d..837923bcf606c48dce7a36eb858eda8d2e36e324 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -37,7 +37,7 @@
          width="620">
             <web_browser
               trusted_content="true" 
-             bottom="-11"
+             bottom="-25"
              follows="left|right|top|bottom"
              layout="topleft"
              left="0"
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index af8ab3fd9e3e72a7fe02c16e8b4fe5783cdc97d9..cea2ba2c7f585b6f8eb77be70dc84a58b3f18a8c 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -255,7 +255,7 @@
      label="Edit linked"
      layout="topleft"     
      name="checkbox edit linked parts"
-     top_pad="0">
+     top_pad="2">
 		  <check_box.commit_callback
 			function="BuildTool.selectComponent"/>
 	</check_box>
@@ -267,7 +267,7 @@
    left="13"
    name="RenderingCost"
    tool_tip="Shows the rendering cost calculated for this object"
-   top_pad="2"
+   top_pad="0"
    type="string"
    width="100">
    þ: [COUNT]
@@ -732,7 +732,7 @@
      layout="topleft"
      right="-10"
      name="obj_count"
-     top_pad="5"
+     top_pad="7"
      width="143">
         Objects: [COUNT]
     </text>
@@ -758,7 +758,7 @@
      tab_min_width="40"
      tab_position="top"
      tab_height="25"
-     top="170"
+     top="173"
      width="295">
 	<panel
 	 border="false"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index ed79f1246ae8c52984f28a9686fc4c2630cd4fb9..af241862b667834ed1f9f5d932a4a41178db3622 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -669,6 +669,14 @@
                function="Tools.SaveToObjectInventory" />
 			<menu_item_call.on_enable
                function="Tools.EnableSaveToObjectInventory" />
+          </menu_item_call>
+          <menu_item_call
+			 label="Return Object"
+			 name="Return Object back to Owner">
+			<menu_item_call.on_click
+               function="Object.Return" />
+			<menu_item_call.on_enable
+               function="Object.EnableReturn" />
           </menu_item_call>
 		</menu>
         <menu
@@ -772,6 +780,16 @@
 
           <menu_item_separator/>
 
+                <menu_item_check
+                 label="Show Selection Outlines"
+                 name="Show Selection Outlines">
+                    <menu_item_check.on_check
+                     function="CheckControl"
+                     parameter="RenderHighlightSelections" />
+                    <menu_item_check.on_click
+                     function="ToggleControl"
+                     parameter="RenderHighlightSelections" />
+                </menu_item_check>
                 <menu_item_check
                  label="Show Hidden Selection"
                  name="Show Hidden Selection">
diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml
index 6f271a757c4d52e235157c5c71e64ff03f8826fb..cded4cf31a2f8e0e903b99f7c6e28f03beb3e29a 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml
@@ -85,6 +85,7 @@
      layout="topleft"
      left="45"
      name="attachment"
+     parse_urls="false"
      text_color="GroupNotifyTextColor"
      value="Attachment"
      use_ellipses="true"
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
index e0426c75b400aa8a973de7d4583a0a6395b16e3e..a48a9ce6261a4aa4c73148a847b1fe77ff4ce8aa 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -132,6 +132,7 @@
                  height="18"
                  layout="topleft"
                  name="curr_outfit_name"
+                 parse_urls="false"
                  text_color="LtGray"
                  top_pad="2"
                  value="[Current Outfit]"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
index de147908d84f844343fac4c8ef22d1ca9ae432f0..43d580844fb9f61d49abd5403c1c31bf47d6e597 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
@@ -52,6 +52,7 @@
      layout="topleft"
      left="110"
      name="picture_name"
+     parse_urls="false"
      text_color="white"
      top="9"
      use_ellipses="true"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 879781f746c9dd9e4a3d35c43798ff01f7398b3b..140d16e37f6603c2d4055aa1d366b25169beb683 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -195,7 +195,6 @@
    control_name="CacheLocationTopFolder"
    border_style="line"
    border_thickness="1"
-   enabled="false"
    follows="left|top"
    font="SansSerif"
    height="23"
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 4ccd7b3629b0c866ab424a2c0de53e7a67b60ce9..2f52ca660b833608d09f63c95d5c62e59d66484e 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -118,13 +118,4 @@
      name="volume_btn"
      tool_tip="Global Volume Control"
      width="16" />
-    <text
-     follows="right|top"
-     halign="center"
-     height="12"
-     layout="topleft"
-     left_delta="0"
-     name="stat_btn"
-     top_delta="0"
-     width="20"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
index c1c0f07304e613f611b36b9978d6934691c7331c..b5839878d59ae8c05ebaf4ef5bf6b8f3a6469646 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
@@ -77,6 +77,7 @@ width="333">
       font="SansSerifLargeBold"
       height="20"
       left="35"
+      parse_urls="false"
       text_color="White"
       top="15"
       use_ellipses="true"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 6b3fd9ff9e992547d8112a7be56f9f41af20558c..8470d91b8cb0bcd51bb10ddf490df3c687bd5e2e 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -321,6 +321,8 @@
 
 	<!-- For land type back from the simulator -->
 	<string name="Estate / Full Region">Estate / Full Region</string>
+	<string name="Estate / Homestead">Estate / Homestead</string>
+	<string name="Mainland / Homestead">Mainland / Homestead</string>
 	<string name="Mainland / Full Region">Mainland / Full Region</string>
 
 	<!-- File load/save dialogs -->
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 9637544f4e01bdc96426424b849b9edd0ea9dc02..bc99cfe21588d15090e893b17c942a071acaa901 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" short_title="HERRAMIENTAS DE CONSTRUCCIÓN" title="" width="288">
+<floater name="toolbox floater" short_title="HERRAMIENTAS DE CONSTRUCCIÓN" title="">
 	<floater.string name="status_rotate">
 		Arrastra las bandas de color para girar el objeto.
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
index 0f49061002e151c527ff4fe690cd42969292f65f..1c24e0b35e64b82fc63403e4aa70a0b24c0b8423 100644
--- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
@@ -30,8 +30,8 @@
 	<icon name="icon_sound" tool_tip="Dźwięki"/>
 	<check_box label="Tekstury" name="check_texture"/>
 	<icon name="icon_texture" tool_tip="Tekstury"/>
-	<button font="SansSerifSmall" label="√ Wszystkie" label_selected="Wszystkie" name="check_all" width="115"/>
-	<button font="SansSerifSmall" label="Żadne" label_selected="Żadne" name="check_none" width="115"/>
+	<button font="SansSerifSmall" label="√ Wszystkie" label_selected="Wszystkie" name="check_all"/>
+	<button font="SansSerifSmall" label="Żadne" label_selected="Żadne" name="check_none"/>
 	<text name="newperms">
 		Nowe prawa zawartości
 	</text>
diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt
index fb65779eb7320a1866b4f9cb1756b7a8411a2bd5..fe64926da6c9cc03f47fe732788607ac83cc5f97 100644
--- a/indra/viewer_components/login/CMakeLists.txt
+++ b/indra/viewer_components/login/CMakeLists.txt
@@ -3,7 +3,9 @@
 project(login)
 
 include(00-Common)
-include(LLAddBuildTest)
+if(LL_TESTS)
+  include(LLAddBuildTest)
+endif(LL_TESTS)
 include(LLCommon)
 include(LLMath)
 include(LLXML)
@@ -43,14 +45,16 @@ target_link_libraries(lllogin
     ${PTH_LIBRARIES}
     )
 
-SET(lllogin_TEST_SOURCE_FILES
+if(LL_TESTS)
+  SET(lllogin_TEST_SOURCE_FILES
+      lllogin.cpp
+      )
+
+  set_source_files_properties(
     lllogin.cpp
+    PROPERTIES
+      LL_TEST_ADDITIONAL_LIBRARIES "${PTH_LIBRARIES}"
     )
 
-set_source_files_properties(
-  lllogin.cpp
-  PROPERTIES
-    LL_TEST_ADDITIONAL_LIBRARIES "${PTH_LIBRARIES}"
-  )
-
-LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
+  LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
+endif(LL_TESTS)