diff --git a/.hgtags b/.hgtags
index 8b1b58bc5e5600506c76cd47c7e257db182b238f..f761bdc1580b2dc69a2055f2a1c450f83f4fed28 100644
--- a/.hgtags
+++ b/.hgtags
@@ -23,3 +23,4 @@ d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo
 d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5
 d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0
 c6e6324f5be1401f077ad18a4a0f6b46451c2f7b last_sprint
+7076e22f9f43f479a4ea75eac447a36364bead5a beta_2.1.3
diff --git a/BuildParams b/BuildParams
index acc3904d82746a39f689b527c7e5e370698db5e6..898cb7bbd3df10da6e56f737dc7cae3ef24a9bbc 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
 
 # ========================================
@@ -84,6 +86,7 @@ brad-parabuild.build_server_tests = false
 
 cg_viewer-development_lenny.collect_metrics = true
 cg_viewer-development_lenny.show_changes_since = 4b140ce7839d
+cg_viewer-development_lenny.email = cg@lindenlab.com
 
 # ========================================
 # gooey
diff --git a/build.sh b/build.sh
index 88faf12473937fca67623312652b6b83fd9a4732..25ff0f368d3f9d67463b65ce268bfc57f709097d 100755
--- a/build.sh
+++ b/build.sh
@@ -284,6 +284,7 @@ then
       succeeded=$build_coverity
     else
       upload_item installer "$package" binary/octet-stream
+      upload_item quicklink "$package" binary/octet-stream
 
       # Upload crash reporter files.
       case "$last_built_variant" in
diff --git a/doc/contributions.txt b/doc/contributions.txt
index d58539dd71ec49d4be435ceafaca789bf5fc2b44..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,13 +61,17 @@ Aimee Trescothick
 Alejandro Rosenthal
 	VWR-1184
 Aleric Inglewood
+	SNOW-522
+	SNOW-764
 	VWR-10001
 	VWR-10759
 	VWR-10837
 	VWR-12691
 	VWR-13996
 	VWR-14426
+	SNOW-84
 	SNOW-766
+	STORM-163
 Ales Beaumont
 	VWR-9352
 	SNOW-240
@@ -165,6 +171,7 @@ Boroondas Gupte
 	SNOW-737
 	VWR-233
 	VWR-20583
+	VWR-20891
 	WEB-262
 Bulli Schumann
 	CT-218
@@ -381,6 +388,7 @@ Matthew Dowd
 	VWR-1761
 	VWR-2681
 McCabe Maxsted
+	SNOW-387
 	VWR-1318
 	VWR-4065
 	VWR-4826
@@ -549,6 +557,8 @@ Robin Cornelius
 	SNOW-514
 	SNOW-520
 	SNOW-585
+	SNOW-599
+	SNOW-747
 	VWR-2488
 	VWR-9557
 	VWR-11128
@@ -557,6 +567,7 @@ Robin Cornelius
 	VWR-12758
 	VWR-12763
 	VWR-12995
+	VWR-20911
 Ryozu Kojima
 	VWR-53
 	VWR-287
@@ -646,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
@@ -662,6 +677,8 @@ Thickbrick Sleaford
 	SNOW-421
 	SNOW-462
 	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/integration_tests/llui_libtest/llui_libtest.cpp b/indra/integration_tests/llui_libtest/llui_libtest.cpp
index 713b82509e7fa8f4e983df04939f4aaaed4b66ce..1f15b73182d9268e3985edb130f037d7bb89c36e 100644
--- a/indra/integration_tests/llui_libtest/llui_libtest.cpp
+++ b/indra/integration_tests/llui_libtest/llui_libtest.cpp
@@ -185,10 +185,9 @@ void export_test_floaters()
 		// Build a floater and output new attributes
 		LLXMLNodePtr output_node = new LLXMLNode();
 		LLFloater* floater = new LLFloater(LLSD());
-		LLUICtrlFactory::getInstance()->buildFloater(floater,
-													 filename,
-												//	 FALSE,	// don't open floater
-													 output_node);
+		floater->buildFromFile(	filename,
+								//	 FALSE,	// don't open floater
+								output_node);
 		std::string out_filename = xui_dir + filename;
 		std::string::size_type extension_pos = out_filename.rfind(".xml");
 		out_filename.resize(extension_pos);
diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.cpp b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
index b4921faeceb5af8989e7c5096d3b666ebc445f3d..0d0d9fbff61c0d69760497ee6636b43aba1bedd3 100644
--- a/indra/integration_tests/llui_libtest/llwidgetreg.cpp
+++ b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
@@ -78,7 +78,7 @@ void LLWidgetReg::initClass(bool register_widgets)
 		LLDefaultChildRegistry::Register<LLMultiSlider> multi_slider_bar("multi_slider_bar");
 		LLDefaultChildRegistry::Register<LLMultiSliderCtrl> multi_slider("multi_slider");
 		LLDefaultChildRegistry::Register<LLPanel> panel("panel", &LLPanel::fromXML);
-		LLDefaultChildRegistry::Register<LLLayoutStack> layout_stack("layout_stack", &LLLayoutStack::fromXML);
+		LLDefaultChildRegistry::Register<LLLayoutStack> layout_stack("layout_stack");
 		LLDefaultChildRegistry::Register<LLProgressBar> progress_bar("progress_bar");
 		LLDefaultChildRegistry::Register<LLRadioGroup> radio_group("radio_group");
 		LLDefaultChildRegistry::Register<LLSearchEditor> search_editor("search_editor");
diff --git a/indra/lib/python/indra/util/named_query.py b/indra/lib/python/indra/util/named_query.py
index 5c19368240afa08b8576f3f16ec01c4b738c5f76..6bf956107dec95dc92d042eab0920da463cea872 100644
--- a/indra/lib/python/indra/util/named_query.py
+++ b/indra/lib/python/indra/util/named_query.py
@@ -36,14 +36,6 @@
 import re
 import time
 
-#import sys # *TODO: remove. only used in testing.
-#import pprint # *TODO: remove. only used in testing.
-
-try:
-    set = set
-except NameError:
-    from sets import Set as set
-
 from indra.base import llsd
 from indra.base import config
 
@@ -195,8 +187,6 @@ def _convert_sql(self, sql):
         style. It also has to look for %:name% and :name% and
         ready them for use in LIKE statements"""
         if sql:
-            #print >>sys.stderr, "sql:",sql
-            
             # This first sub is to properly escape any % signs that
             # are meant to be literally passed through to mysql in the
             # query.  It leaves any %'s that are used for
@@ -408,7 +398,6 @@ def _construct_sql(self, params):
         # build the query from the options available and the params
         base_query = []
         base_query.append(self._base_query)
-        #print >>sys.stderr, "base_query:",base_query
         for opt, extra_where in self._options.items():
             if type(extra_where) in (dict, list, tuple):
                 if opt in params:
@@ -418,7 +407,6 @@ def _construct_sql(self, params):
                     base_query.append(extra_where)
         if self._query_suffix:
             base_query.append(self._query_suffix)
-        #print >>sys.stderr, "base_query:",base_query
         full_query = '\n'.join(base_query)
 
         # Go through the query and rewrite all of the ones with the
diff --git a/indra/lib/python/uuid.py b/indra/lib/python/uuid.py
index 48dac84377a22f12a1c9f91343c39b8751d3977f..0bc21a35f8bbff7a6c1a7debb8c949f01d340f13 100644
--- a/indra/lib/python/uuid.py
+++ b/indra/lib/python/uuid.py
@@ -446,8 +446,14 @@ def uuid1(node=None, clock_seq=None):
 
 def uuid3(namespace, name):
     """Generate a UUID from the MD5 hash of a namespace UUID and a name."""
-    import md5
-    hash = md5.md5(namespace.bytes + name).digest()
+    try:
+        # Python 2.6
+        from hashlib import md5
+    except ImportError:
+        # Python 2.5 and earlier
+        from md5 import new as md5
+        
+    hash = md5(namespace.bytes + name).digest()
     return UUID(bytes=hash[:16], version=3)
 
 def uuid4():
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index 8843acc8911e577ff854944de60c6912d34b34fc..1cc03bddb8ecfe665fa7a5bd51b1d1a5585cd062 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -97,6 +97,7 @@ void LLAudioEngine::setDefaults()
 	}
 
 	mMasterGain = 1.f;
+	mInternalGain = 0.f;
 	mNextWindUpdate = 0.f;
 
 	mStreamingAudioImpl = NULL;
@@ -247,15 +248,6 @@ void LLAudioEngine::idle(F32 max_decode_time)
 	// Primarily does position updating, cleanup of unused audio sources.
 	// Also does regeneration of the current priority of each audio source.
 
-	if (getMuted())
-	{
-		setInternalGain(0.f);
-	}
-	else
-	{
-		setInternalGain(getMasterGain());
-	}
-
 	S32 i;
 	for (i = 0; i < MAX_BUFFERS; i++)
 	{
@@ -284,6 +276,12 @@ void LLAudioEngine::idle(F32 max_decode_time)
 			continue;
 		}
 
+		if (sourcep->isMuted())
+		{
+			++iter;
+		  	continue;
+		}
+
 		if (!sourcep->getChannel() && sourcep->getCurrentBuffer())
 		{
 			// We could potentially play this sound if its priority is high enough.
@@ -336,9 +334,9 @@ void LLAudioEngine::idle(F32 max_decode_time)
 		// attached to each channel, since only those with active channels
 		// can have anything interesting happen with their queue? (Maybe not true)
 		LLAudioSource *sourcep = iter->second;
-		if (!sourcep->mQueuedDatap)
+		if (!sourcep->mQueuedDatap || sourcep->isMuted())
 		{
-			// Nothing queued, so we don't care.
+			// Muted, or nothing queued, so we don't care.
 			continue;
 		}
 
@@ -418,6 +416,10 @@ void LLAudioEngine::idle(F32 max_decode_time)
 	for (iter = mAllSources.begin(); iter != mAllSources.end(); ++iter)
 	{
 		LLAudioSource *sourcep = iter->second;
+		if (sourcep->isMuted())
+		{
+			continue;
+		}
 		if (sourcep->isSyncMaster())
 		{
 			if (sourcep->getPriority() > max_sm_priority)
@@ -691,15 +693,23 @@ bool LLAudioEngine::isWindEnabled()
 
 void LLAudioEngine::setMuted(bool muted)
 {
-	mMuted = muted;
+	if (muted != mMuted)
+	{
+		mMuted = muted;
+		setMasterGain(mMasterGain);
+	}
 	enableWind(!mMuted);
 }
 
-
 void LLAudioEngine::setMasterGain(const F32 gain)
 {
 	mMasterGain = gain;
-	setInternalGain(gain);
+	F32 internal_gain = getMuted() ? 0.f : gain;
+	if (internal_gain != mInternalGain)
+	{
+		mInternalGain = internal_gain;
+		setInternalGain(mInternalGain);
+	}
 }
 
 F32 LLAudioEngine::getMasterGain()
@@ -1243,13 +1253,14 @@ LLAudioSource::LLAudioSource(const LLUUID& id, const LLUUID& owner_id, const F32
 	mOwnerID(owner_id),
 	mPriority(0.f),
 	mGain(gain),
-	mType(type),
+	mSourceMuted(false),
 	mAmbient(false),
 	mLoop(false),
 	mSyncMaster(false),
 	mSyncSlave(false),
 	mQueueSounds(false),
 	mPlayedOnce(false),
+	mType(type),
 	mChannelp(NULL),
 	mCurrentDatap(NULL),
 	mQueuedDatap(NULL)
@@ -1301,6 +1312,10 @@ void LLAudioSource::updatePriority()
 	{
 		mPriority = 1.f;
 	}
+	else if (isMuted())
+	{
+		mPriority = 0.f;
+	}
 	else
 	{
 		// Priority is based on distance
@@ -1349,25 +1364,33 @@ bool LLAudioSource::setupChannel()
 
 bool LLAudioSource::play(const LLUUID &audio_uuid)
 {
+	// Special abuse of play(); don't play a sound, but kill it.
 	if (audio_uuid.isNull())
 	{
 		if (getChannel())
 		{
 			getChannel()->setSource(NULL);
 			setChannel(NULL);
-			addAudioData(NULL, true);
+			if (!isMuted())
+			{
+				mCurrentDatap = NULL;
+			}
 		}
+		return false;
 	}
+
 	// Reset our age timeout if someone attempts to play the source.
 	mAgeTimer.reset();
 
 	LLAudioData *adp = gAudiop->getAudioData(audio_uuid);
-
-	bool has_buffer = gAudiop->updateBufferForData(adp, audio_uuid);
-
-
 	addAudioData(adp);
 
+	if (isMuted())
+	{
+		return false;
+	}
+
+	bool has_buffer = gAudiop->updateBufferForData(adp, audio_uuid);
 	if (!has_buffer)
 	{
 		// Don't bother trying to set up a channel or anything, we don't have an audio buffer.
@@ -1392,10 +1415,11 @@ bool LLAudioSource::play(const LLUUID &audio_uuid)
 }
 
 
-bool LLAudioSource::isDone()
+bool LLAudioSource::isDone() const
 {
 	const F32 MAX_AGE = 60.f;
 	const F32 MAX_UNPLAYED_AGE = 15.f;
+	const F32 MAX_MUTED_AGE = 11.f;
 
 	if (isLoop())
 	{
@@ -1403,7 +1427,6 @@ bool LLAudioSource::isDone()
 		return false;
 	}
 
-
 	if (hasPendingPreloads())
 	{
 		return false;
@@ -1420,10 +1443,10 @@ bool LLAudioSource::isDone()
 	// This is a single-play source
 	if (!mChannelp)
 	{
-		if ((elapsed > MAX_UNPLAYED_AGE) || mPlayedOnce)
+		if ((elapsed > (mSourceMuted ? MAX_MUTED_AGE : MAX_UNPLAYED_AGE)) || mPlayedOnce)
 		{
 			// We don't have a channel assigned, and it's been
-			// over 5 seconds since we tried to play it.  Don't bother.
+			// over 15 seconds since we tried to play it.  Don't bother.
 			//llinfos << "No channel assigned, source is done" << llendl;
 			return true;
 		}
@@ -1449,7 +1472,7 @@ bool LLAudioSource::isDone()
 
 	if ((elapsed > MAX_UNPLAYED_AGE) || mPlayedOnce)
 	{
-		// The sound isn't playing back after 5 seconds or we're already done playing it, kill it.
+		// The sound isn't playing back after 15 seconds or we're already done playing it, kill it.
 		return true;
 	}
 
diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h
index 6a5000d7ed384b6f1e18fed902172753fc5d2a4b..30d24906357a724b2ab7b292c6fddfb2a54805a5 100644
--- a/indra/llaudio/llaudioengine.h
+++ b/indra/llaudio/llaudioengine.h
@@ -118,8 +118,8 @@ class LLAudioEngine
 	// Use these for temporarily muting the audio system.
 	// Does not change buffers, initialization, etc. but
 	// stops playing new sounds.
-	virtual void setMuted(bool muted);
-	virtual bool getMuted() const { return mMuted; }
+	void setMuted(bool muted);
+	bool getMuted() const { return mMuted; }
 #ifdef USE_PLUGIN_MEDIA
 	LLPluginClassMedia* initializeMedia(const std::string& media_type);
 #endif
@@ -239,6 +239,7 @@ class LLAudioEngine
 	LLAudioBuffer *mBuffers[MAX_BUFFERS];
 	
 	F32 mMasterGain;
+	F32 mInternalGain;			// Actual gain set; either mMasterGain or 0 when mMuted is true.
 	F32 mSecondaryGain[AUDIO_TYPE_COUNT];
 
 	F32 mNextWindUpdate;
@@ -303,7 +304,8 @@ class LLAudioSource
 	virtual void setGain(const F32 gain)							{ mGain = llclamp(gain, 0.f, 1.f); }
 
 	const LLUUID &getID() const		{ return mID; }
-	bool isDone();
+	bool isDone() const;
+	bool isMuted() const { return mSourceMuted; }
 
 	LLAudioData *getCurrentData();
 	LLAudioData *getQueuedData();
@@ -325,6 +327,7 @@ class LLAudioSource
 	LLUUID			mOwnerID;	// owner of the object playing the sound
 	F32				mPriority;
 	F32				mGain;
+	bool			mSourceMuted;
 	bool			mAmbient;
 	bool			mLoop;
 	bool			mSyncMaster;
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 2a036df06e737c718e63beeb4e77c7128ecfe16b..858e483036448e23a84ca981bba6dd132f26621b 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -157,6 +157,7 @@ set(llcommon_HEADER_FILES
     lleventemitter.h
     llextendedstatus.h
     llfasttimer.h
+    llfasttimer_class.h
     llfile.h
     llfindlocale.h
     llfixedbuffer.h
diff --git a/indra/llcommon/llfasttimer_class.cpp b/indra/llcommon/llfasttimer_class.cpp
index bc1ae37c2b5ac2fb260b957580118ded547d64ca..c45921cdec852503f547bce92af020100286a510 100644
--- a/indra/llcommon/llfasttimer_class.cpp
+++ b/indra/llcommon/llfasttimer_class.cpp
@@ -469,9 +469,9 @@ void LLFastTimer::NamedTimer::accumulateTimings()
 			int hidx = cur_frame % HISTORY_NUM;
 
 			timerp->mCountHistory[hidx] = timerp->mTotalTimeCounter;
-			timerp->mCountAverage = (timerp->mCountAverage * cur_frame + timerp->mTotalTimeCounter) / (cur_frame+1);
+			timerp->mCountAverage = ((U64)timerp->mCountAverage * cur_frame + timerp->mTotalTimeCounter) / (cur_frame+1);
 			timerp->mCallHistory[hidx] = timerp->getFrameState().mCalls;
-			timerp->mCallAverage = (timerp->mCallAverage * cur_frame + timerp->getFrameState().mCalls) / (cur_frame+1);
+			timerp->mCallAverage = ((U64)timerp->mCallAverage * cur_frame + timerp->getFrameState().mCalls) / (cur_frame+1);
 		}
 	}
 }
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 92d9e1204a218562f45b6e18bc77adae7dc427d8..bd65ce85738ec6e14193b3f5eed0ba154ea38828 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -28,8 +28,8 @@
 #define LL_LLVERSIONVIEWER_H
 
 const S32 LL_VERSION_MAJOR = 2;
-const S32 LL_VERSION_MINOR = 1;
-const S32 LL_VERSION_PATCH = 2;
+const S32 LL_VERSION_MINOR = 2;
+const S32 LL_VERSION_PATCH = 1;
 const S32 LL_VERSION_BUILD = 0;
 
 const char * const LL_CHANNEL = "Second Life Developer";
diff --git a/indra/llcommon/stdenums.h b/indra/llcommon/stdenums.h
index 5931ba67c2414791ab57910ce78a6d623a1edfbe..9f86de124e8bc17d5e23b22adce9a3491235d1c6 100644
--- a/indra/llcommon/stdenums.h
+++ b/indra/llcommon/stdenums.h
@@ -113,8 +113,8 @@ enum EObjectPropertiesExtraID
 enum EAddPosition
 {
 	ADD_TOP,
-	ADD_SORTED,
-	ADD_BOTTOM
+	ADD_BOTTOM,
+	ADD_DEFAULT
 };
 
 enum LLGroupChange
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 9ce9ee2101dbd701b64664fb170949bdc5ad9b87..69ed0fb09c1406ab8fa7c16d27f3d5f7ed992434 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -74,6 +74,7 @@ bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::s
 	
 	// Queue up the media init message -- it will be sent after all the currently queued messages.
 	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init");
+	message.setValue("target", mTarget);
 	sendMessage(message);
 	
 	mPlugin->init(launcher_filename, plugin_filename, debug);
@@ -143,7 +144,7 @@ void LLPluginClassMedia::reset()
 	mProgressPercent = 0;	
 	mClickURL.clear();
 	mClickTarget.clear();
-	mClickTargetType = TARGET_NONE;
+	mClickUUID.clear();
 	
 	// media_time class
 	mCurrentTime = 0.0f;
@@ -669,6 +670,18 @@ F64 LLPluginClassMedia::getCPUUsage()
 	return result;
 }
 
+void LLPluginClassMedia::sendPickFileResponse(const std::string &file)
+{
+	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file_response");
+	message.setValue("file", file);
+	if(mPlugin->isBlocked())
+	{
+		// If the plugin sent a blocking pick-file request, the response should unblock it.
+		message.setValueBoolean("blocking_response", true);
+	}
+	sendMessage(message);
+}
+
 void LLPluginClassMedia::cut()
 {
 	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_cut");
@@ -715,24 +728,9 @@ void LLPluginClassMedia::setJavascriptEnabled(const bool enabled)
 	sendMessage(message);
 }
 
-LLPluginClassMedia::ETargetType getTargetTypeFromLLQtWebkit(int target_type)
+void LLPluginClassMedia::setTarget(const std::string &target)
 {
-	// convert a LinkTargetType value from llqtwebkit to an ETargetType
-	// so that we don't expose the llqtwebkit header in viewer code
-	switch (target_type)
-	{
-	case LLQtWebKit::LTT_TARGET_NONE:
-		return LLPluginClassMedia::TARGET_NONE;
-
-	case LLQtWebKit::LTT_TARGET_BLANK:
-		return LLPluginClassMedia::TARGET_BLANK;
-
-	case LLQtWebKit::LTT_TARGET_EXTERNAL:
-		return LLPluginClassMedia::TARGET_EXTERNAL;
-
-	default:
-		return LLPluginClassMedia::TARGET_OTHER;
-	}
+	mTarget = target;
 }
 
 /* virtual */ 
@@ -945,6 +943,10 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
 			mMediaName = message.getValue("name");
 			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAME_CHANGED);
 		}
+		else if(message_name == "pick_file")
+		{
+			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PICK_FILE_REQUEST);
+		}
 		else
 		{
 			LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
@@ -987,15 +989,13 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
 		{
 			mClickURL = message.getValue("uri");
 			mClickTarget = message.getValue("target");
-			U32 target_type = message.getValueU32("target_type");
-			mClickTargetType = ::getTargetTypeFromLLQtWebkit(target_type);
+			mClickUUID = message.getValue("uuid");
 			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_HREF);
 		}
 		else if(message_name == "click_nofollow")
 		{
 			mClickURL = message.getValue("uri");
 			mClickTarget.clear();
-			mClickTargetType = TARGET_NONE;
 			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW);
 		}
 		else if(message_name == "cookie_set")
@@ -1005,6 +1005,20 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
 				mOwner->handleCookieSet(this, message.getValue("cookie"));
 			}
 		}
+		else if(message_name == "close_request")
+		{
+			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLOSE_REQUEST);
+		}
+		else if(message_name == "geometry_change")
+		{
+			mClickUUID = message.getValue("uuid");
+			mGeometryX = message.getValueS32("x");
+			mGeometryY = message.getValueS32("y");
+			mGeometryWidth = message.getValueS32("width");
+			mGeometryHeight = message.getValueS32("height");
+				
+			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_GEOMETRY_CHANGE);
+		}
 		else
 		{
 			LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
@@ -1159,6 +1173,25 @@ void LLPluginClassMedia::setBrowserUserAgent(const std::string& user_agent)
 	sendMessage(message);
 }
 
+void LLPluginClassMedia::proxyWindowOpened(const std::string &target, const std::string &uuid)
+{
+	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_opened");
+
+	message.setValue("target", target);
+	message.setValue("uuid", uuid);
+
+	sendMessage(message);
+}
+
+void LLPluginClassMedia::proxyWindowClosed(const std::string &uuid)
+{
+	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_closed");
+
+	message.setValue("uuid", uuid);
+
+	sendMessage(message);
+}
+
 void LLPluginClassMedia::crashPlugin()
 {
 	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "crash");
diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h
index ee53f3a4da30bbb3215638b7a1bfc63e95ea10de..9cb67fe9091b0f018d0cc19504add6e2caea6a86 100644
--- a/indra/llplugin/llpluginclassmedia.h
+++ b/indra/llplugin/llpluginclassmedia.h
@@ -156,6 +156,8 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
 	void setLowPrioritySizeLimit(int size);
 	
 	F64 getCPUUsage();
+	
+	void sendPickFileResponse(const std::string &file);
 
 	// Valid after a MEDIA_EVENT_CURSOR_CHANGED event
 	std::string getCursorName() const { return mCursorName; };
@@ -176,7 +178,8 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
 	void	setLanguageCode(const std::string &language_code);
 	void	setPluginsEnabled(const bool enabled);
 	void	setJavascriptEnabled(const bool enabled);
-		
+	void	setTarget(const std::string &target);
+	
 	///////////////////////////////////
 	// media browser class functions
 	bool pluginSupportsMediaBrowser(void);
@@ -193,6 +196,8 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
 	void browse_back();
 	void set_status_redirect(int code, const std::string &url);
 	void setBrowserUserAgent(const std::string& user_agent);
+	void proxyWindowOpened(const std::string &target, const std::string &uuid);
+	void proxyWindowClosed(const std::string &uuid);
 	
 	// This is valid after MEDIA_EVENT_NAVIGATE_BEGIN or MEDIA_EVENT_NAVIGATE_COMPLETE
 	std::string	getNavigateURI() const { return mNavigateURI; };
@@ -218,16 +223,14 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
 	// This is valid after MEDIA_EVENT_CLICK_LINK_HREF
 	std::string getClickTarget() const { return mClickTarget; };
 
-	typedef enum 
-	{
-		TARGET_NONE,        // empty href target string
-		TARGET_BLANK,       // target to open link in user's preferred browser
-		TARGET_EXTERNAL,    // target to open link in external browser
-		TARGET_OTHER        // nonempty and unsupported target type
-	}ETargetType;
-
-	// This is valid after MEDIA_EVENT_CLICK_LINK_HREF
-	ETargetType getClickTargetType() const { return mClickTargetType; };
+	// This is valid during MEDIA_EVENT_CLICK_LINK_HREF and MEDIA_EVENT_GEOMETRY_CHANGE
+	std::string getClickUUID() const { return mClickUUID; };
+	
+	// These are valid during MEDIA_EVENT_GEOMETRY_CHANGE
+	S32 getGeometryX() const { return mGeometryX; };
+	S32 getGeometryY() const { return mGeometryY; };
+	S32 getGeometryWidth() const { return mGeometryWidth; };
+	S32 getGeometryHeight() const { return mGeometryHeight; };
 
 	std::string getMediaName() const { return mMediaName; };
 	std::string getMediaDescription() const { return mMediaDescription; };
@@ -347,6 +350,8 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
 	
 	LLColor4		mBackgroundColor;
 	
+	std::string		mTarget;
+	
 	/////////////////////////////////////////
 	// media_browser class
 	std::string		mNavigateURI;
@@ -359,7 +364,11 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
 	std::string		mLocation;
 	std::string		mClickURL;
 	std::string		mClickTarget;
-	ETargetType     mClickTargetType;
+	std::string		mClickUUID;
+	S32				mGeometryX;
+	S32				mGeometryY;
+	S32				mGeometryWidth;
+	S32				mGeometryHeight;
 	
 	/////////////////////////////////////////
 	// media_time class
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index b48a5ca4ac856bfbfc56fe1d825bf4be4bee99f1..c9efff216c076292fc3237c9de81962efc563c11 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -54,6 +54,9 @@ class LLPluginClassMediaOwner
 		MEDIA_EVENT_LOCATION_CHANGED,		// browser location (URL) has changed (maybe due to internal navagation/frames/etc)
 		MEDIA_EVENT_CLICK_LINK_HREF,		// I'm not entirely sure what the semantics of these two are
 		MEDIA_EVENT_CLICK_LINK_NOFOLLOW,
+		MEDIA_EVENT_CLOSE_REQUEST,			// The plugin requested its window be closed (currently hooked up to javascript window.close in webkit)
+		MEDIA_EVENT_PICK_FILE_REQUEST,		// The plugin wants the user to pick a file
+		MEDIA_EVENT_GEOMETRY_CHANGE,		// The plugin requested its window geometry be changed (per the javascript window interface)
 		
 		MEDIA_EVENT_PLUGIN_FAILED_LAUNCH,	// The plugin failed to launch 
 		MEDIA_EVENT_PLUGIN_FAILED			// The plugin died unexpectedly
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/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 386bb987f9beb250b9e65cbfefbf13462712cd67..13008292f6ae672907dc60d2097d705390e644a4 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -977,37 +977,43 @@ LLFontGL::VAlign LLFontGL::vAlignFromName(const std::string& name)
 //static
 LLFontGL* LLFontGL::getFontMonospace()
 {
-	return getFont(LLFontDescriptor("Monospace","Monospace",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("Monospace","Monospace",0));
+	return fontp;
 }
 
 //static
 LLFontGL* LLFontGL::getFontSansSerifSmall()
 {
-	return getFont(LLFontDescriptor("SansSerif","Small",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Small",0));
+	return fontp;
 }
 
 //static
 LLFontGL* LLFontGL::getFontSansSerif()
 {
-	return getFont(LLFontDescriptor("SansSerif","Medium",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Medium",0));
+	return fontp;
 }
 
 //static
 LLFontGL* LLFontGL::getFontSansSerifBig()
 {
-	return getFont(LLFontDescriptor("SansSerif","Large",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Large",0));
+	return fontp;
 }
 
 //static 
 LLFontGL* LLFontGL::getFontSansSerifHuge()
 {
-	return getFont(LLFontDescriptor("SansSerif","Huge",0));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Large",0));
+	return fontp;
 }
 
 //static 
 LLFontGL* LLFontGL::getFontSansSerifBold()
 {
-	return getFont(LLFontDescriptor("SansSerif","Medium",BOLD));
+	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Medium",BOLD));
+	return fontp;
 }
 
 //static
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 8e78a5fefd0eed719b999813689f4da29d6bbf3a..e98201ea63ef8e70d50b9278c76e65e695e5be1d 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -158,6 +158,7 @@ set(llui_HEADER_FILES
     llnotifications.h
     llnotificationslistener.h
     llnotificationsutil.h
+    llnotificationtemplate.h
     llpanel.h
     llprogressbar.h
     llradiogroup.h
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index f9ffaaa6462cd8a106c68f661853ff8e972da6dd..d636161bafe65513bfaf0388b706d66b3ecee5fd 100644
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -83,7 +83,7 @@ LLAccordionCtrl::LLAccordionCtrl() : LLPanel()
 
 	mSingleExpansion = false;
 	mFitParent = false;
-	LLUICtrlFactory::getInstance()->buildPanel(this, "accordion_parent.xml");	
+	buildFromFile( "accordion_parent.xml");	
 }
 
 //---------------------------------------------------------------------------------
diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h
index d6ac8cbc8fac67b02f57d6996c335bcc645d582a..dddaa581e64a95d86be3f271825ff073983e109b 100644
--- a/indra/llui/llaccordionctrltab.h
+++ b/indra/llui/llaccordionctrltab.h
@@ -85,10 +85,10 @@ class LLAccordionCtrlTab : public LLUICtrl
 
 		Optional<bool>			selection_enabled;
 
-		Optional<S32>			padding_left;
-		Optional<S32>			padding_right;
-		Optional<S32>			padding_top;
-		Optional<S32>			padding_bottom;
+		Optional<S32>			padding_left,
+								padding_right,
+								padding_top,
+								padding_bottom;
 
 		Params();
 	};
@@ -170,7 +170,7 @@ class LLAccordionCtrlTab : public LLUICtrl
 	virtual BOOL handleScrollWheel( S32 x, S32 y, S32 clicks );
 
 
-	virtual bool addChild(LLView* child, S32 tab_group);
+	virtual bool addChild(LLView* child, S32 tab_group = 0 );
 
 	bool isExpanded() const { return mDisplayChildren; }
 
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index d51276bf269f66da7d3539569dc13db709b84c03..f26711065a2c92063cf08bca4db64801135f62ae 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -114,7 +114,6 @@ LLButton::LLButton(const LLButton::Params& p)
 	mFlashing( FALSE ),
 	mCurGlowStrength(0.f),
 	mNeedsHighlight(FALSE),
-	mMouseOver(false),
 	mUnselectedLabel(p.label()),
 	mSelectedLabel(p.label_selected()),
 	mGLFont(p.font),
@@ -499,19 +498,14 @@ void LLButton::onMouseEnter(S32 x, S32 y, MASK mask)
 	LLUICtrl::onMouseEnter(x, y, mask);
 
 	if (isInEnabledChain())
-	{
 		mNeedsHighlight = TRUE;
 	}
 
-	mMouseOver = true;
-}
-
 void LLButton::onMouseLeave(S32 x, S32 y, MASK mask)
 {
 	LLUICtrl::onMouseLeave(x, y, mask);
 
 	mNeedsHighlight = FALSE;
-	mMouseOver = true;
 }
 
 void LLButton::setHighlight(bool b)
@@ -564,11 +558,19 @@ void LLButton::draw()
 		pressed_by_keyboard = gKeyboard->getKeyDown(' ') || (mCommitOnReturn && gKeyboard->getKeyDown(KEY_RETURN));
 	}
 
-	// Unselected image assignments
+	bool mouse_pressed_and_over = false;
+	if (hasMouseCapture())
+	{
+		S32 local_mouse_x ;
+		S32 local_mouse_y;
+		LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
+		mouse_pressed_and_over = pointInView(local_mouse_x, local_mouse_y);
+	}
+
 	bool enabled = isInEnabledChain();
 
 	bool pressed = pressed_by_keyboard 
-					|| (hasMouseCapture() && mMouseOver)
+					|| mouse_pressed_and_over
 					|| mForcePressedState;
 	bool selected = getToggleState();
 	
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index d87ceb7c422fe1a22931ec0ada2ee4541a27f2ab..2d5fefa78c89fa4ac2b193c317d70a50a2b67a57 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -350,7 +350,6 @@ class LLButton
 	BOOL						mCommitOnReturn;
 	BOOL						mFadeWhenDisabled;
 	bool						mForcePressedState;
-	bool						mMouseOver;
 
 	LLFrameTimer				mFlashingTimer;
 };
diff --git a/indra/llui/llcheckboxctrl.cpp b/indra/llui/llcheckboxctrl.cpp
index cbc8f12472be7dc81a421998c304b858d8afeb90..bbd8db26454d862ab672088ef5363b585e2a8592 100644
--- a/indra/llui/llcheckboxctrl.cpp
+++ b/indra/llui/llcheckboxctrl.cpp
@@ -50,9 +50,7 @@ template class LLCheckBoxCtrl* LLView::getChild<class LLCheckBoxCtrl>(
 	const std::string& name, BOOL recurse) const;
 
 LLCheckBoxCtrl::Params::Params()
-:	text_enabled_color("text_enabled_color"),
-	text_disabled_color("text_disabled_color"),
-	initial_value("initial_value", false),
+:	initial_value("initial_value", false),
 	label_text("label_text"),
 	check_button("check_button"),
 	radio_style("radio_style")
@@ -61,8 +59,8 @@ LLCheckBoxCtrl::Params::Params()
 
 LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p)
 :	LLUICtrl(p),
-	mTextEnabledColor(p.text_enabled_color()),
-	mTextDisabledColor(p.text_disabled_color()),
+	mTextEnabledColor(p.label_text.text_color()),
+	mTextDisabledColor(p.label_text.text_readonly_color()),
 	mFont(p.font())
 {
 	mViewModel->setValue(LLSD(p.initial_value));
@@ -89,7 +87,6 @@ LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p)
 	{
 		tbparams.font(p.font);
 	}
-	tbparams.text_color( p.enabled() ? p.text_enabled_color() : p.text_disabled_color() );
 	mLabel = LLUICtrlFactory::create<LLTextBox> (tbparams);
 	addChild(mLabel);
 
diff --git a/indra/llui/llcheckboxctrl.h b/indra/llui/llcheckboxctrl.h
index 01470882804bf1a77bcdc1a3abac573d9a64faae..67d8091a97f1cc66290ee8c6d612ae2f2c9785e0 100644
--- a/indra/llui/llcheckboxctrl.h
+++ b/indra/llui/llcheckboxctrl.h
@@ -52,8 +52,6 @@ class LLCheckBoxCtrl
 	struct Params 
 	:	public LLInitParam::Block<Params, LLUICtrl::Params>
 	{
-		Optional<LLUIColor>		text_enabled_color;
-		Optional<LLUIColor>		text_disabled_color;
 		Optional<bool>			initial_value;	// override LLUICtrl initial_value
 
 		Optional<LLTextBox::Params> label_text;
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index 910bab9a97f2bcd268ed3bcb4a225e212d2a610f..edd2cd340b222ff58aff7108a38605f1483f0464 100644
--- a/indra/llui/llcombobox.cpp
+++ b/indra/llui/llcombobox.cpp
@@ -139,8 +139,8 @@ LLComboBox::LLComboBox(const LLComboBox::Params& p)
 	// Grab the mouse-up event and make sure the button state is correct
 	mList->setMouseUpCallback(boost::bind(&LLComboBox::onListMouseUp, this));
 
-	for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin();
-		it != p.items().end();
+	for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items.begin();
+		it != p.items.end();
 		++it)
 	{
 		LLScrollListItem::Params item_params = *it;
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index eb5d7a6b6ae40d9875640a66a4aa0f051744bc30..cae59754cbf62a570df27bc2cf4acc67d86b8643 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -36,6 +36,7 @@
 #include "lluictrlfactory.h"
 #include "llbutton.h"
 #include "llcheckboxctrl.h"
+#include "lldir.h"
 #include "lldraghandle.h"
 #include "llfloaterreg.h"
 #include "llfocusmgr.h"
@@ -2815,7 +2816,8 @@ LLFastTimer::DeclareTimer POST_BUILD("Floater Post Build");
 bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node)
 {
 	Params params(LLUICtrlFactory::getDefaultParams<LLFloater>());
-	LLXUIParser::instance().readXUI(node, params, filename); // *TODO: Error checking
+	LLXUIParser parser;
+	parser.readXUI(node, params, filename); // *TODO: Error checking
 
 	if (output_node)
 	{
@@ -2823,8 +2825,7 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str
 		setupParamsForExport(output_params, parent);
         Params default_params(LLUICtrlFactory::getDefaultParams<LLFloater>());
 		output_node->setName(node->getName()->mString);
-		LLXUIParser::instance().writeXUI(
-			output_node, output_params, &default_params);
+		parser.writeXUI(output_node, output_params, &default_params);
 	}
 
 	// Default floater position to top-left corner of screen
@@ -2919,3 +2920,64 @@ bool LLFloater::isVisible(const LLFloater* floater)
 {
     return floater && floater->getVisible();
 }
+
+static LLFastTimer::DeclareTimer FTM_BUILD_FLOATERS("Build Floaters");
+
+bool LLFloater::buildFromFile(const std::string& filename, LLXMLNodePtr output_node)
+{
+	LLFastTimer timer(FTM_BUILD_FLOATERS);
+	LLXMLNodePtr root;
+
+	//if exporting, only load the language being exported, 
+	//instead of layering localized version on top of english
+	if (output_node)
+	{
+		if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
+		{
+			llwarns << "Couldn't parse floater from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
+			return false;
+		}
+	}
+	else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
+	{
+		llwarns << "Couldn't parse floater from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
+		return false;
+	}
+	
+	// root must be called floater
+	if( !(root->hasName("floater") || root->hasName("multi_floater")) )
+	{
+		llwarns << "Root node should be named floater in: " << filename << llendl;
+		return false;
+	}
+	
+	bool res = true;
+	
+	lldebugs << "Building floater " << filename << llendl;
+	LLUICtrlFactory::instance().pushFileName(filename);
+	{
+		if (!getFactoryMap().empty())
+		{
+			LLPanel::sFactoryStack.push_front(&getFactoryMap());
+		}
+
+		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
+		getCommitCallbackRegistrar().pushScope();
+		getEnableCallbackRegistrar().pushScope();
+		
+		res = initFloaterXML(root, getParent(), filename, output_node);
+
+		setXMLFilename(filename);
+		
+		getCommitCallbackRegistrar().popScope();
+		getEnableCallbackRegistrar().popScope();
+		
+		if (!getFactoryMap().empty())
+		{
+			LLPanel::sFactoryStack.pop_front();
+		}
+	}
+	LLUICtrlFactory::instance().popFileName();
+	
+	return res;
+}
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 5ecf515cf9268965c50349bea2c635faeee80ff2..c02587d9d80db13e8539a72b58e765cf0dc709bb 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -141,6 +141,7 @@ friend class LLMultiFloater;
 
 	// Don't export top/left for rect, only height/width
 	static void setupParamsForExport(Params& p, LLView* parent);
+	bool buildFromFile(const std::string &filename, LLXMLNodePtr output_node = NULL);
 
 	void initFromParams(const LLFloater::Params& p);
 	bool initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node = NULL);
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 4720ebb82255b3411fe16229b7aecf83da4eff1b..4677d535db3698eced8a32df4c944d1dfb6394ba 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -121,7 +121,7 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
 
 				res = build_func(key);
 				
-				bool success = LLUICtrlFactory::getInstance()->buildFloater(res, xui_file, NULL);
+				bool success = res->buildFromFile(xui_file, NULL);
 				if (!success)
 				{
 					llwarns << "Failed to build floater type: '" << name << "'." << llendl;
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/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 0ff7557ead620c4cf002eeeace15ff68d02a5f23..940c7e7e1863837320166e3bbf9fc7b31cc3015a 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -35,95 +35,66 @@
 #include "llresizebar.h"
 #include "llcriticaldamp.h"
 
-static LLDefaultChildRegistry::Register<LLLayoutStack> register_layout_stack("layout_stack", &LLLayoutStack::fromXML);
-
+static LLDefaultChildRegistry::Register<LLLayoutStack> register_layout_stack("layout_stack");
+static LLLayoutStack::LayoutStackRegistry::Register<LLLayoutPanel> register_layout_panel("layout_panel");
 
 //
-// LLLayoutStack
+// LLLayoutPanel
 //
-struct LLLayoutStack::LayoutPanel
-{
-	LayoutPanel(LLPanel* panelp, ELayoutOrientation orientation, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize)	:	mPanel(panelp), 
-		mMinWidth(min_width), 
-		mMinHeight(min_height),
-		mMaxWidth(max_width), 
-		mMaxHeight(max_height),
-		mAutoResize(auto_resize),
-		mUserResize(user_resize),
-		mOrientation(orientation),
+LLLayoutPanel::LLLayoutPanel(const Params& p)	
+:	LLPanel(p),
+ 	mMinDim(p.min_dim), 
+ 	mMaxDim(p.max_dim), 
+ 	mAutoResize(p.auto_resize),
+ 	mUserResize(p.user_resize),
 		mCollapsed(FALSE),
 		mCollapseAmt(0.f),
 		mVisibleAmt(1.f), // default to fully visible
 		mResizeBar(NULL) 
 	{
-		LLResizeBar::Side side = (orientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
-		LLRect resize_bar_rect = panelp->getRect();
-
-		S32 min_dim;
-		if (orientation == HORIZONTAL)
+	// panels initialized as hidden should not start out partially visible
+	if (!getVisible())
 		{
-			min_dim = mMinHeight;
+		mVisibleAmt = 0.f;
 		}
-		else
-		{
-			min_dim = mMinWidth;
-		}
-		LLResizeBar::Params p;
-		p.name("resize");
-			p.resizing_view(mPanel);
-		p.min_size(min_dim);
-		p.side(side);
-		p.snapping_enabled(false);
-		mResizeBar = LLUICtrlFactory::create<LLResizeBar>(p);
-		// panels initialized as hidden should not start out partially visible
-		if (!mPanel->getVisible())
-		{
-			mVisibleAmt = 0.f;
 		}
+
+void LLLayoutPanel::initFromParams(const Params& p)
+		{
+	LLPanel::initFromParams(p);
+	setFollowsNone();
 	}
 
-	~LayoutPanel()
+
+LLLayoutPanel::~LLLayoutPanel()
 	{
 		// probably not necessary, but...
 		delete mResizeBar;
 		mResizeBar = NULL;
 	}
 	
-	F32 getCollapseFactor()
+F32 LLLayoutPanel::getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation)
 	{
-		if (mOrientation == HORIZONTAL)
+	if (orientation == LLLayoutStack::HORIZONTAL)
 		{
 			F32 collapse_amt = 
-				clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinWidth / (F32)llmax(1, mPanel->getRect().getWidth()));
+			clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinDim / (F32)llmax(1, getRect().getWidth()));
 			return mVisibleAmt * collapse_amt;
 		}
 		else
 	{
 			F32 collapse_amt = 
-				clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)mMinHeight / (F32)llmax(1, mPanel->getRect().getHeight())));
+			clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)mMinDim / (F32)llmax(1, getRect().getHeight())));
 			return mVisibleAmt * collapse_amt;
 		}
 	}
 
-	LLPanel* mPanel;
-	S32 mMinWidth;
-	S32 mMinHeight;
-
-	// mMaxWidth & mMaxHeight are added to make configurable max width of the nearby chat bar. EXT-5589
-	// they are not processed by LLLayoutStack but they can be if necessary
-	S32 mMaxWidth;
-	S32 mMaxHeight;
-	BOOL mAutoResize;
-	BOOL mUserResize;
-	BOOL mCollapsed;
-	LLResizeBar* mResizeBar;
-	ELayoutOrientation mOrientation;
-	F32 mVisibleAmt;
-	F32 mCollapseAmt;
-};
+//
+// LLLayoutStack
+//
 
 LLLayoutStack::Params::Params()
-:	orientation("orientation", std::string("vertical")),
+:	orientation("orientation"),
 	animate("animate", true),
 	clip("clip", true),
 	border_size("border_size", LLCachedControl<S32>(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0))
@@ -157,18 +128,18 @@ void LLLayoutStack::draw()
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
 		// clip to layout rectangle, not bounding rectangle
-		LLRect clip_rect = (*panel_it)->mPanel->getRect();
+		LLRect clip_rect = (*panel_it)->getRect();
 		// scale clipping rectangle by visible amount
 		if (mOrientation == HORIZONTAL)
 		{
-			clip_rect.mRight = clip_rect.mLeft + llround((F32)clip_rect.getWidth() * (*panel_it)->getCollapseFactor());
+			clip_rect.mRight = clip_rect.mLeft + llround((F32)clip_rect.getWidth() * (*panel_it)->getCollapseFactor(mOrientation));
 		}
 		else
 		{
-			clip_rect.mBottom = clip_rect.mTop - llround((F32)clip_rect.getHeight() * (*panel_it)->getCollapseFactor());
+			clip_rect.mBottom = clip_rect.mTop - llround((F32)clip_rect.getHeight() * (*panel_it)->getCollapseFactor(mOrientation));
 		}
 
-		LLPanel* panelp = (*panel_it)->mPanel;
+		LLPanel* panelp = (*panel_it);
 
 		LLLocalClipRect clip(clip_rect, mClip);
 		// only force drawing invisible children if visible amount is non-zero
@@ -179,7 +150,7 @@ void LLLayoutStack::draw()
 
 void LLLayoutStack::removeChild(LLView* view)
 {
-	LayoutPanel* embedded_panelp = findEmbeddedPanel(dynamic_cast<LLPanel*>(view));
+	LLLayoutPanel* embedded_panelp = findEmbeddedPanel(dynamic_cast<LLPanel*>(view));
 
 	if (embedded_panelp)
 	{
@@ -200,149 +171,16 @@ BOOL LLLayoutStack::postBuild()
 	return TRUE;
 }
 
-static void get_attribute_s32_and_write(LLXMLNodePtr node,
-										const char* name,
-										S32 *value,
-										S32 default_value,
-										LLXMLNodePtr output_child)
-{
-	BOOL has_attr = node->getAttributeS32(name, *value);
-	if (has_attr && *value != default_value && output_child)
-	{
-		// create an attribute child node
-		LLXMLNodePtr child_attr = output_child->createChild(name, TRUE);
-		child_attr->setIntValue(*value);
-	}
-}
-
-static void get_attribute_bool_and_write(LLXMLNodePtr node,
-										const char* name,
-										BOOL *value,
-										BOOL default_value,
-										LLXMLNodePtr output_child)
-{
-	BOOL has_attr = node->getAttributeBOOL(name, *value);
-	if (has_attr && *value != default_value && output_child)
-	{
-		LLXMLNodePtr child_attr = output_child->createChild(name, TRUE);
-		child_attr->setBoolValue(*value);
-	}
-}
-//static 
-LLView* LLLayoutStack::fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node)
-{
-	LLLayoutStack::Params p(LLUICtrlFactory::getDefaultParams<LLLayoutStack>());
-	LLXUIParser::instance().readXUI(node, p, LLUICtrlFactory::getInstance()->getCurFileName());
-
-	// Export must happen before setupParams() mungles rectangles and before
-	// this item gets added to parent (otherwise screws up last_child_rect
-	// logic). JC
-	if (output_node)
-	{
-		Params output_params(p);
-		setupParamsForExport(output_params, parent);
-		LLLayoutStack::Params default_params(LLUICtrlFactory::getDefaultParams<LLLayoutStack>());
-		output_node->setName(node->getName()->mString);
-		LLXUIParser::instance().writeXUI(
-			output_node, output_params, &default_params);
-	}
-
-	p.from_xui = true;
-	applyXUILayout(p, parent);
-	LLLayoutStack* layout_stackp = LLUICtrlFactory::create<LLLayoutStack>(p);
-
-	if (parent && layout_stackp)
-	{
-		S32 tab_group = p.tab_group.isProvided() ? p.tab_group() : parent->getLastTabGroup();
-
-		parent->addChild(layout_stackp, tab_group);
-	}
-
-	for (LLXMLNodePtr child_node = node->getFirstChild(); child_node.notNull(); child_node = child_node->getNextSibling())
-	{
-		const S32 DEFAULT_MIN_WIDTH = 0;
-		const S32 DEFAULT_MIN_HEIGHT = 0;
-		const S32 DEFAULT_MAX_WIDTH = S32_MAX;
-		const S32 DEFAULT_MAX_HEIGHT = S32_MAX;
-		const BOOL DEFAULT_AUTO_RESIZE = TRUE;
-
-		S32 min_width = DEFAULT_MIN_WIDTH;
-		S32 min_height = DEFAULT_MIN_HEIGHT;
-		S32 max_width = DEFAULT_MAX_WIDTH;
-		S32 max_height = DEFAULT_MAX_HEIGHT;
-		BOOL auto_resize = DEFAULT_AUTO_RESIZE;
-
-		LLXMLNodePtr output_child;
-		if (output_node) 
+bool LLLayoutStack::addChild(LLView* child, S32 tab_group)
 		{
-			output_child = output_node->createChild("", FALSE);
-		}
-
-		// Layout stack allows child nodes to acquire additional attributes,
-		// such as "min_width" in:  <button label="Foo" min_width="100"/>
-		// If these attributes exist and have non-default values, write them
-		// to the output node.
-		get_attribute_s32_and_write(child_node, "min_width", &min_width,
-			DEFAULT_MIN_WIDTH, output_child);
-		get_attribute_s32_and_write(child_node, "min_height", &min_height,
-			DEFAULT_MIN_HEIGHT, output_child);
-		get_attribute_s32_and_write(child_node, "max_width", &max_width,
-			DEFAULT_MAX_WIDTH, output_child);
-		get_attribute_s32_and_write(child_node, "max_height", &max_height,
-			DEFAULT_MAX_HEIGHT, output_child);
-		get_attribute_bool_and_write(child_node, "auto_resize", &auto_resize,
-			DEFAULT_AUTO_RESIZE, output_child);
-
-		if (child_node->hasName("layout_panel"))
-		{
-			BOOL user_resize = TRUE;
-			get_attribute_bool_and_write(child_node, "user_resize", &user_resize,
-				TRUE, output_child);
-			LLPanel* panelp = (LLPanel*)LLPanel::fromXML(child_node, layout_stackp, output_child);
+	LLLayoutPanel* panelp = dynamic_cast<LLLayoutPanel*>(child);
 			if (panelp)
 			{
-				panelp->setFollowsNone();
-				layout_stackp->addPanel(panelp, min_width, min_height, max_width, max_height, auto_resize, user_resize);
+		mPanels.push_back(panelp);
 			}
+	return LLView::addChild(child, tab_group);
 		}
-		else
-		{
-			BOOL user_resize = FALSE;
-			get_attribute_bool_and_write(child_node, "user_resize", &user_resize,
-				FALSE, output_child);
-
-			LLPanel::Params p;
-			p.mouse_opaque(false);
-			LLPanel* panelp = LLUICtrlFactory::create<LLPanel>(p);
-			LLView* new_child = LLUICtrlFactory::getInstance()->createFromXML(child_node, panelp, LLStringUtil::null, LLPanel::child_registry_t::instance(), output_child);
-			if (new_child)
-			{
-				// put child in new embedded panel
-				layout_stackp->addPanel(panelp, min_width, min_height, max_width, max_height, auto_resize, user_resize);
-				// resize panel to contain widget and move widget to be contained in panel
-				panelp->setRect(new_child->getRect());
-				new_child->setOrigin(0, 0);
-			}
-			else
-			{
-				panelp->die();
-			}
-		}
-		
-		if (output_child && !output_child->mChildren && output_child->mAttributes.empty() && output_child->getValue().empty())
-		{
-			output_node->deleteChild(output_child);
-		}
-	}
-
-	if (!layout_stackp->postBuild())
-	{
-		delete layout_stackp;
-		return NULL;
-	}
 
-	return layout_stackp;
-}
 
 S32 LLLayoutStack::getDefaultHeight(S32 cur_height)
 {
@@ -370,8 +208,8 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width)
 
 void LLLayoutStack::movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front)
 {
-	LayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move);
-	LayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel);
+	LLLayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move);
+	LLLayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel);
 
 	if (!embedded_panel_to_move || !embedded_target_panel || embedded_panel_to_move == embedded_target_panel)
 	{
@@ -384,34 +222,14 @@ void LLLayoutStack::movePanel(LLPanel* panel_to_move, LLPanel* target_panel, boo
 	mPanels.insert(it, embedded_panel_to_move);
 }
 
-void LLLayoutStack::addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate, S32 index)
+void LLLayoutStack::addPanel(LLLayoutPanel* panel, EAnimate animate)
 {
-	// panel starts off invisible (collapsed)
-	if (animate == ANIMATE)
-	{
-		panel->setVisible(FALSE);
-	}
-	LayoutPanel* embedded_panel = new LayoutPanel(panel, mOrientation, min_width, min_height, max_width, max_height, auto_resize, user_resize);
-	
-	mPanels.insert(mPanels.begin() + llclamp(index, 0, (S32)mPanels.size()), embedded_panel);
-	
-	if (panel->getParent() != this) 
-	{
-		addChild(panel);
-	}
-	addChild(embedded_panel->mResizeBar);
+	addChild(panel);
 
-	// bring all resize bars to the front so that they are clickable even over the panels
-	// with a bit of overlap
-	for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
-	{
-		LLResizeBar* resize_barp = (*panel_it)->mResizeBar;
-		sendChildToFront(resize_barp);
-	}
-
-	// start expanding panel animation
+	// panel starts off invisible (collapsed)
 	if (animate == ANIMATE)
 	{
+		panel->mVisibleAmt = 0.f;
 		panel->setVisible(TRUE);
 	}
 }
@@ -423,7 +241,7 @@ void LLLayoutStack::removePanel(LLPanel* panel)
 
 void LLLayoutStack::collapsePanel(LLPanel* panel, BOOL collapsed)
 {
-	LayoutPanel* panel_container = findEmbeddedPanel(panel);
+	LLLayoutPanel* panel_container = findEmbeddedPanel(panel);
 	if (!panel_container) return;
 
 	panel_container->mCollapsed = collapsed;
@@ -431,7 +249,7 @@ void LLLayoutStack::collapsePanel(LLPanel* panel, BOOL collapsed)
 
 void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize)
 {
-	LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
 
 	if (panel)
 	{
@@ -441,7 +259,7 @@ void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL au
 
 void LLLayoutStack::setPanelUserResize(const std::string& panel_name, BOOL user_resize)
 {
-	LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
 
 	if (panel)
 	{
@@ -449,27 +267,25 @@ void LLLayoutStack::setPanelUserResize(const std::string& panel_name, BOOL user_
 	}
 }
 
-bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_widthp, S32* min_heightp)
+bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_dimp)
 {
-	LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
 
 	if (panel)
 	{
-		if (min_widthp) *min_widthp = panel->mMinWidth;
-		if (min_heightp) *min_heightp = panel->mMinHeight;
+		if (min_dimp) *min_dimp = panel->mMinDim;
 	}
 
 	return NULL != panel;
 }
 
-bool LLLayoutStack::getPanelMaxSize(const std::string& panel_name, S32* max_widthp, S32* max_heightp)
+bool LLLayoutStack::getPanelMaxSize(const std::string& panel_name, S32* max_dimp)
 {
-	LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+	LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
 
 	if (panel)
 	{
-		if (max_widthp) *max_widthp = panel->mMaxWidth;
-		if (max_heightp) *max_heightp = panel->mMaxHeight;
+		if (max_dimp) *max_dimp = panel->mMaxDim;
 	}
 
 	return NULL != panel;
@@ -481,6 +297,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 	LLFastTimer ft(FTM_UPDATE_LAYOUT);
 	static LLUICachedControl<S32> resize_bar_overlap ("UIResizeBarOverlap", 0);
 	calcMinExtents();
+	createResizeBars();
 
 	// calculate current extents
 	S32 total_width = 0;
@@ -492,7 +309,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 	e_panel_list_t::iterator panel_it;
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end();	++panel_it)
 	{
-		LLPanel* panelp = (*panel_it)->mPanel;
+		LLPanel* panelp = (*panel_it);
 		if (panelp->getVisible()) 
 		{
 			if (mAnimate)
@@ -542,11 +359,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		if (mOrientation == HORIZONTAL)
 		{
 			// enforce minimize size constraint by default
-			if (panelp->getRect().getWidth() < (*panel_it)->mMinWidth)
+			if (panelp->getRect().getWidth() < (*panel_it)->mMinDim)
 			{
-				panelp->reshape((*panel_it)->mMinWidth, panelp->getRect().getHeight());
+				panelp->reshape((*panel_it)->mMinDim, panelp->getRect().getHeight());
 			}
-        	total_width += llround(panelp->getRect().getWidth() * (*panel_it)->getCollapseFactor());
+        	total_width += llround(panelp->getRect().getWidth() * (*panel_it)->getCollapseFactor(mOrientation));
         	// want n-1 panel gaps for n panels
 			if (panel_it != mPanels.begin())
 			{
@@ -556,11 +373,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		else //VERTICAL
 		{
 			// enforce minimize size constraint by default
-			if (panelp->getRect().getHeight() < (*panel_it)->mMinHeight)
+			if (panelp->getRect().getHeight() < (*panel_it)->mMinDim)
 			{
-				panelp->reshape(panelp->getRect().getWidth(), (*panel_it)->mMinHeight);
+				panelp->reshape(panelp->getRect().getWidth(), (*panel_it)->mMinDim);
 			}
-			total_height += llround(panelp->getRect().getHeight() * (*panel_it)->getCollapseFactor());
+			total_height += llround(panelp->getRect().getHeight() * (*panel_it)->getCollapseFactor(mOrientation));
 			if (panel_it != mPanels.begin())
 			{
 				total_height += mPanelSpacing;
@@ -574,7 +391,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
 		// panels that are not fully visible do not count towards shrink headroom
-		if ((*panel_it)->getCollapseFactor() < 1.f) 
+		if ((*panel_it)->getCollapseFactor(mOrientation) < 1.f) 
 		{
 			continue;
 		}
@@ -587,11 +404,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 		{
 			if (mOrientation == HORIZONTAL)
 			{
-				shrink_headroom_total += (*panel_it)->mPanel->getRect().getWidth() - (*panel_it)->mMinWidth;
+				shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
 			}
 			else //VERTICAL
 			{
-				shrink_headroom_total += (*panel_it)->mPanel->getRect().getHeight() - (*panel_it)->mMinHeight;
+				shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
 			}
 		}
 		else
@@ -599,13 +416,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 			num_resizable_panels++;
 			if (mOrientation == HORIZONTAL)
 			{
-				shrink_headroom_available += (*panel_it)->mPanel->getRect().getWidth() - (*panel_it)->mMinWidth;
-				shrink_headroom_total += (*panel_it)->mPanel->getRect().getWidth() - (*panel_it)->mMinWidth;
+				shrink_headroom_available += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
+				shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
 			}
 			else //VERTICAL
 			{
-				shrink_headroom_available += (*panel_it)->mPanel->getRect().getHeight() - (*panel_it)->mMinHeight;
-				shrink_headroom_total += (*panel_it)->mPanel->getRect().getHeight() - (*panel_it)->mMinHeight;
+				shrink_headroom_available += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
+				shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
 			}
 		}
 	}
@@ -628,17 +445,25 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
-		LLPanel* panelp = (*panel_it)->mPanel;
+		LLPanel* panelp = (*panel_it);
 
 		S32 cur_width = panelp->getRect().getWidth();
 		S32 cur_height = panelp->getRect().getHeight();
-		S32 new_width = llmax((*panel_it)->mMinWidth, cur_width);
-		S32 new_height = llmax((*panel_it)->mMinHeight, cur_height); 
+		S32 new_width = cur_width;
+		S32 new_height = cur_height; 
 
+		if (mOrientation == HORIZONTAL)
+		{
+			new_width = llmax((*panel_it)->mMinDim, new_width);
+		}
+		else
+		{
+			new_height = llmax((*panel_it)->mMinDim, new_height);
+		}
 		S32 delta_size = 0;
 
 		// if panel can automatically resize (not animating, and resize flag set)...
-		if ((*panel_it)->getCollapseFactor() == 1.f 
+		if ((*panel_it)->getCollapseFactor(mOrientation) == 1.f 
 			&& (force_resize || (*panel_it)->mAutoResize) 
 			&& !(*panel_it)->mResizeBar->hasMouseCapture()) 
 		{
@@ -649,8 +474,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 				{
 					// shrink proportionally to amount over minimum
 					// so we can do this in one pass
-					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - (*panel_it)->mMinWidth) / (F32)shrink_headroom_available)) : 0;
-					shrink_headroom_available -= (cur_width - (*panel_it)->mMinWidth);
+					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0;
+					shrink_headroom_available -= (cur_width - (*panel_it)->mMinDim);
 				}
 				else
 				{
@@ -659,7 +484,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 					num_resizable_panels--;
 				}
 				pixels_to_distribute -= delta_size;
-				new_width = llmax((*panel_it)->mMinWidth, cur_width + delta_size);
+				new_width = llmax((*panel_it)->mMinDim, cur_width + delta_size);
 			}
 			else
 			{
@@ -672,8 +497,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 				{
 					// shrink proportionally to amount over minimum
 					// so we can do this in one pass
-					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - (*panel_it)->mMinHeight) / (F32)shrink_headroom_available)) : 0;
-					shrink_headroom_available -= (cur_height - (*panel_it)->mMinHeight);
+					delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0;
+					shrink_headroom_available -= (cur_height - (*panel_it)->mMinDim);
 				}
 				else
 				{
@@ -681,7 +506,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 					num_resizable_panels--;
 				}
 				pixels_to_distribute -= delta_size;
-				new_height = llmax((*panel_it)->mMinHeight, cur_height + delta_size);
+				new_height = llmax((*panel_it)->mMinDim, cur_height + delta_size);
 			}
 			else
 			{
@@ -722,11 +547,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 
 		if (mOrientation == HORIZONTAL)
 		{
-			cur_x += llround(new_width * (*panel_it)->getCollapseFactor()) + mPanelSpacing;
+			cur_x += llround(new_width * (*panel_it)->getCollapseFactor(mOrientation)) + mPanelSpacing;
 		}
 		else //VERTICAL
 		{
-			cur_y -= llround(new_height * (*panel_it)->getCollapseFactor()) + mPanelSpacing;
+			cur_y -= llround(new_height * (*panel_it)->getCollapseFactor(mOrientation)) + mPanelSpacing;
 		}
 	}
 
@@ -734,19 +559,19 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 	LLResizeBar* last_resize_bar = NULL;
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
-		LLPanel* panelp = (*panel_it)->mPanel;
+		LLPanel* panelp = (*panel_it);
 
 		if (mOrientation == HORIZONTAL)
 		{
 			(*panel_it)->mResizeBar->setResizeLimits(
-				(*panel_it)->mMinWidth, 
-				(*panel_it)->mMinWidth + shrink_headroom_total);
+				(*panel_it)->mMinDim, 
+				(*panel_it)->mMinDim + shrink_headroom_total);
 		}
 		else //VERTICAL
 		{
 			(*panel_it)->mResizeBar->setResizeLimits(
-				(*panel_it)->mMinHeight, 
-				(*panel_it)->mMinHeight + shrink_headroom_total);
+				(*panel_it)->mMinDim, 
+				(*panel_it)->mMinDim + shrink_headroom_total);
 		}
 
 		// toggle resize bars based on panel visibility, resizability, etc
@@ -782,14 +607,14 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
 } // end LLLayoutStack::updateLayout
 
 
-LLLayoutStack::LayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const
+LLLayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const
 {
 	if (!panelp) return NULL;
 
 	e_panel_list_t::const_iterator panel_it;
 	for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
-		if ((*panel_it)->mPanel == panelp)
+		if ((*panel_it) == panelp)
 		{
 			return *panel_it;
 		}
@@ -797,15 +622,15 @@ LLLayoutStack::LayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) co
 	return NULL;
 }
 
-LLLayoutStack::LayoutPanel* LLLayoutStack::findEmbeddedPanelByName(const std::string& name) const
+LLLayoutPanel* LLLayoutStack::findEmbeddedPanelByName(const std::string& name) const
 {
-	LayoutPanel* result = NULL;
+	LLLayoutPanel* result = NULL;
 
 	for (e_panel_list_t::const_iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
 	{
-		LayoutPanel* p = *panel_it;
+		LLLayoutPanel* p = *panel_it;
 
-		if (p->mPanel->getName() == name)
+		if (p->getName() == name)
 		{
 			result = p;
 			break;
@@ -826,9 +651,7 @@ void LLLayoutStack::calcMinExtents()
 	{
 		if (mOrientation == HORIZONTAL)
 		{
-			mMinHeight = llmax(	mMinHeight, 
-								(*panel_it)->mMinHeight);
-            mMinWidth += (*panel_it)->mMinWidth;
+            mMinWidth += (*panel_it)->mMinDim;
 			if (panel_it != mPanels.begin())
 			{
 				mMinWidth += mPanelSpacing;
@@ -836,9 +659,7 @@ void LLLayoutStack::calcMinExtents()
 		}
 		else //VERTICAL
 		{
-	        mMinWidth = llmax(	mMinWidth, 
-								(*panel_it)->mMinWidth);
-			mMinHeight += (*panel_it)->mMinHeight;
+			mMinHeight += (*panel_it)->mMinDim;
 			if (panel_it != mPanels.begin())
 			{
 				mMinHeight += mPanelSpacing;
@@ -847,6 +668,37 @@ void LLLayoutStack::calcMinExtents()
 	}
 }
 
+void LLLayoutStack::createResizeBars()
+{
+	for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
+	{
+		LLLayoutPanel* lp = (*panel_it);
+		if (lp->mResizeBar == NULL)
+		{
+			LLResizeBar::Side side = (mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
+			LLRect resize_bar_rect = getRect();
+
+			LLResizeBar::Params resize_params;
+			resize_params.name("resize");
+			resize_params.resizing_view(lp);
+			resize_params.min_size(lp->mMinDim);
+			resize_params.side(side);
+			resize_params.snapping_enabled(false);
+			LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params);
+			lp->mResizeBar = resize_bar;
+			LLView::addChild(resize_bar, 0);
+
+			// bring all resize bars to the front so that they are clickable even over the panels
+			// with a bit of overlap
+			for (e_panel_list_t::iterator panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
+			{
+				LLResizeBar* resize_barp = (*panel_it)->mResizeBar;
+				sendChildToFront(resize_barp);
+			}
+		}
+	}
+}
+
 // update layout stack animations, etc. once per frame
 // NOTE: we use this to size world view based on animating UI, *before* we draw the UI
 // we might still need to call updateLayout during UI draw phase, in case UI elements
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 6fcc8e2ac34a6c092b6155f3ed47fc41f447f44a..e19ef403eff7594a9a37bf1835624021d4993bf0 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -28,16 +28,21 @@
 #ifndef LL_LLLAYOUTSTACK_H
 #define LL_LLLAYOUTSTACK_H
 
-#include "llview.h"
+#include "llpanel.h"
 
 class LLPanel;
 
+class LLLayoutPanel;
+
 class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 {
 public:
+	struct LayoutStackRegistry : public LLChildRegistry<LayoutStackRegistry>
+	{};
+
 	struct Params : public LLInitParam::Block<Params, LLView::Params>
 	{
-		Optional<std::string>	orientation;
+		Mandatory<std::string>	orientation;
 		Optional<S32>			border_size;
 		Optional<bool>			animate,
 								clip;
@@ -45,6 +50,8 @@ class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 		Params();
 	};
 
+	typedef LayoutStackRegistry child_registry_t;
+
 	typedef enum e_layout_orientation
 	{
 		HORIZONTAL,
@@ -56,6 +63,7 @@ class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 	/*virtual*/ void draw();
 	/*virtual*/ void removeChild(LLView*);
 	/*virtual*/ BOOL postBuild();
+	/*virtual*/ bool addChild(LLView* child, S32 tab_group = 0);
 
 	static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL);
 
@@ -68,7 +76,7 @@ class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 		ANIMATE
 	} EAnimate;
 
-	void addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate = NO_ANIMATE, S32 index = S32_MAX);
+	void addPanel(LLLayoutPanel* panel, EAnimate animate = NO_ANIMATE);
 	void removePanel(LLPanel* panel);
 	void collapsePanel(LLPanel* panel, BOOL collapsed = TRUE);
 	S32 getNumPanels() { return mPanels.size(); }
@@ -82,20 +90,18 @@ class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 	void setPanelUserResize(const std::string& panel_name, BOOL user_resize);
 	
 	/**
-	 * Gets minimal width and/or height of the specified by name panel.
+	 * Gets minimal dimension along layout_stack axis of the specified by name panel.
 	 *
-	 * If it is necessary to get only the one dimension pass NULL for another one.
 	 * @returns true if specified by panel_name internal panel exists, false otherwise.
 	 */
-	bool getPanelMinSize(const std::string& panel_name, S32* min_widthp, S32* min_heightp);
+	bool getPanelMinSize(const std::string& panel_name, S32* min_dimp);
 
 	/**
-	 * Gets maximal width and/or height of the specified by name panel.
+	 * Gets maximal dimension along layout_stack axis of the specified by name panel.
 	 *
-	 * If it is necessary to get only the one dimension pass NULL for another one.
 	 * @returns true if specified by panel_name internal panel exists, false otherwise.
 	 */
-	bool getPanelMaxSize(const std::string& panel_name, S32* max_width, S32* max_height);
+	bool getPanelMaxSize(const std::string& panel_name, S32* max_dim);
 	
 	void updateLayout(BOOL force_resize = FALSE);
 	
@@ -110,19 +116,18 @@ class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 	friend class LLUICtrlFactory;
 
 private:
-	struct LayoutPanel;
-
+	void createResizeBars();
 	void calcMinExtents();
 	S32 getDefaultHeight(S32 cur_height);
 	S32 getDefaultWidth(S32 cur_width);
 
 	const ELayoutOrientation mOrientation;
 
-	typedef std::vector<LayoutPanel*> e_panel_list_t;
+	typedef std::vector<LLLayoutPanel*> e_panel_list_t;
 	e_panel_list_t mPanels;
 
-	LayoutPanel* findEmbeddedPanel(LLPanel* panelp) const;
-	LayoutPanel* findEmbeddedPanelByName(const std::string& name) const;
+	LLLayoutPanel* findEmbeddedPanel(LLPanel* panelp) const;
+	LLLayoutPanel* findEmbeddedPanelByName(const std::string& name) const;
 
 	S32 mMinWidth;  // calculated by calcMinExtents
 	S32 mMinHeight;  // calculated by calcMinExtents
@@ -134,4 +139,49 @@ class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 	bool mClip;
 }; // end class LLLayoutStack
 
+class LLLayoutPanel : public LLPanel
+{
+friend class LLLayoutStack;
+friend class LLUICtrlFactory;
+public:
+	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+	{
+		Optional<S32>			min_dim,
+								max_dim;
+		Optional<bool>			user_resize,
+								auto_resize;
+
+		Params()
+		:	min_dim("min_dim", 0),
+			max_dim("max_dim", 0),
+			user_resize("user_resize", true),
+			auto_resize("auto_resize", true)
+		{
+			addSynonym(min_dim, "min_width");
+			addSynonym(min_dim, "min_height");
+			addSynonym(max_dim, "max_width");
+			addSynonym(max_dim, "max_height");
+		}
+	};
+
+	~LLLayoutPanel();
+
+	void initFromParams(const Params& p);
+protected:
+	LLLayoutPanel(const Params& p)	;
+
+	
+	F32 getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation);
+
+	S32 mMinDim;
+	S32 mMaxDim;
+	BOOL mAutoResize;
+	BOOL mUserResize;
+	BOOL mCollapsed;
+	class LLResizeBar* mResizeBar;
+	F32 mVisibleAmt;
+	F32 mCollapseAmt;
+};
+
+
 #endif
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 2759167d047bb266ea9f278be160c6932d13bb30..a1fc977ce1b1095cb6410624a274f690c400e08b 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -1271,7 +1271,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
 			if( mCurrentHistoryLine > mLineHistory.begin() )
 			{
 				mText.assign( *(--mCurrentHistoryLine) );
-				setCursor(llmin((S32)mText.length(), getCursor()));
+				setCursorToEnd();
 			}
 			else
 			{
@@ -1288,7 +1288,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
 			if( !mLineHistory.empty() && mCurrentHistoryLine < mLineHistory.end() - 1 )
 			{
 				mText.assign( *(++mCurrentHistoryLine) );
-				setCursor(llmin((S32)mText.length(), getCursor()));
+				setCursorToEnd();
 			}
 			else
 			{
diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp
index 1f6fa12969ea0f948cb47f61668cfbab8082fa38..d4e6091ee037eb409fdacd391a61ef0a7913b4f8 100644
--- a/indra/llui/llmultislider.cpp
+++ b/indra/llui/llmultislider.cpp
@@ -101,8 +101,8 @@ LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p)
 		setMouseUpCallback(initCommitCallback(p.mouse_up_callback));
 	}
 
-	for (LLInitParam::ParamIterator<SliderParams>::const_iterator it = p.sliders().begin();
-		it != p.sliders().end();
+	for (LLInitParam::ParamIterator<SliderParams>::const_iterator it = p.sliders.begin();
+		it != p.sliders.end();
 		++it)
 	{
 		if (it->name.isProvided())
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 99d540a9de779bba7279d4ae6673bfd644c05478..30cd85619ef1eb56801427b39fb689bc01d75335 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -27,6 +27,7 @@
 #include "linden_common.h"
 
 #include "llnotifications.h"
+#include "llnotificationtemplate.h"
 
 #include "llinstantmessage.h"
 #include "llxmlnode.h"
@@ -37,6 +38,8 @@
 #include "lltrans.h"
 #include "llnotificationslistener.h"
 #include "llstring.h"
+#include "llsdparam.h"
+#include "llsdutil.h"
 
 #include <algorithm>
 #include <boost/regex.hpp>
@@ -44,6 +47,56 @@
 
 const std::string NOTIFICATION_PERSIST_VERSION = "0.93";
 
+void NotificationPriorityValues::declareValues()
+{
+	declare("low", NOTIFICATION_PRIORITY_LOW);
+	declare("normal", NOTIFICATION_PRIORITY_NORMAL);
+	declare("high", NOTIFICATION_PRIORITY_HIGH);
+	declare("critical", NOTIFICATION_PRIORITY_CRITICAL);
+}
+
+LLNotificationForm::FormElementBase::FormElementBase()
+:	name("name")
+{}
+
+LLNotificationForm::FormIgnore::FormIgnore()
+:	text("text"),
+	control("control"),
+	invert_control("invert_control", true),
+	save_option("save_option", false)
+{}
+
+LLNotificationForm::FormButton::FormButton()
+:	index("index"),
+	text("text"),
+	ignore("ignore"),
+	is_default("default"),
+	type("type")
+{
+	// set type here so it gets serialized
+	type = "button";
+}
+
+LLNotificationForm::FormInput::FormInput()
+:	type("type"),
+	width("width", 0)
+{}
+
+LLNotificationForm::FormElement::FormElement()
+:	button("button"),
+	input("input")
+{}
+
+LLNotificationForm::FormElements::FormElements()
+:	elements("")
+{}
+
+LLNotificationForm::Params::Params()
+:	name("name"),
+	ignore("ignore"),
+	form_elements("")
+{}
+
 // Local channel for persistent notifications
 // Stores only persistent notifications.
 // Class users can use connectChanged() to process persistent notifications
@@ -88,12 +141,7 @@ bool filterIgnoredNotifications(LLNotificationPtr notification)
 
 	LLNotificationFormPtr form = notification->getForm();
 	// Check to see if the user wants to ignore this alert
-	if (form->getIgnoreType() != LLNotificationForm::IGNORE_NO)
-	{
-		return LLUI::sSettingGroups["ignores"]->getBOOL(notification->getName());
-	}
-
-	return true;
+	return !notification->getForm()->getIgnored();
 }
 
 bool handleIgnoredNotification(const LLSD& payload)
@@ -135,63 +183,68 @@ namespace LLNotificationFilters
 };
 
 LLNotificationForm::LLNotificationForm()
-:	mFormData(LLSD::emptyArray()),
-	mIgnore(IGNORE_NO)
+:	mIgnore(IGNORE_NO)
 {
 }
 
 
-LLNotificationForm::LLNotificationForm(const std::string& name, const LLXMLNodePtr xml_node) 
-:	mFormData(LLSD::emptyArray()),
-	mIgnore(IGNORE_NO)
+LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotificationForm::Params& p) 
+:	mIgnore(IGNORE_NO),
+	mInvertSetting(true) // ignore settings by default mean true=show, false=ignore
 {
-	if (!xml_node->hasName("form"))
+	if (p.ignore.isProvided())
 	{
-		llwarns << "Bad xml node for form: " << xml_node->getName() << llendl;
-	}
-	LLXMLNodePtr child = xml_node->getFirstChild();
-	while(child)
-	{
-		child = LLNotifications::instance().checkForXMLTemplate(child);
+		mIgnoreMsg = p.ignore.text;
 
-		LLSD item_entry;
-		std::string element_name = child->getName()->mString;
+		if (!p.ignore.save_option)
+		{
+			mIgnore = IGNORE_WITH_DEFAULT_RESPONSE;
+		}
+		else
+		{
+			// remember last option chosen by user and automatically respond with that in the future
+			mIgnore = IGNORE_WITH_LAST_RESPONSE;
+			LLUI::sSettingGroups["ignores"]->declareLLSD(std::string("Default") + name, "", std::string("Default response for notification " + name));
+		}
 
-		if (element_name == "ignore" )
+		BOOL show_notification = TRUE;
+		if (p.ignore.control.isProvided())
 		{
-			bool save_option = false;
-			child->getAttribute_bool("save_option", save_option);
-			if (!save_option)
-			{
-				mIgnore = IGNORE_WITH_DEFAULT_RESPONSE;
-			}
-			else
-			{
-				// remember last option chosen by user and automatically respond with that in the future
-				mIgnore = IGNORE_WITH_LAST_RESPONSE;
-				LLUI::sSettingGroups["ignores"]->declareLLSD(std::string("Default") + name, "", std::string("Default response for notification " + name));
-			}
-			child->getAttributeString("text", mIgnoreMsg);
-			BOOL show_notification = TRUE;
-			LLUI::sSettingGroups["ignores"]->declareBOOL(name, show_notification, "Ignore notification with this name", TRUE);
+			mIgnoreSetting = LLUI::sSettingGroups["config"]->getControl(p.ignore.control);
+			mInvertSetting = p.ignore.invert_control;
 		}
 		else
 		{
-			// flatten xml form entry into single LLSD map with type==name
-			item_entry["type"] = element_name;
-			const LLXMLAttribList::iterator attrib_end = child->mAttributes.end();
-			for(LLXMLAttribList::iterator attrib_it = child->mAttributes.begin();
-				attrib_it != attrib_end;
-				++attrib_it)
-			{
-				item_entry[std::string(attrib_it->second->getName()->mString)] = attrib_it->second->getValue();
-			}
-			item_entry["value"] = child->getTextContents();
-			mFormData.append(item_entry);
+			LLUI::sSettingGroups["ignores"]->declareBOOL(name, show_notification, "Ignore notification with this name", TRUE);
+			mIgnoreSetting = LLUI::sSettingGroups["ignores"]->getControl(name);
 		}
+	}
+
+	LLParamSDParser parser;
+	parser.writeSD(mFormData, p.form_elements);
+
+	mFormData = mFormData[""];
+	if (!mFormData.isArray())
+	{
+		// change existing contents to a one element array
+		LLSD new_llsd_array = LLSD::emptyArray();
+		new_llsd_array.append(mFormData);
+		mFormData = new_llsd_array;
+	}
 
-		child = child->getNextSibling();
+	for (LLSD::array_iterator it = mFormData.beginArray(), end_it = mFormData.endArray();
+		it != end_it;
+		++it)
+	{
+		// lift contents of form element up a level, since element type is already encoded in "type" param
+		if (it->isMap() && it->beginMap() != it->endMap())
+		{
+			*it = it->beginMap()->second;
+		}
 	}
+
+	LL_DEBUGS("Notifications") << name << LL_ENDL;
+	LL_DEBUGS("Notifications") << ll_pretty_print_sd(mFormData) << LL_ENDL;
 }
 
 LLNotificationForm::LLNotificationForm(const LLSD& sd)
@@ -293,16 +346,64 @@ std::string LLNotificationForm::getDefaultOption()
 	return "";
 }
 
-LLNotificationTemplate::LLNotificationTemplate() :
-	mExpireSeconds(0),
-	mExpireOption(-1),
-	mURLOption(-1),
-	mURLOpenExternally(-1),
-	mPersist(false),
-	mUnique(false),
-	mPriority(NOTIFICATION_PRIORITY_NORMAL)
+LLControlVariablePtr LLNotificationForm::getIgnoreSetting() 
+{ 
+	return mIgnoreSetting; 
+}
+
+bool LLNotificationForm::getIgnored()
 {
-	mForm = LLNotificationFormPtr(new LLNotificationForm()); 
+	bool ignored = false;
+	if (mIgnore != LLNotificationForm::IGNORE_NO
+		&& mIgnoreSetting) 
+	{
+		ignored = mIgnoreSetting->getValue().asBoolean();
+		if (mInvertSetting) ignored = !ignored;
+	}
+
+	return ignored;
+}
+
+void LLNotificationForm::setIgnored(bool ignored)
+{
+	if (mIgnoreSetting)
+	{
+		if (mInvertSetting) ignored = !ignored;
+		mIgnoreSetting->setValue(ignored);
+	}
+}
+
+LLNotificationTemplate::LLNotificationTemplate(const LLNotificationTemplate::Params& p)
+:	mName(p.name),
+	mType(p.type),
+	mMessage(p.value),
+	mLabel(p.label),
+	mIcon(p.icon),
+	mURL(p.url.value),
+	mExpireSeconds(p.duration),
+	mExpireOption(p.expire_option),
+	mURLOption(p.url.option),
+	mURLTarget(p.url.target),
+	mUnique(p.unique.isProvided()),
+	mPriority(p.priority),
+	mPersist(p.persist),
+	mDefaultFunctor(p.functor.isProvided() ? p.functor() : p.name())
+{
+	if (p.sound.isProvided()
+		&& LLUI::sSettingGroups["config"]->controlExists(p.sound))
+	{
+		mSoundEffect = LLUUID(LLUI::sSettingGroups["config"]->getString(p.sound));
+	}
+
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::UniquenessContext>::const_iterator it = p.unique.contexts.begin(),
+			end_it = p.unique.contexts.end();
+		it != end_it;
+		++it)
+	{
+		mUniqueContext.push_back(it->key);
+	}
+
+	mForm = LLNotificationFormPtr(new LLNotificationForm(p.name, p.form_ref.form));
 }
 
 LLNotification::LLNotification(const LLNotification::Params& p) : 
@@ -499,7 +600,7 @@ void LLNotification::respond(const LLSD& response)
 	{
 		mResponder->handleRespond(asLLSD(), response);
 	}
-	else
+	else if (!mResponseFunctorName.empty())
 	{
 		// look up the functor
 		LLNotificationFunctorRegistry::ResponseFunctor functor =
@@ -507,6 +608,11 @@ void LLNotification::respond(const LLSD& response)
 		// and then call it
 		functor(asLLSD(), response);
 	}
+	else
+	{
+		// no registered responder
+		return;
+	}
 
 	if (mTemporaryResponder && !isReusable())
 	{
@@ -517,8 +623,7 @@ void LLNotification::respond(const LLSD& response)
 
 	if (mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
 	{
-		BOOL show_notification = mIgnored ? FALSE : TRUE;
-		LLUI::sSettingGroups["ignores"]->setBOOL(getName(), show_notification);
+		mForm->setIgnored(mIgnored);
 		if (mIgnored && mForm->getIgnoreType() == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE)
 		{
 			LLUI::sSettingGroups["ignores"]->setLLSD("Default" + getName(), response);
@@ -528,6 +633,49 @@ void LLNotification::respond(const LLSD& response)
 	update();
 }
 
+void LLNotification::respondWithDefault()
+{
+	respond(getResponseTemplate(WITH_DEFAULT_BUTTON));
+}
+
+
+const std::string& LLNotification::getName() const
+{
+	return mTemplatep->mName;
+}
+
+const std::string& LLNotification::getIcon() const
+{
+	return mTemplatep->mIcon;
+}
+
+
+bool LLNotification::isPersistent() const
+{
+	return mTemplatep->mPersist;
+}
+
+std::string LLNotification::getType() const
+{
+	return (mTemplatep ? mTemplatep->mType : "");
+}
+
+S32 LLNotification::getURLOption() const
+{
+	return (mTemplatep ? mTemplatep->mURLOption : -1);
+}
+
+S32 LLNotification::getURLOpenExternally() const
+{
+	return(mTemplatep? mTemplatep->mURLTarget == "_external": -1);
+}
+
+bool LLNotification::hasUniquenessConstraints() const 
+{ 
+	return (mTemplatep ? mTemplatep->mUnique : false);
+}
+
+
 void LLNotification::setIgnored(bool ignore)
 {
 	mIgnored = ignore;
@@ -607,6 +755,8 @@ void LLNotification::init(const std::string& template_name, const LLSD& form_ele
 	// apply substitution to form labels
 	mForm->formatElements(mSubstitutions);
 
+	mIgnored = mForm->getIgnored();
+
 	LLDate rightnow = LLDate::now();
 	if (mTemplatep->mExpireSeconds)
 	{
@@ -910,12 +1060,12 @@ std::string LLNotificationChannel::summarize()
 // LLNotifications implementation
 // ---
 LLNotifications::LLNotifications() : LLNotificationChannelBase(LLNotificationFilters::includeEverything,
-															   LLNotificationComparators::orderByUUID()),
-									mIgnoreAllNotifications(false)
+							       LLNotificationComparators::orderByUUID()),
+				     mIgnoreAllNotifications(false)
 {
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Notification.Show", boost::bind(&LLNotifications::addFromCallback, this, _2));
-
-    mListener.reset(new LLNotificationsListener(*this));
+	
+	mListener.reset(new LLNotificationsListener(*this));
 }
 
 
@@ -1095,11 +1245,6 @@ bool LLNotifications::templateExists(const std::string& name)
 	return (mTemplates.count(name) != 0);
 }
 
-void LLNotifications::clearTemplates()
-{
-	mTemplates.clear();
-}
-
 void LLNotifications::forceResponse(const LLNotification::Params& params, S32 option)
 {
 	LLNotificationPtr temp_notify(new LLNotification(params));
@@ -1162,190 +1307,88 @@ void replaceSubstitutionStrings(LLXMLNodePtr node, StringMap& replacements)
 	}
 }
 
-// private to this file
-// returns true if the template request was invalid and there's nothing else we
-// can do with this node, false if you should keep processing (it may have
-// replaced the contents of the node referred to)
-LLXMLNodePtr LLNotifications::checkForXMLTemplate(LLXMLNodePtr item)
+void replaceFormText(LLNotificationForm::Params& form, const std::string& pattern, const std::string& replace)
 {
-	if (item->hasName("usetemplate"))
+	if (form.ignore.isProvided() && form.ignore.text() == pattern)
 	{
-		std::string replacementName;
-		if (item->getAttributeString("name", replacementName))
+		form.ignore.text = replace;
+	}
+	for (LLInitParam::ParamIterator<LLNotificationForm::FormElement>::iterator it = form.form_elements.elements.begin(),
+			end_it = form.form_elements.elements.end();
+		it != end_it;
+		++it)
+	{
+		if (it->button.isChosen() && it->button.text() == pattern)
 		{
-			StringMap replacements;
-			for (LLXMLAttribList::const_iterator it=item->mAttributes.begin(); 
-				 it != item->mAttributes.end(); ++it)
-			{
-				replacements[it->second->getName()->mString] = it->second->getValue();
-			}
-			if (mXmlTemplates.count(replacementName))
-			{
-				item=LLXMLNode::replaceNode(item, mXmlTemplates[replacementName]);
-				
-				// walk the nodes looking for $(substitution) here and replace
-				replaceSubstitutionStrings(item, replacements);
-			}
-			else
-			{
-				llwarns << "XML template lookup failure on '" << replacementName << "' " << llendl;
-			}
+			it->button.text = replace;
 		}
 	}
-	return item;
 }
 
 bool LLNotifications::loadTemplates()
 {
 	const std::string xml_filename = "notifications.xml";
+	std::string full_filename = gDirUtilp->findSkinnedFilename(LLUI::getXUIPaths().front(), xml_filename);
+
 	LLXMLNodePtr root;
-	
 	BOOL success  = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
 	
 	if (!success || root.isNull() || !root->hasName( "notifications" ))
 	{
-		llerrs << "Problem reading UI Notifications file: " << xml_filename << llendl;
+		llerrs << "Problem reading UI Notifications file: " << full_filename << llendl;
 		return false;
 	}
-	
-	clearTemplates();
-	
-	for (LLXMLNodePtr item = root->getFirstChild();
-		 item.notNull(); item = item->getNextSibling())
-	{
-		// we do this FIRST so that item can be changed if we 
-		// encounter a usetemplate -- we just replace the
-		// current xml node and keep processing
-		item = checkForXMLTemplate(item);
-		
-		if (item->hasName("global"))
-		{
-			std::string global_name;
-			if (item->getAttributeString("name", global_name))
-			{
-				mGlobalStrings[global_name] = item->getTextContents();
-			}
-			continue;
-		}
-		
-		if (item->hasName("template"))
-		{
-			// store an xml template; templates must have a single node (can contain
-			// other nodes)
-			std::string name;
-			item->getAttributeString("name", name);
-			LLXMLNodePtr ptr = item->getFirstChild();
-			mXmlTemplates[name] = ptr;
-			continue;
-		}
-		
-		if (!item->hasName("notification"))
-		{
-            llwarns << "Unexpected entity " << item->getName()->mString << 
-                       " found in " << xml_filename << llendl;
-			continue;
-		}
-		
-		// now we know we have a notification entry, so let's build it
-		LLNotificationTemplatePtr pTemplate(new LLNotificationTemplate());
 
-		if (!item->getAttributeString("name", pTemplate->mName))
-		{
-			llwarns << "Unable to parse notification with no name" << llendl;
-			continue;
-		}
-		
-		//llinfos << "Parsing " << pTemplate->mName << llendl;
-		
-		pTemplate->mMessage = item->getTextContents();
-		pTemplate->mDefaultFunctor = pTemplate->mName;
-		item->getAttributeString("type", pTemplate->mType);
-		item->getAttributeString("icon", pTemplate->mIcon);
-		item->getAttributeString("label", pTemplate->mLabel);
-		item->getAttributeU32("duration", pTemplate->mExpireSeconds);
-		item->getAttributeU32("expireOption", pTemplate->mExpireOption);
-
-		std::string priority;
-		item->getAttributeString("priority", priority);
-		pTemplate->mPriority = NOTIFICATION_PRIORITY_NORMAL;
-		if (!priority.empty())
-		{
-			if (priority == "low")      pTemplate->mPriority = NOTIFICATION_PRIORITY_LOW;
-			if (priority == "normal")   pTemplate->mPriority = NOTIFICATION_PRIORITY_NORMAL;
-			if (priority == "high")     pTemplate->mPriority = NOTIFICATION_PRIORITY_HIGH;
-			if (priority == "critical") pTemplate->mPriority = NOTIFICATION_PRIORITY_CRITICAL;
-		}
-		
-		item->getAttributeString("functor", pTemplate->mDefaultFunctor);
-
-		BOOL persist = false;
-		item->getAttributeBOOL("persist", persist);
-		pTemplate->mPersist = persist;
-		
-		std::string sound;
-		item->getAttributeString("sound", sound);
-		if (!sound.empty())
+	LLNotificationTemplate::Notifications params;
+	LLXUIParser parser;
+	parser.readXUI(root, params, full_filename);
+
+	mTemplates.clear();
+
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::GlobalString>::const_iterator it = params.strings.begin(), end_it = params.strings.end();
+		it != end_it;
+		++it)
+	{
+		mGlobalStrings[it->name] = it->value;
+	}
+
+	std::map<std::string, LLNotificationForm::Params> form_templates;
+
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::Template>::const_iterator it = params.templates.begin(), end_it = params.templates.end();
+		it != end_it;
+		++it)
+	{
+		form_templates[it->name] = it->form;
+	}
+
+	for(LLInitParam::ParamIterator<LLNotificationTemplate::Params>::iterator it = params.notifications.begin(), end_it = params.notifications.end();
+		it != end_it;
+		++it)
+	{
+		if (it->form_ref.form_template.isChosen())
 		{
-			// test for bad sound effect name / missing effect
-			if (LLUI::sSettingGroups["config"]->controlExists(sound))
+			// replace form contents from template
+			it->form_ref.form = form_templates[it->form_ref.form_template.name];
+			if(it->form_ref.form_template.yes_text.isProvided())
 			{
-				pTemplate->mSoundEffect = 
-					LLUUID(LLUI::sSettingGroups["config"]->getString(sound));
+				replaceFormText(it->form_ref.form, "$yestext", it->form_ref.form_template.yes_text);
 			}
-			else
+			if(it->form_ref.form_template.no_text.isProvided())
 			{
-				llwarns << "Unknown sound effect control name " << sound
-					<< llendl;
+				replaceFormText(it->form_ref.form, "$notext", it->form_ref.form_template.no_text);
 			}
-		}
-
-		for (LLXMLNodePtr child = item->getFirstChild();
-			 !child.isNull(); child = child->getNextSibling())
-		{
-			child = checkForXMLTemplate(child);
-			
-			// <url>
-			if (child->hasName("url"))
+			if(it->form_ref.form_template.cancel_text.isProvided())
 			{
-				pTemplate->mURL = child->getTextContents();
-				child->getAttributeU32("option", pTemplate->mURLOption);
-				child->getAttributeU32("openexternally", pTemplate->mURLOpenExternally);
+				replaceFormText(it->form_ref.form, "$canceltext", it->form_ref.form_template.cancel_text);
 			}
-			
-            if (child->hasName("unique"))
-            {
-                pTemplate->mUnique = true;
-                for (LLXMLNodePtr formitem = child->getFirstChild();
-                     !formitem.isNull(); formitem = formitem->getNextSibling())
-                {
-                    if (formitem->hasName("context"))
-                    {
-                        std::string key;
-                        formitem->getAttributeString("key", key);
-                        pTemplate->mUniqueContext.push_back(key);
-                        //llwarns << "adding " << key << " to unique context" << llendl;
-                    }
-                    else
-                    {
-                        llwarns << "'unique' has unrecognized subelement " 
-                        << formitem->getName()->mString << llendl;
-                    }
-                }
-            }
-            
-			// <form>
-			if (child->hasName("form"))
+			if(it->form_ref.form_template.ignore_text.isProvided())
 			{
-                pTemplate->mForm = LLNotificationFormPtr(new LLNotificationForm(pTemplate->mName, child));
+				replaceFormText(it->form_ref.form, "$ignoretext", it->form_ref.form_template.ignore_text);
 			}
 		}
-		addTemplate(pTemplate->mName, pTemplate);
+		addTemplate(it->name, LLNotificationTemplatePtr(new LLNotificationTemplate(*it)));
 	}
-	
-	//std::ostringstream ostream;
-	//root->writeToOstream(ostream, "\n  ");
-	//llwarns << ostream.str() << llendl;
-	
+
 	return true;
 }
 
@@ -1396,6 +1439,8 @@ LLNotificationPtr LLNotifications::add(const LLNotification::Params& p)
 
 void LLNotifications::add(const LLNotificationPtr pNotif)
 {
+	if (pNotif == NULL) return;
+
 	// first see if we already have it -- if so, that's a problem
 	LLNotificationSet::iterator it=mItems.find(pNotif);
 	if (it != mItems.end())
@@ -1408,6 +1453,8 @@ void LLNotifications::add(const LLNotificationPtr pNotif)
 
 void LLNotifications::cancel(LLNotificationPtr pNotif)
 {
+	if (pNotif == NULL) return;
+
 	LLNotificationSet::iterator it=mItems.find(pNotif);
 	if (it == mItems.end())
 	{
@@ -1417,6 +1464,30 @@ void LLNotifications::cancel(LLNotificationPtr pNotif)
 	updateItem(LLSD().with("sigtype", "delete").with("id", pNotif->id()), pNotif);
 }
 
+void LLNotifications::cancelByName(const std::string& name)
+{
+	std::vector<LLNotificationPtr> notifs_to_cancel;
+	for (LLNotificationSet::iterator it=mItems.begin(), end_it = mItems.end();
+		it != end_it;
+		++it)
+	{
+		LLNotificationPtr pNotif = *it;
+		if (pNotif->getName() == name)
+		{
+			notifs_to_cancel.push_back(pNotif);
+		}
+	}
+
+	for (std::vector<LLNotificationPtr>::iterator it = notifs_to_cancel.begin(), end_it = notifs_to_cancel.end();
+		it != end_it;
+		++it)
+	{
+		LLNotificationPtr pNotif = *it;
+		pNotif->cancel();
+		updateItem(LLSD().with("sigtype", "delete").with("id", pNotif->id()), pNotif);
+	}
+}
+
 void LLNotifications::update(const LLNotificationPtr pNotif)
 {
 	LLNotificationSet::iterator it=mItems.find(pNotif);
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index 2cc8803f10172bbac85c88e86e8ef467b77e052d..f075c44520d6b89a4326f07a9ed5b6e3f80b9cd3 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -100,7 +100,6 @@
 #include "llnotificationptr.h"
 #include "llcachename.h"
 
-	
 typedef enum e_notification_priority
 {
 	NOTIFICATION_PRIORITY_UNSPECIFIED,
@@ -110,6 +109,11 @@ typedef enum e_notification_priority
 	NOTIFICATION_PRIORITY_CRITICAL
 } ENotificationPriority;
 
+struct NotificationPriorityValues : public LLInitParam::TypeValuesHelper<ENotificationPriority, NotificationPriorityValues>
+{
+	static void declareValues();
+};
+
 class LLNotificationResponderInterface
 {
 public:
@@ -157,6 +161,66 @@ class LLNotificationForm
 	LOG_CLASS(LLNotificationForm);
 
 public:
+	struct FormElementBase : public LLInitParam::Block<FormElementBase>
+	{
+		Optional<std::string>	name;
+
+		FormElementBase();
+	};
+
+	struct FormIgnore : public LLInitParam::Block<FormIgnore, FormElementBase>
+	{
+		Optional<std::string>	text;
+		Optional<bool>			save_option;
+		Optional<std::string>	control;
+		Optional<bool>			invert_control;
+
+		FormIgnore();
+	};
+
+	struct FormButton : public LLInitParam::Block<FormButton, FormElementBase>
+	{
+		Mandatory<S32>			index;
+		Mandatory<std::string>	text;
+		Optional<std::string>	ignore;
+		Optional<bool>			is_default;
+
+		Mandatory<std::string>	type;
+
+		FormButton();
+	};
+
+	struct FormInput : public LLInitParam::Block<FormInput, FormElementBase>
+	{
+		Mandatory<std::string>	type;
+		Optional<S32>			width;
+
+		FormInput();
+	};
+
+	struct FormElement : public LLInitParam::Choice<FormElement>
+	{
+		Alternative<FormButton> button;
+		Alternative<FormInput>	input;
+
+		FormElement();
+	};
+
+	struct FormElements : public LLInitParam::Block<FormElements>
+	{
+		Multiple<FormElement> elements;
+		FormElements();
+	};
+
+	struct Params : public LLInitParam::Block<Params>
+	{
+		Optional<std::string>	name;
+		Optional<FormIgnore>	ignore;
+		Optional<FormElements>	form_elements;
+
+		Params();
+	};
+
 	typedef enum e_ignore_type
 	{ 
 		IGNORE_NO,
@@ -167,8 +231,7 @@ class LLNotificationForm
 
 	LLNotificationForm();
 	LLNotificationForm(const LLSD& sd);
-	LLNotificationForm(const std::string& name, 
-		const LLPointer<class LLXMLNode> xml_node);
+	LLNotificationForm(const std::string& name, const Params& p);
 
 	LLSD asLLSD() const;
 
@@ -181,92 +244,25 @@ class LLNotificationForm
 	// appends form elements from another form serialized as LLSD
 	void append(const LLSD& sub_form);
 	std::string getDefaultOption();
+	LLPointer<class LLControlVariable> getIgnoreSetting();
+	bool getIgnored();
+	void setIgnored(bool ignored);
 
 	EIgnoreType getIgnoreType() { return mIgnore; }
 	std::string getIgnoreMessage() { return mIgnoreMsg; }
 
 private:
-	LLSD	mFormData;
-	EIgnoreType mIgnore;
-	std::string mIgnoreMsg;
+	LLSD								mFormData;
+	EIgnoreType							mIgnore;
+	std::string							mIgnoreMsg;
+	LLPointer<class LLControlVariable>	mIgnoreSetting;
+	bool								mInvertSetting;
 };
 
 typedef boost::shared_ptr<LLNotificationForm> LLNotificationFormPtr;
 
-// This is the class of object read from the XML file (notifications.xml, 
-// from the appropriate local language directory).
-struct LLNotificationTemplate
-{
-	LLNotificationTemplate();
-    // the name of the notification -- the key used to identify it
-    // Ideally, the key should follow variable naming rules 
-    // (no spaces or punctuation).
-    std::string mName;
-    // The type of the notification
-    // used to control which queue it's stored in
-    std::string mType;
-    // The text used to display the notification. Replaceable parameters
-    // are enclosed in square brackets like this [].
-    std::string mMessage;
-	// The label for the notification; used for 
-	// certain classes of notification (those with a window and a window title). 
-	// Also used when a notification pops up underneath the current one.
-	// Replaceable parameters can be used in the label.
-	std::string mLabel;
-	// The name of the icon image. This should include an extension.
-	std::string mIcon;
-    // This is the Highlander bit -- "There Can Be Only One"
-    // An outstanding notification with this bit set
-    // is updated by an incoming notification with the same name,
-    // rather than creating a new entry in the queue.
-    // (used for things like progress indications, or repeating warnings
-    // like "the grid is going down in N minutes")
-    bool mUnique;
-    // if we want to be unique only if a certain part of the payload is constant
-    // specify the field names for the payload. The notification will only be
-    // combined if all of the fields named in the context are identical in the
-    // new and the old notification; otherwise, the notification will be
-    // duplicated. This is to support suppressing duplicate offers from the same
-    // sender but still differentiating different offers. Example: Invitation to
-    // conference chat.
-    std::vector<std::string> mUniqueContext;
-    // If this notification expires automatically, this value will be 
-    // nonzero, and indicates the number of seconds for which the notification
-    // will be valid (a teleport offer, for example, might be valid for 
-    // 300 seconds). 
-    U32 mExpireSeconds;
-    // if the offer expires, one of the options is chosen automatically
-    // based on its "value" parameter. This controls which one. 
-    // If expireSeconds is specified, expireOption should also be specified.
-    U32 mExpireOption;
-    // if the notification contains a url, it's stored here (and replaced 
-    // into the message where [_URL] is found)
-    std::string mURL;
-    // if there's a URL in the message, this controls which option visits
-    // that URL. Obsolete this and eliminate the buttons for affected
-    // messages when we allow clickable URLs in the UI
-    U32 mURLOption;
-	
-	U32 mURLOpenExternally;
-	//This is a flag that tells if the url needs to open externally dispite 
-	//what the user setting is.
-	
-	// does this notification persist across sessions? if so, it will be
-	// serialized to disk on first receipt and read on startup
-	bool mPersist;
-	// This is the name of the default functor, if present, to be
-	// used for the notification's callback. It is optional, and used only if 
-	// the notification is constructed without an identified functor.
-	std::string mDefaultFunctor;
-	// The form data associated with a given notification (buttons, text boxes, etc)
-    LLNotificationFormPtr mForm;
-	// default priority for notifications of this type
-	ENotificationPriority mPriority;
-	// UUID of the audio file to be played when this notification arrives
-	// this is loaded as a name, but looked up to get the UUID upon template load.
-	// If null, it wasn't specified.
-	LLUUID mSoundEffect;
-};
+
+struct LLNotificationTemplate;
 
 // we want to keep a map of these by name, and it's best to manage them
 // with smart pointers
@@ -302,7 +298,7 @@ friend class LLNotifications;
 		// optional
 		Optional<LLSD>							substitutions;
 		Optional<LLSD>							payload;
-		Optional<ENotificationPriority>			priority;
+		Optional<ENotificationPriority, NotificationPriorityValues>	priority;
 		Optional<LLSD>							form_elements;
 		Optional<LLDate>						time_stamp;
 		Optional<LLNotificationContext*>		context;
@@ -445,6 +441,7 @@ friend class LLNotifications;
 	LLSD asLLSD();
 
 	void respond(const LLSD& sd);
+	void respondWithDefault();
 
 	void* getResponder() { return mResponderObj; }
 
@@ -462,6 +459,13 @@ friend class LLNotifications;
 		return mRespondedTo;
 	}
 
+	bool isActive() const
+	{
+		return !isRespondedTo()
+			&& !isCancelled()
+			&& !isExpired();
+	}
+
 	const LLSD& getResponse() { return mResponse; }
 
 	bool isIgnored() const
@@ -469,15 +473,11 @@ friend class LLNotifications;
 		return mIgnored;
 	}
 
-	const std::string& getName() const
-	{
-		return mTemplatep->mName;
-	}
+	const std::string& getName() const;
 
-	bool isPersistent() const
-	{
-		return mTemplatep->mPersist;
-	}
+	const std::string& getIcon() const;
+
+	bool isPersistent() const;
 
 	const LLUUID& id() const
 	{
@@ -499,28 +499,12 @@ friend class LLNotifications;
 		return mTimestamp;
 	}
 
-	std::string getType() const
-	{
-		return (mTemplatep ? mTemplatep->mType : "");
-	}
-
+	std::string getType() const;
 	std::string getMessage() const;
 	std::string getLabel() const;
-
 	std::string getURL() const;
-//	{
-//		return (mTemplatep ? mTemplatep->mURL : "");
-//	}
-
-	S32 getURLOption() const
-	{
-		return (mTemplatep ? mTemplatep->mURLOption : -1);
-	}
-    
-	S32 getURLOpenExternally() const
-	{
-		return(mTemplatep? mTemplatep->mURLOpenExternally : -1);
-	}
+	S32 getURLOption() const;
+	S32 getURLOpenExternally() const;
 	
 	const LLNotificationFormPtr getForm();
 
@@ -590,7 +574,7 @@ friend class LLNotifications;
 	
 	std::string summarize() const;
 
-	bool hasUniquenessConstraints() const { return (mTemplatep ? mTemplatep->mUnique : false);}
+	bool hasUniquenessConstraints() const;
 
 	virtual ~LLNotification() {}
 };
@@ -872,7 +856,6 @@ class LLNotifications :
 	// load notification descriptions from file; 
 	// OK to call more than once because it will reload
 	bool loadTemplates();  
-	LLPointer<class LLXMLNode> checkForXMLTemplate(LLPointer<class LLXMLNode> item);
 	
 	// Add a simple notification (from XUI)
 	void addFromCallback(const LLSD& name);
@@ -894,6 +877,7 @@ class LLNotifications :
 
 	void add(const LLNotificationPtr pNotif);
 	void cancel(LLNotificationPtr pNotif);
+	void cancelByName(const std::string& name);
 	void update(const LLNotificationPtr pNotif);
 
 	LLNotificationPtr find(LLUUID uuid);
@@ -917,8 +901,6 @@ class LLNotifications :
 
 	// test for existence
 	bool templateExists(const std::string& name);
-	// useful if you're reloading the file
-	void clearTemplates();   // erase all templates
 
 	void forceResponse(const LLNotification::Params& params, S32 option);
 
@@ -956,9 +938,6 @@ class LLNotifications :
 
 	std::string mFileName;
 	
-	typedef std::map<std::string, LLPointer<class LLXMLNode> > XMLTemplateMap;
-	XMLTemplateMap mXmlTemplates;
-
 	LLNotificationMap mUniqueNotifications;
 	
 	typedef std::map<std::string, std::string> GlobalStringMap;
diff --git a/indra/llui/llnotificationslistener.cpp b/indra/llui/llnotificationslistener.cpp
index 44a90398fd956a42d259ffc9b4937638f9304f1b..3bbeb3a77845aae010cb1f40ade9f3b989f1ce18 100644
--- a/indra/llui/llnotificationslistener.cpp
+++ b/indra/llui/llnotificationslistener.cpp
@@ -29,6 +29,7 @@
 #include "linden_common.h"
 #include "llnotificationslistener.h"
 #include "llnotifications.h"
+#include "llnotificationtemplate.h"
 #include "llsd.h"
 #include "llui.h"
 
@@ -182,7 +183,11 @@ void LLNotificationsListener::ignore(const LLSD& params) const
     if (params["name"].isDefined())
     {
         // ["name"] was passed: ignore just that notification
-        LLUI::sSettingGroups["ignores"]->setBOOL(params["name"], ignore);
+		LLNotificationTemplatePtr templatep = mNotifications.getTemplate(params["name"]);
+		if (templatep)
+		{
+			templatep->mForm->setIgnored(ignore);
+		}
     }
     else
     {
diff --git a/indra/llui/llnotificationtemplate.h b/indra/llui/llnotificationtemplate.h
new file mode 100644
index 0000000000000000000000000000000000000000..6bc0d2aaffd358b3a3cd87746cd422f0a2eb294b
--- /dev/null
+++ b/indra/llui/llnotificationtemplate.h
@@ -0,0 +1,282 @@
+/**
+* @file llnotificationtemplate.h
+* @brief Description of notification contents
+* @author Q (with assistance from Richard and Coco)
+*
+* $LicenseInfo:firstyear=2008&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2010, Linden Research, Inc.
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+* 
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+* Lesser General Public License for more details.
+* 
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+* 
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+* $/LicenseInfo$
+*/
+
+#ifndef LL_LLNOTIFICATION_TEMPLATE_H
+#define LL_LLNOTIFICATION_TEMPLATE_H
+
+//#include <string>
+//#include <list>
+//#include <vector>
+//#include <map>
+//#include <set>
+//#include <iomanip>
+//#include <sstream>
+//
+//#include <boost/utility.hpp>
+//#include <boost/shared_ptr.hpp>
+//#include <boost/enable_shared_from_this.hpp>
+//#include <boost/type_traits.hpp>
+//
+//// we want to minimize external dependencies, but this one is important
+//#include "llsd.h"
+//
+//// and we need this to manage the notification callbacks
+//#include "llevents.h"
+//#include "llfunctorregistry.h"
+//#include "llpointer.h"
+#include "llinitparam.h"
+//#include "llnotificationslistener.h"
+//#include "llnotificationptr.h"
+//#include "llcachename.h"
+#include "llnotifications.h"
+
+
+typedef boost::shared_ptr<LLNotificationForm> LLNotificationFormPtr;
+
+// This is the class of object read from the XML file (notifications.xml, 
+// from the appropriate local language directory).
+struct LLNotificationTemplate
+{
+	struct GlobalString : public LLInitParam::Block<GlobalString>
+	{
+		Mandatory<std::string>	name,
+								value;
+
+		GlobalString()
+		:	name("name"),
+			value("value")
+		{}
+	};
+
+	struct UniquenessContext : public LLInitParam::Block<UniquenessContext>
+	{
+		Mandatory<std::string>	key;
+
+		UniquenessContext()
+		:	key("key")
+		{}
+		
+	};
+
+	struct UniquenessConstraint : public LLInitParam::Block<UniquenessConstraint>
+	{
+	private:
+		// this idiom allows 
+		// <notification unique="true">
+		// as well as
+		// <notification> <unique> <context key=""/> </unique>...
+		Optional<bool>			dummy_val;
+	public:
+		Multiple<UniquenessContext>	contexts;
+
+		UniquenessConstraint()
+		:	contexts("context"),
+			dummy_val("")
+		{}
+	};
+
+	// Templates are used to define common form types, such as OK/Cancel dialogs, etc.
+
+	struct Template : public LLInitParam::Block<Template>
+	{
+		Mandatory<std::string>					name;
+		Mandatory<LLNotificationForm::Params>	form;
+
+		Template()
+		:	name("name"),
+			form("form")
+		{}
+	};
+
+	// Reference a template to use its form elements
+	struct TemplateRef : public LLInitParam::Block<TemplateRef>
+	{
+		Mandatory<std::string>	name;
+		Optional<std::string>	yes_text,
+								no_text,
+								cancel_text,
+								ignore_text;
+
+		TemplateRef()
+		:	name("name"),
+			yes_text("yestext"),
+			no_text("notext"),
+			cancel_text("canceltext"),
+			ignore_text("ignoretext")
+		{}
+	};
+
+	struct URL : public LLInitParam::Block<URL>
+	{
+		Mandatory<S32>			option;
+		Mandatory<std::string>	value;
+		Optional<std::string>	target;
+		Ignored					name;
+
+		URL()
+		:	option("option", -1),
+			value("value"),
+			target("target", "_blank"),
+			name("name")
+		{}
+	};
+
+	struct FormRef : public LLInitParam::Choice<FormRef>
+	{
+		Alternative<LLNotificationForm::Params>		form;
+		Alternative<TemplateRef>					form_template;
+
+		FormRef()
+		:	form("form"),
+			form_template("usetemplate")
+		{}
+	};
+
+	struct Params : public LLInitParam::Block<Params>
+	{
+		Mandatory<std::string>			name;
+		Optional<bool>					persist;
+		Optional<std::string>			functor,
+										icon,
+										label,
+										sound,
+										type,
+										value;
+		Optional<U32>					duration;
+		Optional<S32>					expire_option;
+		Optional<URL>					url;
+		Optional<UniquenessConstraint>	unique;
+		Optional<FormRef>				form_ref;
+		Optional<ENotificationPriority, 
+			NotificationPriorityValues> priority;
+
+
+		Params()
+		:	name("name"),
+			persist("persist", false),
+			functor("functor"),
+			icon("icon"),
+			label("label"),
+			priority("priority"),
+			sound("sound"),
+			type("type"),
+			value("value"),
+			duration("duration"),
+			expire_option("expireOption", -1),
+			url("url"),
+			unique("unique"),
+			form_ref("")
+		{}
+
+	};
+
+	struct Notifications : public LLInitParam::Block<Notifications>
+	{
+		Multiple<GlobalString>	strings;
+		Multiple<Template>		templates;
+		Multiple<Params>		notifications;
+
+		Notifications()
+		:	strings("global"),
+			notifications("notification"),
+			templates("template")
+		{}
+	};
+
+	LLNotificationTemplate(const Params& p);
+    // the name of the notification -- the key used to identify it
+    // Ideally, the key should follow variable naming rules 
+    // (no spaces or punctuation).
+    std::string mName;
+    // The type of the notification
+    // used to control which queue it's stored in
+    std::string mType;
+    // The text used to display the notification. Replaceable parameters
+    // are enclosed in square brackets like this [].
+    std::string mMessage;
+	// The label for the notification; used for 
+	// certain classes of notification (those with a window and a window title). 
+	// Also used when a notification pops up underneath the current one.
+	// Replaceable parameters can be used in the label.
+	std::string mLabel;
+	// The name of the icon image. This should include an extension.
+	std::string mIcon;
+    // This is the Highlander bit -- "There Can Be Only One"
+    // An outstanding notification with this bit set
+    // is updated by an incoming notification with the same name,
+    // rather than creating a new entry in the queue.
+    // (used for things like progress indications, or repeating warnings
+    // like "the grid is going down in N minutes")
+    bool mUnique;
+    // if we want to be unique only if a certain part of the payload is constant
+    // specify the field names for the payload. The notification will only be
+    // combined if all of the fields named in the context are identical in the
+    // new and the old notification; otherwise, the notification will be
+    // duplicated. This is to support suppressing duplicate offers from the same
+    // sender but still differentiating different offers. Example: Invitation to
+    // conference chat.
+    std::vector<std::string> mUniqueContext;
+    // If this notification expires automatically, this value will be 
+    // nonzero, and indicates the number of seconds for which the notification
+    // will be valid (a teleport offer, for example, might be valid for 
+    // 300 seconds). 
+    U32 mExpireSeconds;
+    // if the offer expires, one of the options is chosen automatically
+    // based on its "value" parameter. This controls which one. 
+    // If expireSeconds is specified, expireOption should also be specified.
+    U32 mExpireOption;
+    // if the notification contains a url, it's stored here (and replaced 
+    // into the message where [_URL] is found)
+    std::string mURL;
+    // if there's a URL in the message, this controls which option visits
+    // that URL. Obsolete this and eliminate the buttons for affected
+    // messages when we allow clickable URLs in the UI
+    U32 mURLOption;
+	
+	std::string mURLTarget;
+	//This is a flag that tells if the url needs to open externally dispite 
+	//what the user setting is.
+	
+	// does this notification persist across sessions? if so, it will be
+	// serialized to disk on first receipt and read on startup
+	bool mPersist;
+	// This is the name of the default functor, if present, to be
+	// used for the notification's callback. It is optional, and used only if 
+	// the notification is constructed without an identified functor.
+	std::string mDefaultFunctor;
+	// The form data associated with a given notification (buttons, text boxes, etc)
+    LLNotificationFormPtr mForm;
+	// default priority for notifications of this type
+	ENotificationPriority mPriority;
+	// UUID of the audio file to be played when this notification arrives
+	// this is loaded as a name, but looked up to get the UUID upon template load.
+	// If null, it wasn't specified.
+	LLUUID mSoundEffect;
+};
+
+#endif //LL_LLNOTIFICATION_TEMPLATE_H
+
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index b2e08c48c5dcdf3e0c436e622b432359e7203866..c8e56630f1f301878b56670f5e2632fba575856e 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -35,6 +35,7 @@
 #include "llfontgl.h"
 #include "llrect.h"
 #include "llerror.h"
+#include "lldir.h"
 #include "lltimer.h"
 
 #include "llaccordionctrltab.h"
@@ -52,6 +53,8 @@
 #include "lltabcontainer.h"
 
 static LLDefaultChildRegistry::Register<LLPanel> r1("panel", &LLPanel::fromXML);
+LLPanel::factory_stack_t	LLPanel::sFactoryStack;
+
 
 // Compiler optimization, generate extern template
 template class LLPanel* LLView::getChild<class LLPanel>(
@@ -380,8 +383,7 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLXMLNodePtr output_
 
 	LLPanel* panelp = NULL;
 	
-	{
-		LLFastTimer timer(FTM_PANEL_CONSTRUCTION);
+	{	LLFastTimer _(FTM_PANEL_CONSTRUCTION);
 		
 		if(!class_attr.empty())
 		{
@@ -394,7 +396,7 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLXMLNodePtr output_
 
 		if (!panelp)
 		{
-			panelp = LLUICtrlFactory::getInstance()->createFactoryPanel(name);
+			panelp = createFactoryPanel(name);
 			llassert(panelp);
 			
 			if (!panelp)
@@ -407,20 +409,20 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parent, LLXMLNodePtr output_
 	// factory panels may have registered their own factory maps
 	if (!panelp->getFactoryMap().empty())
 	{
-		LLUICtrlFactory::instance().pushFactoryFunctions(&panelp->getFactoryMap());
+		sFactoryStack.push_back(&panelp->getFactoryMap());
 	}
 	// for local registry callbacks; define in constructor, referenced in XUI or postBuild
 	panelp->mCommitCallbackRegistrar.pushScope(); 
 	panelp->mEnableCallbackRegistrar.pushScope();
 
-	panelp->initPanelXML(node, parent, output_node);
+	panelp->initPanelXML(node, parent, output_node, LLUICtrlFactory::getDefaultParams<LLPanel>());
 	
 	panelp->mCommitCallbackRegistrar.popScope();
 	panelp->mEnableCallbackRegistrar.popScope();
 
 	if (!panelp->getFactoryMap().empty())
 	{
-		LLUICtrlFactory::instance().popFactoryFunctions();
+		sFactoryStack.pop_back();
 	}
 
 	return panelp;
@@ -444,8 +446,8 @@ void LLPanel::initFromParams(const LLPanel::Params& p)
 		setVisibleCallback(initCommitCallback(p.visible_callback));
 	}
 	
-	for (LLInitParam::ParamIterator<LocalizedString>::const_iterator it = p.strings().begin();
-		it != p.strings().end();
+	for (LLInitParam::ParamIterator<LocalizedString>::const_iterator it = p.strings.begin();
+		it != p.strings.end();
 		++it)
 	{
 		mUIStrings[it->name] = it->value;
@@ -487,11 +489,9 @@ static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup");
 static LLFastTimer::DeclareTimer FTM_EXTERNAL_PANEL_LOAD("Load Extern Panel Reference");
 static LLFastTimer::DeclareTimer FTM_PANEL_POSTBUILD("Panel PostBuild");
 
-BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node)
+BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node, const LLPanel::Params& default_params)
 {
-	const LLPanel::Params& default_params(LLUICtrlFactory::getDefaultParams<LLPanel>());
 	Params params(default_params);
-
 	{
 		LLFastTimer timer(FTM_PANEL_SETUP);
 
@@ -505,6 +505,8 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
 			setXMLFilename(xml_filename);
 		}
 
+		LLXUIParser parser;
+
 		if (!xml_filename.empty())
 		{
 			LLUICtrlFactory::instance().pushFileName(xml_filename);
@@ -514,12 +516,11 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
 			{
 				//if we are exporting, we want to export the current xml
 				//not the referenced xml
-				LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
+				parser.readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
 				Params output_params(params);
 				setupParamsForExport(output_params, parent);
 				output_node->setName(node->getName()->mString);
-				LLXUIParser::instance().writeXUI(
-					output_node, output_params, &default_params);
+				parser.writeXUI(output_node, output_params, &default_params);
 				return TRUE;
 			}
 		
@@ -530,7 +531,7 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
 				return FALSE;
 			}
 
-			LLXUIParser::instance().readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName());
+			parser.readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName());
 
 			// add children using dimensions from referenced xml for consistent layout
 			setShape(params.rect);
@@ -540,15 +541,14 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
 		}
 
 		// ask LLUICtrlFactory for filename, since xml_filename might be empty
-		LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
+		parser.readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
 
 		if (output_node)
 		{
 			Params output_params(params);
 			setupParamsForExport(output_params, parent);
 			output_node->setName(node->getName()->mString);
-			LLXUIParser::instance().writeXUI(
-				output_node, output_params, &default_params);
+			parser.writeXUI(output_node, output_params, &default_params);
 		}
 		
 		params.from_xui = true;
@@ -959,3 +959,89 @@ boost::signals2::connection LLPanel::setVisibleCallback( const commit_signal_t::
 
 	return mVisibleSignal->connect(cb);
 }
+
+static LLFastTimer::DeclareTimer FTM_BUILD_PANELS("Build Panels");
+
+//-----------------------------------------------------------------------------
+// buildPanel()
+//-----------------------------------------------------------------------------
+BOOL LLPanel::buildFromFile(const std::string& filename, LLXMLNodePtr output_node, const LLPanel::Params& default_params)
+{
+	LLFastTimer timer(FTM_BUILD_PANELS);
+	BOOL didPost = FALSE;
+	LLXMLNodePtr root;
+
+	//if exporting, only load the language being exported, 
+	//instead of layering localized version on top of english
+	if (output_node)
+	{	
+		if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
+		{
+			llwarns << "Couldn't parse panel from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename  << llendl;
+			return didPost;
+		}
+	}
+	else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
+	{
+		llwarns << "Couldn't parse panel from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
+		return didPost;
+	}
+
+	// root must be called panel
+	if( !root->hasName("panel" ) )
+	{
+		llwarns << "Root node should be named panel in : " << filename << llendl;
+		return didPost;
+	}
+
+	lldebugs << "Building panel " << filename << llendl;
+
+	LLUICtrlFactory::instance().pushFileName(filename);
+	{
+		if (!getFactoryMap().empty())
+		{
+			sFactoryStack.push_back(&getFactoryMap());
+		}
+		
+		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
+		getCommitCallbackRegistrar().pushScope();
+		getEnableCallbackRegistrar().pushScope();
+		
+		didPost = initPanelXML(root, NULL, output_node, default_params);
+
+		getCommitCallbackRegistrar().popScope();
+		getEnableCallbackRegistrar().popScope();
+		
+		setXMLFilename(filename);
+
+		if (!getFactoryMap().empty())
+		{
+			sFactoryStack.pop_back();
+		}
+	}
+	LLUICtrlFactory::instance().popFileName();
+	return didPost;
+}
+
+//-----------------------------------------------------------------------------
+// createFactoryPanel()
+//-----------------------------------------------------------------------------
+LLPanel* LLPanel::createFactoryPanel(const std::string& name)
+{
+	std::deque<const LLCallbackMap::map_t*>::iterator itor;
+	for (itor = sFactoryStack.begin(); itor != sFactoryStack.end(); ++itor)
+	{
+		const LLCallbackMap::map_t* factory_map = *itor;
+
+		// Look up this panel's name in the map.
+		LLCallbackMap::map_const_iter_t iter = factory_map->find( name );
+		if (iter != factory_map->end())
+		{
+			// Use the factory to create the panel, instead of using a default LLPanel.
+			LLPanel *ret = (LLPanel*) iter->second.mCallback( iter->second.mData );
+			return ret;
+		}
+	}
+	LLPanel::Params panel_p;
+	return LLUICtrlFactory::create<LLPanel>(panel_p);
+}
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index a7224648c146b5dfb5685f16250e2bbba3e55f9a..c1a1a06f39c02ed8ef36e6d3d4e4c108d0b04944 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -104,7 +104,10 @@ class LLPanel : public LLUICtrl
 	LLPanel(const LLPanel::Params& params = getDefaultParams());
 	
 public:
-// 	LLPanel(const std::string& name, const LLRect& rect = LLRect(), BOOL bordered = TRUE);
+	BOOL buildFromFile(const std::string &filename, LLXMLNodePtr output_node = NULL, const LLPanel::Params&default_params = getDefaultParams());
+
+	static LLPanel* createFactoryPanel(const std::string& name);
+
 	/*virtual*/ ~LLPanel();
 
 	// LLView interface
@@ -157,7 +160,7 @@ class LLPanel : public LLUICtrl
 	EnableCallbackRegistry::ScopedRegistrar& getEnableCallbackRegistrar() { return mEnableCallbackRegistrar; }
 	
 	void initFromParams(const Params& p);
-	BOOL initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node = NULL);
+	BOOL initPanelXML(	LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node, const LLPanel::Params& default_params);
 	
 	bool hasString(const std::string& name);
 	std::string getString(const std::string& name, const LLStringUtil::format_map_t& args) const;
@@ -256,6 +259,8 @@ class LLPanel : public LLUICtrl
 	commit_signal_t* mVisibleSignal;		// Called when visibility changes, passes new visibility as LLSD()
 
 	std::string		mHelpTopic;         // the name of this panel's help topic to display in the Help Viewer
+	typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
+	static factory_stack_t	sFactoryStack;
 	
 private:
 	BOOL			mBgVisible;				// any background at all?
@@ -285,4 +290,57 @@ extern template class LLPanel* LLView::getChild<class LLPanel>(
 	const std::string& name, BOOL recurse) const;
 #endif
 
+typedef boost::function<LLPanel* (void)> LLPanelClassCreatorFunc;
+
+// local static instance for registering a particular panel class
+
+class LLRegisterPanelClass
+:	public LLSingleton< LLRegisterPanelClass >
+{
+public:
+	// reigister with either the provided builder, or the generic templated builder
+	void addPanelClass(const std::string& tag,LLPanelClassCreatorFunc func)
+	{
+		mPanelClassesNames[tag] = func;
+	}
+
+	LLPanel* createPanelClass(const std::string& tag)
+	{
+		param_name_map_t::iterator iT =  mPanelClassesNames.find(tag);
+		if(iT == mPanelClassesNames.end())
+			return 0;
+		return iT->second();
+	}
+	template<typename T>
+	static T* defaultPanelClassBuilder()
+	{
+		T* pT = new T();
+		return pT;
+	}
+
+private:
+	typedef std::map< std::string, LLPanelClassCreatorFunc> param_name_map_t;
+	
+	param_name_map_t mPanelClassesNames;
+};
+
+
+// local static instance for registering a particular panel class
+template<typename T>
+class LLRegisterPanelClassWrapper
+:	public LLRegisterPanelClass
+{
+public:
+	// reigister with either the provided builder, or the generic templated builder
+	LLRegisterPanelClassWrapper(const std::string& tag);
+};
+
+
+template<typename T>
+LLRegisterPanelClassWrapper<T>::LLRegisterPanelClassWrapper(const std::string& tag) 
+{
+	LLRegisterPanelClass::instance().addPanelClass(tag,&LLRegisterPanelClass::defaultPanelClassBuilder<T>);
+}
+
+
 #endif
diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp
index 83c42a5ab8dac12a07b8612b1c3333d03f363fc1..cc348fdc63c2923e9d97d1978945ad71bdec69f2 100644
--- a/indra/llui/llradiogroup.cpp
+++ b/indra/llui/llradiogroup.cpp
@@ -100,8 +100,8 @@ LLRadioGroup::LLRadioGroup(const LLRadioGroup::Params& p)
 
 void LLRadioGroup::initFromParams(const Params& p)
 {
-	for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin();
-		it != p.items().end();
+	for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items.begin();
+		it != p.items.end();
 		++it)
 	{
 		LLRadioGroup::ItemParams item_params(*it);
diff --git a/indra/llui/llrngwriter.cpp b/indra/llui/llrngwriter.cpp
index 50b7bbab903c0199365dab1b13e9406609d1d313..5e6840d7df83e96cf92b2e2841eec1c805d5eb98 100644
--- a/indra/llui/llrngwriter.cpp
+++ b/indra/llui/llrngwriter.cpp
@@ -30,10 +30,15 @@
 #include "lluicolor.h"
 #include "lluictrlfactory.h"
 
+static 	LLInitParam::Parser::parser_read_func_map_t sReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs;
+
 //
 // LLRNGWriter - writes Relax NG schema files based on a param block
 //
 LLRNGWriter::LLRNGWriter()
+: Parser(sReadFuncs, sWriteFuncs, sInspectFuncs)
 {
 	// register various callbacks for inspecting the contents of a param block
 	registerInspectFunc<bool>(boost::bind(&LLRNGWriter::writeAttribute, this, "boolean", _1, _2, _3, _4));
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index 84e438cfb78ebd943464357011b0e3072ec395f4..7df7c13dc09bd662ce5d3d59292be0a8306fae03 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -259,15 +259,15 @@ LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p)
 	}
 
 	
-	for (LLInitParam::ParamIterator<LLScrollListColumn::Params>::const_iterator row_it = p.contents.columns().begin();
-		row_it != p.contents.columns().end();
+	for (LLInitParam::ParamIterator<LLScrollListColumn::Params>::const_iterator row_it = p.contents.columns.begin();
+		row_it != p.contents.columns.end();
 		++row_it)
 	{
 		addColumn(*row_it);
 	}
 
-	for (LLInitParam::ParamIterator<LLScrollListItem::Params>::const_iterator row_it = p.contents.rows().begin();
-		row_it != p.contents.rows().end();
+	for (LLInitParam::ParamIterator<LLScrollListItem::Params>::const_iterator row_it = p.contents.rows.begin();
+		row_it != p.contents.rows.end();
 		++row_it)
 	{
 		addRow(*row_it);
@@ -537,23 +537,7 @@ BOOL LLScrollListCtrl::addItem( LLScrollListItem* item, EAddPosition pos, BOOL r
 			setNeedsSort();
 			break;
 	
-		case ADD_SORTED:
-			{
-				// sort by column 0, in ascending order
-				std::vector<sort_column_t> single_sort_column;
-				single_sort_column.push_back(std::make_pair(0, TRUE));
-
-				mItemList.push_back(item);
-				std::stable_sort(
-					mItemList.begin(), 
-					mItemList.end(), 
-					SortScrollListItem(single_sort_column,mSortCallback));
-				
-				// ADD_SORTED just sorts by first column...
-				// this might not match user sort criteria, so flag list as being in unsorted state
-				setNeedsSort();
-				break;
-			}	
+		case ADD_DEFAULT:
 		case ADD_BOTTOM:
 			mItemList.push_back(item);
 			setNeedsSort();
@@ -2578,7 +2562,8 @@ BOOL	LLScrollListCtrl::canDeselect() const
 void LLScrollListCtrl::addColumn(const LLSD& column, EAddPosition pos)
 {
 	LLScrollListColumn::Params p;
-	LLParamSDParser::instance().readSD(column, p);
+	LLParamSDParser parser;
+	parser.readSD(column, p);
 	addColumn(p, pos);
 }
 
@@ -2764,31 +2749,35 @@ LLScrollListColumn* LLScrollListCtrl::getColumn(const std::string& name)
 	return NULL;
 }
 
-
+LLFastTimer::DeclareTimer FTM_ADD_SCROLLLIST_ELEMENT("Add Scroll List Item");
 LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition pos, void* userdata)
 {
+	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);
 	LLScrollListItem::Params item_params;
-	LLParamSDParser::instance().readSD(element, item_params);
+	LLParamSDParser parser;
+	parser.readSD(element, item_params);
 	item_params.userdata = userdata;
 	return addRow(item_params, pos);
 }
 
 LLScrollListItem* LLScrollListCtrl::addRow(const LLScrollListItem::Params& item_p, EAddPosition pos)
 {
+	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);
 	LLScrollListItem *new_item = new LLScrollListItem(item_p);
 	return addRow(new_item, item_p, pos);
 }
 
 LLScrollListItem* LLScrollListCtrl::addRow(LLScrollListItem *new_item, const LLScrollListItem::Params& item_p, EAddPosition pos)
 {
+	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);
 	if (!item_p.validateBlock() || !new_item) return NULL;
 	new_item->setNumColumns(mColumns.size());
 
 	// Add any columns we don't already have
 	S32 col_index = 0;
 
-	for(LLInitParam::ParamIterator<LLScrollListCell::Params>::const_iterator itor = item_p.columns().begin();
-		itor != item_p.columns().end();
+	for(LLInitParam::ParamIterator<LLScrollListCell::Params>::const_iterator itor = item_p.columns.begin();
+		itor != item_p.columns.end();
 		++itor)
 	{
 		LLScrollListCell::Params cell_p = *itor;
@@ -2839,7 +2828,7 @@ LLScrollListItem* LLScrollListCtrl::addRow(LLScrollListItem *new_item, const LLS
 		col_index++;
 	}
 
-	if (item_p.columns().empty())
+	if (item_p.columns.empty())
 	{
 		if (mColumns.empty())
 		{
diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp
index 54c3060c4a656536dba0c06b334586165b143dcd..f97f80ab6cb63c3c99b7e0950107a03e2a69f947 100644
--- a/indra/llui/llsdparam.cpp
+++ b/indra/llui/llsdparam.cpp
@@ -29,49 +29,42 @@
 
 // Project includes
 #include "llsdparam.h"
+#include "llsdutil.h"
+
+static 	LLInitParam::Parser::parser_read_func_map_t sReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs;
 
 //
 // LLParamSDParser
 //
 LLParamSDParser::LLParamSDParser()
+: Parser(sReadFuncs, sWriteFuncs, sInspectFuncs)
 {
 	using boost::bind;
 
-	registerParserFuncs<S32>(bind(&LLParamSDParser::readTypedValue<S32>, this, _1, &LLSD::asInteger),
-							bind(&LLParamSDParser::writeTypedValue<S32>, this, _1, _2));
-	registerParserFuncs<U32>(bind(&LLParamSDParser::readTypedValue<U32>, this, _1, &LLSD::asInteger),
-							bind(&LLParamSDParser::writeU32Param, this, _1, _2));
-	registerParserFuncs<F32>(bind(&LLParamSDParser::readTypedValue<F32>, this, _1, &LLSD::asReal),
-							bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
-	registerParserFuncs<F64>(bind(&LLParamSDParser::readTypedValue<F64>, this, _1, &LLSD::asReal),
-							bind(&LLParamSDParser::writeTypedValue<F64>, this, _1, _2));
-	registerParserFuncs<bool>(bind(&LLParamSDParser::readTypedValue<F32>, this, _1, &LLSD::asBoolean),
-							bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2));
-	registerParserFuncs<std::string>(bind(&LLParamSDParser::readTypedValue<std::string>, this, _1, &LLSD::asString),
-							bind(&LLParamSDParser::writeTypedValue<std::string>, this, _1, _2));
-	registerParserFuncs<LLUUID>(bind(&LLParamSDParser::readTypedValue<LLUUID>, this, _1, &LLSD::asUUID),
-							bind(&LLParamSDParser::writeTypedValue<LLUUID>, this, _1, _2));
-	registerParserFuncs<LLDate>(bind(&LLParamSDParser::readTypedValue<LLDate>, this, _1, &LLSD::asDate),
-							bind(&LLParamSDParser::writeTypedValue<LLDate>, this, _1, _2));
-	registerParserFuncs<LLURI>(bind(&LLParamSDParser::readTypedValue<LLURI>, this, _1, &LLSD::asURI),
-							bind(&LLParamSDParser::writeTypedValue<LLURI>, this, _1, _2));
-	registerParserFuncs<LLSD>(bind(&LLParamSDParser::readSDParam, this, _1),
-							bind(&LLParamSDParser::writeTypedValue<LLSD>, this, _1, _2));
-}
-
-bool LLParamSDParser::readSDParam(void* value_ptr)
-{
-	if (!mCurReadSD) return false;
-	*((LLSD*)value_ptr) = *mCurReadSD;
-	return true;
+	if (sReadFuncs.empty())
+	{
+		registerParserFuncs<S32>(readS32, &LLParamSDParser::writeTypedValue<S32>);
+		registerParserFuncs<U32>(readU32, &LLParamSDParser::writeU32Param);
+		registerParserFuncs<F32>(readF32, &LLParamSDParser::writeTypedValue<F32>);
+		registerParserFuncs<F64>(readF64, &LLParamSDParser::writeTypedValue<F64>);
+		registerParserFuncs<bool>(readBool, &LLParamSDParser::writeTypedValue<bool>);
+		registerParserFuncs<std::string>(readString, &LLParamSDParser::writeTypedValue<std::string>);
+		registerParserFuncs<LLUUID>(readUUID, &LLParamSDParser::writeTypedValue<LLUUID>);
+		registerParserFuncs<LLDate>(readDate, &LLParamSDParser::writeTypedValue<LLDate>);
+		registerParserFuncs<LLURI>(readURI, &LLParamSDParser::writeTypedValue<LLURI>);
+		registerParserFuncs<LLSD>(readSD, &LLParamSDParser::writeTypedValue<LLSD>);
+	}
 }
 
 // special case handling of U32 due to ambiguous LLSD::assign overload
-bool LLParamSDParser::writeU32Param(const void* val_ptr, const parser_t::name_stack_t& name_stack)
+bool LLParamSDParser::writeU32Param(LLParamSDParser::parser_t& parser, const void* val_ptr, const parser_t::name_stack_t& name_stack)
 {
-	if (!mWriteSD) return false;
+	LLParamSDParser& sdparser = static_cast<LLParamSDParser&>(parser);
+	if (!sdparser.mWriteRootSD) return false;
 	
-	LLSD* sd_to_write = getSDWriteNode(name_stack);
+	LLSD* sd_to_write = sdparser.getSDWriteNode(name_stack);
 	if (!sd_to_write) return false;
 
 	sd_to_write->assign((S32)*((const U32*)val_ptr));
@@ -89,7 +82,8 @@ void LLParamSDParser::readSD(const LLSD& sd, LLInitParam::BaseBlock& block, bool
 
 void LLParamSDParser::writeSD(LLSD& sd, const LLInitParam::BaseBlock& block)
 {
-	mWriteSD = &sd;
+	mNameStack.clear();
+	mWriteRootSD = &sd;
 	block.serializeBlock(*this);
 }
 
@@ -139,6 +133,155 @@ void LLParamSDParser::readSDValues(const LLSD& sd, LLInitParam::BaseBlock& block
 LLSD* LLParamSDParser::getSDWriteNode(const parser_t::name_stack_t& name_stack)
 {
 	//TODO: implement nested LLSD writing
-	return mWriteSD;
+	LLSD* sd_to_write = mWriteRootSD;
+	bool new_traversal = false;
+	for (name_stack_t::const_iterator it = name_stack.begin(), prev_it = mNameStack.begin();
+		it != name_stack.end();
+		++it)
+	{
+		bool new_array_entry = false;
+		if (prev_it == mNameStack.end())
+		{
+			new_traversal = true;
+		}
+		else
+		{
+			if (!new_traversal						// have not diverged yet from previous trace
+				&& prev_it->first == it->first		// names match
+				&& prev_it->second != it->second)	// versions differ
+			{
+				// name stacks match, but version numbers differ in last place.
+				// create a different entry at this point using an LLSD array
+				new_array_entry = true;
+			}
+			if (prev_it->first != it->first			// names differ
+				|| prev_it->second != it->second)	// versions differ
+			{
+				// at this point we have diverged from our last trace
+				// so any elements referenced here are new
+				new_traversal = true;
+			}
+		}
+
+		LLSD* child_sd = &(*sd_to_write)[it->first];
+
+		if (child_sd->isArray())
+		{
+			if (new_traversal)
+			{
+				// write to new element at end
+				sd_to_write = &(*child_sd)[child_sd->size()];
+			}
+			else
+			{
+				// write to last of existing elements, or first element if empty
+				sd_to_write = &(*child_sd)[llmax(0, child_sd->size() - 1)];
+			}
+		}
+		else
+		{
+			if (new_array_entry && !child_sd->isArray())
+			{
+				// copy child contents into first element of an array
+				LLSD new_array = LLSD::emptyArray();
+				new_array.append(*child_sd);
+				// assign array to slot that previously held the single value
+				*child_sd = new_array;
+				// return next element in that array
+				sd_to_write = &((*child_sd)[1]);
+			}
+			else
+			{
+				sd_to_write = child_sd;
+			}
+		}
+		if (prev_it != mNameStack.end())
+		{
+			++prev_it;
+		}
+	}
+	mNameStack = name_stack;
+	
+	//llinfos << ll_pretty_print_sd(*mWriteRootSD) << llendl;
+	return sd_to_write;
+}
+
+bool LLParamSDParser::readS32(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((S32*)val_ptr) = self.mCurReadSD->asInteger();
+    return true;
+}
+
+bool LLParamSDParser::readU32(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((U32*)val_ptr) = self.mCurReadSD->asInteger();
+    return true;
+}
+
+bool LLParamSDParser::readF32(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((F32*)val_ptr) = self.mCurReadSD->asReal();
+    return true;
+}
+
+bool LLParamSDParser::readF64(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((F64*)val_ptr) = self.mCurReadSD->asReal();
+    return true;
+}
+
+bool LLParamSDParser::readBool(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+    *((bool*)val_ptr) = self.mCurReadSD->asBoolean();
+    return true;
+}
+
+bool LLParamSDParser::readString(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((std::string*)val_ptr) = self.mCurReadSD->asString();
+    return true;
 }
 
+bool LLParamSDParser::readUUID(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((LLUUID*)val_ptr) = self.mCurReadSD->asUUID();
+    return true;
+}
+
+bool LLParamSDParser::readDate(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((LLDate*)val_ptr) = self.mCurReadSD->asDate();
+    return true;
+}
+
+bool LLParamSDParser::readURI(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((LLURI*)val_ptr) = self.mCurReadSD->asURI();
+    return true;
+}
+
+bool LLParamSDParser::readSD(Parser& parser, void* val_ptr)
+{
+	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser);
+
+	*((LLSD*)val_ptr) = *self.mCurReadSD;
+    return true;
+}
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index e028fc30c24b8bed72f800066213f76c823b8623..97e8b58e492bd61d574ad0b61e479d2e80f3a8cb 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -31,17 +31,14 @@
 #include "llinitparam.h"
 
 class LLParamSDParser 
-:	public LLInitParam::Parser, 
-	public LLSingleton<LLParamSDParser>
+:	public LLInitParam::Parser
 {
 LOG_CLASS(LLParamSDParser);
 
 typedef LLInitParam::Parser parser_t;
 
-protected:
-	LLParamSDParser();
-	friend class LLSingleton<LLParamSDParser>;
 public:
+	LLParamSDParser();
 	void readSD(const LLSD& sd, LLInitParam::BaseBlock& block, bool silent = false);
 	void writeSD(LLSD& sd, const LLInitParam::BaseBlock& block);
 
@@ -51,20 +48,12 @@ typedef LLInitParam::Parser parser_t;
 	void readSDValues(const LLSD& sd, LLInitParam::BaseBlock& block);
 
 	template<typename T>
-	bool readTypedValue(void* val_ptr, boost::function<T(const LLSD&)> parser_func)
-    {
-	    if (!mCurReadSD) return false;
-
-	    *((T*)val_ptr) = parser_func(*mCurReadSD);
-	    return true;
-    }
-
-	template<typename T>
-	bool writeTypedValue(const void* val_ptr, const parser_t::name_stack_t& name_stack)
+	static bool writeTypedValue(Parser& parser, const void* val_ptr, const parser_t::name_stack_t& name_stack)
 	{
-		if (!mWriteSD) return false;
+		LLParamSDParser& sdparser = static_cast<LLParamSDParser&>(parser);
+		if (!sdparser.mWriteRootSD) return false;
 		
-		LLSD* sd_to_write = getSDWriteNode(name_stack);
+		LLSD* sd_to_write = sdparser.getSDWriteNode(name_stack);
 		if (!sd_to_write) return false;
 
 		sd_to_write->assign(*((const T*)val_ptr));
@@ -73,12 +62,23 @@ typedef LLInitParam::Parser parser_t;
 
 	LLSD* getSDWriteNode(const parser_t::name_stack_t& name_stack);
 
-	bool readSDParam(void* value_ptr);
-	bool writeU32Param(const void* value_ptr, const parser_t::name_stack_t& name_stack);
+	static bool writeU32Param(Parser& parser, const void* value_ptr, const parser_t::name_stack_t& name_stack);
+
+	static bool readS32(Parser& parser, void* val_ptr);
+	static bool readU32(Parser& parser, void* val_ptr);
+	static bool readF32(Parser& parser, void* val_ptr);
+	static bool readF64(Parser& parser, void* val_ptr);
+	static bool readBool(Parser& parser, void* val_ptr);
+	static bool readString(Parser& parser, void* val_ptr);
+	static bool readUUID(Parser& parser, void* val_ptr);
+	static bool readDate(Parser& parser, void* val_ptr);
+	static bool readURI(Parser& parser, void* val_ptr);
+	static bool readSD(Parser& parser, void* val_ptr);
 
 	Parser::name_stack_t	mNameStack;
 	const LLSD*				mCurReadSD;
-	LLSD*					mWriteSD;
+	LLSD*					mWriteRootSD;
+	LLSD*					mCurWriteSD;
 };
 
 template<typename T>
@@ -88,7 +88,8 @@ class LLSDParamAdapter : public T
 		LLSDParamAdapter() {}
 		LLSDParamAdapter(const LLSD& sd)
 		{
-			LLParamSDParser::instance().readSD(sd, *this);
+			LLParamSDParser parser;
+			parser.readSD(sd, *this);
 		}
 		
 		LLSDParamAdapter(const T& val)
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index e5dfecad5490037e45dd9a2308493a8ae8f1816e..1fa449a1827a1232d0ed8998019bc8230dcb92da 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -235,6 +235,7 @@ class LLTextBase
 public:
 	friend class LLTextSegment;
 	friend class LLNormalTextSegment;
+	friend class LLUICtrlFactory;
 
 	struct LineSpacingParams : public LLInitParam::Choice<LineSpacingParams>
 	{
diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
index b02d3122fe1592b94a97135a6177f0db1dc7923f..639003979479a4b90d9db9ee429ed43a0dbd880b 100644
--- a/indra/llui/lltooltip.cpp
+++ b/indra/llui/lltooltip.cpp
@@ -78,9 +78,9 @@ BOOL LLToolTipView::handleHover(S32 x, S32 y, MASK mask)
 
 	LLToolTipMgr& tooltip_mgr = LLToolTipMgr::instance();
 
-	if (x != last_x && y != last_y)
+	if (x != last_x && y != last_y && !tooltip_mgr.getMouseNearRect().pointInRect(x, y))
 	{
-		// allow new tooltips because mouse moved
+		// allow new tooltips because mouse moved outside of mouse near rect
 		tooltip_mgr.unblockToolTips();
 	}
 
@@ -276,8 +276,8 @@ void LLToolTip::initFromParams(const LLToolTip::Params& p)
 
 	if (p.styled_message.isProvided())
 	{
-		for (LLInitParam::ParamIterator<LLToolTip::StyledText>::const_iterator text_it = p.styled_message().begin();
-			text_it != p.styled_message().end();
+		for (LLInitParam::ParamIterator<LLToolTip::StyledText>::const_iterator text_it = p.styled_message.begin();
+			text_it != p.styled_message.end();
 			++text_it)
 		{
 			mTextBox->appendText(text_it->text(), false, text_it->style);
@@ -580,6 +580,7 @@ void LLToolTipMgr::updateToolTipVisibility()
 		if (mToolTip->getVisibleTime() > tooltip_timeout)
 		{
 			hideToolTips();
+			unblockToolTips();
 		}
 	}
 }
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index d33d8e31785c83fe91f247046031d4d773fc43d9..ff9af21e545eb762ec7a33874532a2d4c7b590b0 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -1796,7 +1796,8 @@ void LLUI::setupPaths()
 	LLXMLNodePtr root;
 	BOOL success  = LLXMLNode::parseFile(filename, root, NULL);
 	Paths paths;
-	LLXUIParser::instance().readXUI(root, paths, filename);
+	LLXUIParser parser;
+	parser.readXUI(root, paths, filename);
 
 	sXUIPaths.clear();
 	
@@ -1805,14 +1806,14 @@ void LLUI::setupPaths()
 		LLStringUtil::format_map_t path_args;
 		path_args["[LANGUAGE]"] = LLUI::getLanguage();
 		
-		for (LLInitParam::ParamIterator<Directory>::const_iterator it = paths.directories().begin(), 
-				end_it = paths.directories().end();
+		for (LLInitParam::ParamIterator<Directory>::const_iterator it = paths.directories.begin(), 
+				end_it = paths.directories.end();
 			it != end_it;
 			++it)
 		{
 			std::string path_val_ui;
-			for (LLInitParam::ParamIterator<SubDir>::const_iterator subdir_it = it->subdirs().begin(),
-					subdir_end_it = it->subdirs().end();
+			for (LLInitParam::ParamIterator<SubDir>::const_iterator subdir_it = it->subdirs.begin(),
+					subdir_end_it = it->subdirs.end();
 				subdir_it != subdir_end_it;)
 			{
 				path_val_ui += subdir_it->value();
diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp
index 9891e38f7b212aa9e53a2310c6d3b8b97e4d3342..0641f6d17588ffec708569846d0e40cf4569f080 100644
--- a/indra/llui/lluicolortable.cpp
+++ b/indra/llui/lluicolortable.cpp
@@ -56,8 +56,8 @@ void LLUIColorTable::insertFromParams(const Params& p, string_color_map_t& table
 	typedef std::map<std::string, std::string> string_string_map_t;
 	string_string_map_t unresolved_refs;
 
-	for(LLInitParam::ParamIterator<ColorEntryParams>::const_iterator it = p.color_entries().begin();
-		it != p.color_entries().end();
+	for(LLInitParam::ParamIterator<ColorEntryParams>::const_iterator it = p.color_entries.begin();
+		it != p.color_entries.end();
 		++it)
 	{
 		ColorEntryParams color_entry = *it;
@@ -237,7 +237,8 @@ void LLUIColorTable::saveUserSettings() const
 	}
 
 	LLXMLNodePtr output_node = new LLXMLNode("colors", false);
-	LLXUIParser::instance().writeXUI(output_node, params);
+	LLXUIParser parser;
+	parser.writeXUI(output_node, params);
 
 	if(!output_node->isNull())
 	{
@@ -303,7 +304,8 @@ bool LLUIColorTable::loadFromFilename(const std::string& filename, string_color_
 	}
 
 	Params params;
-	LLXUIParser::instance().readXUI(root, params, filename);
+	LLXUIParser parser;
+	parser.readXUI(root, params, filename);
 
 	if(params.validateBlock())
 	{
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index 15a382660ec5a6f06ddc5540605a50114e7feb54..5de96f9d48a0eaf588dffb5acdcf0fea50664256 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -42,7 +42,7 @@
 #include "llquaternion.h"
 
 // this library includes
-#include "llfloater.h"
+#include "llpanel.h"
 
 LLFastTimer::DeclareTimer FTM_WIDGET_CONSTRUCTION("Widget Construction");
 LLFastTimer::DeclareTimer FTM_INIT_FROM_PARAMS("Widget InitFromParams");
@@ -93,10 +93,12 @@ void LLUICtrlFactory::loadWidgetTemplate(const std::string& widget_tag, LLInitPa
 	std::string filename = std::string("widgets") + gDirUtilp->getDirDelimiter() + widget_tag + ".xml";
 	LLXMLNodePtr root_node;
 
-	if (LLUICtrlFactory::getLayeredXMLNode(filename, root_node))
+	std::string full_filename = gDirUtilp->findSkinnedFilename(LLUI::getXUIPaths().front(), filename);
+	if (!full_filename.empty())
 	{
-		LLUICtrlFactory::instance().pushFileName(filename);
-		LLXUIParser::instance().readXUI(root_node, block, filename);
+		LLUICtrlFactory::instance().pushFileName(full_filename);
+		LLSimpleXUIParser parser;
+		parser.readXUI(full_filename, block);
 		LLUICtrlFactory::instance().popFileName();
 	}
 }
@@ -171,70 +173,6 @@ bool LLUICtrlFactory::getLocalizedXMLNode(const std::string &xui_filename, LLXML
 	}
 }
 
-static LLFastTimer::DeclareTimer FTM_BUILD_FLOATERS("Build Floaters");
-
-//-----------------------------------------------------------------------------
-// buildFloater()
-//-----------------------------------------------------------------------------
-bool LLUICtrlFactory::buildFloater(LLFloater* floaterp, const std::string& filename, LLXMLNodePtr output_node)
-{
-	LLFastTimer timer(FTM_BUILD_FLOATERS);
-	LLXMLNodePtr root;
-
-	//if exporting, only load the language being exported, 
-	//instead of layering localized version on top of english
-	if (output_node)
-	{
-		if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
-		{
-			llwarns << "Couldn't parse floater from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
-			return false;
-		}
-	}
-	else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
-	{
-		llwarns << "Couldn't parse floater from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
-		return false;
-	}
-	
-	// root must be called floater
-	if( !(root->hasName("floater") || root->hasName("multi_floater")) )
-	{
-		llwarns << "Root node should be named floater in: " << filename << llendl;
-		return false;
-	}
-	
-	bool res = true;
-	
-	lldebugs << "Building floater " << filename << llendl;
-	pushFileName(filename);
-	{
-		if (!floaterp->getFactoryMap().empty())
-		{
-			mFactoryStack.push_front(&floaterp->getFactoryMap());
-		}
-
-		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
-		floaterp->getCommitCallbackRegistrar().pushScope();
-		floaterp->getEnableCallbackRegistrar().pushScope();
-		
-		res = floaterp->initFloaterXML(root, floaterp->getParent(), filename, output_node);
-
-		floaterp->setXMLFilename(filename);
-		
-		floaterp->getCommitCallbackRegistrar().popScope();
-		floaterp->getEnableCallbackRegistrar().popScope();
-		
-		if (!floaterp->getFactoryMap().empty())
-		{
-			mFactoryStack.pop_front();
-		}
-	}
-	popFileName();
-	
-	return res;
-}
-
 //-----------------------------------------------------------------------------
 // saveToXML()
 //-----------------------------------------------------------------------------
@@ -243,69 +181,6 @@ S32 LLUICtrlFactory::saveToXML(LLView* viewp, const std::string& filename)
 	return 0;
 }
 
-static LLFastTimer::DeclareTimer FTM_BUILD_PANELS("Build Panels");
-
-//-----------------------------------------------------------------------------
-// buildPanel()
-//-----------------------------------------------------------------------------
-BOOL LLUICtrlFactory::buildPanel(LLPanel* panelp, const std::string& filename, LLXMLNodePtr output_node)
-{
-	LLFastTimer timer(FTM_BUILD_PANELS);
-	BOOL didPost = FALSE;
-	LLXMLNodePtr root;
-
-	//if exporting, only load the language being exported, 
-	//instead of layering localized version on top of english
-	if (output_node)
-	{	
-		if (!LLUICtrlFactory::getLocalizedXMLNode(filename, root))
-		{
-			llwarns << "Couldn't parse panel from: " << LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + filename  << llendl;
-			return didPost;
-		}
-	}
-	else if (!LLUICtrlFactory::getLayeredXMLNode(filename, root))
-	{
-		llwarns << "Couldn't parse panel from: " << LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + filename << llendl;
-		return didPost;
-	}
-
-	// root must be called panel
-	if( !root->hasName("panel" ) )
-	{
-		llwarns << "Root node should be named panel in : " << filename << llendl;
-		return didPost;
-	}
-
-	lldebugs << "Building panel " << filename << llendl;
-
-	pushFileName(filename);
-	{
-		if (!panelp->getFactoryMap().empty())
-		{
-			mFactoryStack.push_front(&panelp->getFactoryMap());
-		}
-		
-		 // for local registry callbacks; define in constructor, referenced in XUI or postBuild
-		panelp->getCommitCallbackRegistrar().pushScope();
-		panelp->getEnableCallbackRegistrar().pushScope();
-		
-		didPost = panelp->initPanelXML(root, NULL, output_node);
-
-		panelp->getCommitCallbackRegistrar().popScope();
-		panelp->getEnableCallbackRegistrar().popScope();
-		
-		panelp->setXMLFilename(filename);
-
-		if (!panelp->getFactoryMap().empty())
-		{
-			mFactoryStack.pop_front();
-		}
-	}
-	popFileName();
-	return didPost;
-}
-
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
@@ -337,29 +212,6 @@ LLView *LLUICtrlFactory::createFromXML(LLXMLNodePtr node, LLView* parent, const
 	return view;
 }
 
-//-----------------------------------------------------------------------------
-// createFactoryPanel()
-//-----------------------------------------------------------------------------
-LLPanel* LLUICtrlFactory::createFactoryPanel(const std::string& name)
-{
-	std::deque<const LLCallbackMap::map_t*>::iterator itor;
-	for (itor = mFactoryStack.begin(); itor != mFactoryStack.end(); ++itor)
-	{
-		const LLCallbackMap::map_t* factory_map = *itor;
-
-		// Look up this panel's name in the map.
-		LLCallbackMap::map_const_iter_t iter = factory_map->find( name );
-		if (iter != factory_map->end())
-		{
-			// Use the factory to create the panel, instead of using a default LLPanel.
-			LLPanel *ret = (LLPanel*) iter->second.mCallback( iter->second.mData );
-			return ret;
-		}
-	}
-	LLPanel::Params panel_p;
-	return create<LLPanel>(panel_p);
-}
-
 std::string LLUICtrlFactory::getCurFileName() 
 { 
 	return mFileNames.empty() ? "" : gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + mFileNames.back(); 
@@ -376,36 +228,6 @@ void LLUICtrlFactory::popFileName()
 	mFileNames.pop_back(); 
 }
 
-
-//-----------------------------------------------------------------------------
-
-//static
-BOOL LLUICtrlFactory::getAttributeColor(LLXMLNodePtr node, const std::string& name, LLColor4& color)
-{
-	std::string colorstring;
-	BOOL res = node->getAttributeString(name.c_str(), colorstring);
-	if (res)
-	{
-		if (LLUIColorTable::instance().colorExists(colorstring))
-		{
-			color.setVec(LLUIColorTable::instance().getColor(colorstring));
-		}
-		else
-		{
-			res = FALSE;
-		}
-	}
-	if (!res)
-	{
-		res = LLColor4::parseColor(colorstring, &color);
-	}	
-	if (!res)
-	{
-		res = node->getAttributeColor(name.c_str(), color);
-	}
-	return res;
-}
-
 //static
 void LLUICtrlFactory::setCtrlParent(LLView* view, LLView* parent, S32 tab_group)
 {
@@ -421,28 +243,22 @@ std::string LLUICtrlFactory::findSkinnedFilename(const std::string& filename)
 	return gDirUtilp->findSkinnedFilename(LLUI::getSkinPath(), filename);
 }
 
-void LLUICtrlFactory::pushFactoryFunctions(const LLCallbackMap::map_t* map)
-{
-	mFactoryStack.push_back(map);
-}
-
-void LLUICtrlFactory::popFactoryFunctions()
-{
-	if (!mFactoryStack.empty())
-	{
-		mFactoryStack.pop_back();
-	}
-}
-
 //static 
 void LLUICtrlFactory::copyName(LLXMLNodePtr src, LLXMLNodePtr dest)
 {
 	dest->setName(src->getName()->mString);
 }
 
+template<typename T>
+const LLInitParam::BaseBlock& get_empty_param_block()
+{
+	static typename T::Params params;
+	return params;
+}
+
 // adds a widget and its param block to various registries
 //static 
-void LLUICtrlFactory::registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, dummy_widget_creator_func_t creator_func, const std::string& tag)
+void LLUICtrlFactory::registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, const std::string& tag)
 {
 	// associate parameter block type with template .xml file
 	std::string* existing_tag = LLWidgetNameRegistry::instance().getValue(param_block_type);
@@ -462,17 +278,9 @@ void LLUICtrlFactory::registerWidget(const std::type_info* widget_type, const st
 		}
 	}
 	LLWidgetNameRegistry::instance().defaultRegistrar().add(param_block_type, tag);
-	// associate widget type with factory function
-	LLDefaultWidgetRegistry::instance().defaultRegistrar().add(widget_type, creator_func);
 	//FIXME: comment this in when working on schema generation
 	//LLWidgetTypeRegistry::instance().defaultRegistrar().add(tag, widget_type);
-	//LLDefaultParamBlockRegistry::instance().defaultRegistrar().add(widget_type, &getEmptyParamBlock<T>);
-}
-
-//static
-dummy_widget_creator_func_t* LLUICtrlFactory::getDefaultWidgetFunc(const std::type_info* widget_type)
-{
-	return LLDefaultWidgetRegistry::instance().getValue(widget_type);
+	//LLDefaultParamBlockRegistry::instance().defaultRegistrar().add(widget_type, &get_empty_param_block<T>);
 }
 
 //static 
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index 58ec5d8387208635a3fb2b35a42d35c69e25c8a0..499b97f52d4db7f7dfa9bd75c13e70fea9671fff 100644
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -27,24 +27,13 @@
 #ifndef LLUICTRLFACTORY_H
 #define LLUICTRLFACTORY_H
 
-#include "llcallbackmap.h"
+#include "llfasttimer.h"
 #include "llinitparam.h"
 #include "llregistry.h"
-#include "v4color.h"
-#include "llfasttimer.h"
-
 #include "llxuiparser.h"
 
-#include <boost/function.hpp>
-#include <iosfwd>
-#include <stack>
-#include <set>
-
-class LLPanel;
-class LLFloater;
 class LLView;
 
-
 // sort functor for typeid maps
 struct LLCompareTypeID
 {
@@ -85,12 +74,6 @@ class LLWidgetNameRegistry
 :	public LLRegistrySingleton<const std::type_info*, std::string, LLWidgetNameRegistry , LLCompareTypeID>
 {};
 
-// lookup factory functions for default widget instances by widget type
-typedef LLView* (*dummy_widget_creator_func_t)(const std::string&);
-class LLDefaultWidgetRegistry
-:	public LLRegistrySingleton<const std::type_info*, dummy_widget_creator_func_t, LLDefaultWidgetRegistry, LLCompareTypeID>
-{};
-
 // lookup function for generating empty param block by widget type
 // this is used for schema generation
 //typedef const LLInitParam::BaseBlock& (*empty_param_block_func_t)();
@@ -157,58 +140,21 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 		return ParamDefaults<typename T::Params, 0>::instance().get();
 	}
 
-	bool buildFloater(LLFloater* floaterp, const std::string &filename, LLXMLNodePtr output_node);
-	BOOL buildPanel(LLPanel* panelp, const std::string &filename, LLXMLNodePtr output_node = NULL);
-
 	// Does what you want for LLFloaters and LLPanels
 	// Returns 0 on success
 	S32 saveToXML(LLView* viewp, const std::string& filename);
 
+	// filename tracking for debugging info
 	std::string getCurFileName();
 	void pushFileName(const std::string& name);
 	void popFileName();
 
-	static BOOL getAttributeColor(LLXMLNodePtr node, const std::string& name, LLColor4& color);
-
-	LLPanel* createFactoryPanel(const std::string& name);
-
-	void pushFactoryFunctions(const LLCallbackMap::map_t* map);
-	void popFactoryFunctions();
-
-	template<typename T>
-	static T* createWidget(const typename T::Params& params, LLView* parent = NULL)
-	{
-		T* widget = NULL;
-
-		if (!params.validateBlock())
-		{
-			llwarns << getInstance()->getCurFileName() << ": Invalid parameter block for " << typeid(T).name() << llendl;
-			//return NULL;
-		}
-
-		{
-			LLFastTimer timer(FTM_WIDGET_CONSTRUCTION);
-			widget = new T(params);	
-		}
-		{
-			LLFastTimer timer(FTM_INIT_FROM_PARAMS);
-			widget->initFromParams(params);
-		}
-
-		if (parent)
-		{
-			S32 tab_group = params.tab_group.isProvided() ? params.tab_group() : S32_MAX;
-			setCtrlParent(widget, parent, tab_group);
-		}
-		return widget;
-	}
-
 	template<typename T>
 	static T* create(typename T::Params& params, LLView* parent = NULL)
 	{
 		params.fillFrom(ParamDefaults<typename T::Params, 0>::instance().get());
 
-		T* widget = createWidget<T>(params, parent);
+		T* widget = createWidgetImpl<T>(params, parent);
 		if (widget)
 		{
 			widget->postBuild();
@@ -266,21 +212,54 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 	template<class T>
 	static T* getDefaultWidget(const std::string& name)
 	{
-		dummy_widget_creator_func_t* dummy_func = getDefaultWidgetFunc(&typeid(T));
-		return dummy_func ? dynamic_cast<T*>((*dummy_func)(name)) : NULL;
+		typename T::Params widget_params;
+		widget_params.name = name;
+		return create<T>(widget_params);
 	}
 
-	template <class T> 
-	static LLView* createDefaultWidget(const std::string& name) 
-	{
-		typename T::Params params;
-		params.name(name);
-		
-		return create<T>(params);
-	}
+	static void createChildren(LLView* viewp, LLXMLNodePtr node, const widget_registry_t&, LLXMLNodePtr output_node = NULL);
+
+	static bool getLayeredXMLNode(const std::string &filename, LLXMLNodePtr& root);
+	static bool getLocalizedXMLNode(const std::string &xui_filename, LLXMLNodePtr& root);
+
+private:
+	//NOTE: both friend declarations are necessary to keep both gcc and msvc happy
+	template <typename T> friend class LLChildRegistry;
+	template <typename T> template <typename U> friend class LLChildRegistry<T>::Register;
 
 	static void copyName(LLXMLNodePtr src, LLXMLNodePtr dest);
 
+	// helper function for adding widget type info to various registries
+	static void registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, const std::string& tag);
+
+	static void loadWidgetTemplate(const std::string& widget_tag, LLInitParam::BaseBlock& block);
+
+	template<typename T>
+	static T* createWidgetImpl(const typename T::Params& params, LLView* parent = NULL)
+	{
+		T* widget = NULL;
+
+		if (!params.validateBlock())
+		{
+			llwarns << getInstance()->getCurFileName() << ": Invalid parameter block for " << typeid(T).name() << llendl;
+			//return NULL;
+		}
+
+		{ LLFastTimer _(FTM_WIDGET_CONSTRUCTION);
+			widget = new T(params);	
+		}
+		{ LLFastTimer _(FTM_INIT_FROM_PARAMS);
+			widget->initFromParams(params);
+		}
+
+		if (parent)
+		{
+			S32 tab_group = params.tab_group.isProvided() ? params.tab_group() : S32_MAX;
+			setCtrlParent(widget, parent, tab_group);
+		}
+		return widget;
+	}
+
 	template<typename T>
 	static T* defaultBuilder(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr output_node)
 	{
@@ -288,7 +267,8 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 
 		typename T::Params params(getDefaultParams<T>());
 
-		LLXUIParser::instance().readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
+		LLXUIParser parser;
+		parser.readXUI(node, params, LLUICtrlFactory::getInstance()->getCurFileName());
 
 		if (output_node)
 		{
@@ -298,14 +278,13 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 			// Export only the differences between this any default params
 			typename T::Params default_params(getDefaultParams<T>());
 			copyName(node, output_node);
-			LLXUIParser::instance().writeXUI(
-				output_node, output_params, &default_params);
+			parser.writeXUI(output_node, output_params, &default_params);
 		}
 
 		// Apply layout transformations, usually munging rect
 		params.from_xui = true;
 		T::applyXUILayout(params, parent);
-		T* widget = createWidget<T>(params, parent);
+		T* widget = createWidgetImpl<T>(params, parent);
 
 		typedef typename T::child_registry_t registry_t;
 
@@ -320,20 +299,6 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 		return widget;
 	}
 
-	static void createChildren(LLView* viewp, LLXMLNodePtr node, const widget_registry_t&, LLXMLNodePtr output_node = NULL);
-
-	static bool getLayeredXMLNode(const std::string &filename, LLXMLNodePtr& root);
-	
-	static bool getLocalizedXMLNode(const std::string &xui_filename, LLXMLNodePtr& root);
-
-	static void loadWidgetTemplate(const std::string& widget_tag, LLInitParam::BaseBlock& block);
-
-	// helper function for adding widget type info to various registries
-	static void registerWidget(const std::type_info* widget_type, const std::type_info* param_block_type, dummy_widget_creator_func_t creator_func, const std::string& tag);
-
-private:
-	// return default widget instance factory func for a given type
-	static dummy_widget_creator_func_t* getDefaultWidgetFunc(const std::type_info* widget_type);
 
 	static const std::string* getWidgetTag(const std::type_info* widget_type);
 
@@ -343,20 +308,10 @@ class LLUICtrlFactory : public LLSingleton<LLUICtrlFactory>
 	// Avoid directly using LLUI and LLDir in the template code
 	static std::string findSkinnedFilename(const std::string& filename);
 
-	typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
-	factory_stack_t					mFactoryStack;
-
-	LLPanel*		mDummyPanel;
+	class LLPanel*		mDummyPanel;
 	std::vector<std::string>	mFileNames;
 };
 
-template<typename T>
-const LLInitParam::BaseBlock& getEmptyParamBlock()
-{
-	static typename T::Params params;
-	return params;
-}
-
 // this is here to make gcc happy with reference to LLUICtrlFactory
 template<typename DERIVED>
 template<typename T> 
@@ -364,7 +319,7 @@ LLChildRegistry<DERIVED>::Register<T>::Register(const char* tag, LLWidgetCreator
 :	LLChildRegistry<DERIVED>::StaticRegistrar(tag, func.empty() ? (LLWidgetCreatorFunc)&LLUICtrlFactory::defaultBuilder<T> : func)
 {
 	// add this widget to various registries
-	LLUICtrlFactory::instance().registerWidget(&typeid(T), &typeid(typename T::Params), &LLUICtrlFactory::createDefaultWidget<T>, tag);
+	LLUICtrlFactory::instance().registerWidget(&typeid(T), &typeid(typename T::Params), tag);
 	
 	// since registry_t depends on T, do this in line here
 	// TODO: uncomment this for schema generation
@@ -372,58 +327,4 @@ LLChildRegistry<DERIVED>::Register<T>::Register(const char* tag, LLWidgetCreator
 	//LLChildRegistryRegistry::instance().defaultRegistrar().add(&typeid(T), registry_t::instance());
 }
 
-
-typedef boost::function<LLPanel* (void)> LLPanelClassCreatorFunc;
-
-// local static instance for registering a particular panel class
-
-class LLRegisterPanelClass
-:	public LLSingleton< LLRegisterPanelClass >
-{
-public:
-	// reigister with either the provided builder, or the generic templated builder
-	void addPanelClass(const std::string& tag,LLPanelClassCreatorFunc func)
-	{
-		mPanelClassesNames[tag] = func;
-	}
-
-	LLPanel* createPanelClass(const std::string& tag)
-	{
-		param_name_map_t::iterator iT =  mPanelClassesNames.find(tag);
-		if(iT == mPanelClassesNames.end())
-			return 0;
-		return iT->second();
-	}
-	template<typename T>
-	static T* defaultPanelClassBuilder()
-	{
-		T* pT = new T();
-		return pT;
-	}
-
-private:
-	typedef std::map< std::string, LLPanelClassCreatorFunc> param_name_map_t;
-	
-	param_name_map_t mPanelClassesNames;
-};
-
-
-// local static instance for registering a particular panel class
-template<typename T>
-class LLRegisterPanelClassWrapper
-:	public LLRegisterPanelClass
-{
-public:
-	// reigister with either the provided builder, or the generic templated builder
-	LLRegisterPanelClassWrapper(const std::string& tag);
-};
-
-
-template<typename T>
-LLRegisterPanelClassWrapper<T>::LLRegisterPanelClassWrapper(const std::string& tag) 
-{
-	LLRegisterPanelClass::instance().addPanelClass(tag,&LLRegisterPanelClass::defaultPanelClassBuilder<T>);
-}
-
-
 #endif //LLUICTRLFACTORY_H
diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp
index 3e9b956ee6cdc50ffabd4e263a5cab44caf0937d..ac69d3bf8513074cb22fd7519aae0823217cd442 100644
--- a/indra/llui/lluistring.cpp
+++ b/indra/llui/lluistring.cpp
@@ -34,7 +34,7 @@ LLFastTimer::DeclareTimer FTM_UI_STRING("UI String");
 
 LLUIString::LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args)
 :	mOrig(instring),
-	mArgs(args)
+	mArgs(new LLStringUtil::format_map_t(args))
 {
 	dirty();
 }
@@ -48,7 +48,7 @@ void LLUIString::assign(const std::string& s)
 void LLUIString::setArgList(const LLStringUtil::format_map_t& args)
 
 {
-	mArgs = args;
+	getArgs() = args;
 	dirty();
 }
 
@@ -68,7 +68,7 @@ void LLUIString::setArgs(const LLSD& sd)
 
 void LLUIString::setArg(const std::string& key, const std::string& replacement)
 {
-	mArgs[key] = replacement;
+	getArgs()[key] = replacement;
 	dirty();
 }
 
@@ -129,14 +129,14 @@ void LLUIString::updateResult() const
 	mResult = mOrig;
 	
 	// get the defailt args + local args
-	if (mArgs.empty())
+	if (!mArgs || mArgs->empty())
 	{
 		LLStringUtil::format(mResult, LLTrans::getDefaultArgs());
 	}
 	else
 	{
 		LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
-		combined_args.insert(mArgs.begin(), mArgs.end());
+		combined_args.insert(mArgs->begin(), mArgs->end());
 		LLStringUtil::format(mResult, combined_args);
 	}
 }
@@ -147,3 +147,12 @@ void LLUIString::updateWResult() const
 
 	mWResult = utf8str_to_wstring(getUpdatedResult());
 }
+
+LLStringUtil::format_map_t& LLUIString::getArgs()
+{
+	if (!mArgs)
+	{
+		mArgs = new LLStringUtil::format_map_t;
+	}
+	return *mArgs;
+}
diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h
index fc7ac37d99090d6ca7f95c4d1df41296c397b184..eff2467bf0a2bf6e5c86c94313eae387735ce1fb 100644
--- a/indra/llui/lluistring.h
+++ b/indra/llui/lluistring.h
@@ -58,9 +58,9 @@ class LLUIString
 public:
 	// These methods all perform appropriate argument substitution
 	// and modify mOrig where appropriate
-        LLUIString() : mNeedsResult(false), mNeedsWResult(false) {}
+        LLUIString() : mArgs(NULL), mNeedsResult(false), mNeedsWResult(false) {}
 	LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args);
-	LLUIString(const std::string& instring) { assign(instring); }
+	LLUIString(const std::string& instring) : mArgs(NULL) { assign(instring); }
 
 	void assign(const std::string& instring);
 	LLUIString& operator=(const std::string& s) { assign(s); return *this; }
@@ -80,7 +80,7 @@ class LLUIString
 	S32 length() const { return getUpdatedWResult().size(); }
 
 	void clear();
-	void clearArgs() { mArgs.clear(); }
+	void clearArgs() { if (mArgs) mArgs->clear(); }
 	
 	// These utility functions are included for text editing.
 	// They do not affect mOrig and do not perform argument substitution
@@ -99,11 +99,12 @@ class LLUIString
 	// do actual work of updating strings (non-inlined)
 	void updateResult() const;
 	void updateWResult() const;
+	LLStringUtil::format_map_t& getArgs();
 	
 	std::string mOrig;
 	mutable std::string mResult;
 	mutable LLWString mWResult; // for displaying
-	LLStringUtil::format_map_t mArgs;
+	LLStringUtil::format_map_t* mArgs;
 
 	// controls lazy evaluation
 	mutable bool	mNeedsResult;
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index fe5ef269a9be23c36d41f20db24359fd88151190..3fa86bf0ca519325c0ccca9ad9bdb2f02a23ca60 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -102,11 +102,7 @@ LLView::Params::Params()
 	left_pad("left_pad"),
 	left_delta("left_delta", S32_MAX),
 	from_xui("from_xui", false),
-	user_resize("user_resize"),
-	auto_resize("auto_resize"),
 	needs_translate("translate"),
-	min_width("min_width"),
-	max_width("max_width"),
 	xmlns("xmlns"),
 	xmlns_xsi("xmlns:xsi"),
 	xsi_schemaLocation("xsi:schemaLocation"),
@@ -218,7 +214,7 @@ void LLView::setUseBoundingRect( BOOL use_bounding_rect )
 	}
 }
 
-BOOL LLView::getUseBoundingRect()
+BOOL LLView::getUseBoundingRect() const
 {
 	return mUseBoundingRect;
 }
@@ -1370,12 +1366,12 @@ void LLView::drawDebugRect()
 		// drawing solids requires texturing be disabled
 		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 
-		if (mUseBoundingRect)
+		if (getUseBoundingRect())
 		{
 			LLUI::translate((F32)mBoundingRect.mLeft - (F32)mRect.mLeft, (F32)mBoundingRect.mBottom - (F32)mRect.mBottom, 0.f);
 		}
 
-		LLRect debug_rect = mUseBoundingRect ? mBoundingRect : mRect;
+		LLRect debug_rect = getUseBoundingRect() ? mBoundingRect : mRect;
 
 		// draw red rectangle for the border
 		LLColor4 border_color(0.25f, 0.25f, 0.25f, 1.f);
@@ -1573,7 +1569,7 @@ void LLView::updateBoundingRect()
 
 	LLRect cur_rect = mBoundingRect;
 
-	if (mUseBoundingRect)
+	if (getUseBoundingRect())
 	{
 		mBoundingRect = calcBoundingRect();
 	}
@@ -1583,7 +1579,7 @@ void LLView::updateBoundingRect()
 	}
 
 	// give parent view a chance to resize, in case we just moved, for example
-	if (getParent() && getParent()->mUseBoundingRect)
+	if (getParent() && getParent()->getUseBoundingRect())
 	{
 		getParent()->updateBoundingRect();
 	}
@@ -1607,7 +1603,7 @@ LLRect LLView::calcScreenBoundingRect() const
 {
 	LLRect screen_rect;
 	// get bounding rect, if used
-	LLRect bounding_rect = mUseBoundingRect ? mBoundingRect : mRect;
+	LLRect bounding_rect = getUseBoundingRect() ? mBoundingRect : mRect;
 
 	// convert to local coordinates, as defined by mRect
 	bounding_rect.translate(-mRect.mLeft, -mRect.mBottom);
@@ -1692,7 +1688,9 @@ LLView* LLView::getChildView(const std::string& name, BOOL recurse) const
 		child = getDefaultWidget<LLView>(name);
 		if (!child)
 		{
-			 child = LLUICtrlFactory::createDefaultWidget<LLView>(name);
+			LLView::Params view_params;
+			view_params.name = name;
+			child = LLUICtrlFactory::create<LLView>(view_params);
 		}
 	}
 	return child;
@@ -1736,14 +1734,14 @@ LLView* LLView::findChildView(const std::string& name, BOOL recurse) const
 
 BOOL LLView::parentPointInView(S32 x, S32 y, EHitTestType type) const 
 { 
-	return (mUseBoundingRect && type == HIT_TEST_USE_BOUNDING_RECT)
+	return (getUseBoundingRect() && type == HIT_TEST_USE_BOUNDING_RECT)
 		? mBoundingRect.pointInRect( x, y ) 
 		: mRect.pointInRect( x, y ); 
 }
 
 BOOL LLView::pointInView(S32 x, S32 y, EHitTestType type) const 
 { 
-	return (mUseBoundingRect && type == HIT_TEST_USE_BOUNDING_RECT)
+	return (getUseBoundingRect() && type == HIT_TEST_USE_BOUNDING_RECT)
 		? mBoundingRect.pointInRect( x + mRect.mLeft, y + mRect.mBottom ) 
 		: mRect.localPointInRect( x, y ); 
 }
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index f7175112bff5805219bf047f7ceedc8796adb251..33d345beff50bb9329fa00996e1b010c9c17889e 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -128,26 +128,22 @@ class LLView : public LLMouseHandler, public LLMortician, public LLFocusableElem
 
 		Optional<std::string>		layout;
 		Optional<LLRect>			rect;
+
 		// Historical bottom-left layout used bottom_delta and left_delta
 		// for relative positioning.  New layout "topleft" prefers specifying
 		// based on top edge.
-		Optional<S32>				bottom_delta,	// deprecated
-									top_pad,	// from last bottom to my top
-									top_delta,	// from last top to my top
-									left_pad,	// from last right to my left
-									left_delta;	// from last left to my left
-								
-		// these are nested attributes for LLLayoutPanel
+		Optional<S32>				bottom_delta,	// from last bottom to my bottom
+									top_pad,		// from last bottom to my top
+									top_delta,		// from last top to my top
+									left_pad,		// from last right to my left
+									left_delta;		// from last left to my left
+
 		//FIXME: get parent context involved in parsing traversal
-		Ignored						user_resize,
-									auto_resize,
-									needs_translate,
-									min_width,
-									max_width,
-									xmlns,
-									xmlns_xsi,
-									xsi_schemaLocation,
-									xsi_type;
+		Ignored						needs_translate,	// cue for translation tools
+									xmlns,				// xml namespace
+									xmlns_xsi,			// xml namespace
+									xsi_schemaLocation,	// xml schema
+									xsi_type;			// xml schema type
 
 		Params();
 	};
@@ -238,7 +234,7 @@ class LLView : public LLMouseHandler, public LLMortician, public LLFocusableElem
 	void        setSoundFlags(U8 flags)			{ mSoundFlags = flags; }
 	void		setName(std::string name)			{ mName = name; }
 	void		setUseBoundingRect( BOOL use_bounding_rect );
-	BOOL		getUseBoundingRect();
+	BOOL		getUseBoundingRect() const;
 
 	ECursorType	getHoverCursor() { return mHoverCursor; }
 
@@ -277,6 +273,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/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp
index 8b1a2ddd3c52ce0fac9925d57c65d833849120b5..52d864e26f2cee313dbb98e6c3e0af98b9b1d614 100644
--- a/indra/llvfs/lldir_win32.cpp
+++ b/indra/llvfs/lldir_win32.cpp
@@ -116,10 +116,6 @@ LLDir_Win32::LLDir_Win32()
 	mExecutableDir = utf16str_to_utf8str(llutf16string(w_str));
 #endif
 
-	mAppRODataDir = ".";	
-
-	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
-
 	if (mExecutableDir.find("indra") == std::string::npos)
 	{
 		// Running from installed directory.  Make sure current
@@ -129,8 +125,12 @@ LLDir_Win32::LLDir_Win32()
 		GetCurrentDirectory(MAX_PATH, w_str);
 		mWorkingDir = utf16str_to_utf8str(llutf16string(w_str));
 	}
+	mAppRODataDir = mWorkingDir;	
+
 	llinfos << "mAppRODataDir = " << mAppRODataDir << llendl;
 
+	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
+
 	// Build the default cache directory
 	mDefaultCacheDir = buildSLOSCacheDir();
 	
diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index 0b324a10c992ff8b48d8babbed8718b186ed40a3..2c92539387a98560b616785c464b77aa0adf0b11 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -68,7 +68,6 @@ namespace LLInitParam
 	void BlockDescriptor::aggregateBlockData(BlockDescriptor& src_block_data) 
 	{
 		mNamedParams.insert(src_block_data.mNamedParams.begin(), src_block_data.mNamedParams.end());
-		mSynonyms.insert(src_block_data.mSynonyms.begin(), src_block_data.mSynonyms.end());
 		std::copy(src_block_data.mUnnamedParams.begin(), src_block_data.mUnnamedParams.end(), std::back_inserter(mUnnamedParams));
 		std::copy(src_block_data.mValidationList.begin(), src_block_data.mValidationList.end(), std::back_inserter(mValidationList));
 		std::copy(src_block_data.mAllParams.begin(), src_block_data.mAllParams.end(), std::back_inserter(mAllParams));
@@ -78,8 +77,7 @@ namespace LLInitParam
 	// BaseBlock
 	//
 	BaseBlock::BaseBlock()
-	:	mChangeVersion(0),
-		mBlockDescriptor(NULL)
+	:	mChangeVersion(0)
 	{}
 
 	BaseBlock::~BaseBlock()
@@ -88,8 +86,6 @@ namespace LLInitParam
 	// called by each derived class in least to most derived order
 	void BaseBlock::init(BlockDescriptor& descriptor, BlockDescriptor& base_descriptor, size_t block_size)
 	{
-		mBlockDescriptor = &descriptor;
-
 		descriptor.mCurrentBlockPtr = this;
 		descriptor.mMaxParamOffset = block_size;
 
@@ -182,7 +178,7 @@ namespace LLInitParam
 			param_handle_t param_handle = it->second->mParamHandle;
 			const Param* param = getParamFromHandle(param_handle);
 			ParamDescriptor::serialize_func_t serialize_func = it->second->mSerializeFunc;
-			if (serialize_func)
+			if (serialize_func && param->anyProvided())
 			{
 				// Ensure this param has not already been serialized
 				// Prevents <rect> from being serialized as its own tag.
@@ -274,22 +270,6 @@ namespace LLInitParam
 			}
 		}
 
-		for(BlockDescriptor::param_map_t::const_iterator it = block_data.mSynonyms.begin();
-			it != block_data.mSynonyms.end();
-			++it)
-		{
-			param_handle_t param_handle = it->second->mParamHandle;
-			const Param* param = getParamFromHandle(param_handle);
-			ParamDescriptor::inspect_func_t inspect_func = it->second->mInspectFunc;
-			if (inspect_func)
-			{
-				// use existing serial number for param
-				name_stack.push_back(std::make_pair(it->first, it->second->mGeneration));
-				inspect_func(*param, parser, name_stack, it->second->mMinCount, it->second->mMaxCount);
-				name_stack.pop_back();
-			}
-		}
-
 		return true;
 	}
 
@@ -311,22 +291,9 @@ namespace LLInitParam
 				// find pointer to member parameter from offset table
 				paramp = getParamFromHandle(found_it->second->mParamHandle);
 				deserialize_func = found_it->second->mDeserializeFunc;
-			}
-			else
-			{
-				BlockDescriptor::param_map_t::iterator found_it = block_data.mSynonyms.find(top_name);
-				if (found_it != block_data.mSynonyms.end())
-				{
-					// find pointer to member parameter from offset table
-					paramp = getParamFromHandle(found_it->second->mParamHandle);
-					deserialize_func = found_it->second->mDeserializeFunc;
-				}
-			}
 					
-			Parser::name_stack_range_t new_name_stack(name_stack.first, name_stack.second);
-			++new_name_stack.first;
-			if (deserialize_func)
-			{
+				Parser::name_stack_range_t new_name_stack(name_stack.first, name_stack.second);
+				++new_name_stack.first;
 				return deserialize_func(*paramp, p, new_name_stack, name_stack.first == name_stack.second ? -1 : name_stack.first->second);
 			}
 		}
@@ -401,7 +368,7 @@ namespace LLInitParam
 				}
 				else
 				{
-					block_data.mSynonyms[synonym] = param_descriptor;
+					block_data.mNamedParams[synonym] = param_descriptor;
 				}
 			}
 		}
@@ -426,14 +393,6 @@ namespace LLInitParam
 			}
 		}
 
-		for (BlockDescriptor::param_map_t::const_iterator it = block_data.mSynonyms.begin(); it != block_data.mSynonyms.end(); ++it)
-		{
-			if (it->second->mParamHandle == handle)
-			{
-				return it->first;
-			}
-		}
-
 		return LLStringUtil::null;
 	}
 
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 869b0c2cd65f103ceb6d9f5c62aa16bc715b4574..8cb5bd80fc93a0f3f95b949911964d291ac7b665 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -34,6 +34,7 @@ f * @file llinitparam.h
 #include <boost/function.hpp>
 #include <boost/bind.hpp>
 #include <boost/type_traits/is_convertible.hpp>
+#include <boost/unordered_map.hpp>
 #include "llregistry.h"
 #include "llmemory.h"
 
@@ -196,36 +197,39 @@ namespace LLInitParam
 		typedef std::pair<name_stack_t::const_iterator, name_stack_t::const_iterator>	name_stack_range_t;
 		typedef std::vector<std::string>							possible_values_t;
 
-		typedef boost::function<bool (void*)>															parser_read_func_t;
-		typedef boost::function<bool (const void*, const name_stack_t&)>								parser_write_func_t;
+		typedef bool (*parser_read_func_t)(Parser& parser, void* output);
+		typedef bool (*parser_write_func_t)(Parser& parser, const void*, const name_stack_t&);
 		typedef boost::function<void (const name_stack_t&, S32, S32, const possible_values_t*)>	parser_inspect_func_t;
 
 		typedef std::map<const std::type_info*, parser_read_func_t, CompareTypeID>		parser_read_func_map_t;
 		typedef std::map<const std::type_info*, parser_write_func_t, CompareTypeID>		parser_write_func_map_t;
 		typedef std::map<const std::type_info*, parser_inspect_func_t, CompareTypeID>	parser_inspect_func_map_t;
 
-		Parser()
+		Parser(parser_read_func_map_t& read_map, parser_write_func_map_t& write_map, parser_inspect_func_map_t& inspect_map)
 		:	mParseSilently(false),
-			mParseGeneration(0)
+			mParseGeneration(0),
+			mParserReadFuncs(&read_map),
+			mParserWriteFuncs(&write_map),
+			mParserInspectFuncs(&inspect_map)
 		{}
 		virtual ~Parser();
 
 		template <typename T> bool readValue(T& param)
 	    {
-		    parser_read_func_map_t::iterator found_it = mParserReadFuncs.find(&typeid(T));
-		    if (found_it != mParserReadFuncs.end())
+		    parser_read_func_map_t::iterator found_it = mParserReadFuncs->find(&typeid(T));
+		    if (found_it != mParserReadFuncs->end())
 		    {
-			    return found_it->second((void*)&param);
+			    return found_it->second(*this, (void*)&param);
 		    }
 		    return false;
 	    }
 
 		template <typename T> bool writeValue(const T& param, const name_stack_t& name_stack)
 		{
-		    parser_write_func_map_t::iterator found_it = mParserWriteFuncs.find(&typeid(T));
-		    if (found_it != mParserWriteFuncs.end())
+		    parser_write_func_map_t::iterator found_it = mParserWriteFuncs->find(&typeid(T));
+		    if (found_it != mParserWriteFuncs->end())
 		    {
-			    return found_it->second((const void*)&param, name_stack);
+			    return found_it->second(*this, (const void*)&param, name_stack);
 		    }
 		    return false;
 		}
@@ -233,8 +237,8 @@ namespace LLInitParam
 		// dispatch inspection to registered inspection functions, for each parameter in a param block
 		template <typename T> bool inspectValue(const name_stack_t& name_stack, S32 min_count, S32 max_count, const possible_values_t* possible_values)
 		{
-		    parser_inspect_func_map_t::iterator found_it = mParserInspectFuncs.find(&typeid(T));
-		    if (found_it != mParserInspectFuncs.end())
+		    parser_inspect_func_map_t::iterator found_it = mParserInspectFuncs->find(&typeid(T));
+		    if (found_it != mParserInspectFuncs->end())
 		    {
 			    found_it->second(name_stack, min_count, max_count, possible_values);
 				return true;
@@ -246,7 +250,6 @@ namespace LLInitParam
 		virtual void parserWarning(const std::string& message);
 		virtual void parserError(const std::string& message);
 		void setParseSilently(bool silent) { mParseSilently = silent; }
-		bool getParseSilently() { return mParseSilently; }
 
 		S32 getParseGeneration() { return mParseGeneration; }
 		S32 newParseGeneration() { return ++mParseGeneration; }
@@ -254,24 +257,24 @@ namespace LLInitParam
 
 	protected:
 		template <typename T>
-		void registerParserFuncs(parser_read_func_t read_func, parser_write_func_t write_func)
+		void registerParserFuncs(parser_read_func_t read_func, parser_write_func_t write_func = NULL)
 		{
-			mParserReadFuncs.insert(std::make_pair(&typeid(T), read_func));
-			mParserWriteFuncs.insert(std::make_pair(&typeid(T), write_func));
+			mParserReadFuncs->insert(std::make_pair(&typeid(T), read_func));
+			mParserWriteFuncs->insert(std::make_pair(&typeid(T), write_func));
 		}
 
 		template <typename T>
 		void registerInspectFunc(parser_inspect_func_t inspect_func)
 		{
-			mParserInspectFuncs.insert(std::make_pair(&typeid(T), inspect_func));
+			mParserInspectFuncs->insert(std::make_pair(&typeid(T), inspect_func));
 		}
 
 		bool				mParseSilently;
 
 	private:
-		parser_read_func_map_t		mParserReadFuncs;
-		parser_write_func_map_t		mParserWriteFuncs;
-		parser_inspect_func_map_t	mParserInspectFuncs;
+		parser_read_func_map_t*		mParserReadFuncs;
+		parser_write_func_map_t*	mParserWriteFuncs;
+		parser_inspect_func_map_t*	mParserInspectFuncs;
 		S32	mParseGeneration;
 	};
 
@@ -284,7 +287,7 @@ namespace LLInitParam
 		void setProvided(bool is_provided) { mIsProvided = is_provided; }
 
 	protected:
-		bool getProvided() const { return mIsProvided; }
+		bool anyProvided() const { return mIsProvided; }
 
 		Param(class BaseBlock* enclosing_block);
 
@@ -380,14 +383,13 @@ namespace LLInitParam
 		void aggregateBlockData(BlockDescriptor& src_block_data);
 
 	public:
-		typedef std::map<const std::string, ParamDescriptor*> param_map_t; // references param descriptors stored in mAllParams
+		typedef boost::unordered_map<const std::string, ParamDescriptor*> param_map_t; // references param descriptors stored in mAllParams
 		typedef std::vector<ParamDescriptor*> param_list_t; 
 
 		typedef std::list<ParamDescriptor> all_params_list_t;// references param descriptors stored in mAllParams
 		typedef std::vector<std::pair<param_handle_t, ParamDescriptor::validation_func_t> > param_validation_list_t;
 
 		param_map_t						mNamedParams;			// parameters with associated names
-		param_map_t						mSynonyms;				// parameters with alternate names
 		param_list_t					mUnnamedParams;			// parameters with_out_ associated names
 		param_validation_list_t			mValidationList;		// parameters that must be validated
 		all_params_list_t				mAllParams;				// all parameters, owns descriptors
@@ -473,8 +475,8 @@ namespace LLInitParam
 		bool serializeBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const;
 		bool inspectBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t()) const;
 
-		const BlockDescriptor& mostDerivedBlockDescriptor() const { return *mBlockDescriptor; }
-		BlockDescriptor& mostDerivedBlockDescriptor() { return *mBlockDescriptor; }
+		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
+		virtual BlockDescriptor& mostDerivedBlockDescriptor() { return selfBlockDescriptor(); }
 
 		// take all provided params from other and apply to self
 		bool overwriteFrom(const BaseBlock& other)
@@ -499,8 +501,6 @@ namespace LLInitParam
 		// can be updated in getters
 		mutable S32				mChangeVersion;
 
-		BlockDescriptor*		mBlockDescriptor;	// most derived block descriptor
-
 		static BlockDescriptor& selfBlockDescriptor()
 		{
 			static BlockDescriptor sBlockDescriptor;
@@ -568,7 +568,7 @@ namespace LLInitParam
 			mData.mValue = value;
 		} 
 
-		bool isProvided() const { return Param::getProvided(); }
+		bool isProvided() const { return Param::anyProvided(); }
 
 		static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) 
 		{ 
@@ -576,7 +576,7 @@ namespace LLInitParam
 			// no further names in stack, attempt to parse value now
 			if (name_stack.first == name_stack.second)
 			{
-				if (parser.readValue<T>(typed_param.mData.mValue))
+				if (parser.readValue(typed_param.mData.mValue))
 				{
 					typed_param.mData.clearKey();
 					typed_param.setProvided(true);
@@ -589,7 +589,7 @@ namespace LLInitParam
 				{
 					// try to parse a known named value
 					std::string name;
-					if (parser.readValue<std::string>(name))
+					if (parser.readValue(name))
 					{
 						// try to parse a per type named value
 						if (NAME_VALUE_LOOKUP::get(name, typed_param.mData.mValue))
@@ -624,7 +624,7 @@ namespace LLInitParam
 			{
 				if (!diff_param || !ParamCompare<std::string>::equals(static_cast<const self_t*>(diff_param)->mData.getKey(), key))
 				{
-					if (!parser.writeValue<std::string>(key, name_stack))
+					if (!parser.writeValue(key, name_stack))
 					{
 						return;
 					}
@@ -632,7 +632,7 @@ namespace LLInitParam
 			}
 			// then try to serialize value directly
 			else if (!diff_param || !ParamCompare<T>::equals(typed_param.get(), static_cast<const self_t*>(diff_param)->get()))					{
-				if (!parser.writeValue<T>(typed_param.mData.mValue, name_stack)) 
+				if (!parser.writeValue(typed_param.mData.mValue, name_stack)) 
 				{
 					return;
 				}
@@ -745,7 +745,7 @@ namespace LLInitParam
 			{
 				// try to parse a known named value
 				std::string name;
-				if (parser.readValue<std::string>(name))
+				if (parser.readValue(name))
 				{
 					// try to parse a per type named value
 					if (NAME_VALUE_LOOKUP::get(name, typed_param))
@@ -772,7 +772,7 @@ namespace LLInitParam
 			std::string key = typed_param.mData.getKey();
 			if (!key.empty() && typed_param.mData.mKeyVersion == typed_param.getLastChangeVersion())
 			{
-				if (!parser.writeValue<std::string>(key, name_stack))
+				if (!parser.writeValue(key, name_stack))
 				{
 					return;
 				}
@@ -795,13 +795,13 @@ namespace LLInitParam
 		bool isProvided() const 
 		{ 
 			// only validate block when it hasn't already passed validation and user has supplied *some* value
-			if (Param::getProvided() && mData.mValidatedVersion < T::getLastChangeVersion())
+			if (Param::anyProvided() && mData.mValidatedVersion < T::getLastChangeVersion())
 			{
 				// a sub-block is "provided" when it has been filled in enough to be valid
 				mData.mValidated = T::validateBlock(false);
 				mData.mValidatedVersion = T::getLastChangeVersion();
 			}
-			return Param::getProvided() && mData.mValidated;
+			return Param::anyProvided() && mData.mValidated;
 		}
 
 		// assign block contents to this param-that-is-a-block
@@ -852,7 +852,7 @@ namespace LLInitParam
 		{
 			const self_t& src_typed_param = static_cast<const self_t&>(src);
 			self_t& dst_typed_param = static_cast<self_t&>(dst);
-			if (dst_typed_param.T::merge(T::selfBlockDescriptor(), src_typed_param, overwrite || !dst_typed_param.isProvided()))
+			if (dst_typed_param.T::merge(T::selfBlockDescriptor(), src_typed_param, overwrite))
 			{
 				dst_typed_param.mData.clearKey();
 				return true;
@@ -909,7 +909,7 @@ namespace LLInitParam
 			}
 		} 
 
-		bool isProvided() const { return Param::getProvided(); }
+		bool isProvided() const { return Param::anyProvided(); }
 
 		static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) 
 		{ 
@@ -919,7 +919,7 @@ namespace LLInitParam
 			if (name_stack.first == name_stack.second)
 			{
 				// attempt to read value directly
-				if (parser.readValue<value_t>(value))
+				if (parser.readValue(value))
 				{
 					typed_param.mValues.push_back(value);
 					// save an empty name/value key as a placeholder
@@ -934,7 +934,7 @@ namespace LLInitParam
 				{
 					// try to parse a known named value
 					std::string name;
-					if (parser.readValue<std::string>(name))
+					if (parser.readValue(name))
 					{
 						// try to parse a per type named value
 						if (NAME_VALUE_LOOKUP::get(name, typed_param.mValues))
@@ -958,7 +958,7 @@ namespace LLInitParam
 			const self_t& typed_param = static_cast<const self_t&>(param);
 			if (!typed_param.isProvided() || name_stack.empty()) return;
 
-			typename container_t::const_iterator it = typed_param.mValues.begin();
+			const_iterator it = typed_param.mValues.begin();
 			for (typename std::vector<key_cache_t>::const_iterator key_it = typed_param.mCachedKeys.begin();
 				it != typed_param.mValues.end();
 				++key_it, ++it)
@@ -968,13 +968,13 @@ namespace LLInitParam
 
 				if(!key.empty())
 				{
-					if(!parser.writeValue<std::string>(key, name_stack))
+					if(!parser.writeValue(key, name_stack))
 					{
 						return;
 					}
 				}
 				// not parse via name values, write out value directly
-				else if (!parser.writeValue<VALUE_TYPE>(*it, name_stack))
+				else if (!parser.writeValue(*it, name_stack))
 				{
 					return;
 				}
@@ -1025,8 +1025,15 @@ namespace LLInitParam
 
 		// implicit conversion
 		operator value_assignment_t() const { return self_t::get(); } 
-		// explicit conversion
-		value_assignment_t operator()() const { return get(); } 
+
+		typedef typename container_t::iterator iterator;
+		typedef typename container_t::const_iterator const_iterator;
+		iterator begin() { return mValues.begin(); }
+		iterator end() { return mValues.end(); }
+		const_iterator begin() const { return mValues.begin(); }
+		const_iterator end() const { return mValues.end(); }
+		bool empty() const { return mValues.empty(); }
+		size_t size() const { return mValues.size(); }
 
 		U32 numValidElements() const
 		{
@@ -1092,7 +1099,7 @@ namespace LLInitParam
 			}
 		} 
 
-		bool isProvided() const { return Param::getProvided(); }
+		bool isProvided() const { return Param::anyProvided(); }
 
 		value_ref_t operator[](S32 index) { return mValues[index]; }
 		value_const_ref_t operator[](S32 index) const { return mValues[index]; }
@@ -1100,32 +1107,41 @@ namespace LLInitParam
 		static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) 
 		{ 
 			self_t& typed_param = static_cast<self_t&>(param);
+			bool new_value = false;
 			if (generation != typed_param.mLastParamGeneration || typed_param.mValues.empty())
 			{
+				new_value = true;
 				typed_param.mValues.push_back(value_t());
 				typed_param.mCachedKeys.push_back(Data());
-				typed_param.enclosingBlock().setLastChangedParam(param, true);
-				typed_param.mLastParamGeneration = generation;
 			}
 
-			value_t& value = typed_param.mValues.back();
+			value_ref_t value = typed_param.mValues.back();
 
 			// attempt to parse block...
 			if(value.deserializeBlock(parser, name_stack))
 			{
+				if (new_value)
+				{	// successfully parsed new value, let's keep it
+					typed_param.mLastParamGeneration = generation;
+				}
+				typed_param.enclosingBlock().setLastChangedParam(param, true);
 				typed_param.setProvided(true);
 				return true;
 			}
-
-			if(!NAME_VALUE_LOOKUP::empty())
+			else if(!NAME_VALUE_LOOKUP::empty())
 			{
 				// try to parse a known named value
 				std::string name;
-				if (parser.readValue<std::string>(name))
+				if (parser.readValue(name))
 				{
 					// try to parse a per type named value
 					if (NAME_VALUE_LOOKUP::get(name, value))
 					{
+						if (new_value)
+						{	// successfully parsed new value, let's keep it
+							typed_param.mLastParamGeneration = generation;
+						}
+
 						typed_param.mCachedKeys.back().setKey(name);
 						typed_param.mCachedKeys.back().mKeyVersion = value.getLastChangeVersion();
 						typed_param.enclosingBlock().setLastChangedParam(param, true);
@@ -1136,6 +1152,12 @@ namespace LLInitParam
 				}
 			}
 
+			if (new_value)
+			{	// failed to parse new value, pop it off
+				typed_param.mValues.pop_back();
+				typed_param.mCachedKeys.pop_back();
+			}
+
 			return false;
 		}
 
@@ -1144,7 +1166,7 @@ namespace LLInitParam
 			const self_t& typed_param = static_cast<const self_t&>(param);
 			if (!typed_param.isProvided() || name_stack.empty()) return;
 
-			typename container_t::const_iterator it = typed_param.mValues.begin();
+			const_iterator it = typed_param.mValues.begin();
 			for (typename std::vector<Data>::const_iterator key_it = typed_param.mCachedKeys.begin();
 				it != typed_param.mValues.end();
 				++key_it, ++it)
@@ -1154,7 +1176,7 @@ namespace LLInitParam
 				std::string key = key_it->getKey();
 				if (!key.empty() && key_it->mKeyVersion == it->getLastChangeVersion())
 				{
-					if(!parser.writeValue<std::string>(key, name_stack))
+					if(!parser.writeValue(key, name_stack))
 					{
 						return;
 					}
@@ -1208,13 +1230,20 @@ namespace LLInitParam
 
 		// implicit conversion
 		operator value_assignment_t() const { return self_t::get(); } 
-		// explicit conversion
-		value_assignment_t operator()() const { return get(); } 
+
+		typedef typename container_t::iterator iterator;
+		typedef typename container_t::const_iterator const_iterator;
+		iterator begin() { return mValues.begin(); }
+		iterator end() { return mValues.end(); }
+		const_iterator begin() const { return mValues.begin(); }
+		const_iterator end() const { return mValues.end(); }
+		bool empty() const { return mValues.empty(); }
+		size_t size() const { return mValues.size(); }
 
 		U32 numValidElements() const
 		{
 			U32 count = 0;
-			for (typename container_t::const_iterator it = mValues.begin();
+			for (const_iterator it = mValues.begin();
 				it != mValues.end();
 				++it)
 			{
@@ -1306,6 +1335,9 @@ namespace LLInitParam
 			BaseBlock::setLastChangedParam(last_param, user_provided);
 		}
 
+		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
+		virtual BlockDescriptor& mostDerivedBlockDescriptor() { return selfBlockDescriptor(); }
+
 	protected:
 		Choice()
 		:	mCurChoice(0)
@@ -1415,6 +1447,10 @@ namespace LLInitParam
 		{
 			return BaseBlock::merge(selfBlockDescriptor(), other, false);
 		}
+
+		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
+		virtual BlockDescriptor& mostDerivedBlockDescriptor() { return selfBlockDescriptor(); }
+
 	protected:
 		Block()
 		{
@@ -1494,15 +1530,13 @@ namespace LLInitParam
 			typedef Multiple<T, RANGE, NAME_VALUE_LOOKUP>							self_t;
 			typedef typename super_t::container_t									container_t;
 			typedef typename super_t::value_assignment_t							value_assignment_t;
-			typedef typename container_t::iterator									iterator;
-			typedef typename container_t::const_iterator							const_iterator;
+			typedef typename super_t::iterator										iterator;
+			typedef typename super_t::const_iterator								const_iterator;
 
 			explicit Multiple(const char* name = "", value_assignment_t val = DefaultInitializer<container_t>::get())
 			:	super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, &validate, RANGE::minCount(), RANGE::maxCount())
 			{}
 
-			using super_t::operator();
-
 			Multiple& operator=(value_assignment_t val)
 			{
 				set(val);
@@ -1612,7 +1646,7 @@ namespace LLInitParam
 			// type to apply parse direct value T
 			if (name_stack.first == name_stack.second)
 			{
-				if(parser.readValue<T>(typed_param.mData.mValue))
+				if(parser.readValue(typed_param.mData.mValue))
 				{
 					typed_param.enclosingBlock().setLastChangedParam(param, true);
 					typed_param.setProvided(true);
@@ -1627,7 +1661,7 @@ namespace LLInitParam
 				{
 					// try to parse a known named value
 					std::string name;
-					if (parser.readValue<std::string>(name))
+					if (parser.readValue(name))
 					{
 						// try to parse a per type named value
 						if (TypeValues<T>::get(name, typed_param.mData.mValue))
@@ -1669,7 +1703,7 @@ namespace LLInitParam
 			{
 				if (!diff_param || !ParamCompare<std::string>::equals(static_cast<const self_t*>(diff_param)->mData.getKey(), key))
 				{
-					if (!parser.writeValue<std::string>(key, name_stack))
+					if (!parser.writeValue(key, name_stack))
 					{
 						return;
 					}
@@ -1679,7 +1713,7 @@ namespace LLInitParam
 			else if (!diff_param || !ParamCompare<T>::equals(typed_param.get(), (static_cast<const self_t*>(diff_param))->get()))	
             {
 				
-				if (parser.writeValue<T>(typed_param.mData.mValue, name_stack)) 
+				if (parser.writeValue(typed_param.mData.mValue, name_stack)) 
 				{
 					return;
 				}
@@ -1712,7 +1746,7 @@ namespace LLInitParam
 
 		bool isProvided() const 
 		{
-			if (!Param::getProvided()) return false;
+			if (!Param::anyProvided()) return false;
 
 			// block has an updated parameter
 			// if cached value is stale, regenerate from params
@@ -1779,7 +1813,7 @@ namespace LLInitParam
 		value_assignment_t get() const
 		{
 			// if some parameters were provided, issue warnings on invalid blocks
-			if (Param::getProvided() && (mData.mValueAge == OLDER_THAN_BLOCK))
+			if (Param::anyProvided() && (mData.mValueAge == OLDER_THAN_BLOCK))
 			{
 				// go ahead and issue warnings at this point if any param is invalid
 				if(block_t::validateBlock(true))
diff --git a/indra/llxuixml/llregistry.h b/indra/llxuixml/llregistry.h
index ee119b9ebcbd4759917a610943706b2fe5873a04..eee9933739ac20d6131ddcfd0881fcc0779425fc 100644
--- a/indra/llxuixml/llregistry.h
+++ b/indra/llxuixml/llregistry.h
@@ -70,6 +70,11 @@ class LLRegistry
 			mMap.erase(key);
 		}
 
+		void replace(ref_const_key_t key, ref_const_value_t value)
+		{
+			mMap[key] = value;
+		}
+
 		typename registry_map_t::const_iterator beginItems() const
 		{
 			return mMap.begin();
diff --git a/indra/llxuixml/lltrans.cpp b/indra/llxuixml/lltrans.cpp
index 01e13864b6a0ad7505b55504cde1d3b9adcbfc76..11127a53f52d2ca4e0fa25e52a807fb73223a1e3 100644
--- a/indra/llxuixml/lltrans.cpp
+++ b/indra/llxuixml/lltrans.cpp
@@ -66,7 +66,8 @@ bool LLTrans::parseStrings(LLXMLNodePtr &root, const std::set<std::string>& defa
 	}
 
 	StringTable string_table;
-	LLXUIParser::instance().readXUI(root, string_table, xml_filename);
+	LLXUIParser parser;
+	parser.readXUI(root, string_table, xml_filename);
 
 	if (!string_table.validateBlock())
 	{
@@ -77,8 +78,8 @@ bool LLTrans::parseStrings(LLXMLNodePtr &root, const std::set<std::string>& defa
 	sStringTemplates.clear();
 	sDefaultArgs.clear();
 	
-	for(LLInitParam::ParamIterator<StringDef>::const_iterator it = string_table.strings().begin();
-		it != string_table.strings().end();
+	for(LLInitParam::ParamIterator<StringDef>::const_iterator it = string_table.strings.begin();
+		it != string_table.strings.end();
 		++it)
 	{
 		LLTransTemplate xml_template(it->name, it->value);
@@ -109,7 +110,8 @@ bool LLTrans::parseLanguageStrings(LLXMLNodePtr &root)
 	}
 	
 	StringTable string_table;
-	LLXUIParser::instance().readXUI(root, string_table, xml_filename);
+	LLXUIParser parser;
+	parser.readXUI(root, string_table, xml_filename);
 	
 	if (!string_table.validateBlock())
 	{
@@ -117,8 +119,8 @@ bool LLTrans::parseLanguageStrings(LLXMLNodePtr &root)
 		return false;
 	}
 		
-	for(LLInitParam::ParamIterator<StringDef>::const_iterator it = string_table.strings().begin();
-		it != string_table.strings().end();
+	for(LLInitParam::ParamIterator<StringDef>::const_iterator it = string_table.strings.begin();
+		it != string_table.strings.end();
 		++it)
 	{
 		// share the same map with parseStrings() so we can search the strings using the same getString() function.- angela
diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp
index 8469debd3ec62b73e12c6c01a2d559cf8ba094c9..e1ad9a5c7143b931625d813cd1322718cf0faee9 100644
--- a/indra/llxuixml/llxuiparser.cpp
+++ b/indra/llxuixml/llxuiparser.cpp
@@ -29,17 +29,28 @@
 #include "llxuiparser.h"
 
 #include "llxmlnode.h"
+#include "expat/expat.h"
 #include <fstream>
 #include <boost/tokenizer.hpp>
+//#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/classic_core.hpp>
 
 #include "lluicolor.h"
 
+using namespace BOOST_SPIRIT_CLASSIC_NS;
+
 const S32 MAX_STRING_ATTRIBUTE_SIZE = 40;
 
+static 	LLInitParam::Parser::parser_read_func_map_t sXSDReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sXSDWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sXSDInspectFuncs;
+
+
 //
 // LLXSDWriter
 //
 LLXSDWriter::LLXSDWriter()
+: Parser(sXSDReadFuncs, sXSDWriteFuncs, sXSDInspectFuncs)
 {
 	registerInspectFunc<bool>(boost::bind(&LLXSDWriter::writeAttribute, this, "xs:boolean", _1, _2, _3, _4));
 	registerInspectFunc<std::string>(boost::bind(&LLXSDWriter::writeAttribute, this, "xs:string", _1, _2, _3, _4));
@@ -357,41 +368,35 @@ void LLXUIXSDWriter::writeXSD(const std::string& type_name, const std::string& p
 	fclose(xsd_file);
 }
 
+static 	LLInitParam::Parser::parser_read_func_map_t sXUIReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sXUIWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sXUIInspectFuncs;
+
 //
 // LLXUIParser
 //
 LLXUIParser::LLXUIParser()
-:	mLastWriteGeneration(-1),
+:	Parser(sXUIReadFuncs, sXUIWriteFuncs, sXUIInspectFuncs),
+	mLastWriteGeneration(-1),
 	mCurReadDepth(0)
 {
-	registerParserFuncs<bool>(boost::bind(&LLXUIParser::readBoolValue, this, _1),
-								boost::bind(&LLXUIParser::writeBoolValue, this, _1, _2));
-	registerParserFuncs<std::string>(boost::bind(&LLXUIParser::readStringValue, this, _1),
-								boost::bind(&LLXUIParser::writeStringValue, this, _1, _2));
-	registerParserFuncs<U8>(boost::bind(&LLXUIParser::readU8Value, this, _1),
-								boost::bind(&LLXUIParser::writeU8Value, this, _1, _2));
-	registerParserFuncs<S8>(boost::bind(&LLXUIParser::readS8Value, this, _1),
-								boost::bind(&LLXUIParser::writeS8Value, this, _1, _2));
-	registerParserFuncs<U16>(boost::bind(&LLXUIParser::readU16Value, this, _1),
-								boost::bind(&LLXUIParser::writeU16Value, this, _1, _2));
-	registerParserFuncs<S16>(boost::bind(&LLXUIParser::readS16Value, this, _1),
-								boost::bind(&LLXUIParser::writeS16Value, this, _1, _2));
-	registerParserFuncs<U32>(boost::bind(&LLXUIParser::readU32Value, this, _1),
-								boost::bind(&LLXUIParser::writeU32Value, this, _1, _2));
-	registerParserFuncs<S32>(boost::bind(&LLXUIParser::readS32Value, this, _1),
-								boost::bind(&LLXUIParser::writeS32Value, this, _1, _2));
-	registerParserFuncs<F32>(boost::bind(&LLXUIParser::readF32Value, this, _1),
-								boost::bind(&LLXUIParser::writeF32Value, this, _1, _2));
-	registerParserFuncs<F64>(boost::bind(&LLXUIParser::readF64Value, this, _1),
-								boost::bind(&LLXUIParser::writeF64Value, this, _1, _2));
-	registerParserFuncs<LLColor4>(boost::bind(&LLXUIParser::readColor4Value, this, _1),
-								boost::bind(&LLXUIParser::writeColor4Value, this, _1, _2));
-	registerParserFuncs<LLUIColor>(boost::bind(&LLXUIParser::readUIColorValue, this, _1),
-								boost::bind(&LLXUIParser::writeUIColorValue, this, _1, _2));
-	registerParserFuncs<LLUUID>(boost::bind(&LLXUIParser::readUUIDValue, this, _1),
-								boost::bind(&LLXUIParser::writeUUIDValue, this, _1, _2));
-	registerParserFuncs<LLSD>(boost::bind(&LLXUIParser::readSDValue, this, _1),
-								boost::bind(&LLXUIParser::writeSDValue, this, _1, _2));
+	if (sXUIReadFuncs.empty())
+	{
+		registerParserFuncs<bool>(readBoolValue, writeBoolValue);
+		registerParserFuncs<std::string>(readStringValue, writeStringValue);
+		registerParserFuncs<U8>(readU8Value, writeU8Value);
+		registerParserFuncs<S8>(readS8Value, writeS8Value);
+		registerParserFuncs<U16>(readU16Value, writeU16Value);
+		registerParserFuncs<S16>(readS16Value, writeS16Value);
+		registerParserFuncs<U32>(readU32Value, writeU32Value);
+		registerParserFuncs<S32>(readS32Value, writeS32Value);
+		registerParserFuncs<F32>(readF32Value, writeF32Value);
+		registerParserFuncs<F64>(readF64Value, writeF64Value);
+		registerParserFuncs<LLColor4>(readColor4Value, writeColor4Value);
+		registerParserFuncs<LLUIColor>(readUIColorValue, writeUIColorValue);
+		registerParserFuncs<LLUUID>(readUUIDValue, writeUUIDValue);
+		registerParserFuncs<LLSD>(readSDValue, writeSDValue);
+	}
 }
 
 static LLFastTimer::DeclareTimer FTM_PARSE_XUI("XUI Parsing");
@@ -400,6 +405,7 @@ void LLXUIParser::readXUI(LLXMLNodePtr node, LLInitParam::BaseBlock& block, cons
 {
 	LLFastTimer timer(FTM_PARSE_XUI);
 	mNameStack.clear();
+	mRootNodeName = node->getName()->mString;
 	mCurFileName = filename;
 	mCurReadDepth = 0;
 	setParseSilently(silent);
@@ -410,11 +416,11 @@ void LLXUIParser::readXUI(LLXMLNodePtr node, LLInitParam::BaseBlock& block, cons
 	}
 	else
 	{
-		readXUIImpl(node, std::string(node->getName()->mString), block);
+		readXUIImpl(node, block);
 	}
 }
 
-bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, const std::string& scope, LLInitParam::BaseBlock& block)
+bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block)
 {
 	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
 	boost::char_separator<char> sep(".");
@@ -481,7 +487,15 @@ bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, const std::string& scope, LLIn
 			}
 
 			// check for proper nesting
-			if(!scope.empty() && *name_token_it != scope)
+			if (mNameStack.empty())
+			{
+				if (*name_token_it != mRootNodeName)
+				{
+					childp = childp->getNextSibling();
+					continue;
+				}
+			}
+			else if(mNameStack.back().first != *name_token_it)
 			{
 				childp = childp->getNextSibling();
 				continue;
@@ -499,7 +513,7 @@ bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, const std::string& scope, LLIn
 		}
 
 		// recurse and visit children XML nodes
-		if(readXUIImpl(childp, mNameStack.empty() ? scope : mNameStack.back().first, block))
+		if(readXUIImpl(childp, block))
 		{
 			// child node successfully parsed, remove from DOM
 
@@ -615,17 +629,19 @@ LLXMLNodePtr LLXUIParser::getNode(const name_stack_t& stack)
 }
 
 
-bool LLXUIParser::readBoolValue(void* val_ptr)
+bool LLXUIParser::readBoolValue(Parser& parser, void* val_ptr)
 {
 	S32 value;
-	bool success = mCurReadNode->getBoolValue(1, &value);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	bool success = self.mCurReadNode->getBoolValue(1, &value);
 	*((bool*)val_ptr) = (value != FALSE);
 	return success;
 }
 
-bool LLXUIParser::writeBoolValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeBoolValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setBoolValue(*((bool*)val_ptr));
@@ -634,15 +650,17 @@ bool LLXUIParser::writeBoolValue(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readStringValue(void* val_ptr)
+bool LLXUIParser::readStringValue(Parser& parser, void* val_ptr)
 {
-	*((std::string*)val_ptr) = mCurReadNode->getSanitizedValue();
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	*((std::string*)val_ptr) = self.mCurReadNode->getSanitizedValue();
 	return true;
 }
 
-bool LLXUIParser::writeStringValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeStringValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		const std::string* string_val = reinterpret_cast<const std::string*>(val_ptr);
@@ -671,14 +689,16 @@ bool LLXUIParser::writeStringValue(const void* val_ptr, const name_stack_t& stac
 	return false;
 }
 
-bool LLXUIParser::readU8Value(void* val_ptr)
+bool LLXUIParser::readU8Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getByteValue(1, (U8*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getByteValue(1, (U8*)val_ptr);
 }
 
-bool LLXUIParser::writeU8Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeU8Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setUnsignedValue(*((U8*)val_ptr));
@@ -687,10 +707,11 @@ bool LLXUIParser::writeU8Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readS8Value(void* val_ptr)
+bool LLXUIParser::readS8Value(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	S32 value;
-	if(mCurReadNode->getIntValue(1, &value))
+	if(self.mCurReadNode->getIntValue(1, &value))
 	{
 		*((S8*)val_ptr) = value;
 		return true;
@@ -698,9 +719,10 @@ bool LLXUIParser::readS8Value(void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeS8Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeS8Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setIntValue(*((S8*)val_ptr));
@@ -709,10 +731,11 @@ bool LLXUIParser::writeS8Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readU16Value(void* val_ptr)
+bool LLXUIParser::readU16Value(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	U32 value;
-	if(mCurReadNode->getUnsignedValue(1, &value))
+	if(self.mCurReadNode->getUnsignedValue(1, &value))
 	{
 		*((U16*)val_ptr) = value;
 		return true;
@@ -720,9 +743,10 @@ bool LLXUIParser::readU16Value(void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeU16Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeU16Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setUnsignedValue(*((U16*)val_ptr));
@@ -731,10 +755,11 @@ bool LLXUIParser::writeU16Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readS16Value(void* val_ptr)
+bool LLXUIParser::readS16Value(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	S32 value;
-	if(mCurReadNode->getIntValue(1, &value))
+	if(self.mCurReadNode->getIntValue(1, &value))
 	{
 		*((S16*)val_ptr) = value;
 		return true;
@@ -742,9 +767,10 @@ bool LLXUIParser::readS16Value(void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeS16Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeS16Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setIntValue(*((S16*)val_ptr));
@@ -753,14 +779,16 @@ bool LLXUIParser::writeS16Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readU32Value(void* val_ptr)
+bool LLXUIParser::readU32Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getUnsignedValue(1, (U32*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getUnsignedValue(1, (U32*)val_ptr);
 }
 
-bool LLXUIParser::writeU32Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeU32Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setUnsignedValue(*((U32*)val_ptr));
@@ -769,14 +797,16 @@ bool LLXUIParser::writeU32Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readS32Value(void* val_ptr)
+bool LLXUIParser::readS32Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getIntValue(1, (S32*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getIntValue(1, (S32*)val_ptr);
 }
 
-bool LLXUIParser::writeS32Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeS32Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setIntValue(*((S32*)val_ptr));
@@ -785,14 +815,16 @@ bool LLXUIParser::writeS32Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readF32Value(void* val_ptr)
+bool LLXUIParser::readF32Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getFloatValue(1, (F32*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getFloatValue(1, (F32*)val_ptr);
 }
 
-bool LLXUIParser::writeF32Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeF32Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setFloatValue(*((F32*)val_ptr));
@@ -801,14 +833,16 @@ bool LLXUIParser::writeF32Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readF64Value(void* val_ptr)
+bool LLXUIParser::readF64Value(Parser& parser, void* val_ptr)
 {
-	return mCurReadNode->getDoubleValue(1, (F64*)val_ptr);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	return self.mCurReadNode->getDoubleValue(1, (F64*)val_ptr);
 }
 
-bool LLXUIParser::writeF64Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeF64Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setDoubleValue(*((F64*)val_ptr));
@@ -817,10 +851,11 @@ bool LLXUIParser::writeF64Value(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readColor4Value(void* val_ptr)
+bool LLXUIParser::readColor4Value(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	LLColor4* colorp = (LLColor4*)val_ptr;
-	if(mCurReadNode->getFloatValue(4, colorp->mV) >= 3)
+	if(self.mCurReadNode->getFloatValue(4, colorp->mV) >= 3)
 	{
 		return true;
 	}
@@ -828,9 +863,10 @@ bool LLXUIParser::readColor4Value(void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeColor4Value(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeColor4Value(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		LLColor4 color = *((LLColor4*)val_ptr);
@@ -840,11 +876,12 @@ bool LLXUIParser::writeColor4Value(const void* val_ptr, const name_stack_t& stac
 	return false;
 }
 
-bool LLXUIParser::readUIColorValue(void* val_ptr)
+bool LLXUIParser::readUIColorValue(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	LLUIColor* param = (LLUIColor*)val_ptr;
 	LLColor4 color;
-	bool success =  mCurReadNode->getFloatValue(4, color.mV) >= 3;
+	bool success =  self.mCurReadNode->getFloatValue(4, color.mV) >= 3;
 	if (success)
 	{
 		param->set(color);
@@ -853,9 +890,10 @@ bool LLXUIParser::readUIColorValue(void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeUIColorValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeUIColorValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		LLUIColor color = *((LLUIColor*)val_ptr);
@@ -868,11 +906,12 @@ bool LLXUIParser::writeUIColorValue(const void* val_ptr, const name_stack_t& sta
 	return false;
 }
 
-bool LLXUIParser::readUUIDValue(void* val_ptr)
+bool LLXUIParser::readUUIDValue(Parser& parser, void* val_ptr)
 {
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
 	LLUUID temp_id;
 	// LLUUID::set is destructive, so use temporary value
-	if (temp_id.set(mCurReadNode->getSanitizedValue()))
+	if (temp_id.set(self.mCurReadNode->getSanitizedValue()))
 	{
 		*(LLUUID*)(val_ptr) = temp_id;
 		return true;
@@ -880,9 +919,10 @@ bool LLXUIParser::readUUIDValue(void* val_ptr)
 	return false;
 }
 
-bool LLXUIParser::writeUUIDValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeUUIDValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		node->setStringValue(((LLUUID*)val_ptr)->asString());
@@ -891,15 +931,18 @@ bool LLXUIParser::writeUUIDValue(const void* val_ptr, const name_stack_t& stack)
 	return false;
 }
 
-bool LLXUIParser::readSDValue(void* val_ptr)
+bool LLXUIParser::readSDValue(Parser& parser, void* val_ptr)
 {
-	*((LLSD*)val_ptr) = LLSD(mCurReadNode->getSanitizedValue());
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+	*((LLSD*)val_ptr) = LLSD(self.mCurReadNode->getSanitizedValue());
 	return true;
 }
 
-bool LLXUIParser::writeSDValue(const void* val_ptr, const name_stack_t& stack)
+bool LLXUIParser::writeSDValue(Parser& parser, const void* val_ptr, const name_stack_t& stack)
 {
-	LLXMLNodePtr node = getNode(stack);
+	LLXUIParser& self = static_cast<LLXUIParser&>(parser);
+
+	LLXMLNodePtr node = self.getNode(stack);
 	if (node.notNull())
 	{
 		std::string string_val = ((LLSD*)val_ptr)->asString();
@@ -962,3 +1005,438 @@ void LLXUIParser::parserError(const std::string& message)
 	Parser::parserError(message);
 #endif
 }
+
+
+//
+// LLSimpleXUIParser
+//
+
+struct ScopedFile
+{
+	ScopedFile( const std::string& filename, const char* accessmode )
+	{
+		mFile = LLFile::fopen(filename, accessmode);
+	}
+
+	~ScopedFile()
+	{
+		fclose(mFile);
+		mFile = NULL;
+	}
+
+	S32 getRemainingBytes()
+	{
+		if (!isOpen()) return 0;
+
+		S32 cur_pos = ftell(mFile);
+		fseek(mFile, 0L, SEEK_END);
+		S32 file_size = ftell(mFile);
+		fseek(mFile, cur_pos, SEEK_SET);
+		return file_size - cur_pos;
+	}
+
+	bool isOpen() { return mFile != NULL; }
+
+	LLFILE* mFile;
+};
+static 	LLInitParam::Parser::parser_read_func_map_t sSimpleXUIReadFuncs;
+static 	LLInitParam::Parser::parser_write_func_map_t sSimpleXUIWriteFuncs;
+static 	LLInitParam::Parser::parser_inspect_func_map_t sSimpleXUIInspectFuncs;
+
+LLSimpleXUIParser::LLSimpleXUIParser(LLSimpleXUIParser::element_start_callback_t element_cb)
+:	Parser(sSimpleXUIReadFuncs, sSimpleXUIWriteFuncs, sSimpleXUIInspectFuncs),
+	mLastWriteGeneration(-1),
+	mCurReadDepth(0),
+	mElementCB(element_cb)
+{
+	if (sSimpleXUIReadFuncs.empty())
+	{
+		registerParserFuncs<bool>(readBoolValue);
+		registerParserFuncs<std::string>(readStringValue);
+		registerParserFuncs<U8>(readU8Value);
+		registerParserFuncs<S8>(readS8Value);
+		registerParserFuncs<U16>(readU16Value);
+		registerParserFuncs<S16>(readS16Value);
+		registerParserFuncs<U32>(readU32Value);
+		registerParserFuncs<S32>(readS32Value);
+		registerParserFuncs<F32>(readF32Value);
+		registerParserFuncs<F64>(readF64Value);
+		registerParserFuncs<LLColor4>(readColor4Value);
+		registerParserFuncs<LLUIColor>(readUIColorValue);
+		registerParserFuncs<LLUUID>(readUUIDValue);
+		registerParserFuncs<LLSD>(readSDValue);
+	}
+}
+
+LLSimpleXUIParser::~LLSimpleXUIParser()
+{
+}
+
+
+bool LLSimpleXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent)
+{
+	LLFastTimer timer(FTM_PARSE_XUI);
+
+	mParser = XML_ParserCreate(NULL);
+	XML_SetUserData(mParser, this);
+	XML_SetElementHandler(			mParser,	startElementHandler, endElementHandler);
+	XML_SetCharacterDataHandler(	mParser,	characterDataHandler);
+
+	mOutputStack.push_back(std::make_pair(&block, 0));
+	mNameStack.clear();
+	mCurFileName = filename;
+	mCurReadDepth = 0;
+	setParseSilently(silent);
+
+	ScopedFile file(filename, "rb");
+	if( !file.isOpen() )
+	{
+		LL_WARNS("ReadXUI") << "Unable to open file " << filename << LL_ENDL;
+		return false;
+	}
+
+	S32 bytes_read = 0;
+	
+	S32 buffer_size = file.getRemainingBytes();
+	void* buffer = XML_GetBuffer(mParser, buffer_size);
+	if( !buffer ) 
+	{
+		LL_WARNS("ReadXUI") << "Unable to allocate XML buffer while reading file " << filename << LL_ENDL;
+		XML_ParserFree( mParser );
+		return false;
+	}
+
+	bytes_read = (S32)fread(buffer, 1, buffer_size, file.mFile);
+	if( bytes_read <= 0 )
+	{
+		LL_WARNS("ReadXUI") << "Error while reading file  " << filename << LL_ENDL;
+		XML_ParserFree( mParser );
+		return false;
+	}
+	
+	if( !XML_ParseBuffer(mParser, bytes_read, TRUE ) )
+	{
+		LL_WARNS("ReadXUI") << "Error while parsing file  " << filename << LL_ENDL;
+		XML_ParserFree( mParser );
+		return false;
+	}
+
+	XML_ParserFree( mParser );
+	return true;
+}
+
+void LLSimpleXUIParser::startElementHandler(void *userData, const char *name, const char **atts)
+{
+	LLSimpleXUIParser* self = reinterpret_cast<LLSimpleXUIParser*>(userData);
+	self->startElement(name, atts);
+}
+
+void LLSimpleXUIParser::endElementHandler(void *userData, const char *name)
+{
+	LLSimpleXUIParser* self = reinterpret_cast<LLSimpleXUIParser*>(userData);
+	self->endElement(name);
+}
+
+void LLSimpleXUIParser::characterDataHandler(void *userData, const char *s, int len)
+{
+	LLSimpleXUIParser* self = reinterpret_cast<LLSimpleXUIParser*>(userData);
+	self->characterData(s, len);
+}
+
+void LLSimpleXUIParser::startElement(const char *name, const char **atts)
+{
+	processText();
+
+	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+	boost::char_separator<char> sep(".");
+
+	if (mElementCB) 
+	{
+		LLInitParam::BaseBlock* blockp = mElementCB(*this, name);
+		if (blockp)
+		{
+			mOutputStack.push_back(std::make_pair(blockp, 0));
+		}
+	}
+
+	mOutputStack.back().second++;
+	S32 num_tokens_pushed = 0;
+	std::string child_name(name);
+
+	if (mOutputStack.back().second == 1)
+	{	// root node for this block
+		mScope.push_back(child_name);
+	}
+	else
+	{	// compound attribute
+		if (child_name.find(".") == std::string::npos) 
+		{
+			mNameStack.push_back(std::make_pair(child_name, newParseGeneration()));
+			num_tokens_pushed++;
+			mScope.push_back(child_name);
+		}
+		else
+		{
+			// parse out "dotted" name into individual tokens
+			tokenizer name_tokens(child_name, sep);
+
+			tokenizer::iterator name_token_it = name_tokens.begin();
+			if(name_token_it == name_tokens.end()) 
+			{
+				return;
+			}
+
+			// check for proper nesting
+			if(!mScope.empty() && *name_token_it != mScope.back())
+			{
+				return;
+			}
+
+			// now ignore first token
+			++name_token_it; 
+
+			// copy remaining tokens on to our running token list
+			for(tokenizer::iterator token_to_push = name_token_it; token_to_push != name_tokens.end(); ++token_to_push)
+			{
+				mNameStack.push_back(std::make_pair(*token_to_push, newParseGeneration()));
+				num_tokens_pushed++;
+			}
+			mScope.push_back(mNameStack.back().first);
+		}
+	}
+
+	mTokenSizeStack.push_back(num_tokens_pushed);
+	readAttributes(atts);
+}
+
+bool LLSimpleXUIParser::readAttributes(const char **atts)
+{
+	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+	boost::char_separator<char> sep(".");
+
+	bool any_parsed = false;
+	for(S32 i = 0; atts[i] && atts[i+1]; i += 2 )
+	{
+		std::string attribute_name(atts[i]);
+		mCurAttributeValueBegin = atts[i+1];
+		
+		S32 num_tokens_pushed = 0;
+		tokenizer name_tokens(attribute_name, sep);
+		// copy remaining tokens on to our running token list
+		for(tokenizer::iterator token_to_push = name_tokens.begin(); token_to_push != name_tokens.end(); ++token_to_push)
+		{
+			mNameStack.push_back(std::make_pair(*token_to_push, newParseGeneration()));
+			num_tokens_pushed++;
+		}
+
+		// child nodes are not necessarily valid attributes, so don't complain once we've recursed
+		any_parsed |= mOutputStack.back().first->submitValue(mNameStack, *this, mParseSilently);
+		
+		while(num_tokens_pushed-- > 0)
+		{
+			mNameStack.pop_back();
+		}
+	}
+	return any_parsed;
+}
+
+void LLSimpleXUIParser::processText()
+{
+	if (!mTextContents.empty())
+	{
+		LLStringUtil::trim(mTextContents);
+		if (!mTextContents.empty())
+		{
+			mNameStack.push_back(std::make_pair(std::string("value"), newParseGeneration()));
+			mCurAttributeValueBegin = mTextContents.c_str();
+			mOutputStack.back().first->submitValue(mNameStack, *this, mParseSilently);
+			mNameStack.pop_back();
+		}
+		mTextContents.clear();
+	}
+}
+
+void LLSimpleXUIParser::endElement(const char *name)
+{
+	processText();
+
+	if (--mOutputStack.back().second == 0)
+	{
+		if (mOutputStack.empty())
+		{
+			LL_ERRS("ReadXUI") << "Parameter block output stack popped while empty." << LL_ENDL;
+		}
+		mOutputStack.pop_back();
+	}
+
+	S32 num_tokens_to_pop = mTokenSizeStack.back();
+	mTokenSizeStack.pop_back();
+	while(num_tokens_to_pop-- > 0)
+	{
+		mNameStack.pop_back();
+	}
+	mScope.pop_back();
+}
+
+void LLSimpleXUIParser::characterData(const char *s, int len)
+{
+	mTextContents += std::string(s, len);
+}
+
+
+/*virtual*/ std::string LLSimpleXUIParser::getCurrentElementName()
+{
+	std::string full_name;
+	for (name_stack_t::iterator it = mNameStack.begin();	
+		it != mNameStack.end();
+		++it)
+	{
+		full_name += it->first + "."; // build up dotted names: "button.param.nestedparam."
+	}
+
+	return full_name;
+}
+
+const S32 LINE_NUMBER_HERE = 0;
+
+void LLSimpleXUIParser::parserWarning(const std::string& message)
+{
+#ifdef LL_WINDOWS
+	// use Visual Studo friendly formatting of output message for easy access to originating xml
+	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str());
+	utf16str += '\n';
+	OutputDebugString(utf16str.c_str());
+#else
+	Parser::parserWarning(message);
+#endif
+}
+
+void LLSimpleXUIParser::parserError(const std::string& message)
+{
+#ifdef LL_WINDOWS
+	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str());
+	utf16str += '\n';
+	OutputDebugString(utf16str.c_str());
+#else
+	Parser::parserError(message);
+#endif
+}
+
+bool LLSimpleXUIParser::readBoolValue(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	if (!strcmp(self.mCurAttributeValueBegin, "true")) 
+	{
+		*((bool*)val_ptr) = true;
+		return true;
+	}
+	else if (!strcmp(self.mCurAttributeValueBegin, "false"))
+	{
+		*((bool*)val_ptr) = false;
+		return true;
+	}
+
+	return false;
+}
+
+bool LLSimpleXUIParser::readStringValue(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	*((std::string*)val_ptr) = self.mCurAttributeValueBegin;
+	return true;
+}
+
+bool LLSimpleXUIParser::readU8Value(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U8*)val_ptr)]).full;
+}
+
+bool LLSimpleXUIParser::readS8Value(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S8*)val_ptr)]).full;
+}
+
+bool LLSimpleXUIParser::readU16Value(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U16*)val_ptr)]).full;
+}
+
+bool LLSimpleXUIParser::readS16Value(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S16*)val_ptr)]).full;
+}
+
+bool LLSimpleXUIParser::readU32Value(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U32*)val_ptr)]).full;
+}
+
+bool LLSimpleXUIParser::readS32Value(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S32*)val_ptr)]).full;
+}
+
+bool LLSimpleXUIParser::readF32Value(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, real_p[assign_a(*(F32*)val_ptr)]).full;
+}
+
+bool LLSimpleXUIParser::readF64Value(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	return parse(self.mCurAttributeValueBegin, real_p[assign_a(*(F64*)val_ptr)]).full;
+}
+	
+bool LLSimpleXUIParser::readColor4Value(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	LLColor4 value;
+
+	if (parse(self.mCurAttributeValueBegin, real_p[assign_a(value.mV[0])] >> real_p[assign_a(value.mV[1])] >> real_p[assign_a(value.mV[2])] >> real_p[assign_a(value.mV[3])], space_p).full)
+	{
+		*(LLColor4*)(val_ptr) = value;
+		return true;
+	}
+	return false;
+}
+
+bool LLSimpleXUIParser::readUIColorValue(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	LLColor4 value;
+	LLUIColor* colorp = (LLUIColor*)val_ptr;
+
+	if (parse(self.mCurAttributeValueBegin, real_p[assign_a(value.mV[0])] >> real_p[assign_a(value.mV[1])] >> real_p[assign_a(value.mV[2])] >> real_p[assign_a(value.mV[3])], space_p).full)
+	{
+		colorp->set(value);
+		return true;
+	}
+	return false;
+}
+
+bool LLSimpleXUIParser::readUUIDValue(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	LLUUID temp_id;
+	// LLUUID::set is destructive, so use temporary value
+	if (temp_id.set(std::string(self.mCurAttributeValueBegin)))
+	{
+		*(LLUUID*)(val_ptr) = temp_id;
+		return true;
+	}
+	return false;
+}
+
+bool LLSimpleXUIParser::readSDValue(Parser& parser, void* val_ptr)
+{
+	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser);
+	*((LLSD*)val_ptr) = LLSD(self.mCurAttributeValueBegin);
+	return true;
+}
diff --git a/indra/llxuixml/llxuiparser.h b/indra/llxuixml/llxuiparser.h
index 30b7e8c356948cc59c54176103a44a812b7df47d..5c613b0c6998ed1d5a518d4f61eff284dc32d459 100644
--- a/indra/llxuixml/llxuiparser.h
+++ b/indra/llxuixml/llxuiparser.h
@@ -96,14 +96,12 @@ class LLXUIXSDWriter : public LLXSDWriter
 
 
 
-class LLXUIParser : public LLInitParam::Parser, public LLSingleton<LLXUIParser>
+class LLXUIParser : public LLInitParam::Parser
 {
 LOG_CLASS(LLXUIParser);
 
-protected:
-	LLXUIParser();
-	friend class LLSingleton<LLXUIParser>;
 public:
+	LLXUIParser();
 	typedef LLInitParam::Parser::name_stack_t name_stack_t;
 
 	/*virtual*/ std::string getCurrentElementName();
@@ -114,42 +112,40 @@ LOG_CLASS(LLXUIParser);
 	void writeXUI(LLXMLNodePtr node, const LLInitParam::BaseBlock& block, const LLInitParam::BaseBlock* diff_block = NULL);
 
 private:
-	typedef std::list<std::pair<std::string, bool> >	token_list_t;
-
-	bool readXUIImpl(LLXMLNodePtr node, const std::string& scope, LLInitParam::BaseBlock& block);
+	bool readXUIImpl(LLXMLNodePtr node, LLInitParam::BaseBlock& block);
 	bool readAttributes(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block);
 
 	//reader helper functions
-	bool readBoolValue(void* val_ptr);
-	bool readStringValue(void* val_ptr);
-	bool readU8Value(void* val_ptr);
-	bool readS8Value(void* val_ptr);
-	bool readU16Value(void* val_ptr);
-	bool readS16Value(void* val_ptr);
-	bool readU32Value(void* val_ptr);
-	bool readS32Value(void* val_ptr);
-	bool readF32Value(void* val_ptr);
-	bool readF64Value(void* val_ptr);
-	bool readColor4Value(void* val_ptr);
-	bool readUIColorValue(void* val_ptr);
-	bool readUUIDValue(void* val_ptr);
-	bool readSDValue(void* val_ptr);
+	static bool readBoolValue(Parser& parser, void* val_ptr);
+	static bool readStringValue(Parser& parser, void* val_ptr);
+	static bool readU8Value(Parser& parser, void* val_ptr);
+	static bool readS8Value(Parser& parser, void* val_ptr);
+	static bool readU16Value(Parser& parser, void* val_ptr);
+	static bool readS16Value(Parser& parser, void* val_ptr);
+	static bool readU32Value(Parser& parser, void* val_ptr);
+	static bool readS32Value(Parser& parser, void* val_ptr);
+	static bool readF32Value(Parser& parser, void* val_ptr);
+	static bool readF64Value(Parser& parser, void* val_ptr);
+	static bool readColor4Value(Parser& parser, void* val_ptr);
+	static bool readUIColorValue(Parser& parser, void* val_ptr);
+	static bool readUUIDValue(Parser& parser, void* val_ptr);
+	static bool readSDValue(Parser& parser, void* val_ptr);
 
 	//writer helper functions
-	bool writeBoolValue(const void* val_ptr, const name_stack_t&);
-	bool writeStringValue(const void* val_ptr, const name_stack_t&);
-	bool writeU8Value(const void* val_ptr, const name_stack_t&);
-	bool writeS8Value(const void* val_ptr, const name_stack_t&);
-	bool writeU16Value(const void* val_ptr, const name_stack_t&);
-	bool writeS16Value(const void* val_ptr, const name_stack_t&);
-	bool writeU32Value(const void* val_ptr, const name_stack_t&);
-	bool writeS32Value(const void* val_ptr, const name_stack_t&);
-	bool writeF32Value(const void* val_ptr, const name_stack_t&);
-	bool writeF64Value(const void* val_ptr, const name_stack_t&);
-	bool writeColor4Value(const void* val_ptr, const name_stack_t&);
-	bool writeUIColorValue(const void* val_ptr, const name_stack_t&);
-	bool writeUUIDValue(const void* val_ptr, const name_stack_t&);
-	bool writeSDValue(const void* val_ptr, const name_stack_t&);
+	static bool writeBoolValue(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeStringValue(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeU8Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeS8Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeU16Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeS16Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeU32Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeS32Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeF32Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeF64Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeColor4Value(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeUIColorValue(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeUUIDValue(Parser& parser, const void* val_ptr, const name_stack_t&);
+	static bool writeSDValue(Parser& parser, const void* val_ptr, const name_stack_t&);
 
 	LLXMLNodePtr getNode(const name_stack_t& stack);
 
@@ -165,6 +161,78 @@ LOG_CLASS(LLXUIParser);
 	LLXMLNodePtr					mLastWrittenChild;
 	S32								mCurReadDepth;
 	std::string						mCurFileName;
+	std::string						mRootNodeName;
+};
+
+// LLSimpleXUIParser is a streamlined SAX-based XUI parser that does not support localization 
+// or parsing of a tree of independent param blocks, such as child widgets.
+// Use this for reading non-localized files that only need a single param block as a result.
+//
+// NOTE: In order to support nested block parsing, we need callbacks for start element that
+// push new blocks contexts on the mScope stack.
+// NOTE: To support localization without building a DOM, we need to enforce consistent 
+// ordering of child elements from base file to localized diff file.  Then we can use a pair
+// of coroutines to perform matching of xml nodes during parsing.  Not sure if the overhead
+// of coroutines would offset the gain from SAX parsing
+
+class LLSimpleXUIParser : public LLInitParam::Parser
+{
+LOG_CLASS(LLSimpleXUIParser);
+public:
+	typedef LLInitParam::Parser::name_stack_t name_stack_t;
+	typedef LLInitParam::BaseBlock* (*element_start_callback_t)(LLSimpleXUIParser&, const char* block_name);
+
+	LLSimpleXUIParser(element_start_callback_t element_cb = NULL);
+	virtual ~LLSimpleXUIParser();
+
+	/*virtual*/ std::string getCurrentElementName();
+	/*virtual*/ void parserWarning(const std::string& message);
+	/*virtual*/ void parserError(const std::string& message);
+
+	bool readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent=false);
+
+
+private:
+	//reader helper functions
+	static bool readBoolValue(Parser&, void* val_ptr);
+	static bool readStringValue(Parser&, void* val_ptr);
+	static bool readU8Value(Parser&, void* val_ptr);
+	static bool readS8Value(Parser&, void* val_ptr);
+	static bool readU16Value(Parser&, void* val_ptr);
+	static bool readS16Value(Parser&, void* val_ptr);
+	static bool readU32Value(Parser&, void* val_ptr);
+	static bool readS32Value(Parser&, void* val_ptr);
+	static bool readF32Value(Parser&, void* val_ptr);
+	static bool readF64Value(Parser&, void* val_ptr);
+	static bool readColor4Value(Parser&, void* val_ptr);
+	static bool readUIColorValue(Parser&, void* val_ptr);
+	static bool readUUIDValue(Parser&, void* val_ptr);
+	static bool readSDValue(Parser&, void* val_ptr);
+
+private:
+	static void startElementHandler(void *userData, const char *name, const char **atts);
+	static void endElementHandler(void *userData, const char *name);
+	static void characterDataHandler(void *userData, const char *s, int len);
+
+	void startElement(const char *name, const char **atts);
+	void endElement(const char *name);
+	void characterData(const char *s, int len);
+	bool readAttributes(const char **atts);
+	void processText();
+
+	Parser::name_stack_t			mNameStack;
+	struct XML_ParserStruct*		mParser;
+	S32								mLastWriteGeneration;
+	LLXMLNodePtr					mLastWrittenChild;
+	S32								mCurReadDepth;
+	std::string						mCurFileName;
+	std::string						mTextContents;
+	const char*						mCurAttributeValueBegin;
+	std::vector<S32>				mTokenSizeStack;
+	std::vector<std::string>		mScope;
+	element_start_callback_t		mElementCB;
+
+	std::vector<std::pair<LLInitParam::BaseBlock*, S32> > mOutputStack;
 };
 
 
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/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 047146f8f3a96be7379a33831d924f08cafc3486..bd1a44a930702c885b62fd99853dd87e4517d979 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -115,6 +115,7 @@ class MediaPluginWebKit :
 	F32 mBackgroundR;
 	F32 mBackgroundG;
 	F32 mBackgroundB;
+	std::string mTarget;
 	
 	VolumeCatcher mVolumeCatcher;
 
@@ -303,7 +304,7 @@ class MediaPluginWebKit :
 		LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
 		
 		// create single browser window
-		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight );
+		mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget);
 
 		// tell LLQtWebKit about the size of the browser window
 		LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
@@ -313,9 +314,6 @@ class MediaPluginWebKit :
 
 		// append details to agent string
 		LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
-
-		// Set up window open behavior
-		LLQtWebKit::getInstance()->setWindowOpenBehavior(mBrowserWindowId, LLQtWebKit::WOB_SIMULATE_BLANK_HREF_CLICK);
 		
 #if !LL_QTWEBKIT_USES_PIXMAPS
 		// don't flip bitmap
@@ -507,9 +505,9 @@ class MediaPluginWebKit :
 	void onClickLinkHref(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_href");
-		message.setValue("uri", event.getStringValue());
-		message.setValue("target", event.getStringValue2());
-		message.setValueU32("target_type", event.getLinkType());
+		message.setValue("uri", event.getEventUri());
+		message.setValue("target", event.getStringValue());
+		message.setValue("uuid", event.getStringValue2());
 		sendMessage(message);
 	}
 	
@@ -518,7 +516,7 @@ class MediaPluginWebKit :
 	void onClickLinkNoFollow(const EventType& event)
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow");
-		message.setValue("uri", event.getStringValue());
+		message.setValue("uri", event.getEventUri());
 		sendMessage(message);
 	}
 	
@@ -534,6 +532,42 @@ class MediaPluginWebKit :
 //		message.setValueBoolean("dead", (event.getIntValue() != 0))
 		sendMessage(message);
 	}
+
+	////////////////////////////////////////////////////////////////////////////////
+	// virtual
+	void onWindowCloseRequested(const EventType& event)
+	{
+		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request");
+		message.setValue("uuid", event.getStringValue());
+		sendMessage(message);
+	}
+
+	////////////////////////////////////////////////////////////////////////////////
+	// virtual
+	void onWindowGeometryChangeRequested(const EventType& event)
+	{
+		int x, y, width, height;
+		event.getRectValue(x, y, width, height);
+
+		// This sometimes gets called with a zero-size request.  Don't pass these along.
+		if(width > 0 && height > 0)
+		{
+			LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "geometry_change");
+			message.setValue("uuid", event.getStringValue());
+			message.setValueS32("x", x);
+			message.setValueS32("y", y);
+			message.setValueS32("width", width);
+			message.setValueS32("height", height);
+			sendMessage(message);
+		}
+	}
+
+	////////////////////////////////////////////////////////////////////////////////
+	// virtual
+	std::string onRequestFilePicker( const EventType& eventIn )
+	{
+		return blockingPickFile();
+	}
 	
 	LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers)
 	{
@@ -679,6 +713,26 @@ class MediaPluginWebKit :
 			
 		}
 	}
+	
+	std::string mPickedFile;
+	
+	std::string blockingPickFile(void)
+	{
+		mPickedFile.clear();
+		
+		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file");
+		message.setValueBoolean("blocking_request", true);
+		
+		// The "blocking_request" key in the message means this sendMessage call will block until a response is received.
+		sendMessage(message);
+		
+		return mPickedFile;
+	}
+
+	void onPickFileResponse(const std::string &file)
+	{
+		mPickedFile = file;
+	}
 
 };
 
@@ -817,6 +871,8 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 		{
 			if(message_name == "init")
 			{
+				mTarget = message_in.getValue("target");
+				
 				// This is the media init message -- all necessary data for initialization should have been received.
 				if(initBrowser())
 				{
@@ -1036,10 +1092,14 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 				LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE );
 				checkEditState();
 			}
+			if(message_name == "pick_file_response")
+			{
+				onPickFileResponse(message_in.getValue("file"));
+			}
 			else
 			{
 //				std::cerr << "MediaPluginWebKit::receiveMessage: unknown media message: " << message_string << std::endl;
-			};
+			}
 		}
 		else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER)
 		{
@@ -1139,6 +1199,17 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 					}
 				}
 			}
+			else if(message_name == "proxy_window_opened")
+			{
+				std::string target = message_in.getValue("target");
+				std::string uuid = message_in.getValue("uuid");
+				LLQtWebKit::getInstance()->proxyWindowOpened(mBrowserWindowId, target, uuid);
+			}
+			else if(message_name == "proxy_window_closed")
+			{
+				std::string uuid = message_in.getValue("uuid");
+				LLQtWebKit::getInstance()->proxyWindowClosed(mBrowserWindowId, uuid);
+			}
 			else
 			{
 //				std::cerr << "MediaPluginWebKit::receiveMessage: unknown media_browser message: " << message_string << std::endl;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 382bbaeba16a2e63482bbe959a57d2c1d9d70e9b..1f4302d870e9eb1c55609fd68f90b6537ee44086 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -94,6 +94,7 @@ set(viewer_SOURCE_FILES
     llbottomtray.cpp
     llbox.cpp
     llbreadcrumbview.cpp
+    llbrowsernotification.cpp
     llbuycurrencyhtml.cpp
     llcallbacklist.cpp
     llcallfloater.cpp
@@ -216,7 +217,6 @@ set(viewer_SOURCE_FILES
     llfloatertos.cpp
     llfloateruipreview.cpp
     llfloaterurlentry.cpp
-    llfloatervoicedevicesettings.cpp
     llfloatervoiceeffect.cpp
     llfloaterwater.cpp
     llfloaterwhitelistentry.cpp
@@ -234,6 +234,7 @@ set(viewer_SOURCE_FILES
     llgroupiconctrl.cpp
     llgrouplist.cpp
     llgroupmgr.cpp
+    llhints.cpp
     llhomelocationresponder.cpp
     llhudeffect.cpp
     llhudeffectbeam.cpp
@@ -304,6 +305,7 @@ set(viewer_SOURCE_FILES
     llnotificationalerthandler.cpp
     llnotificationgrouphandler.cpp
     llnotificationhandlerutil.cpp
+    llnotificationhinthandler.cpp
     llnotificationmanager.cpp
     llnotificationofferhandler.cpp
     llnotificationscripthandler.cpp
@@ -363,6 +365,7 @@ set(viewer_SOURCE_FILES
     llpaneltiptoast.cpp
     llpanelvoiceeffect.cpp
     llpaneltopinfobar.cpp
+    llpanelvoicedevicesettings.cpp
     llpanelvolume.cpp
     llpanelvolumepulldown.cpp
     llpanelwearing.cpp
@@ -744,7 +747,6 @@ set(viewer_HEADER_FILES
     llfloatertos.h
     llfloateruipreview.h
     llfloaterurlentry.h
-    llfloatervoicedevicesettings.h
     llfloatervoiceeffect.h
     llfloaterwater.h
     llfloaterwhitelistentry.h
@@ -762,6 +764,7 @@ set(viewer_HEADER_FILES
     llgroupiconctrl.h
     llgrouplist.h
     llgroupmgr.h
+    llhints.h
     llhomelocationresponder.h
     llhudeffect.h
     llhudeffectbeam.h
@@ -884,6 +887,7 @@ set(viewer_HEADER_FILES
     llpanelprofileview.h
     llpanelteleporthistory.h
     llpaneltiptoast.h
+    llpanelvoicedevicesettings.h
     llpanelvoiceeffect.h
     llpaneltopinfobar.h
     llpanelvolume.h
@@ -1309,6 +1313,7 @@ set(viewer_APPSETTINGS_FILES
     app_settings/cmd_line.xml
     app_settings/grass.xml
     app_settings/high_graphics.xml
+    app_settings/ignorable_dialogs.xml
     app_settings/keys.ini
     app_settings/keywords.ini
     app_settings/logcontrol.xml
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index 5f143431deb6c77a5962ffa8c8f5bfc0fd28bb1b..00d69f805e8c9d6512395ebef4ed471e6b465509 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -296,7 +296,7 @@
     <key>multiple</key>		  
     <map>
       <key>desc</key>
-      <string>Allow multple viewers.</string>
+      <string>Allow multiple viewers.</string>
       <key>map-to</key>
       <string>AllowMultipleViewers</string>
     </map>
diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
index d0e1f62a84a0abdadf453e6d358539cb6d1cac8c..0720ccee49190d109c106e4daa57b9ad92a092f0 100644
--- a/indra/newview/app_settings/ignorable_dialogs.xml
+++ b/indra/newview/app_settings/ignorable_dialogs.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" ?>
 <llsd>
 <map>
-    <key>FirstAppearance</key>
+    <key>FirstInventoryOffer</key>
     <map>
       <key>Comment</key>
-      <string>Enables FirstAppearance warning dialog</string>
+      <string>Shows hint when a person or object offers resident an inventory item</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -12,120 +12,54 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>FirstAttach</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstAttach warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstBalanceDecrease</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstBalanceDecrease warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstBalanceIncrease</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstBalanceIncrease warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstBuild</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstBuild warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstDebugMenus</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstDebugMenus warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstFlexible</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstFlexible warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstGoTo</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstGoTo warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstInventory</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstInventory warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstLeftClickNoHit</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstLeftClickNoHit warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstMap</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstMap warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstMedia</key>
+  <key>FirstNotUseDestinationGuide</key>
+  <map>
+    <key>Comment</key>
+    <string>Shows hint when resident doesn't activate destination guide</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>FirstNotUseSidePanel</key>
+  <map>
+    <key>Comment</key>
+    <string>Shows hint when resident doesn't activate side panel</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>FirstNotMoving</key>
+  <map>
+    <key>Comment</key>
+    <string>Shows hint when resident doesn't move</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>FirstReceiveLindens</key>
+  <map>
+    <key>Comment</key>
+    <string>Shows hint when resident receives linden dollars</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>FirstOtherChatBeforeUser</key>
     <map>
       <key>Comment</key>
-      <string>Enables FirstMedia warning dialog</string>
+      <string>Shows hint when someone else chats first</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -155,43 +89,11 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>FirstSculptedPrim</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstSculptedPrim warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
+
     <key>FirstSit</key>
     <map>
       <key>Comment</key>
-      <string>Enables FirstSit warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstTeleport</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstTeleport warning dialog</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>FirstVoice</key>
-    <map>
-      <key>Comment</key>
-      <string>Enables FirstVoice warning dialog</string>
+      <string>Shows hint when someone sits for the first time</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index b67530215bac725a6cdf13ab11c7cb0d169247cd..47524a0e9141cf2e3746a96f8add68573801986e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2853,6 +2853,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>EnableUIHints</key>
+    <map>
+      <key>Comment</key>
+      <string>Toggles UI hint popups</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>EnableVoiceChat</key>
     <map>
       <key>Comment</key>
@@ -3837,7 +3848,7 @@
       <key>Comment</key>
       <string>URL for the web page to display in the Home side panel</string>
       <key>Persist</key>
-      <integer>0</integer>
+      <integer>1</integer>
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
@@ -5241,6 +5252,17 @@
     <key>Value</key>
     <real>3.0</real>
   </map>
+  <key>MediaEnablePopups</key>
+  <map>
+    <key>Comment</key>
+    <string>If true, enable targeted links and javascript in media to open new media browser windows without a prompt.</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
   <key>MediaOnAPrimUI</key>
   <map>
     <key>Comment</key>
@@ -6513,6 +6535,17 @@
         <key>Value</key>
             <real>1.0</real>
         </map>
+    <key>MediaBrowserWindowLimit</key>
+    <map>
+      <key>Comment</key>
+      <string>Maximum number of media brower windows that can be open at once (0 for no limit)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>5</integer>
+    </map>
   <key>MediaRollOffRate</key>
   <map>
     <key>Comment</key>
@@ -7932,6 +7965,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>
@@ -8921,7 +8965,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>1</integer>
+      <integer>0</integer>
     </map>
     <key>GroupListShowIcons</key>
     <map>
@@ -12057,5 +12101,38 @@
       <key>Value</key>
       <integer>10</integer>
     </map>
+    <key>NotMovingHintTimeout</key>
+    <map>
+      <key>Comment</key>
+      <string>Number of seconds to wait for resident to move before displaying move hint.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>120.0</real>
+    </map>
+    <key>DestinationGuideHintTimeout</key>
+    <map>
+      <key>Comment</key>
+      <string>Number of seconds to wait before telling resident about destination guide.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>600.0</real>
+    </map>
+    <key>SidePanelHintTimeout</key>
+    <map>
+      <key>Comment</key>
+      <string>Number of seconds to wait before telling resident about side panel.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>300.0</real>
+    </map>
 </map>
 </llsd>
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index e3fc9d4949a536c3016db05c3269fc4f8d708224..721fe81a3c1c76fb9704260933b209f89cf3e118 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -550,4 +550,3 @@ list NVIDIA_GeForce_Go_7800
 RenderShaderLightingMaxLevel	1	2
 list NVIDIA_GeForce_Go_7900
 RenderShaderLightingMaxLevel	1	2
-
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index b202cb5098829d3c77fcb4d701f21fbcdff94a69..c9bd7851ed5c610a046130665cea1e94f8de9b79 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -38,6 +38,7 @@
 #include "llcallingcard.h"
 #include "llchannelmanager.h"
 #include "llconsole.h"
+#include "llfirstuse.h"
 #include "llfloatercamera.h"
 #include "llfloaterreg.h"
 #include "llfloatertools.h"
@@ -194,8 +195,6 @@ LLAgent::LLAgent() :
 	mbFlagsDirty(FALSE),
 	mbFlagsNeedReset(FALSE),
 
-	mbJump(FALSE),
-
 	mAutoPilot(FALSE),
 	mAutoPilotFlyOnStop(FALSE),
 	mAutoPilotTargetGlobal(),
@@ -227,8 +226,9 @@ LLAgent::LLAgent() :
 		mControlsTakenPassedOnCount[i] = 0;
 	}
 
-
 	mListener.reset(new LLAgentListener(*this));
+
+	mMoveTimer.stop();
 }
 
 // Requires gSavedSettings to be initialized.
@@ -237,6 +237,8 @@ LLAgent::LLAgent() :
 //-----------------------------------------------------------------------------
 void LLAgent::init()
 {
+	mMoveTimer.start();
+
 	gSavedSettings.declareBOOL("SlowMotionAnimation", FALSE, "Declared in code", FALSE);
 	gSavedSettings.getControl("SlowMotionAnimation")->getSignal()->connect(boost::bind(&handleSlowMotionAnimation, _2));
 	
@@ -301,6 +303,9 @@ void LLAgent::ageChat()
 //-----------------------------------------------------------------------------
 void LLAgent::moveAt(S32 direction, bool reset)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -326,6 +331,9 @@ void LLAgent::moveAt(S32 direction, bool reset)
 //-----------------------------------------------------------------------------
 void LLAgent::moveAtNudge(S32 direction)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -348,6 +356,9 @@ void LLAgent::moveAtNudge(S32 direction)
 //-----------------------------------------------------------------------------
 void LLAgent::moveLeft(S32 direction)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -370,6 +381,9 @@ void LLAgent::moveLeft(S32 direction)
 //-----------------------------------------------------------------------------
 void LLAgent::moveLeftNudge(S32 direction)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -392,6 +406,9 @@ void LLAgent::moveLeftNudge(S32 direction)
 //-----------------------------------------------------------------------------
 void LLAgent::moveUp(S32 direction)
 {
+	mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	// age chat timer so it fades more quickly when you are intentionally moving
 	ageChat();
 
@@ -537,6 +554,9 @@ void LLAgent::toggleFlying()
 {
 	BOOL fly = !gAgent.getFlying();
 
+	gAgent.mMoveTimer.reset();
+	LLFirstUse::notMoving(false);
+
 	gAgent.setFlying( fly );
 	gAgentCamera.resetView();
 }
@@ -1534,6 +1554,11 @@ void LLAgent::propagate(const F32 dt)
 //-----------------------------------------------------------------------------
 void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32 mouse_x, const S32 mouse_y)
 {
+	if (mMoveTimer.getStarted() && mMoveTimer.getElapsedTimeF32() > gSavedSettings.getF32("NotMovingHintTimeout"))
+	{
+		LLFirstUse::notMoving();
+	}
+
 	propagate(dt);
 
 	// static S32 cameraUpdateCount = 0;
@@ -2962,12 +2987,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **)
 					total_count++;
 				}
 			}
-		
-			// Any control taken?  If so, might be first time.
-			//if (total_count > 0)
-			//{
-				//LLFirstUse::useOverrideKeys();
-			//}
 		}
 		else
 		{
@@ -3431,16 +3450,16 @@ void LLAgent::setTeleportState(ETeleportState state)
 			break;
 
 		case TELEPORT_MOVING:
-			// We're outa here. Save "back" slurl.
-			LLAgentUI::buildSLURL(mTeleportSourceSLURL);
+		// We're outa here. Save "back" slurl.
+		LLAgentUI::buildSLURL(mTeleportSourceSLURL);
 			break;
 
 		case TELEPORT_ARRIVING:
-			// First two position updates after a teleport tend to be weird
-			LLViewerStats::getInstance()->mAgentPositionSnaps.mCountOfNextUpdatesToIgnore = 2;
-			
-			// Let the interested parties know we've teleported.
-			LLViewerParcelMgr::getInstance()->onTeleportFinished(false, getPositionGlobal());
+		// First two position updates after a teleport tend to be weird
+		LLViewerStats::getInstance()->mAgentPositionSnaps.mCountOfNextUpdatesToIgnore = 2;
+
+		// Let the interested parties know we've teleported.
+		LLViewerParcelMgr::getInstance()->onTeleportFinished(false, getPositionGlobal());
 			break;
 
 		default:
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 30685461b9f6b07df851fda6168a59c2417b6a54..6c598d5d7199f4452222c6113164fc2576241018 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -264,6 +264,7 @@ class LLAgent : public LLOldEvents::LLObservable
 private:
 	LLFrameTimer	mFidgetTimer;
 	LLFrameTimer	mFocusObjectFadeTimer;
+	LLFrameTimer	mMoveTimer;
 	F32				mNextFidgetTime;
 	S32				mCurrentFidget;
 
@@ -359,14 +360,6 @@ class LLAgent : public LLOldEvents::LLObservable
 private:
 	BOOL			mIsBusy;
 
-	//--------------------------------------------------------------------
-	// Jump
-	//--------------------------------------------------------------------
-public:
-	BOOL			getJump() const	{ return mbJump; }
-private:
-	BOOL 			mbJump;
-
 	//--------------------------------------------------------------------
 	// Grab
 	//--------------------------------------------------------------------
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 92a9b83bc5aabbafa352870f4520b2e633619f54..333c92e50da2e910d2f54ac4830facf5370ce967 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -262,6 +262,7 @@ const F64 FRAME_STALL_THRESHOLD = 1.0;
 
 LLTimer gRenderStartTime;
 LLFrameTimer gForegroundTime;
+LLFrameTimer gLoggedInTime;
 LLTimer gLogoutTimer;
 static const F32 LOGOUT_REQUEST_TIME = 6.f;  // this will be cut short by the LogoutReply msg.
 F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
@@ -360,19 +361,19 @@ bool	create_text_segment_icon_from_url_match(LLUrlMatch* match,LLTextBase* base)
 
 	if(gAgent.isInGroup(match_id, TRUE))
 	{
-		LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>();
+		LLGroupIconCtrl::Params icon_params;
 		icon_params.group_id = match_id;
 		icon_params.rect = LLRect(0, 16, 16, 0);
 		icon_params.visible = true;
-		icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params);
+		icon = LLUICtrlFactory::instance().create<LLGroupIconCtrl>(icon_params);
 	}
 	else
 	{
-		LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>();
+		LLAvatarIconCtrl::Params icon_params;
 		icon_params.avatar_id = match_id;
 		icon_params.rect = LLRect(0, 16, 16, 0);
 		icon_params.visible = true;
-		icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params);
+		icon = LLUICtrlFactory::instance().create<LLAvatarIconCtrl>(icon_params);
 	}
 
 	LLInlineViewSegment::Params params;
@@ -591,6 +592,7 @@ LLAppViewer::LLAppViewer() :
 
 	setupErrorHandling();
 	sInstance = this;
+	gLoggedInTime.stop();
 }
 
 LLAppViewer::~LLAppViewer()
@@ -4275,6 +4277,7 @@ void LLAppViewer::pingMainloopTimeout(const std::string& state, F32 secs)
 
 void LLAppViewer::handleLoginComplete()
 {
+	gLoggedInTime.start();
 	initMainloopTimeout("Mainloop Init");
 
 	// Store some data to DebugInfo in case of a freeze.
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index c5cac6827c8a1f1a6d6400f615446bc8fb1463c9..56d88f07c867d9202202e8eccf077b4cdc61d44b 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -308,6 +308,7 @@ extern U32 		gFrameStalls;
 
 extern LLTimer gRenderStartTime;
 extern LLFrameTimer gForegroundTime;
+extern LLFrameTimer gLoggedInTime;
 
 extern F32 gLogoutMaxTime;
 extern LLTimer gLogoutTimer;
diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp
index 40eb5ebcd1cdc08d6be8b5cfd9e51a8f48294983..b37aba6c1520b10d6493967d7cf6a93ddd0be5d6 100644
--- a/indra/newview/llaudiosourcevo.cpp
+++ b/indra/newview/llaudiosourcevo.cpp
@@ -35,11 +35,8 @@
 
 LLAudioSourceVO::LLAudioSourceVO(const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, LLViewerObject *objectp)
 	:	LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX), 
-	mObjectp(objectp), 
-	mActualGain(gain)
+	mObjectp(objectp)
 {
-	setAmbient(FALSE);
-	updateGain();
 	update();
 }
 
@@ -54,18 +51,18 @@ LLAudioSourceVO::~LLAudioSourceVO()
 
 void LLAudioSourceVO::setGain(const F32 gain)
 {
-	mActualGain = llclamp(gain, 0.f, 1.f);
-	updateGain();
+	mGain = llclamp(gain, 0.f, 1.f);
 }
 
-void LLAudioSourceVO::updateGain()
+void LLAudioSourceVO::updateMute()
 {
-	if (!mObjectp)
+	if (!mObjectp || mObjectp->isDead())
 	{
+	  	mSourceMuted = true;
 		return;
 	}
 
-	BOOL mute = FALSE;
+	bool mute = false;
 	LLVector3d pos_global;
 
 	if (mObjectp->isAttachment())
@@ -84,21 +81,21 @@ void LLAudioSourceVO::updateGain()
 	{
 		pos_global = mObjectp->getPositionGlobal();
 	}
-	
+
 	if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global))
 	{
-		mute = TRUE;
+		mute = true;
 	}
 
 	if (!mute)
 	{
 		if (LLMuteList::getInstance()->isMuted(mObjectp->getID()))
 		{
-			mute = TRUE;
+			mute = true;
 		}
 		else if (LLMuteList::getInstance()->isMuted(mOwnerID, LLMute::flagObjectSounds))
 		{
-			mute = TRUE;
+			mute = true;
 		}
 		else if (mObjectp->isAttachment())
 		{
@@ -110,24 +107,38 @@ void LLAudioSourceVO::updateGain()
 			if (parent 
 				&& LLMuteList::getInstance()->isMuted(parent->getID()))
 			{
-				mute = TRUE;
+				mute = true;
 			}
 		}
 	}
 
-	if (!mute)
+	if (mute != mSourceMuted)
 	{
-		mGain = mActualGain;
-	}
-	else
-	{
-		mGain = 0.f;
+		mSourceMuted = mute;
+		if (mSourceMuted)
+		{
+		  	// Stop the sound.
+			this->play(LLUUID::null);
+		}
+		else
+		{
+		  	// Muted sounds keep there data at all times, because
+			// it's the place where the audio UUID is stored.
+			// However, it's possible that mCurrentDatap is
+			// NULL when this source did only preload sounds.
+			if (mCurrentDatap)
+			{
+		  		// Restart the sound.
+				this->play(mCurrentDatap->getID());
+			}
+		}
 	}
 }
 
-
 void LLAudioSourceVO::update()
 {
+	updateMute();
+
 	if (!mObjectp)
 	{
 		return;
@@ -139,7 +150,11 @@ void LLAudioSourceVO::update()
 		return;
 	}
 
-	updateGain();
+	if (mSourceMuted)
+	{
+	  	return;
+	}
+
 	if (mObjectp->isHUDAttachment())
 	{
 		mPositionGlobal = gAgentCamera.getCameraPositionGlobal();
diff --git a/indra/newview/llaudiosourcevo.h b/indra/newview/llaudiosourcevo.h
index a68f58a4b2c6e0b6ae9d8ecdf938a6e8078e2fac..f1d8ef4528507b6be516b70cc54ac5edbc551b96 100644
--- a/indra/newview/llaudiosourcevo.h
+++ b/indra/newview/llaudiosourcevo.h
@@ -42,11 +42,10 @@ class LLAudioSourceVO : public LLAudioSource
 	/*virtual*/ void setGain(const F32 gain);
 
 private:
-	void updateGain();
+	void updateMute();
 
 private:
 	LLPointer<LLViewerObject>	mObjectp;
-	F32							mActualGain; // The "real" gain, when not off due to parcel effects
 };
 
 #endif // LL_LLAUDIOSOURCEVO_H
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/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 5241f20c0e1d764ef54aeef4d8c695779b150931..09083dcb981fcd68c4eb3a13013431ef90161d4f 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -509,7 +509,7 @@ LLAvalineListItem::LLAvalineListItem(bool hide_number/* = true*/) : LLAvatarList
 , mIsHideNumber(hide_number)
 {
 	// should not use buildPanel from the base class to ensure LLAvalineListItem::postBuild is called.
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml");
+	buildFromFile( "panel_avatar_list_item.xml");
 }
 
 BOOL LLAvalineListItem::postBuild()
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 8fc4ad6763c8c33992572b3e399c142571146e56..c54913a3e1a8f76468970fbff8d25adad577c2ef 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -70,11 +70,12 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/)
 	mOnlineStatus(E_UNKNOWN),
 	mShowInfoBtn(true),
 	mShowProfileBtn(true),
-	mShowPermissions(false)
+	mShowPermissions(false),
+	mHovered(false)
 {
 	if (not_from_ui_factory)
 	{
-		LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml");
+		buildFromFile("panel_avatar_list_item.xml");
 	}
 	// *NOTE: mantipov: do not use any member here. They can be uninitialized here in case instance
 	// is created from the UICtrlFactory
@@ -449,20 +450,20 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item)
 	//info btn width + padding
 	S32 info_btn_width = avatar_item->mProfileBtn->getRect().mLeft - avatar_item->mInfoBtn->getRect().mLeft;
 
-	// edit their objects permission icon width + padding
-	S32 permission_edit_theirs_width = avatar_item->mInfoBtn->getRect().mLeft - avatar_item->mIconPermissionEditTheirs->getRect().mLeft;
-
-	// edit my objects permission icon width + padding
-	S32 permission_edit_mine_width = avatar_item->mIconPermissionEditTheirs->getRect().mLeft - avatar_item->mIconPermissionEditMine->getRect().mLeft;
+	// online permission icon width + padding
+	S32 permission_online_width = avatar_item->mInfoBtn->getRect().mLeft - avatar_item->mIconPermissionOnline->getRect().mLeft;
 
 	// map permission icon width + padding
-	S32 permission_map_width = avatar_item->mIconPermissionEditMine->getRect().mLeft - avatar_item->mIconPermissionMap->getRect().mLeft;
+	S32 permission_map_width = avatar_item->mIconPermissionOnline->getRect().mLeft - avatar_item->mIconPermissionMap->getRect().mLeft;
 
-	// online permission icon width + padding
-	S32 permission_online_width = avatar_item->mIconPermissionMap->getRect().mLeft - avatar_item->mIconPermissionOnline->getRect().mLeft;
+	// edit my objects permission icon width + padding
+	S32 permission_edit_mine_width = avatar_item->mIconPermissionMap->getRect().mLeft - avatar_item->mIconPermissionEditMine->getRect().mLeft;
+
+	// edit their objects permission icon width + padding
+	S32 permission_edit_theirs_width = avatar_item->mIconPermissionEditMine->getRect().mLeft - avatar_item->mIconPermissionEditTheirs->getRect().mLeft;
 
 	// last interaction time textbox width + padding
-	S32 last_interaction_time_width = avatar_item->mIconPermissionOnline->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft;
+	S32 last_interaction_time_width = avatar_item->mIconPermissionEditTheirs->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft;
 
 	// avatar icon width + padding
 	S32 icon_width = avatar_item->mAvatarName->getRect().mLeft - avatar_item->mAvatarIcon->getRect().mLeft;
@@ -474,10 +475,10 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item)
 	sChildrenWidths[--index] = icon_width;
 	sChildrenWidths[--index] = 0; // for avatar name we don't need its width, it will be calculated as "left available space"
 	sChildrenWidths[--index] = last_interaction_time_width;
-	sChildrenWidths[--index] = permission_online_width;
-	sChildrenWidths[--index] = permission_map_width;
-	sChildrenWidths[--index] = permission_edit_mine_width;
 	sChildrenWidths[--index] = permission_edit_theirs_width;
+	sChildrenWidths[--index] = permission_edit_mine_width;
+	sChildrenWidths[--index] = permission_map_width;
+	sChildrenWidths[--index] = permission_online_width;
 	sChildrenWidths[--index] = info_btn_width;
 	sChildrenWidths[--index] = profile_btn_width;
 	sChildrenWidths[--index] = speaking_indicator_width;
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index ffb988b2abd131c0155608f73e295f1c7d5eb465..52187284eb1d7ee3baa7118a08349d6bc8c2513d 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -143,10 +143,10 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver
 		ALIC_SPEAKER_INDICATOR,
 		ALIC_PROFILE_BUTTON,
 		ALIC_INFO_BUTTON,
-		ALIC_PERMISSION_EDIT_THEIRS,
-		ALIC_PERMISSION_EDIT_MINE,
-		ALIC_PERMISSION_MAP,
 		ALIC_PERMISSION_ONLINE,
+		ALIC_PERMISSION_MAP,
+		ALIC_PERMISSION_EDIT_MINE,
+		ALIC_PERMISSION_EDIT_THEIRS,
 		ALIC_INTERACTION_TIME,
 		ALIC_NAME,
 		ALIC_ICON,
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 29f4311ea48f7c9d0cb3e6b5f0f70eaa6caa6182..ef6f2f7337d8bb0e4f0c6cbbaf402dad990ad51e 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -41,6 +41,7 @@
 #include "llagentcamera.h"
 #include "llchiclet.h"
 #include "llfloatercamera.h"
+#include "llhints.h"
 #include "llimfloater.h" // for LLIMFloater
 #include "llnearbychatbar.h"
 #include "llspeakbutton.h"
@@ -104,10 +105,6 @@ template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance();
 namespace
 {
 	const std::string& PANEL_CHICLET_NAME	= "chiclet_list_panel";
-	const std::string& PANEL_CHATBAR_NAME	= "chat_bar";
-	const std::string& PANEL_MOVEMENT_NAME	= "movement_panel";
-	const std::string& PANEL_CAMERA_NAME	= "cam_panel";
-	const std::string& PANEL_GESTURE_NAME	= "gesture_panel";
 
 	S32 get_panel_min_width(LLLayoutStack* stack, LLView* panel)
 	{
@@ -115,7 +112,7 @@ namespace
 		llassert(stack);
 		if ( stack && panel && panel->getVisible() )
 		{
-			stack->getPanelMinSize(panel->getName(), &minimal_width, NULL);
+			stack->getPanelMinSize(panel->getName(), &minimal_width);
 		}
 		return minimal_width;
 	}
@@ -126,7 +123,7 @@ namespace
 		llassert(stack);
 		if ( stack && panel && panel->getVisible() )
 		{
-			stack->getPanelMaxSize(panel->getName(), &max_width, NULL);
+			stack->getPanelMaxSize(panel->getName(), &max_width);
 		}
 		return max_width;
 	}
@@ -148,26 +145,30 @@ class LLBottomTrayLite
 public:
 	LLBottomTrayLite()
 		: mNearbyChatBar(NULL),
+		mChatBarContainer(NULL),
 		  mGesturePanel(NULL)
 	{
 		mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
-		LLUICtrlFactory::getInstance()->buildPanel(this, "panel_bottomtray_lite.xml");
+		buildFromFile("panel_bottomtray_lite.xml");
 		// Necessary for focus movement among child controls
 		setFocusRoot(TRUE);
 	}
 
 	BOOL postBuild()
 	{
-		mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar");
+		mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");
+		mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");
 		mGesturePanel = getChild<LLPanel>("gesture_panel");
 
 		// Hide "show_nearby_chat" button 
-		LLLineEditor* chat_box = mNearbyChatBar->getChatBox();
-		LLUICtrl* show_btn = mNearbyChatBar->getChild<LLUICtrl>("show_nearby_chat");
-		S32 delta_width = show_btn->getRect().getWidth();
-		show_btn->setVisible(FALSE);
-		chat_box->reshape(chat_box->getRect().getWidth() + delta_width, chat_box->getRect().getHeight());
-
+		if (mNearbyChatBar)
+		{
+			LLLineEditor* chat_box = mNearbyChatBar->getChatBox();
+			LLUICtrl* show_btn = mNearbyChatBar->getChild<LLUICtrl>("show_nearby_chat");
+			S32 delta_width = show_btn->getRect().getWidth();
+			show_btn->setVisible(FALSE);
+			chat_box->reshape(chat_box->getRect().getWidth() + delta_width, chat_box->getRect().getHeight());
+		}
 		return TRUE;
 	}
 
@@ -180,6 +181,7 @@ class LLBottomTrayLite
 	}
 
 	LLNearbyChatBar*	mNearbyChatBar;
+	LLLayoutPanel*		mChatBarContainer;
 	LLPanel*			mGesturePanel;
 };
 
@@ -188,17 +190,18 @@ LLBottomTray::LLBottomTray(const LLSD&)
 	mSpeakPanel(NULL),
 	mSpeakBtn(NULL),
 	mNearbyChatBar(NULL),
-	mToolbarStack(NULL)
-,	mMovementButton(NULL)
-,	mResizeState(RS_NORESIZE)
-,	mBottomTrayContextMenu(NULL)
-,	mCamButton(NULL)
-,	mBottomTrayLite(NULL)
-,	mIsInLiteMode(false)
-,	mDragStarted(false)
-,	mDraggedItem(NULL)
-,	mLandingTab(NULL)
-,	mCheckForDrag(false)
+	mChatBarContainer(NULL),
+	mToolbarStack(NULL),
+	mMovementButton(NULL),
+	mResizeState(RS_NORESIZE),
+	mBottomTrayContextMenu(NULL),
+	mCamButton(NULL),
+	mBottomTrayLite(NULL),
+	mIsInLiteMode(false),
+	mDragStarted(false),
+	mDraggedItem(NULL),
+	mLandingTab(NULL),
+	mCheckForDrag(false)
 {
 	// Firstly add ourself to IMSession observers, so we catch session events
 	// before chiclets do that.
@@ -206,7 +209,7 @@ LLBottomTray::LLBottomTray(const LLSD&)
 
 	mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
 
-	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_bottomtray.xml");
+	buildFromFile("panel_bottomtray.xml");
 
 	LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
 
@@ -225,6 +228,7 @@ LLBottomTray::LLBottomTray(const LLSD&)
 	}
 
 	mImageDragIndication = LLUI::getUIImage(getString("DragIndicationImageName"));
+	mDesiredNearbyChatWidth = mNearbyChatBar ? mNearbyChatBar->getRect().getWidth() : 0;
 }
 
 LLBottomTray::~LLBottomTray()
@@ -237,7 +241,7 @@ LLBottomTray::~LLBottomTray()
 	if (mNearbyChatBar)
 	{
 		// store custom width of chatbar panel.
-		S32 custom_width = mNearbyChatBar->getRect().getWidth();
+		S32 custom_width = mChatBarContainer->getRect().getWidth();
 		gSavedSettings.setS32("ChatBarCustomWidth", custom_width);
 	}
 
@@ -432,7 +436,7 @@ S32 LLBottomTray::notifyParent(const LLSD& info)
 		const std::string& name = info["view_name"];
 
 		// expected only resize of nearby chatbar
-		if (mNearbyChatBar->getName() != name) return LLPanel::notifyParent(info);
+		if (mChatBarContainer->getName() != name) return LLPanel::notifyParent(info);
 
 		const S32 new_width = info["new_width"];
 
@@ -462,8 +466,8 @@ void LLBottomTray::updateContextMenu(S32 x, S32 y, MASK mask)
 {
 	LLUICtrl* edit_box = mNearbyChatBar->getChild<LLUICtrl>("chat_box");
 
-	S32 local_x = x - mNearbyChatBar->getRect().mLeft - edit_box->getRect().mLeft;
-	S32 local_y = y - mNearbyChatBar->getRect().mBottom - edit_box->getRect().mBottom;
+	S32 local_x = x - mChatBarContainer->getRect().mLeft - edit_box->getRect().mLeft;
+	S32 local_y = y - mChatBarContainer->getRect().mBottom - edit_box->getRect().mBottom;
 
 	bool in_edit_box = edit_box->pointInView(local_x, local_y);
 
@@ -516,10 +520,14 @@ BOOL LLBottomTray::postBuild()
 	mBottomTrayContextMenu =  LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_bottomtray.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 	gMenuHolder->addChild(mBottomTrayContextMenu);
 
+	mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar");
+	LLHints::registerHintTarget("chat_bar", mNearbyChatBar->LLView::getHandle());
+
+	mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel");
 
-	mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar");
 	mToolbarStack = getChild<LLLayoutStack>("toolbar_stack");
 	mMovementButton = getChild<LLButton>("movement_btn");
+	LLHints::registerHintTarget("move_btn", mMovementButton->getHandle());
 	mCamButton = getChild<LLButton>("camera_btn");
 	setRightMouseDownCallback(boost::bind(&LLBottomTray::showBottomTrayContextMenu,this, _2, _3,_4));
 
@@ -762,7 +770,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)
@@ -961,14 +969,15 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 	// we can not to do this from postBuild because reshape is called from parent view on startup
 	// creation after it and reset width according to resize logic.
 	static bool needs_restore_custom_state = true;
-	if (mNearbyChatBar && needs_restore_custom_state)
+	if (mChatBarContainer && needs_restore_custom_state)
 	{
 		// restore custom width of chatbar panel.
 		S32 new_width = gSavedSettings.getS32("ChatBarCustomWidth");
 		if (new_width > 0)
 		{
+			mDesiredNearbyChatWidth = new_width;
 			processChatbarCustomization(new_width);
-			mNearbyChatBar->reshape(new_width, mNearbyChatBar->getRect().getHeight());
+			mChatBarContainer->reshape(new_width, mChatBarContainer->getRect().getHeight());
 		}
 		needs_restore_custom_state = false;
 	}
@@ -982,6 +991,9 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
 	const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
 
+	// There are four steps of processing width decrease. If in one of them required width was reached,
+	// further are not needed.
+	// 1. Decreasing width of chiclet panel.
 	if (chiclet_panel_width > chiclet_panel_min_width)
 	{
 		// we have some space to decrease chiclet panel
@@ -1007,8 +1019,15 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 			<< llendl;
 	}
 
-	const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth();
+	S32 buttons_freed_width = 0;
+	// 2. Decreasing width of buttons.
+	if (still_should_be_processed)
+	{
+		processShrinkButtons(delta_width, buttons_freed_width);
+	}
+	// 3. Decreasing width of nearby chat.
 	const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar);
+	const S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth();
 	if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width)
 	{
 		// we have some space to decrease chatbar panel
@@ -1021,7 +1040,11 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 
 		still_should_be_processed = delta_width < 0;
 
-		mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight());
+		// chatbar should only be shrunk here, not stretched
+		if(delta_panel > 0)
+		{
+			mChatBarContainer->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mChatBarContainer->getRect().getHeight());
+		}
 
 		log(mNearbyChatBar, "after processing panel decreasing via nearby chatbar panel");
 
@@ -1032,11 +1055,9 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 	}
 
 	S32 extra_shrink_width = 0;
-	S32 buttons_freed_width = 0;
+	// 4. Hiding buttons if needed.
 	if (still_should_be_processed)
 	{
-		processShrinkButtons(delta_width, buttons_freed_width);
-
 		processHideButtons(delta_width, buttons_freed_width);
 
 		if (delta_width < 0)
@@ -1048,10 +1069,15 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 
 		if (buttons_freed_width > 0)
 		{
-			log(mNearbyChatBar, "before applying compensative width");
-			mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() + buttons_freed_width, mNearbyChatBar->getRect().getHeight() );
-			log(mNearbyChatBar, "after applying compensative width");
-			lldebugs << buttons_freed_width << llendl;
+			S32 nearby_needed_width = mDesiredNearbyChatWidth - mNearbyChatBar->getRect().getWidth();
+			if (nearby_needed_width > 0)
+			{
+				S32 compensative_width = nearby_needed_width > buttons_freed_width ? buttons_freed_width : nearby_needed_width; 
+				log(mNearbyChatBar, "before applying compensative width");
+				mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() + compensative_width, mChatBarContainer->getRect().getHeight() );
+				log(mNearbyChatBar, "after applying compensative width");
+				lldebugs << buttons_freed_width << llendl;
+			}
 		}
 	}
 
@@ -1065,18 +1091,12 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
 	static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
 
-	const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth();
-	static const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar);
-	static const S32 chatbar_panel_max_width = get_panel_max_width(mToolbarStack, mNearbyChatBar);
-
-	const S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width;
 	const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width;
 
 	// how many room we have to show hidden buttons
-	S32 total_available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet;
+	S32 total_available_width = delta_width + available_width_chiclet;
 
 	lldebugs << "Processing extending, available width:"
-		<< ", chatbar - " << chatbar_available_shrink_width
 		<< ", chiclets - " << available_width_chiclet
 		<< ", total - " << total_available_width
 		<< llendl;
@@ -1085,8 +1105,6 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 
 	processShowButtons(available_width);
 
-	processExtendButtons(available_width);
-
 	// if we have to show/extend some buttons but resized delta width is not enough...
 	S32 processed_width = total_available_width - available_width;
 	if (processed_width > delta_width)
@@ -1097,21 +1115,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 		// 1. use delta width of resizing
 		required_to_process_width -= delta_width;
 
-		// 2. use width available via decreasing of nearby chat panel
-		S32 chatbar_shrink_width = required_to_process_width;
-		if (chatbar_available_shrink_width < chatbar_shrink_width)
-		{
-			chatbar_shrink_width = chatbar_available_shrink_width;
-		}
-
-		log(mNearbyChatBar, "increase width: before applying compensative width");
-		mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - chatbar_shrink_width, mNearbyChatBar->getRect().getHeight() );
-		if (mNearbyChatBar)			log(mNearbyChatBar, "after applying compensative width");
-		lldebugs << chatbar_shrink_width << llendl;
-
-		// 3. use width available via decreasing of chiclet panel
-		required_to_process_width -= chatbar_shrink_width;
-
+		// 2. use width available via decreasing of chiclet panel
 		if (required_to_process_width > 0)
 		{
 			mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight());
@@ -1126,10 +1130,10 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 
 
 	// how many space can nearby chatbar take?
-	S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth();
-	if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width)
+	S32 chatbar_panel_width_ = mChatBarContainer->getRect().getWidth();
+	if (delta_width > 0 && chatbar_panel_width_ < mDesiredNearbyChatWidth)
 	{
-		S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_;
+		S32 delta_panel_max = mDesiredNearbyChatWidth - chatbar_panel_width_;
 		S32 delta_panel = llmin(delta_width, delta_panel_max);
 		lldebugs << "Unprocesed delta width: " << delta_width
 			<< ", can be applied to chatbar: " << delta_panel_max
@@ -1137,9 +1141,13 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 			<< llendl;
 
 		delta_width -= delta_panel_max;
-		mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight());
+		mChatBarContainer->reshape(chatbar_panel_width_ + delta_panel, mChatBarContainer->getRect().getHeight());
 		log(mNearbyChatBar, "applied unprocessed delta width");
 	}
+	if (delta_width > 0)
+	{
+		processExtendButtons(delta_width);
+	}
 }
 
 void LLBottomTray::processShowButtons(S32& available_width)
@@ -1259,7 +1267,7 @@ void LLBottomTray::processShrinkButtons(S32& required_width, S32& buttons_freed_
 
 		S32 panel_min_width = 0;
 		std::string panel_name = mSpeakPanel->getName();
-		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width, NULL);
+		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width);
 		if (!success)
 		{
 			lldebugs << "Panel was not found to get its min width: " << panel_name << llendl;
@@ -1305,7 +1313,7 @@ void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32&
 		S32 panel_width = panel->getRect().getWidth();
 		S32 panel_min_width = 0;
 		std::string panel_name = panel->getName();
-		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width, NULL);
+		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width);
 		S32 possible_shrink_width = panel_width - panel_min_width;
 
 		if (!success)
@@ -1597,7 +1605,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 		{
 			// Calculate the possible shrunk width as difference between current and minimal widths
 			const S32 chatbar_shrunk_width =
-				mNearbyChatBar->getRect().getWidth() - get_panel_min_width(mToolbarStack, mNearbyChatBar);
+				mChatBarContainer->getRect().getWidth() - get_panel_min_width(mToolbarStack, mChatBarContainer);
 
 			S32 sum_of_min_widths = get_panel_min_width(mToolbarStack, mSpeakPanel);
 			S32 sum_of_curr_widths = get_curr_width(mSpeakPanel);
@@ -1617,7 +1625,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 
 			// Minimal width of current panel
 			S32 minimal_width = 0;
-			mToolbarStack->getPanelMinSize(cur_panel->getName(), &minimal_width, NULL);
+			mToolbarStack->getPanelMinSize(cur_panel->getName(), &minimal_width);
 
 			if ( (available_width + possible_shrunk_width) >= minimal_width)
 			{
@@ -1694,10 +1702,12 @@ void LLBottomTray::processChatbarCustomization(S32 new_width)
 {
 	if (NULL == mNearbyChatBar) return;
 
-	const S32 delta_width = mNearbyChatBar->getRect().getWidth() - new_width;
+	const S32 delta_width = mChatBarContainer->getRect().getWidth() - new_width;
 
 	if (delta_width == 0) return;
 
+	mDesiredNearbyChatWidth = new_width;
+
 	LLView * chiclet_layout_panel = mChicletPanel->getParent();
 	const S32 chiclet_min_width = get_panel_min_width(mToolbarStack, chiclet_layout_panel);
 	const S32 chiclet_panel_width = chiclet_layout_panel->getRect().getWidth();
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 1197c5a10a8db9446f3caf56d861cfa4fc3307d7..8d8a42c553c41929404628b84b88d3d80ffa5d27 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -27,20 +27,18 @@
 #ifndef LL_LLBOTTOMPANEL_H
 #define LL_LLBOTTOMPANEL_H
 
-#include "llmenugl.h"
-
 #include "llpanel.h"
 #include "llimview.h"
-#include "llcombobox.h"
+#include "llbutton.h"
 
 class LLChicletPanel;
-class LLLineEditor;
 class LLLayoutStack;
-class LLNotificationChiclet;
 class LLSpeakButton;
 class LLNearbyChatBar;
 class LLIMChiclet;
 class LLBottomTrayLite;
+class LLLayoutPanel;
+class LLMenuGL;
 
 // Build time optimization, generate once in .cpp file
 #ifndef LLBOTTOMTRAY_CPP
@@ -439,10 +437,15 @@ class LLBottomTray
 	void onContextMenuItemClicked(const LLSD& userdata);
 	bool onContextMenuItemEnabled(const LLSD& userdata);
 
+	// Either default or saved after user's manual resize width of nearby chat.
+	// Nearby chat will not always have it, because sometimes it can be shrunk on resize,
+	// but when possible it will be restored back to this value.
+	S32					mDesiredNearbyChatWidth;
 	LLChicletPanel* 	mChicletPanel;
 	LLPanel*			mSpeakPanel;
 	LLSpeakButton* 		mSpeakBtn;
 	LLNearbyChatBar*	mNearbyChatBar;
+	LLLayoutPanel*		mChatBarContainer;
 	LLLayoutStack*		mToolbarStack;
 	LLMenuGL*			mBottomTrayContextMenu;
 	LLButton*			mCamButton;
diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d6a813d60806ddefbbed85abc3a20d0eddb506a0
--- /dev/null
+++ b/indra/newview/llbrowsernotification.cpp
@@ -0,0 +1,48 @@
+/**
+ * @file llbrowsernotification.cpp
+ * @brief Notification Handler Class for browser popups
+ *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h" // must be first include
+
+#include "llnotificationhandler.h"
+#include "llnotifications.h"
+#include "llfloaterreg.h"
+#include "llmediactrl.h"
+
+using namespace LLNotificationsUI;
+
+bool LLBrowserNotification::processNotification(const LLSD& notify)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+	if (!notification) return false;
+
+	LLMediaCtrl* media_instance = LLMediaCtrl::getInstance(notification->getPayload()["media_id"].asUUID());
+	if (media_instance)
+	{
+		media_instance->showNotification(notification);
+	}
+	return false;
+}
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index 2dfc30675e719aea84189ecac78140d0a0214a41..7fd61c22ac4e9f4b0e59cbbee964ebf27cbb2f51 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -142,7 +142,7 @@ BOOL LLCallFloater::postBuild()
 
 	childSetAction("leave_call_btn", boost::bind(&LLCallFloater::leaveCall, this));
 
-	mNonAvatarCaller = getChild<LLNonAvatarCaller>("non_avatar_caller");
+	mNonAvatarCaller = findChild<LLNonAvatarCaller>("non_avatar_caller");
 	mNonAvatarCaller->setVisible(FALSE);
 
 	LLView *anchor_panel = LLBottomTray::getInstance()->getChild<LLView>("speak_flyout_btn");
diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
index d251931ecabd1e482a1ba5ad39159be339fff949..6e58be817457ce26729690843eff82968b96e5f7 100644
--- a/indra/newview/llchatbar.cpp
+++ b/indra/newview/llchatbar.cpp
@@ -565,6 +565,10 @@ void LLChatBar::sendChatFromViewer(const std::string &utf8text, EChatType type,
 
 void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate)
 {
+	// as soon as we say something, we no longer care about teaching the user
+	// how to chat
+	gWarningSettings.setBOOL("FirstOtherChatBeforeUser", FALSE);
+	
 	// Look for "/20 foo" channel chats.
 	S32 channel = 0;
 	LLWString out_text = stripChannelNumber(wtext, &channel);
@@ -685,14 +689,14 @@ class LLChatHandler : public LLCommandHandler
 		}
 		else
 		{
-			S32 channel = tokens[0].asInteger();
+		S32 channel = tokens[0].asInteger();
 			// VWR-19499 Restrict function to chat channels greater than 0.
 			if ((channel > 0) && (channel < 2147483647))
 			{
 				retval = true;
 				// Say mesg on channel
-				std::string mesg = tokens[1].asString();
-				send_chat_from_viewer(mesg, CHAT_TYPE_NORMAL, channel);
+		std::string mesg = tokens[1].asString();
+		send_chat_from_viewer(mesg, CHAT_TYPE_NORMAL, channel);
 			}
 			else
 			{
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index dfb1db523dbe21b33674a65f10ed4d42fe7cc583..eb10add254197b9a3b62bba3e0d99d57169de8ea 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -101,7 +101,7 @@ class LLChatHistoryHeader: public LLPanel
 	static LLChatHistoryHeader* createInstance(const std::string& file_name)
 	{
 		LLChatHistoryHeader* pInstance = new LLChatHistoryHeader;
-		LLUICtrlFactory::getInstance()->buildPanel(pInstance, file_name);	
+		pInstance->buildFromFile(file_name);	
 		return pInstance;
 	}
 
@@ -396,7 +396,7 @@ class LLChatHistoryHeader: public LLPanel
 			return;
 		}
 
-		LLTextBase* name = getChild<LLTextBase>("user_name");
+		LLTextBox* name = getChild<LLTextBox>("user_name");
 		LLRect sticky_rect = name->getRect();
 		S32 icon_x = llmin(sticky_rect.mLeft + name->getTextBoundingRect().getWidth() + 7, sticky_rect.mRight - 3);
 		sInfoCtrl->setOrigin(icon_x, sticky_rect.getCenterY() - sInfoCtrl->getRect().getHeight() / 2 ) ;
@@ -496,12 +496,17 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)
 	
 	const S32 NEW_TEXT_NOTICE_HEIGHT = 20;
 	
-	LLPanel::Params panel_p;
+	LLLayoutPanel::Params panel_p;
 	panel_p.name = "spacer";
 	panel_p.background_visible = false;
 	panel_p.has_border = false;
 	panel_p.mouse_opaque = false;
-	stackp->addPanel(LLUICtrlFactory::create<LLPanel>(panel_p), 0, 30, S32_MAX, S32_MAX, true, false, LLLayoutStack::ANIMATE);
+	panel_p.min_dim = 30;
+	panel_p.max_dim = S32_MAX;
+	panel_p.auto_resize = true;
+	panel_p.user_resize = false;
+
+	stackp->addPanel(LLUICtrlFactory::create<LLLayoutPanel>(panel_p), LLLayoutStack::ANIMATE);
 
 	panel_p.name = "new_text_notice_holder";
 	LLRect new_text_notice_rect = getLocalRect();
@@ -510,7 +515,10 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)
 	panel_p.background_opaque = true;
 	panel_p.background_visible = true;
 	panel_p.visible = false;
-	mMoreChatPanel = LLUICtrlFactory::create<LLPanel>(panel_p);
+	panel_p.min_dim = 0;
+	panel_p.auto_resize = false;
+	panel_p.user_resize = false;
+	mMoreChatPanel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
 	
 	LLTextBox::Params text_p(p.more_chat_text);
 	text_p.rect = mMoreChatPanel->getLocalRect();
@@ -519,7 +527,7 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p)
 	mMoreChatText = LLUICtrlFactory::create<LLTextBox>(text_p, mMoreChatPanel);
 	mMoreChatText->setClickedCallback(boost::bind(&LLChatHistory::onClickMoreText, this));
 
-	stackp->addPanel(mMoreChatPanel, 0, 0, S32_MAX, S32_MAX, false, false, LLLayoutStack::ANIMATE);
+	stackp->addPanel(mMoreChatPanel, LLLayoutStack::ANIMATE);
 }
 
 
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index 112a33f1ee1e09fd9df2468a3a8de6349136be67..ac48d7bf29b82640ba1865dd9860525a7127b304 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -138,7 +138,7 @@ class LLChatHistory : public LLUICtrl
 		S32 mTopHeaderPad;
 		S32 mBottomHeaderPad;
 
-		LLPanel*		mMoreChatPanel;
+		class LLLayoutPanel*	mMoreChatPanel;
 		LLTextBox*		mMoreChatText;
 		LLTextEditor*	mEditor;
 		typedef std::set<std::string> unread_chat_source_t;
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 67b7ac53838147914e018c4f27cce0fb941668bf..e78bdbe25ca1c382b5ac91340284e793d0ea8aef 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -51,7 +51,7 @@ static const S32 msg_height_pad = 5;
 LLNearbyChatToastPanel* LLNearbyChatToastPanel::createInstance()
 {
 	LLNearbyChatToastPanel* item = new LLNearbyChatToastPanel();
-	LLUICtrlFactory::getInstance()->buildPanel(item, "panel_chat_item.xml");
+	item->buildFromFile("panel_chat_item.xml");
 	item->setFollows(FOLLOWS_NONE);
 	return item;
 }
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index 268d9958d196e8ce7bf48f76807707cd288b34b1..a42677845ecc0b7c00254bcb580aba3bc531fdc4 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -89,7 +89,6 @@ LLFloaterScriptQueue::LLFloaterScriptQueue(const LLSD& key) :
 	mDone(false),
 	mMono(false)
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_queue.xml", FALSE);
 }
 
 // Destroys the object
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index b71564714307d6a133d6f09f1feace57db599094..a09c0ea0f88a8c7c7853d296020e57f2e550896a 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -117,7 +117,7 @@ BOOL LLFastTimerView::handleRightMouseDown(S32 x, S32 y, MASK mask)
 	{
 		S32 bar_idx = MAX_VISIBLE_HISTORY - ((y - mBarRect.mBottom) * (MAX_VISIBLE_HISTORY + 2) / mBarRect.getHeight());
 		bar_idx = llclamp(bar_idx, 0, MAX_VISIBLE_HISTORY);
-		mPrintStats = bar_idx;
+		mPrintStats = LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex - bar_idx;
 	}
 	return FALSE;
 }
@@ -134,6 +134,17 @@ LLFastTimer::NamedTimer* LLFastTimerView::getLegendID(S32 y)
 	return NULL;
 }
 
+BOOL LLFastTimerView::handleDoubleClick(S32 x, S32 y, MASK mask)
+{
+	for(timer_tree_iterator_t it = begin_timer_tree(LLFastTimer::NamedTimer::getRootNamedTimer());
+		it != end_timer_tree();
+		++it)
+	{
+		(*it)->setCollapsed(false);
+	}
+	return TRUE;
+}
+
 BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask)
 {
 
@@ -947,7 +958,7 @@ void LLFastTimerView::draw()
 			{
 				legend_stat += ", ";
 			}
-			first = true;
+			first = false;
 			legend_stat += idp->getName();
 
 			if (idp->getCollapsed())
@@ -974,8 +985,7 @@ void LLFastTimerView::draw()
 			U64 ticks;
 			if (mPrintStats > 0)
 			{
-				S32 hidx = (mPrintStats - 1) - mScrollIndex;
-				ticks = idp->getHistoricalCount(hidx);
+				ticks = idp->getHistoricalCount(mPrintStats);
 			}
 			else
 			{
diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h
index 961d03abf1a512fa5621b6ef239639e7ecad655f..3788897cec4cba424bc0fb73f0f4eb04c862cb85 100644
--- a/indra/newview/llfasttimerview.h
+++ b/indra/newview/llfasttimerview.h
@@ -48,6 +48,7 @@ class LLFastTimerView : public LLFloater
 public:
 
 	virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+	virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
 	virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
 	virtual BOOL handleHover(S32 x, S32 y, MASK mask);
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 5796e676185ff76b36aa8bd6da40b5256e1b9353..3981b887ade3c4230965fb8707ce418416fd334f 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -161,22 +161,13 @@ class LLFavoriteLandmarkButton : public LLButton
 		
 		if (!region_name.empty())
 		{
-			LLToolTip::Params params;
 			std::string extra_message = llformat("%s (%d, %d, %d)", region_name.c_str(), 
 				mLandmarkInfoGetter.getPosX(), mLandmarkInfoGetter.getPosY(), mLandmarkInfoGetter.getPosZ());
 
+			LLToolTip::Params params;
 			params.message = llformat("%s\n%s", getLabelSelected().c_str(), extra_message.c_str());
-			
-			LLRect rect = calcScreenRect();
-			LLFontGL* standart_font = LLFontGL::getFontSansSerif();
-			if(standart_font)
-			{
-				S32 w = llmax((S32)(standart_font->getWidthF32(getLabelSelected())+0.5),(S32)(standart_font->getWidthF32(extra_message)+0.5));
-				rect.mRight = rect.mLeft + w;
-				params.max_width = w;
-			}
-			
-			params.sticky_rect = rect; 
+			params.max_width = 1000;			
+			params.sticky_rect = calcScreenRect(); 
 
 			LLToolTipMgr::instance().show(params);
 		}
@@ -299,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)
@@ -661,16 +638,23 @@ void LLFavoritesBarCtrl::draw()
 	}
 }
 
-LLXMLNodePtr LLFavoritesBarCtrl::getButtonXMLNode()
+const LLButton::Params& LLFavoritesBarCtrl::getButtonParams()
 {
-	LLXMLNodePtr buttonXMLNode = NULL;
-	bool success = LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", buttonXMLNode);
-	if (!success)
+	static LLButton::Params button_params;
+	static bool params_initialized = false;
+
+	if (!params_initialized)
 	{
-		llwarns << "Failed to create Favorites Bar button from favorites_bar_button.xml" << llendl;
-		buttonXMLNode = NULL;
+		LLXMLNodePtr button_xml_node;
+		if(LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", button_xml_node))
+		{
+			LLXUIParser parser;
+			parser.readXUI(button_xml_node, button_params, "favorites_bar_button.xml");
+		}
+		params_initialized = true;
 	}
-	return buttonXMLNode;
+
+	return button_params;
 }
 
 void LLFavoritesBarCtrl::updateButtons()
@@ -682,11 +666,8 @@ void LLFavoritesBarCtrl::updateButtons()
 		return;
 	}
 
-	static LLXMLNodePtr buttonXMLNode = getButtonXMLNode();
-	if (buttonXMLNode.isNull())
-	{
-		return;
-	}
+	const LLButton::Params& button_params = getButtonParams();
+
 	if(mItems.empty())
 	{
 		mBarLabel->setVisible(TRUE);
@@ -762,7 +743,7 @@ void LLFavoritesBarCtrl::updateButtons()
 		int j = first_changed_item_index;
 		for (; j < mItems.count(); j++)
 		{
-			last_new_button = createButton(mItems[j], buttonXMLNode, last_right_edge);
+			last_new_button = createButton(mItems[j], button_params, last_right_edge);
 			if (!last_new_button)
 			{
 				break;
@@ -780,8 +761,7 @@ void LLFavoritesBarCtrl::updateButtons()
 			//or there are some new favorites, or width had been changed
 			// so if we need to display chevron button,  we must update dropdown items too. 
 			mUpdateDropDownItems = true;
-			S32 buttonHGap = 2; // default value
-			buttonXMLNode->getAttributeS32("left", buttonHGap);
+			S32 buttonHGap = button_params.rect.left; // default value
 			LLRect rect;
 			// Chevron button should stay right aligned
 			rect.setOriginAndSize(getRect().mRight - mChevronButton->getRect().getWidth() - buttonHGap, 0,
@@ -796,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();
@@ -808,12 +787,10 @@ void LLFavoritesBarCtrl::updateButtons()
 	}
 }
 
-LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem> item, LLXMLNodePtr &buttonXMLNode, S32 x_offset)
+LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem> item, const LLButton::Params& button_params, S32 x_offset)
 {
-	S32 def_button_width = 120;
-	buttonXMLNode->getAttributeS32("width", def_button_width);
-	S32 button_x_delta = 2; // default value
-	buttonXMLNode->getAttributeS32("left", button_x_delta);
+	S32 def_button_width = button_params.rect.width;
+	S32 button_x_delta = button_params.rect.left; // default value
 	S32 curr_x = x_offset;
 
 	/**
@@ -831,13 +808,16 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem
 	{
 		return NULL;
 	}
-	fav_btn = LLUICtrlFactory::defaultBuilder<LLFavoriteLandmarkButton>(buttonXMLNode, this, NULL);
+	LLButton::Params fav_btn_params(button_params);
+	fav_btn = LLUICtrlFactory::create<LLFavoriteLandmarkButton>(fav_btn_params);
 	if (NULL == fav_btn)
 	{
 		llwarns << "Unable to create LLFavoriteLandmarkButton widget: " << item->getName() << llendl;
 		return NULL;
 	}
 	
+	addChild(fav_btn);
+
 	LLRect butt_rect (fav_btn->getRect());
 	fav_btn->setLandmarkID(item->getUUID());
 	butt_rect.setOriginAndSize(curr_x + button_x_delta, fav_btn->getRect().mBottom, width, fav_btn->getRect().getHeight());
@@ -916,8 +896,6 @@ void LLFavoritesBarCtrl::showDropDownMenu()
 
 	if (menu)
 	{
-		// Release focus to allow changing of visibility.
-		menu->setFocus(FALSE);
 		if (!menu->toggleVisibility())
 			return;
 
@@ -1098,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/llfavoritesbar.h b/indra/newview/llfavoritesbar.h
index bdb1b8288fbc79493cde186dff1d64d92759bdab..37645523f6771937827fc8700d6728c7f904edc5 100644
--- a/indra/newview/llfavoritesbar.h
+++ b/indra/newview/llfavoritesbar.h
@@ -71,8 +71,8 @@ class LLFavoritesBarCtrl : public LLUICtrl, public LLInventoryObserver
 
 protected:
 	void updateButtons();
-	LLButton* createButton(const LLPointer<LLViewerInventoryItem> item, LLXMLNodePtr &root, S32 x_offset );
-	LLXMLNodePtr getButtonXMLNode();
+	LLButton* createButton(const LLPointer<LLViewerInventoryItem> item, const LLButton::Params& button_params, S32 x_offset );
+	const LLButton::Params& getButtonParams();
 	BOOL collectFavoriteItems(LLInventoryModel::item_array_t &items);
 
 	void onButtonClick(LLUUID id);
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 4d5b08243a55585133dbbde91361c8b832a98b07..dd08706f4ff5ed839c02d24413e87b483b54daf5 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -30,7 +30,7 @@
 
 // library includes
 #include "indra_constants.h"
-#include "llnotificationsutil.h"
+#include "llnotifications.h"
 
 // viewer includes
 #include "llagent.h"	// for gAgent.inPrelude()
@@ -39,7 +39,7 @@
 #include "llappviewer.h"
 #include "lltracker.h"
 
-/*
+
 // static
 std::set<std::string> LLFirstUse::sConfigVariables;
 
@@ -70,211 +70,109 @@ void LLFirstUse::resetFirstUse()
 		gWarningSettings.setBOOL(*iter, TRUE);
 	}
 }
-*/
-/*
-
-// Called whenever the viewer detects that your balance went up
-void LLFirstUse::useBalanceIncrease(S32 delta)
-{
-	if (gWarningSettings.getBOOL("FirstBalanceIncrease"))
-	{
-		gWarningSettings.setBOOL("FirstBalanceIncrease", FALSE);
-
-		LLSD args;
-		args["AMOUNT"] = llformat("%d",delta);
-		LLNotificationsUtil::add("FirstBalanceIncrease", args);
-	}
-}
-
-
-// Called whenever the viewer detects your balance went down
-void LLFirstUse::useBalanceDecrease(S32 delta)
-{
-	if (gWarningSettings.getBOOL("FirstBalanceDecrease"))
-	{
-		gWarningSettings.setBOOL("FirstBalanceDecrease", FALSE);
-
-		LLSD args;
-		args["AMOUNT"] = llformat("%d",-delta);
-		LLNotificationsUtil::add("FirstBalanceDecrease", args);
-	}
-}
-
 
 // static
-void LLFirstUse::useSit()
+void LLFirstUse::otherAvatarChatFirst(bool enable)
 {
-	// Our orientation island uses sitting to teach vehicle driving
-	// so just never show this message. JC
-	//if (gWarningSettings.getBOOL("FirstSit"))
-	//{
-	//	gWarningSettings.setBOOL("FirstSit", FALSE);
-        //
-	//	LLNotificationsUtil::add("FirstSit");
-	//}
+	firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "chat_bar").with("direction", "top_right").with("distance", 24));
 }
 
 // static
-void LLFirstUse::useMap()
+void LLFirstUse::sit(bool enable)
 {
-	if (gWarningSettings.getBOOL("FirstMap"))
-	{
-		gWarningSettings.setBOOL("FirstMap", FALSE);
-
-		LLNotificationsUtil::add("FirstMap");
-	}
+	firstUseNotification("FirstSit", enable, "HintSit", LLSD(), LLSD().with("target", "stand_btn").with("direction", "top"));
 }
 
 // static
-void LLFirstUse::useGoTo()
+void LLFirstUse::newInventory(bool enable)
 {
-	// nothing for now JC
+	// turning this off until bug EXP-62 can be fixed (inventory hint appears for new users when their initial inventory is acquired)
+	// firstUseNotification("FirstInventoryOffer", enable, "HintInventory", LLSD(), LLSD().with("target", "inventory_btn").with("direction", "left"));
 }
 
 // static
-void LLFirstUse::useBuild()
+void LLFirstUse::useSandbox()
 {
-	if (gWarningSettings.getBOOL("FirstBuild"))
-	{
-		gWarningSettings.setBOOL("FirstBuild", FALSE);
-
-		LLNotificationsUtil::add("FirstBuild");
-	}
+	firstUseNotification("FirstSandbox", true, "FirstSandbox", LLSD().with("HOURS", SANDBOX_CLEAN_FREQ).with("TIME", SANDBOX_FIRST_CLEAN_HOUR));
 }
- 
- */
-/*
-// static
-void LLFirstUse::useLeftClickNoHit()
-{ 
-	if (gWarningSettings.getBOOL("FirstLeftClickNoHit"))
-	{
-		gWarningSettings.setBOOL("FirstLeftClickNoHit", FALSE);
 
-		LLNotificationsUtil::add("FirstLeftClickNoHit");
-	}
-}
-*/
-/*
 // static
-void LLFirstUse::useTeleport()
+void LLFirstUse::notUsingDestinationGuide(bool enable)
 {
-	if (gWarningSettings.getBOOL("FirstTeleport"))
-	{
-		LLVector3d teleportDestination = LLTracker::getTrackedPositionGlobal();
-		if(teleportDestination != LLVector3d::zero)
-		{
-			gWarningSettings.setBOOL("FirstTeleport", FALSE);
-
-		        LLNotificationsUtil::add("FirstTeleport");
-		}
-	}
+	// not doing this yet
+	//firstUseNotification("FirstNotUseDestinationGuide", enable, "HintDestinationGuide", LLSD(), LLSD().with("target", "dest_guide_btn").with("direction", "left"));
 }
-*/
-// static
-void LLFirstUse::useOverrideKeys()
-{
-	// Our orientation island uses key overrides to teach vehicle driving
-	// so don't show this message until you get off OI. JC
-	if (!gAgent.inPrelude())
-	{
-		if (gWarningSettings.getBOOL("FirstOverrideKeys"))
-		{
-			gWarningSettings.setBOOL("FirstOverrideKeys", FALSE);
 
-			LLNotificationsUtil::add("FirstOverrideKeys");
-		}
-	}
-}
-/*
 // static
-void LLFirstUse::useAttach()
+void LLFirstUse::notUsingSidePanel(bool enable)
 {
-	// nothing for now
+	// not doing this yet
+	//firstUseNotification("FirstNotUseSidePanel", enable, "HintSidePanel", LLSD(), LLSD().with("target", "side_panel_btn").with("direction", "left"));
 }
 
 // static
-void LLFirstUse::useAppearance()
+void LLFirstUse::notMoving(bool enable)
 {
-	if (gWarningSettings.getBOOL("FirstAppearance"))
-	{
-		gWarningSettings.setBOOL("FirstAppearance", FALSE);
-
-		LLNotificationsUtil::add("FirstAppearance");
-	}
+	firstUseNotification("FirstNotMoving", enable, "HintMove", LLSD(), LLSD().with("target", "move_btn").with("direction", "top"));
 }
 
 // static
-void LLFirstUse::useInventory()
+void LLFirstUse::receiveLindens(bool enable)
 {
-	if (gWarningSettings.getBOOL("FirstInventory"))
-	{
-		gWarningSettings.setBOOL("FirstInventory", FALSE);
-
-		LLNotificationsUtil::add("FirstInventory");
-	}
+	firstUseNotification("FirstReceiveLindens", enable, "HintLindenDollar", LLSD(), LLSD().with("target", "linden_balance").with("direction", "bottom"));
 }
 
-*/
 
-// static
-void LLFirstUse::useSandbox()
+//static 
+void LLFirstUse::firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args, LLSD payload)
 {
-	if (gWarningSettings.getBOOL("FirstSandbox"))
-	{
-		gWarningSettings.setBOOL("FirstSandbox", FALSE);
+	init();
 
-		LLSD args;
-		args["HOURS"] = llformat("%d",SANDBOX_CLEAN_FREQ);
-		args["TIME"] = llformat("%d",SANDBOX_FIRST_CLEAN_HOUR);
-		LLNotificationsUtil::add("FirstSandbox", args);
-	}
-}
-/*
-// static
-void LLFirstUse::useFlexible()
-{
-	if (gWarningSettings.getBOOL("FirstFlexible"))
+	if (enable)
 	{
-		gWarningSettings.setBOOL("FirstFlexible", FALSE);
-
-		LLNotificationsUtil::add("FirstFlexible");
-	}
-}
+		if (gSavedSettings.getBOOL("EnableUIHints"))
+		{
+			LL_DEBUGS("LLFirstUse") << "Trigger first use notification " << notification_name << LL_ENDL;
 
-// static
-void LLFirstUse::useDebugMenus()
-{
-	if (gWarningSettings.getBOOL("FirstDebugMenus"))
+			// if notification doesn't already exist and this notification hasn't been disabled...
+			if (gWarningSettings.getBOOL(control_var))
+			{ // create new notification
+				LLNotifications::instance().add(LLNotification::Params().name(notification_name).substitutions(args).payload(payload.with("control_var", control_var)));
+			}
+		}
+	}	
+	else
 	{
-		gWarningSettings.setBOOL("FirstDebugMenus", FALSE);
-
-		LLNotificationsUtil::add("FirstDebugMenus");
+		LL_DEBUGS("LLFirstUse") << "Disabling first use notification " << notification_name << LL_ENDL;
+		LLNotifications::instance().cancelByName(notification_name);
+		// redundantly clear settings var here, in case there are no notifications to cancel
+		gWarningSettings.setBOOL(control_var, FALSE);
 	}
+
 }
 
 // static
-void LLFirstUse::useSculptedPrim()
+void LLFirstUse::init()
 {
-	if (gWarningSettings.getBOOL("FirstSculptedPrim"))
+	static bool initialized = false;
+	if (!initialized)
 	{
-		gWarningSettings.setBOOL("FirstSculptedPrim", FALSE);
-
-		LLNotificationsUtil::add("FirstSculptedPrim");
-		
+		LLNotifications::instance().getChannel("Hints")->connectChanged(&processNotification);
 	}
+	initialized = true;
 }
 
-// static 
-void LLFirstUse::useMedia()
+//static 
+bool LLFirstUse::processNotification(const LLSD& notify)
 {
-	if (gWarningSettings.getBOOL("FirstMedia"))
+	if (notify["sigtype"].asString() == "delete")
 	{
-		gWarningSettings.setBOOL("FirstMedia", FALSE);
-
-		// Popup removed as a short-term fix for EXT-1643.
-		// Ultimately, the plan is to kill all First Use dialogs
-		//LLNotificationsUtil::add("FirstMedia");
+		LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+		if (notification)
+		{
+			// disable any future notifications
+			gWarningSettings.setBOOL(notification->getPayload()["control_var"], FALSE);
+		}
 	}
+	return false;
 }
-*/
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index 771e38ed33100f05257015c9bcf0a629e5cdf022..275f134400fdb57ede1041754adb734219bd42bd 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -70,10 +70,13 @@ object or from inventory.
 14. First time you create/edit a sculpted prim.
 */
 
+class LLNotification;
+
+
 class LLFirstUse
 {
 public:
-/*	
+
 	// Add a config variable to be reset on resetFirstUse()
 	static void addConfigVariable(const std::string& var);
 	
@@ -81,35 +84,21 @@ class LLFirstUse
 	static void disableFirstUse();
 	static void resetFirstUse();
 
-	// These methods are called each time the appropriate action is
-	// taken.  The functions themselves handle only showing the dialog
-	// the first time, or subsequent times if the user wishes.
-	static void useBalanceIncrease(S32 delta);
-	static void useBalanceDecrease(S32 delta);
-	static void useSit();
-	static void useMap();
-	static void useGoTo();
-	static void useBuild();
-//	static void useLeftClickNoHit();
-	static void useTeleport();
-*/ 
-	static void useOverrideKeys();
-/*	
-	static void useAttach();
-	static void useAppearance();
-	static void useInventory();
- */
+	static void otherAvatarChatFirst(bool enable = true);
+	static void sit(bool enable = true);
+	static void notUsingDestinationGuide(bool enable = true);
+	static void notUsingSidePanel(bool enable = true);
+	static void notMoving(bool enable = true);
+	static void newInventory(bool enable = true);
+	static void receiveLindens(bool enable = true);
 	static void useSandbox();
 	
-/*
-	static void useFlexible();
-	static void useDebugMenus();
-	static void useSculptedPrim();
-	static void useMedia();
-	
 protected:
+	static void firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args = LLSD(), LLSD payload = LLSD());
 	static std::set<std::string> sConfigVariables;
-*/
+
+	static void init();
+	static bool processNotification(const LLSD& notify);
 };
 
 #endif
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index 5ac006302e2efcb5288d66fc5789af9a7024a3e3..135137069c5a4735a5b39cf0dc1ca803e475352c 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -94,7 +94,6 @@ class LLFloaterAbout
 LLFloaterAbout::LLFloaterAbout(const LLSD& key) 
 :	LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml");
 	
 }
 
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index 5cab770c42b3047b5517f806513db975b6c2c92c..252c7b51ae1aad6905edae0789255e1f200d6318 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -74,7 +74,6 @@ LLFloaterAuction::LLFloaterAuction(const LLSD& key)
   : LLFloater(key),
 	mParcelID(-1)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_auction.xml");
 	mCommitCallbackRegistrar.add("ClickSnapshot",	boost::bind(&LLFloaterAuction::onClickSnapshot, this));
 	mCommitCallbackRegistrar.add("ClickSellToAnyone",		boost::bind(&LLFloaterAuction::onClickSellToAnyone, this));
 	mCommitCallbackRegistrar.add("ClickStartAuction",		boost::bind(&LLFloaterAuction::onClickStartAuction, this));
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 9391c761b72381ce727ca67a8e650637437a231c..9f96a22f560f58227b2ed536f555c8d7ea931ec6 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -79,7 +79,6 @@ LLFloaterAvatarPicker::LLFloaterAvatarPicker(const LLSD& key)
 	mNearMeListComplete(FALSE),
 	mCloseOnSelect(FALSE)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_picker.xml");
 	mCommitCallbackRegistrar.add("Refresh.FriendList", boost::bind(&LLFloaterAvatarPicker::populateFriend, this));
 }
 
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp
index a6613968fb3192a5ab971e37b4e22c97cae418be..10cf26521feea134eea77f6ecb40fc934be0c26b 100644
--- a/indra/newview/llfloateravatartextures.cpp
+++ b/indra/newview/llfloateravatartextures.cpp
@@ -40,7 +40,6 @@ LLFloaterAvatarTextures::LLFloaterAvatarTextures(const LLSD& id)
   : LLFloater(id),
 	mID(id.asUUID())
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_textures.xml");
 }
 
 LLFloaterAvatarTextures::~LLFloaterAvatarTextures()
diff --git a/indra/newview/llfloaterbeacons.cpp b/indra/newview/llfloaterbeacons.cpp
index 0b8605d041feb3affc7c03372bd6855f3fcd5830..e24df948c42857e0bb39bf749caca6f5bb2cd139 100644
--- a/indra/newview/llfloaterbeacons.cpp
+++ b/indra/newview/llfloaterbeacons.cpp
@@ -36,8 +36,6 @@
 LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed)
 :	LLFloater(seed)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_beacons.xml");
-
 	// Initialize pipeline states from saved settings.
 	// OK to do at floater constructor time because beacons do not display unless the floater is open
 	// therefore it is OK to not initialize the pipeline state before needed.
diff --git a/indra/newview/llfloaterbuildoptions.cpp b/indra/newview/llfloaterbuildoptions.cpp
index 7e939a537d201afcb720d4fe5d3469269a4a4b14..4b6fe4a1157847a528f402e482041074361b8f80 100644
--- a/indra/newview/llfloaterbuildoptions.cpp
+++ b/indra/newview/llfloaterbuildoptions.cpp
@@ -40,7 +40,6 @@
 LLFloaterBuildOptions::LLFloaterBuildOptions(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_build_options.xml");
 }
 
 LLFloaterBuildOptions::~LLFloaterBuildOptions()
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index 02c7a6da7e684ee1e14def052494c6da0d0ab327..90f40628a824c180a450f8a356570adbe9d1f08c 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -57,7 +57,6 @@ LLFloaterBulkPermission::LLFloaterBulkPermission(const LLSD& seed)
 	mDone(FALSE)
 {
 	mID.generate();
-//	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_bulk_perms.xml");
 	mCommitCallbackRegistrar.add("BulkPermission.Apply",	boost::bind(&LLFloaterBulkPermission::onApplyBtn, this));
 	mCommitCallbackRegistrar.add("BulkPermission.Close",	boost::bind(&LLFloaterBulkPermission::onCloseBtn, this));
 	mCommitCallbackRegistrar.add("BulkPermission.CheckAll",	boost::bind(&LLFloaterBulkPermission::onCheckAll, this));
diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp
index af98453c3cdeffd922e9cabf5374b4d8f13c91e3..a02b67f08e755319e7caabbc3e2a85f2379e328a 100644
--- a/indra/newview/llfloaterbump.cpp
+++ b/indra/newview/llfloaterbump.cpp
@@ -45,7 +45,6 @@ LLFloaterBump::LLFloaterBump(const LLSD& key)
 :	LLFloater(key)
 {
 	if(gNoRender) return;
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_bumps.xml");
 }
 
 
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index 32add5773710c11503e20353ea7c0fe50e045cee..f46a2be0fa7dc634a5127c8ad19306e621ff0c47 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -51,7 +51,6 @@
 LLFloaterBuy::LLFloaterBuy(const LLSD& key)
 :	LLFloater(key)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_object.xml");
 }
 
 BOOL LLFloaterBuy::postBuild()
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index 77fb5590dfac0635b071bd77bc149906eeabc72b..a7388d21a37d2277440f25b2f331b76d9984e24f 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -41,6 +41,7 @@
 #include "llinventorydefines.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"	// for gInventory
+#include "llfirstuse.h"
 #include "llfloaterreg.h"
 #include "llfloaterinventory.h"	// for LLInventoryIcon::getIcon
 #include "llnotificationsutil.h"
@@ -54,7 +55,6 @@
 LLFloaterBuyContents::LLFloaterBuyContents(const LLSD& key)
 :	LLFloater(key)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_contents.xml");
 }
 
 BOOL LLFloaterBuyContents::postBuild()
@@ -284,6 +284,10 @@ void LLFloaterBuyContents::onClickBuy()
 	// it doesn't match region info then sale is canceled.
 	LLSelectMgr::getInstance()->sendBuy(gAgent.getID(), category_id, mSaleInfo);
 
+	// NOTE: do this here instead of on receipt of object, since contents are transfered
+	// via a generic BulkUpdateInventory message with no way of distinguishing it from
+	// other inventory operations
+	LLFirstUse::newInventory();
 	closeFloater();
 }
 
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index a5c62495fe3aa1e412ff580a049cd7b66d45bc1e..e48e1ab64f914e06d21267c73516b6ad64399754 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -294,7 +294,6 @@ LLFloaterBuyLandUI::LLFloaterBuyLandUI(const LLSD& key)
 {
 	LLViewerParcelMgr::getInstance()->addObserver(&mParcelSelectionObserver);
 	
-// 	LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_buy_land.xml");
 }
 
 LLFloaterBuyLandUI::~LLFloaterBuyLandUI()
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index d4067452b08057247448766ac5fe598fc56e1404..ad24c6534a4951cb0170a93a6f203c5d477809fb 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -345,7 +345,7 @@ BOOL LLFloaterCamera::postBuild()
 	setTitleVisible(TRUE); // restore title visibility after chrome applying
 
 	mRotate = getChild<LLJoystickCameraRotate>(ORBIT);
-	mZoom = getChild<LLPanelCameraZoom>(ZOOM);
+	mZoom = findChild<LLPanelCameraZoom>(ZOOM);
 	mTrack = getChild<LLJoystickCameraTrack>(PAN);
 
 	assignButton2Mode(CAMERA_CTRL_MODE_MODES,			"avatarview_btn");
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 89e745f65116d6c614a2f6b488196dc69e6342a3..69f1774ff8bf7321581de9af0d32153d5ba0d67e 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -107,9 +107,8 @@ LLFloaterColorPicker::LLFloaterColorPicker (LLColorSwatchCtrl* swatch, BOOL show
 	  mCanApplyImmediately	( show_apply_immediate ),
 	  mContextConeOpacity	( 0.f )
 {
-	// build the majority of the gui using the factory builder
-	LLUICtrlFactory::getInstance()->buildFloater ( this, "floater_color_picker.xml", NULL );
-	
+	buildFromFile ( "floater_color_picker.xml");
+
 	// create user interface for this picker
 	createUI ();
 
diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp
index aacb543267bebaa1bfe1fbd3227b62d0d20ec744..22816ee8025267173335cef4236107832c039eeb 100644
--- a/indra/newview/llfloaterdaycycle.cpp
+++ b/indra/newview/llfloaterdaycycle.cpp
@@ -59,7 +59,6 @@ const F32 LLFloaterDayCycle::sHoursPerDay = 24.0f;
 LLFloaterDayCycle::LLFloaterDayCycle(const LLSD& key)	
 : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_day_cycle_options.xml");
 }
 
 BOOL LLFloaterDayCycle::postBuild()
diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp
index 337d4934e15e02807c9bd4cd1ac30f7a4433504c..fcaef1f34be8bc0603be9cbe4d0b573caa784214 100644
--- a/indra/newview/llfloaterenvsettings.cpp
+++ b/indra/newview/llfloaterenvsettings.cpp
@@ -50,7 +50,6 @@
 LLFloaterEnvSettings::LLFloaterEnvSettings(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_env_settings.xml");
 }
 // virtual
 LLFloaterEnvSettings::~LLFloaterEnvSettings()
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index f95112a8ab15f00eb383bd638fff44f6076b5a17..2dbe324586a0adc4203df1294dc02052b8f57d34 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -121,8 +121,6 @@ LLFloaterGodTools::LLFloaterGodTools(const LLSD& key)
 	mFactoryMap["region"] = LLCallbackMap(createPanelRegion, this);
 	mFactoryMap["objects"] = LLCallbackMap(createPanelObjects, this);
 	mFactoryMap["request"] = LLCallbackMap(createPanelRequest, this);
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_god_tools.xml");
-
 }
 
 BOOL LLFloaterGodTools::postBuild()
diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp
index 3cd21545314481d26d4af793835bfb70a05c5b24..234a09d157d1656d0e536a210dcaeae64006f796 100644
--- a/indra/newview/llfloatergroups.cpp
+++ b/indra/newview/llfloatergroups.cpp
@@ -338,11 +338,10 @@ void LLPanelGroups::onGroupList(LLUICtrl* ctrl, void* userdata)
 	if(self) self->enableButtons();
 }
 
-void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 powers_mask)
+void init_group_list(LLScrollListCtrl* group_list, const LLUUID& highlight_id, U64 powers_mask)
 {
 	S32 count = gAgent.mGroups.count();
 	LLUUID id;
-	LLCtrlListInterface *group_list = ctrl->getListInterface();
 	if (!group_list) return;
 
 	group_list->operateOnAll(LLCtrlListInterface::OP_DELETE);
@@ -366,10 +365,12 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 pow
 			element["columns"][0]["font"]["name"] = "SANSSERIF";
 			element["columns"][0]["font"]["style"] = style;
 
-			group_list->addElement(element, ADD_SORTED);
+			group_list->addElement(element);
 		}
 	}
 
+	group_list->sortOnce(0, TRUE);
+
 	// add "none" to list at top
 	{
 		std::string style = "NORMAL";
diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
index 2985626bd7701f89e8f02ff51802c875e20597ca..77af054522a0dcf8af26595637bd5a83b3ca49a4 100644
--- a/indra/newview/llfloaterhardwaresettings.cpp
+++ b/indra/newview/llfloaterhardwaresettings.cpp
@@ -56,7 +56,6 @@ LLFloaterHardwareSettings::LLFloaterHardwareSettings(const LLSD& key)
 	  mFogRatio(0.0),
 	  mProbeHardwareOnStartup(FALSE)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hardware_settings.xml");
 }
 
 LLFloaterHardwareSettings::~LLFloaterHardwareSettings()
diff --git a/indra/newview/llfloaterhud.cpp b/indra/newview/llfloaterhud.cpp
index 8fc0598248fad11c1850d34613f94fcfb0944e2c..4181d1906e55a652d6d689fbf51a949a139f0622 100644
--- a/indra/newview/llfloaterhud.cpp
+++ b/indra/newview/llfloaterhud.cpp
@@ -54,8 +54,6 @@ LLFloaterHUD::LLFloaterHUD(const LLSD& key)
 		return;
 	}
 	
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hud.xml");
-	
 	// Don't grab the focus as it will impede performing in-world actions
 	// while using the HUD
 	setIsChrome(TRUE);
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index 8e7f7e083ce8249c62c7c8d12491792ed0e04e2f..691f1b206c0cdf1319c56c7e3be3bfa0d6efaf91 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -47,7 +47,6 @@ LLFloaterInspect::LLFloaterInspect(const LLSD& key)
   : LLFloater(key),
 	mDirty(FALSE)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inspect.xml");
 	mCommitCallbackRegistrar.add("Inspect.OwnerProfile",	boost::bind(&LLFloaterInspect::onClickOwnerProfile, this));
 	mCommitCallbackRegistrar.add("Inspect.CreatorProfile",	boost::bind(&LLFloaterInspect::onClickCreatorProfile, this));
 	mCommitCallbackRegistrar.add("Inspect.SelectObject",	boost::bind(&LLFloaterInspect::onSelectObject, this));
diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
index 0891023a6dfdd88656d232dd2c4744a3952d76d6..df769bdd8852d8de09767559ea9aee7db4b0589c 100644
--- a/indra/newview/llfloaterinventory.cpp
+++ b/indra/newview/llfloaterinventory.cpp
@@ -54,7 +54,7 @@ LLFloaterInventory::~LLFloaterInventory()
 
 BOOL LLFloaterInventory::postBuild()
 {
-	mPanelMainInventory = getChild<LLPanelMainInventory>("Inventory Panel");
+	mPanelMainInventory = findChild<LLPanelMainInventory>("Inventory Panel");
 	return TRUE;
 }
 
diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp
index e1994bb8bc05b2de6dc94d5128d0672485089a02..c37798c330d5186d86950978566c027831c43f41 100644
--- a/indra/newview/llfloaterjoystick.cpp
+++ b/indra/newview/llfloaterjoystick.cpp
@@ -44,8 +44,6 @@
 LLFloaterJoystick::LLFloaterJoystick(const LLSD& data)
 	: LLFloater(data)
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_joystick.xml");
-
 	initFromSettings();
 }
 
diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp
index a92273521f954dce351d386af1a90e527d84317b..68b1770bb2c40a444d6df496d90ad0a799b7d6d2 100644
--- a/indra/newview/llfloaterlagmeter.cpp
+++ b/indra/newview/llfloaterlagmeter.cpp
@@ -47,7 +47,6 @@ const std::string LAG_GOOD_IMAGE_NAME     = "lag_status_good.tga";
 LLFloaterLagMeter::LLFloaterLagMeter(const LLSD& key)
 	:	LLFloater(key)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_lagmeter.xml");
 	mCommitCallbackRegistrar.add("LagMeter.ClickShrink",  boost::bind(&LLFloaterLagMeter::onClickShrink, this));	
 }
 
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 2f080ab334a9f039282e91f57a06ed7169231874..e124263db5b2a60e37b376faa1e781e8ed3d3298 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -248,8 +248,6 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed)
 	mFactoryMap["land_media_panel"] =	LLCallbackMap(createPanelLandMedia, this);
 	mFactoryMap["land_access_panel"] =	LLCallbackMap(createPanelLandAccess, this);
 
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about_land.xml", false);
-
 	sObserver = new LLParcelSelectionObserver();
 	LLViewerParcelMgr::getInstance()->addObserver( sObserver );
 }
@@ -567,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
@@ -2434,7 +2435,7 @@ void LLPanelLandAccess::refresh()
 					suffix.append(" " + parent_floater->getString("Remaining") + ")");
 				}
 				if (mListAccess)
-					mListAccess->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix);
+					mListAccess->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);
 			}
 		}
 		
@@ -2475,7 +2476,7 @@ void LLPanelLandAccess::refresh()
 					}
 					suffix.append(" " + parent_floater->getString("Remaining") + ")");
 				}
-				mListBanned->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix);
+				mListBanned->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);
 			}
 		}
 		
diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp
index 31f20fbd29e8f3d3a63410791e7c6bf949da2dac..98e9b74278a9cd8f583af666618df2358c0aedae 100644
--- a/indra/newview/llfloaterlandholdings.cpp
+++ b/indra/newview/llfloaterlandholdings.cpp
@@ -60,7 +60,6 @@ LLFloaterLandHoldings::LLFloaterLandHoldings(const LLSD& key)
 	mSortColumn(""),
 	mSortAscending(TRUE)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(floater, "floater_land_holdings.xml");
 }
 
 BOOL LLFloaterLandHoldings::postBuild()
@@ -69,10 +68,9 @@ BOOL LLFloaterLandHoldings::postBuild()
 	childSetAction("Show on Map", onClickMap, this);
 
 	// Grant list
-	getChild<LLScrollListCtrl>("grant list")->setDoubleClickCallback(onGrantList, this);
-
-	LLCtrlListInterface *list = childGetListInterface("grant list");
-	if (!list) return TRUE;
+	LLScrollListCtrl* grant_list = getChild<LLScrollListCtrl>("grant list");
+	grant_list->sortByColumnIndex(0, TRUE);
+	grant_list->setDoubleClickCallback(onGrantList, this);
 
 	S32 count = gAgent.mGroups.count();
 	for(S32 i = 0; i < count; ++i)
@@ -91,7 +89,7 @@ BOOL LLFloaterLandHoldings::postBuild()
 		element["columns"][1]["value"] = areastr;
 		element["columns"][1]["font"] = "SANSSERIF";
 
-		list->addElement(element, ADD_SORTED);
+		grant_list->addElement(element);
 	}
 	
 	center();
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index c9d7eff02b95d124b5628c2b17b2b81b22d8178f..4a324773e9dde14b28c581361eea2349af75e766 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -72,7 +72,6 @@ LLFloaterMap::LLFloaterMap(const LLSD& key)
 	  mTextBoxSouthWest(NULL),
 	  mMap(NULL)
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_map.xml", FALSE);
 }
 
 LLFloaterMap::~LLFloaterMap()
@@ -96,7 +95,7 @@ BOOL LLFloaterMap::postBuild()
 	mTextBoxNorthWest = getChild<LLTextBox> ("floater_map_northwest");
 
 	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
-
+	
 	registrar.add("Minimap.Zoom", boost::bind(&LLFloaterMap::handleZoom, this, _2));
 	registrar.add("Minimap.Tracker", boost::bind(&LLFloaterMap::handleStopTracking, this, _2));
 
@@ -258,7 +257,7 @@ void LLFloaterMap::reshape(S32 width, S32 height, BOOL called_from_parent)
 void LLFloaterMap::handleZoom(const LLSD& userdata)
 {
 	std::string level = userdata.asString();
-
+	
 	F32 scale = 0.0f;
 	if (level == std::string("close"))
 		scale = LLNetMap::MAP_SCALE_MAX;
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
index 434d0681ab0508902cc04d9713a0dc5bc723c690..d20092e344f2de809092226080ca4b738a1bd09b 100644
--- a/indra/newview/llfloatermediabrowser.cpp
+++ b/indra/newview/llfloatermediabrowser.cpp
@@ -45,7 +45,11 @@
 #include "llviewermedia.h"
 #include "llviewerparcelmedia.h"
 #include "llcombobox.h"
+#include "llwindow.h"
+#include "lllayoutstack.h"
+#include "llcheckboxctrl.h"
 
+#include "llnotifications.h"
 
 // TEMP
 #include "llsdutil.h"
@@ -53,10 +57,124 @@
 LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key)
 	: LLFloater(key)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_media_browser.xml");
+}
 
+//static 
+void LLFloaterMediaBrowser::create(const std::string &url, const std::string& target, const std::string& uuid)
+{
+	lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl;
+	
+	std::string tag = target;
+	
+	if(target.empty() || target == "_blank")
+	{
+		if(!uuid.empty())
+		{
+			tag = uuid;
+		}
+		else
+		{
+		// create a unique tag for this instance
+		LLUUID id;
+		id.generate();
+		tag = id.asString();
+	}
+	}
+	
+	S32 browser_window_limit = gSavedSettings.getS32("MediaBrowserWindowLimit");
+	
+	if(LLFloaterReg::findInstance("media_browser", tag) != NULL)
+	{
+		// There's already a media browser for this tag, so we won't be opening a new window.
+	}
+	else if(browser_window_limit != 0)
+	{
+		// showInstance will open a new window.  Figure out how many media browsers are already open, 
+		// and close the least recently opened one if this will put us over the limit.
+		
+		LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList("media_browser");
+		lldebugs << "total instance count is " << instances.size() << llendl;
+		
+		for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++)
+		{
+			lldebugs << "    " << (*iter)->getKey() << llendl;
+		}
+		
+		if(instances.size() >= (size_t)browser_window_limit)
+		{
+			// Destroy the least recently opened instance
+			(*instances.begin())->closeFloater();
+		}
+	}
+
+	LLFloaterMediaBrowser *browser = dynamic_cast<LLFloaterMediaBrowser*> (LLFloaterReg::showInstance("media_browser", tag));
+	llassert(browser);
+	if(browser)
+	{
+		browser->mUUID = uuid;
+
+		// tell the browser instance to load the specified URL
+		browser->openMedia(url, target);
+		LLViewerMedia::proxyWindowOpened(target, uuid);
+	}
 }
 
+//static 
+void LLFloaterMediaBrowser::closeRequest(const std::string &uuid)
+{
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser");
+	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+	{
+		LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter);
+		lldebugs << "    " << i->mUUID << llendl;
+		if (i && i->mUUID == uuid)
+		{
+			i->closeFloater(false);
+			return;
+ 		}
+ 	}
+}
+
+//static 
+void LLFloaterMediaBrowser::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height)
+{
+	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser");
+	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
+	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+	{
+		LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter);
+		lldebugs << "    " << i->mUUID << llendl;
+		if (i && i->mUUID == uuid)
+		{
+			i->geometryChanged(x, y, width, height);
+			return;
+	}
+}
+}
+	
+void LLFloaterMediaBrowser::geometryChanged(S32 x, S32 y, S32 width, S32 height)
+{	
+	// Make sure the layout of the browser control is updated, so this calculation is correct.
+	LLLayoutStack::updateClass();
+		
+	// TODO: need to adjust size and constrain position to make sure floaters aren't moved outside the window view, etc.
+	LLCoordWindow window_size;
+	getWindow()->getSize(&window_size);
+
+	// Adjust width and height for the size of the chrome on the Media Browser window.
+	width += getRect().getWidth() - mBrowser->getRect().getWidth();
+	height += getRect().getHeight() - mBrowser->getRect().getHeight();
+	
+	LLRect geom;
+	geom.setOriginAndSize(x, window_size.mY - (y + height), width, height);
+
+	lldebugs << "geometry change: " << geom << llendl;
+	
+	handleReshape(geom,false);
+}
+
+
 void LLFloaterMediaBrowser::draw()
 {
 	getChildView("go")->setEnabled(!mAddressCombo->getValue().asString().empty());
@@ -99,6 +217,7 @@ BOOL LLFloaterMediaBrowser::postBuild()
 
 	mAddressCombo = getChild<LLComboBox>("address");
 	mAddressCombo->setCommitCallback(onEnterAddress, this);
+	mAddressCombo->sortByName();
 
 	childSetAction("back", onClickBack, this);
 	childSetAction("forward", onClickForward, this);
@@ -114,6 +233,7 @@ BOOL LLFloaterMediaBrowser::postBuild()
 	childSetAction("assign", onClickAssign, this);
 
 	buildURLHistory();
+
 	return TRUE;
 }
 
@@ -154,6 +274,7 @@ std::string LLFloaterMediaBrowser::getSupportURL()
 //virtual
 void LLFloaterMediaBrowser::onClose(bool app_quitting)
 {
+	LLViewerMedia::proxyWindowClosed(mUUID);
 	//setVisible(FALSE);
 	destroy();
 }
@@ -170,7 +291,17 @@ void LLFloaterMediaBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEve
 		getChildView("back")->setEnabled(self->getHistoryBackAvailable());
 		getChildView("forward")->setEnabled(self->getHistoryForwardAvailable());
 	}
+	else if(event == MEDIA_EVENT_CLOSE_REQUEST)
+	{
+		// The browser instance wants its window closed.
+		closeFloater();
+	}
+	else if(event == MEDIA_EVENT_GEOMETRY_CHANGE)
+	{
+		geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight());
+	}
 }
+
 void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 {
 	mCurrentURL = url;
@@ -179,7 +310,7 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 	if (mCurrentURL != "about:blank")
 	{
 		mAddressCombo->remove(mCurrentURL);
-		mAddressCombo->add(mCurrentURL, ADD_SORTED);
+		mAddressCombo->add(mCurrentURL);
 		mAddressCombo->selectByValue(mCurrentURL);
 
 		// Serialize url history
@@ -191,12 +322,6 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
 	getChildView("reload")->setEnabled(TRUE);
 }
 
-void LLFloaterMediaBrowser::onOpen(const LLSD& media_url)
-{
-	LLFloater::onOpen(media_url);
-	openMedia(media_url.asString());
-}
-
 //static 
 void LLFloaterMediaBrowser::onEnterAddress(LLUICtrl* ctrl, void* user_data)
 {
@@ -322,9 +447,12 @@ void LLFloaterMediaBrowser::onClickSeek(void* user_data)
 	if(self->mBrowser->getMediaPlugin())
 		self->mBrowser->getMediaPlugin()->start(2.0f);
 }
-void LLFloaterMediaBrowser::openMedia(const std::string& media_url)
+void LLFloaterMediaBrowser::openMedia(const std::string& media_url, const std::string& target)
 {
 	mBrowser->setHomePageUrl(media_url);
+	mBrowser->setTarget(target);
 	mBrowser->navigateTo(media_url);
 	setCurrentURL(media_url);
 }
+
+
diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h
index ffd8be4461bac47f0b9e33a7c654e11482c8f3ab..152d221a01849c09d4ebd7ea616e45d19a993119 100644
--- a/indra/newview/llfloatermediabrowser.h
+++ b/indra/newview/llfloatermediabrowser.h
@@ -33,23 +33,30 @@
 
 class LLComboBox;
 class LLMediaCtrl;
+class LLNotification;
 
 class LLFloaterMediaBrowser : 
 	public LLFloater, 
 	public LLViewerMediaObserver
 {
 public:
+    LOG_CLASS(LLFloaterMediaBrowser);
 	LLFloaterMediaBrowser(const LLSD& key);
 
+	static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
+
+	static void closeRequest(const std::string &uuid);
+	static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height);
+	void geometryChanged(S32 x, S32 y, S32 width, S32 height);
+	
 	/*virtual*/ BOOL postBuild();
 	/*virtual*/ void onClose(bool app_quitting);
 	/*virtual*/ void draw();
-	/*virtual*/ void onOpen(const LLSD& key);
 
 	// inherited from LLViewerMediaObserver
 	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
 
-	void openMedia(const std::string& media_url);
+	void openMedia(const std::string& media_url, const std::string& target);
 	void buildURLHistory();
 	std::string getSupportURL();
 	void setCurrentURL(const std::string& url);
@@ -71,6 +78,8 @@ class LLFloaterMediaBrowser :
 	LLMediaCtrl* mBrowser;
 	LLComboBox* mAddressCombo;
 	std::string mCurrentURL;
+	boost::shared_ptr<LLNotification> mCurNotification;
+	std::string mUUID;
 };
 
 #endif  // LL_LLFLOATERMEDIABROWSER_H
diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp
index 08475b1e55ebfa99ebafb0e57abd68ba2bfb4c11..42dc60f9e0b04694190fb0df022d3594eac63d64 100644
--- a/indra/newview/llfloaternotificationsconsole.cpp
+++ b/indra/newview/llfloaternotificationsconsole.cpp
@@ -37,10 +37,10 @@
 const S32 NOTIFICATION_PANEL_HEADER_HEIGHT = 20;
 const S32 HEADER_PADDING = 38;
 
-class LLNotificationChannelPanel : public LLPanel
+class LLNotificationChannelPanel : public LLLayoutPanel
 {
 public:
-	LLNotificationChannelPanel(const std::string& channel_name);
+	LLNotificationChannelPanel(const Params& p);
 	BOOL postBuild();
 
 private:
@@ -52,14 +52,14 @@ class LLNotificationChannelPanel : public LLPanel
 	LLNotificationChannelPtr mChannelRejectsPtr;
 };
 
-LLNotificationChannelPanel::LLNotificationChannelPanel(const std::string& channel_name) 
-	: LLPanel()
+LLNotificationChannelPanel::LLNotificationChannelPanel(const LLNotificationChannelPanel::Params& p) 
+:	LLLayoutPanel(p)
 {
-	mChannelPtr = LLNotifications::instance().getChannel(channel_name);
+	mChannelPtr = LLNotifications::instance().getChannel(p.name);
 	mChannelRejectsPtr = LLNotificationChannelPtr(
-		LLNotificationChannel::buildChannel(channel_name + "rejects", mChannelPtr->getParentChannelName(),
+		LLNotificationChannel::buildChannel(p.name() + "rejects", mChannelPtr->getParentChannelName(),
 											!boost::bind(mChannelPtr->getFilter(), _1)));
-	LLUICtrlFactory::instance().buildPanel(this, "panel_notifications_channel.xml");
+	buildFromFile( "panel_notifications_channel.xml");
 }
 
 BOOL LLNotificationChannelPanel::postBuild()
@@ -167,8 +167,6 @@ LLFloaterNotificationConsole::LLFloaterNotificationConsole(const LLSD& key)
 : LLFloater(key)
 {
 	mCommitCallbackRegistrar.add("ClickAdd",     boost::bind(&LLFloaterNotificationConsole::onClickAdd, this));	
-
-	//LLUICtrlFactory::instance().buildFloater(this, "floater_notifications_console.xml");
 }
 
 BOOL LLFloaterNotificationConsole::postBuild()
@@ -203,8 +201,13 @@ BOOL LLFloaterNotificationConsole::postBuild()
 void LLFloaterNotificationConsole::addChannel(const std::string& name, bool open)
 {
 	LLLayoutStack& stack = getChildRef<LLLayoutStack>("notification_channels");
-	LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(name);
-	stack.addPanel(panelp, 0, NOTIFICATION_PANEL_HEADER_HEIGHT, S32_MAX, S32_MAX, TRUE, TRUE, LLLayoutStack::ANIMATE);
+	LLNotificationChannelPanel::Params p;
+	p.min_dim = NOTIFICATION_PANEL_HEADER_HEIGHT;
+	p.auto_resize = true;
+	p.user_resize = true;
+	p.name = name;
+	LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(p);
+	stack.addPanel(panelp, LLLayoutStack::ANIMATE);
 
 	LLButton& header_button = panelp->getChildRef<LLButton>("header");
 	header_button.setToggleState(!open);
@@ -248,7 +251,7 @@ LLFloaterNotification::LLFloaterNotification(LLNotification* note)
 :	LLFloater(LLSD()),
 	mNote(note)
 {
-	LLUICtrlFactory::instance().buildFloater(this, "floater_notification.xml", NULL);
+	buildFromFile("floater_notification.xml");
 }
 
 BOOL LLFloaterNotification::postBuild()
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index d6f6ba9e5b5b41fb02b89b9712b16e6978b92c5e..8b6619def2f1db6eb3bdc3e86975eb1fe34f398d 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -56,7 +56,6 @@ LLFloaterOpenObject::LLFloaterOpenObject(const LLSD& key)
 	mPanelInventoryObject(NULL),
 	mDirty(TRUE)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_openobject.xml");
 	mCommitCallbackRegistrar.add("OpenObject.MoveToInventory",	boost::bind(&LLFloaterOpenObject::onClickMoveToInventory, this));
 	mCommitCallbackRegistrar.add("OpenObject.MoveAndWear",		boost::bind(&LLFloaterOpenObject::onClickMoveAndWear, this));
 }
diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp
index 74dfede23ec4f803d03d40552ddc9c69cbdfd7c7..80b55c3cbbe6ac6d3780cc73ea203fd985126d07 100644
--- a/indra/newview/llfloaterperms.cpp
+++ b/indra/newview/llfloaterperms.cpp
@@ -37,7 +37,6 @@
 LLFloaterPerms::LLFloaterPerms(const LLSD& seed)
 : LLFloater(seed)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_perm_prefs.xml");
 	mCommitCallbackRegistrar.add("Perms.Copy",	boost::bind(&LLFloaterPerms::onCommitCopy, this));
 	mCommitCallbackRegistrar.add("Perms.OK",	boost::bind(&LLFloaterPerms::onClickOK, this));
 	mCommitCallbackRegistrar.add("Perms.Cancel",	boost::bind(&LLFloaterPerms::onClickCancel, this));
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index bcdcd50288adf6c53c786aaa0ac032c6c39484a3..e8e9f769128a24a38d7c206a70e0d3f3becf9838 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -76,7 +76,6 @@ LLFloaterPostcard::LLFloaterPostcard(const LLSD& key)
 	mViewerImage(NULL),
 	mHasFirstMsgFocus(false)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_postcard.xml");
 }
 
 // Destroys the object
diff --git a/indra/newview/llfloaterpostprocess.cpp b/indra/newview/llfloaterpostprocess.cpp
index 7f27caf68f69fe863836f08d6d21b963e880c355..2d61109e176e889f324c7acd8ec18d9e0759f797 100644
--- a/indra/newview/llfloaterpostprocess.cpp
+++ b/indra/newview/llfloaterpostprocess.cpp
@@ -42,7 +42,6 @@
 LLFloaterPostProcess::LLFloaterPostProcess(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_post_process.xml");
 }
 
 LLFloaterPostProcess::~LLFloaterPostProcess()
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 3804a1b85840db0d9959b06eb1f4786ca830e5d3..41f85ae29d6fd5d585826bb58c5f07e5208777d5 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -49,7 +49,6 @@
 #include "llfloaterreg.h"
 #include "llfloaterabout.h"
 #include "llfloaterhardwaresettings.h"
-#include "llfloatervoicedevicesettings.h"
 #include "llimfloater.h"
 #include "llkeyboard.h"
 #include "llmodaldialog.h"
@@ -57,7 +56,9 @@
 #include "llnearbychat.h"
 #include "llnotifications.h"
 #include "llnotificationsutil.h"
+#include "llnotificationtemplate.h"
 #include "llpanellogin.h"
+#include "llpanelvoicedevicesettings.h"
 #include "llradiogroup.h"
 #include "llsearchcombobox.h"
 #include "llsky.h"
@@ -131,7 +132,6 @@ LLVoiceSetKeyDialog::LLVoiceSetKeyDialog(const LLSD& key)
   : LLModalDialog(key),
 	mParent(NULL)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_select_key.xml", NULL);
 }
 
 //virtual
@@ -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)
@@ -407,12 +408,6 @@ void LLFloaterPreference::apply()
 		hardware_settings->apply();
 	}
 	
-	LLFloaterVoiceDeviceSettings* voice_device_settings = LLFloaterReg::findTypedInstance<LLFloaterVoiceDeviceSettings>("pref_voicedevicesettings");
-	if(voice_device_settings)
-	{
-		voice_device_settings->apply();
-	}
-	
 	gViewerWindow->requestResolutionUpdate(); // for UIScaleFactor
 
 	LLSliderCtrl* fov_slider = getChild<LLSliderCtrl>("camera_fov");
@@ -420,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());
 	
@@ -487,15 +482,6 @@ void LLFloaterPreference::cancel()
 	
 	// reverts any changes to current skin
 	gSavedSettings.setString("SkinCurrent", sSkin);
-	
-	LLFloaterVoiceDeviceSettings* voice_device_settings = LLFloaterReg::findTypedInstance<LLFloaterVoiceDeviceSettings>("pref_voicedevicesettings");
-	if (voice_device_settings)
-	{
-		voice_device_settings ->cancel();
-	}
-	
-	LLFloaterReg::hideInstance("pref_voicedevicesettings");
-	
 }
 
 void LLFloaterPreference::onOpen(const LLSD& key)
@@ -798,7 +784,7 @@ void LLFloaterPreference::buildPopupLists()
 		
 		LLScrollListItem* item = NULL;
 		
-		bool show_popup = LLUI::sSettingGroups["ignores"]->getBOOL(templatep->mName);
+		bool show_popup = formp->getIgnored();
 		if (!show_popup)
 		{
 			if (ignore == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE)
@@ -820,13 +806,11 @@ void LLFloaterPreference::buildPopupLists()
 				row["columns"][1]["font"] = "SANSSERIF_SMALL";
 				row["columns"][1]["width"] = 360;
 			}
-			item = disabled_popups.addElement(row,
-											  ADD_SORTED);
+			item = disabled_popups.addElement(row);
 		}
 		else
 		{
-			item = enabled_popups.addElement(row,
-											 ADD_SORTED);
+			item = enabled_popups.addElement(row);
 		}
 		
 		if (item)
@@ -1152,9 +1136,7 @@ void LLFloaterPreference::onClickDisablePopup()
 	for (itor = items.begin(); itor != items.end(); ++itor)
 	{
 		LLNotificationTemplatePtr templatep = LLNotifications::instance().getTemplate(*(std::string*)((*itor)->getUserdata()));
-		//gSavedSettings.setWarning(templatep->mName, TRUE);
-		std::string notification_name = templatep->mName;
-		LLUI::sSettingGroups["ignores"]->setBOOL(notification_name, FALSE);
+		templatep->mForm->setIgnored(false);
 	}
 	
 	buildPopupLists();
@@ -1168,7 +1150,7 @@ void LLFloaterPreference::resetAllIgnored()
 	{
 		if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
 		{
-			LLUI::sSettingGroups["ignores"]->setBOOL(iter->first, TRUE);
+			iter->second->mForm->setIgnored(true);
 		}
 	}
 }
@@ -1181,7 +1163,7 @@ void LLFloaterPreference::setAllIgnored()
 	{
 		if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
 		{
-			LLUI::sSettingGroups["ignores"]->setBOOL(iter->first, FALSE);
+			iter->second->mForm->setIgnored(false);
 		}
 	}
 }
@@ -1329,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/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index e4e4713dbca833d2e43103066acec9b3e5880580..dd12fa64d391f40c454800ff5f27d69e558adb41 100644
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -108,8 +108,6 @@ LLFloaterProperties::LLFloaterProperties(const LLUUID& item_id)
 	mDirty(TRUE)
 {
 	mPropertiesObserver = new LLPropertiesObserver(this);
-	
-	//LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
 }
 
 // Destroys the object
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 29ad0f3b9ca615ce685558fa141a337574311780..ed81fdec1607cfb26f0e52697ad13171bb07dd75 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -161,7 +161,6 @@ LLUUID LLFloaterRegionInfo::sRequestInvoice;
 LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
 	: LLFloater(seed)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_info.xml", FALSE);
 }
 
 BOOL LLFloaterRegionInfo::postBuild()
@@ -174,32 +173,32 @@ BOOL LLFloaterRegionInfo::postBuild()
 	mInfoPanels.push_back(panel);
 	panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub",	boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
 	
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml");
+	panel->buildFromFile("panel_region_general.xml");
 	mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
 
 	panel = new LLPanelRegionDebugInfo;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_debug.xml");
+	panel->buildFromFile("panel_region_debug.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelRegionTextureInfo;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_texture.xml");
+	panel->buildFromFile("panel_region_texture.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelRegionTerrainInfo;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_terrain.xml");
+	panel->buildFromFile("panel_region_terrain.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelEstateInfo;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml");
+	panel->buildFromFile("panel_region_estate.xml");
 	mTab->addTabPanel(panel);
 
 	panel = new LLPanelEstateCovenant;
 	mInfoPanels.push_back(panel);
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml");
+	panel->buildFromFile("panel_region_covenant.xml");
 	mTab->addTabPanel(panel);
 
 	gMessageSystem->setHandlerFunc(
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 97f192a70830089b93d2bb25d20e8e642af51696..66d7e804ea5b62bca6f7d0cc66e55d01191d3d70 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -103,7 +103,6 @@ LLFloaterReporter::LLFloaterReporter(const LLSD& key)
 	mCopyrightWarningSeen( FALSE ),
 	mResourceDatap(new LLResourceData())
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_report_abuse.xml");
 }
 
 // static
diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp
index 118dea2c74871a0aa6cf5507d707685e4b726502..a0d1a32e1295659579bbd4ce48ea1f71879e41c9 100644
--- a/indra/newview/llfloaterscriptdebug.cpp
+++ b/indra/newview/llfloaterscriptdebug.cpp
@@ -52,8 +52,6 @@
 LLFloaterScriptDebug::LLFloaterScriptDebug(const LLSD& key)
   : LLMultiFloater(key)
 {
-// 	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_script_debug.xml");
-	
 	// avoid resizing of the window to match 
 	// the initial size of the tabbed-childs, whenever a tab is opened or closed
 	mAutoResize = FALSE;
@@ -141,8 +139,6 @@ LLFloaterScriptDebugOutput::LLFloaterScriptDebugOutput(const LLSD& object_id)
   : LLFloater(LLSD(object_id)),
 	mObjectID(object_id.asUUID())
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_script_debug_panel.xml");
-	
 	// enabled autocous blocks controling focus via  LLFloaterReg::showInstance
 	setAutoFocus(FALSE);
 }
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index 571f26e09ff68b4389c6cce6db6c2aa5cb65fa47..cd792c263c97120192c0491d3bbbdb3244617cf8 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -115,7 +115,7 @@ BOOL LLFloaterScriptLimits::postBuild()
 		LLPanelScriptLimitsRegionMemory* panel_memory;
 		panel_memory = new LLPanelScriptLimitsRegionMemory;
 		mInfoPanels.push_back(panel_memory);
-		LLUICtrlFactory::getInstance()->buildPanel(panel_memory, "panel_script_limits_region_memory.xml");
+		panel_memory->buildFromFile( "panel_script_limits_region_memory.xml");
 		mTab->addTabPanel(panel_memory);
 	}
 	
@@ -124,7 +124,7 @@ BOOL LLFloaterScriptLimits::postBuild()
 	{
 		LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment;
 		mInfoPanels.push_back(panel_attachments);
-		LLUICtrlFactory::getInstance()->buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml");
+		panel_attachments->buildFromFile("panel_script_limits_my_avatar.xml");
 		mTab->addTabPanel(panel_attachments);
 	}
 	
@@ -706,38 +706,44 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
 				}
 			}
 
-			LLSD element;
+			LLScrollListItem::Params item_params;
+			item_params.value = task_id;
 
-			element["id"] = task_id;
-			element["columns"][0]["column"] = "size";
-			element["columns"][0]["value"] = llformat("%d", size);
-			element["columns"][0]["font"] = "SANSSERIF";
-			element["columns"][1]["column"] = "urls";
-			element["columns"][1]["value"] = llformat("%d", urls);
-			element["columns"][1]["font"] = "SANSSERIF";
-			element["columns"][2]["column"] = "name";
-			element["columns"][2]["value"] = name_buf;
-			element["columns"][2]["font"] = "SANSSERIF";
-			element["columns"][3]["column"] = "owner";
-			element["columns"][3]["value"] = owner_buf;
-			element["columns"][3]["font"] = "SANSSERIF";
-			element["columns"][4]["column"] = "parcel";
-			element["columns"][4]["value"] = parcel_name;
-			element["columns"][4]["font"] = "SANSSERIF";
-			element["columns"][5]["column"] = "location";
-			if(has_locations)
-			{
-				element["columns"][5]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
-			}
-			else
-			{
-				element["columns"][5]["value"] = "";
-			}
-			element["columns"][5]["font"] = "SANSSERIF";
+			LLScrollListCell::Params cell_params;
+			cell_params.font = LLFontGL::getFontSansSerif();
+
+			cell_params.column = "size";
+			cell_params.value = size;
+			item_params.columns.add(cell_params);
+
+			cell_params.column = "urls";
+			cell_params.value = urls;
+			item_params.columns.add(cell_params);
+
+			cell_params.column = "name";
+			cell_params.value = name_buf;
+			item_params.columns.add(cell_params);
 
-			list->addElement(element, ADD_SORTED);
+			cell_params.column = "owner";
+			cell_params.value = owner_buf;
+			item_params.columns.add(cell_params);
+
+			cell_params.column = "parcel";
+			cell_params.value = parcel_name;
+			item_params.columns.add(cell_params);
+
+			cell_params.column = "location";
+			cell_params.value = has_locations
+				? llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z)
+				: "";
+			item_params.columns.add(cell_params);
+
+			list->addRow(item_params);
 			
+			LLSD element;
 			element["owner_id"] = owner_id;
+
+			element["id"] = task_id;
 			element["local_id"] = local_id;
 			mObjectListItems.push_back(element);
 		}
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 7661e50eba72eaba6dee518b40fed11937e5704a..3ed4aec89ab10cfc5e1d9f1bdf6f1c279e6c31cd 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -96,11 +96,7 @@ LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
 BOOL LLFloaterSearch::postBuild()
 {
 	mBrowser = getChild<LLMediaCtrl>("browser");
-	if (mBrowser)
-	{
-		mBrowser->addObserver(this);
-		mBrowser->setTrusted(true);
-	}
+	mBrowser->addObserver(this);
 
 	return TRUE;
 }
diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp
index 41a05055feff21da841317f9af9c4da87448ce61..71882fbb839b91e2f250b4af29d29d19835e6a4d 100644
--- a/indra/newview/llfloatersettingsdebug.cpp
+++ b/indra/newview/llfloatersettingsdebug.cpp
@@ -39,7 +39,6 @@
 LLFloaterSettingsDebug::LLFloaterSettingsDebug(const LLSD& key) 
 :	LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_settings_debug.xml");
 	mCommitCallbackRegistrar.add("SettingSelect",	boost::bind(&LLFloaterSettingsDebug::onSettingSelect, this,_1));
 	mCommitCallbackRegistrar.add("CommitSettings",	boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
 	mCommitCallbackRegistrar.add("ClickDefault",	boost::bind(&LLFloaterSettingsDebug::onClickDefault, this));
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 278fee799adcd272008a99681e10aa41ec7a2ac3..36e8ad9dfcf964b6c9276a26e90c154c40945c26 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2071,7 +2071,6 @@ LLFloaterSnapshot::LLFloaterSnapshot(const LLSD& key)
 	: LLFloater(key),
 	  impl (*(new Impl))
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_snapshot.xml", FALSE);
 }
 
 // Destroys the object
diff --git a/indra/newview/llfloatertelehub.cpp b/indra/newview/llfloatertelehub.cpp
index d945f1a2de21ba8c754340fd188c86961e86d163..b845fd132d8914e4841d9779760151990f3ff0c1 100644
--- a/indra/newview/llfloatertelehub.cpp
+++ b/indra/newview/llfloatertelehub.cpp
@@ -51,7 +51,6 @@ LLFloaterTelehub::LLFloaterTelehub(const LLSD& key)
 	mTelehubRot(),
 	mNumSpawn(0)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_telehub.xml");
 }
 
 BOOL LLFloaterTelehub::postBuild()
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 58a0d08c7d91ca28cab4b7008d905facbed047fd..370bf05bf791c6a55a5f24d63a17a25cee2d1a67 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -350,7 +350,6 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
 	mFactoryMap["Contents"] = LLCallbackMap(createPanelContents, this);//LLPanelContents
 	mFactoryMap["land info panel"] = LLCallbackMap(createPanelLandInfo, this);//LLPanelLandInfo
 	
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_tools.xml",FALSE);
 	mCommitCallbackRegistrar.add("BuildTool.setTool",			boost::bind(&LLFloaterTools::setTool,this, _2));
 	mCommitCallbackRegistrar.add("BuildTool.commitZoom",		boost::bind(&commit_slider_zoom, _1));
 	mCommitCallbackRegistrar.add("BuildTool.commitRadioFocus",	boost::bind(&commit_radio_group_focus, _1));
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index a984dd1d51783bffb75df19ae6a8f1e0a1a40739..099b657c7cfdf1a48608ecb1a6442173a9589a19 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -64,7 +64,6 @@ void LLFloaterTopObjects::show()
 	}
 
 	sInstance = new LLFloaterTopObjects();
-//	LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_top_objects.xml");
 	sInstance->center();
 }
 */
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 333e44e077dffac4a6dbdb870a3fd3bd7995f46d..5dc8067648e6706e958dfded454d12a35fb49d85 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -394,7 +394,6 @@ LLFloaterUIPreview::LLFloaterUIPreview(const LLSD& key)
 	mLastDisplayedX(0),
 	mLastDisplayedY(0)
 {
-	// called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_ui_preview.xml");
 }
 
 // Destructor
@@ -832,7 +831,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		if (save)
 		{
 			LLXMLNodePtr floater_write = new LLXMLNode();			
-			LLUICtrlFactory::getInstance()->buildFloater(*floaterp, path, floater_write);	// just build it
+			(*floaterp)->buildFromFile(path, floater_write);	// just build it
 
 			if (!floater_write->isNull())
 			{
@@ -846,7 +845,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		}
 		else
 		{
-			LLUICtrlFactory::getInstance()->buildFloater(*floaterp, path, NULL);	// just build it
+			(*floaterp)->buildFromFile(path);	// just build it
 			(*floaterp)->openFloater((*floaterp)->getKey());
 			(*floaterp)->setCanResize((*floaterp)->isResizable());
 		}
@@ -885,7 +884,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		if (save)
 		{
 			LLXMLNodePtr panel_write = new LLXMLNode();
-			LLUICtrlFactory::getInstance()->buildPanel(panel, path, panel_write);		// build it
+			panel->buildFromFile(path, panel_write);		// build it
 			
 			if (!panel_write->isNull())
 			{
@@ -899,7 +898,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save)
 		}
 		else
 		{
-			LLUICtrlFactory::getInstance()->buildPanel(panel, path);		// build it
+			panel->buildFromFile(path);										// build it
 			LLRect new_size = panel->getRect();								// get its rectangle
 			panel->setOrigin(0,0);											// reset its origin point so it's not offset by -left or other XUI attributes
 			(*floaterp)->setTitle(path);									// use the file name as its title, since panels have no guaranteed meaningful name attribute
diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp
index 40f6d0728631d444ec251e949f3cd7a2c1221b2f..151cd2a1cd65f6e9cc37014520032378500ac8b1 100644
--- a/indra/newview/llfloaterurlentry.cpp
+++ b/indra/newview/llfloaterurlentry.cpp
@@ -82,7 +82,7 @@ LLFloaterURLEntry::LLFloaterURLEntry(LLHandle<LLPanel> parent)
 	: LLFloater(LLSD()),
 	  mPanelLandMediaHandle(parent)
 {
-	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_url_entry.xml", NULL);
+	buildFromFile("floater_url_entry.xml");
 }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp
index 9c3f943013a0b4d88bbeb25f22ae1da1eb062d1e..be4b144f41a7f6374462f584a01c1f02ad13d0d0 100644
--- a/indra/newview/llfloaterwater.cpp
+++ b/indra/newview/llfloaterwater.cpp
@@ -63,7 +63,6 @@ std::set<std::string> LLFloaterWater::sDefaultPresets;
 LLFloaterWater::LLFloaterWater(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_water.xml");
 }
 
 LLFloaterWater::~LLFloaterWater()
diff --git a/indra/newview/llfloaterwhitelistentry.cpp b/indra/newview/llfloaterwhitelistentry.cpp
index 7c618e788f230d7de3d54b46e072c24581ea59e4..2a499f681bcb8563ec9a6e33c95715236dceda80 100644
--- a/indra/newview/llfloaterwhitelistentry.cpp
+++ b/indra/newview/llfloaterwhitelistentry.cpp
@@ -41,7 +41,6 @@
 LLFloaterWhiteListEntry::LLFloaterWhiteListEntry( const LLSD& key ) :
 	LLFloater(key)
 {
-//	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_whitelist_entry.xml");
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp
index 7131cb5de3b704ce36d6b8761798c9faa72fcd5b..ae98b2cf999e8747e1f4705caede6e0f7d4ecb7b 100644
--- a/indra/newview/llfloaterwindlight.cpp
+++ b/indra/newview/llfloaterwindlight.cpp
@@ -66,7 +66,6 @@ static const F32 WL_SUN_AMBIENT_SLIDER_SCALE = 3.0f;
 LLFloaterWindLight::LLFloaterWindLight(const LLSD& key)
   : LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_windlight_options.xml");
 }
 
 LLFloaterWindLight::~LLFloaterWindLight()
diff --git a/indra/newview/llfloaterwindowsize.cpp b/indra/newview/llfloaterwindowsize.cpp
index 105efae03295cc081a7ad878e2372edbfa8437ba..a70f2af11a180c8bdeaf10ceaea6e356a0e6c272 100644
--- a/indra/newview/llfloaterwindowsize.cpp
+++ b/indra/newview/llfloaterwindowsize.cpp
@@ -80,7 +80,6 @@ class LLFloaterWindowSize
 LLFloaterWindowSize::LLFloaterWindowSize(const LLSD& key) 
 :	LLFloater(key)
 {
-	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_window_size.xml");	
 }
 
 LLFloaterWindowSize::~LLFloaterWindowSize()
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 3afa31b873c0ecea0c744f689b9d61a1e1a48f25..723689454266181e51eced97bfa1e9ec624fdf8a 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -199,7 +199,6 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
 	
 	mFactoryMap["objects_mapview"] = LLCallbackMap(createWorldMapView, NULL);
 	
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_world_map.xml", FALSE);
 	mCommitCallbackRegistrar.add("WMap.Coordinates",	boost::bind(&LLFloaterWorldMap::onCoordinatesCommit, this));
 	mCommitCallbackRegistrar.add("WMap.Location",		boost::bind(&LLFloaterWorldMap::onLocationCommit, this));
 	mCommitCallbackRegistrar.add("WMap.AvatarCombo",	boost::bind(&LLFloaterWorldMap::onAvatarComboCommit, this));
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 5d8e3f9ab9b58c2ddc1acc0284349f7c275f90e6..387e300b7427c51cac4b687494fad9f34158aaa4 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -350,6 +350,10 @@ BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)
 	{
 		mFolders.insert(mFolders.begin(), folder);
 	}
+	if (folder->numSelected())
+	{
+		recursiveIncrementNumDescendantsSelected(folder->numSelected());
+	}
 	folder->setShowLoadStatus(true);
 	folder->setOrigin(0, 0);
 	folder->reshape(getRect().getWidth(), 0);
@@ -692,29 +696,24 @@ BOOL LLFolderView::changeSelection(LLFolderViewItem* selection, BOOL selected)
 	return rv;
 }
 
-S32 LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items)
+void LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items)
 {
-	S32 rv = 0;
-
 	// now store resulting selection
 	if (mAllowMultiSelect)
 	{
 		LLFolderViewItem *cur_selection = getCurSelectedItem();
-		rv = LLFolderViewFolder::extendSelection(selection, cur_selection, items);
+		LLFolderViewFolder::extendSelection(selection, cur_selection, items);
 		for (S32 i = 0; i < items.count(); i++)
 		{
 			addToSelectionList(items[i]);
-			rv++;
 		}
 	}
 	else
 	{
 		setSelection(selection, FALSE, FALSE);
-		rv++;
 	}
 
 	mSignalSelectCallback = SIGNAL_KEYBOARD_FOCUS;
-	return rv;
 }
 
 void LLFolderView::sanitizeSelection()
@@ -1972,7 +1971,11 @@ void LLFolderView::scrollToShowSelection()
 {
 	// If items are filtered while background fetch is in progress
 	// scrollbar resets to the first filtered item. See EXT-3981.
-	if (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && mSelectedItems.size())
+	// However we allow scrolling for folder views with mAutoSelectOverride
+	// (used in Places SP) as an exception because the selection in them
+	// is not reset during items filtering. See STORM-133.
+	if ( (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() || mAutoSelectOverride)
+			&& mSelectedItems.size() )
 	{
 		mNeedsScroll = TRUE;
 	}
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 980f9a34a6bb6e6ebf47795e25c040d4d651cffa..66ab4ce5ebccb85697602376fa0204b2e3aa9390 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -74,7 +74,6 @@ class LLFolderViewFunctor
 	virtual void doItem(LLFolderViewItem* item) = 0;
 };
 
-
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLFolderView
 //
@@ -146,18 +145,18 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 	// Record the selected item and pass it down the hierachy.
 	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
 		BOOL take_keyboard_focus);
-	
+
 	// Used by menu callbacks
 	void setSelectionByID(const LLUUID& obj_id, BOOL take_keyboard_focus);
-	
+
 	// Called once a frame to update the selection if mSelectThisID has been set
-	void updateSelection();	
-	
+	void updateSelection();
+
 	// This method is used to toggle the selection of an item. Walks
 	// children, and keeps track of selected objects.
 	virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
 
-	virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
+	virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
 
 	virtual std::set<LLUUID> getSelectionList() const;
 
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 04b690b9030610c333df4935bd4571e3b8e9e2e9..3c36248c1fd0d675d1a6ed32e88259db302d389d 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -489,27 +489,34 @@ void LLFolderViewItem::dirtyFilter()
 // together.
 BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus)
 {
-	if( selection == this )
+	if (selection == this && !mIsSelected)
 	{
-		mIsSelected = TRUE;
-		if(mListener)
+		selectItem();
+		if (mListener)
 		{
 			mListener->selectItem();
 		}
 	}
-	else
+	else if (mIsSelected)	// Deselect everything else.
 	{
-		mIsSelected = FALSE;
+		deselectItem();
 	}
 	return mIsSelected;
 }
 
 BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selected)
 {
-	if(selection == this && mIsSelected != selected)
+	if (selection == this && mIsSelected != selected)
 	{
-		mIsSelected = selected;
-		if(mListener)
+		if (mIsSelected)
+		{
+			deselectItem();
+		}
+		else
+		{
+			selectItem();
+		}
+		if (mListener)
 		{
 			mListener->selectItem();
 		}
@@ -518,6 +525,33 @@ BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selecte
 	return FALSE;
 }
 
+void LLFolderViewItem::deselectItem(void)
+{
+	llassert(mIsSelected);
+
+	mIsSelected = FALSE;
+
+	// Update ancestors' count of selected descendents.
+	LLFolderViewFolder* parent_folder = getParentFolder();
+	if (parent_folder)
+	{
+		parent_folder->recursiveIncrementNumDescendantsSelected(-1);
+	}
+}
+
+void LLFolderViewItem::selectItem(void)
+{
+	llassert(!mIsSelected);
+
+	mIsSelected = TRUE;
+
+	// Update ancestors' count of selected descendents.
+	LLFolderViewFolder* parent_folder = getParentFolder();
+	if (parent_folder)
+	{
+		parent_folder->recursiveIncrementNumDescendantsSelected(1);
+	}
+}
 
 BOOL LLFolderViewItem::isMovable()
 {
@@ -1073,6 +1107,7 @@ void LLFolderViewItem::draw()
 
 LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ): 
 	LLFolderViewItem( p ),	// 0 = no create time
+	mNumDescendantsSelected(0),
 	mIsOpen(FALSE),
 	mExpanderHighlighted(FALSE),
 	mCurHeight(0.f),
@@ -1458,16 +1493,34 @@ BOOL LLFolderViewFolder::hasFilteredDescendants()
 	return mMostFilteredDescendantGeneration >= getRoot()->getFilter()->getCurrentGeneration();
 }
 
+void LLFolderViewFolder::recursiveIncrementNumDescendantsSelected(S32 increment)
+{
+	LLFolderViewFolder* parent_folder = this;
+	do
+	{
+		parent_folder->mNumDescendantsSelected += increment;
+
+		// Make sure we don't have negative values.
+		llassert(parent_folder->mNumDescendantsSelected >= 0);
+
+		parent_folder = parent_folder->getParentFolder();
+	}
+	while(parent_folder);
+}
+
 // Passes selection information on to children and record selection
 // information if necessary.
 BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem,
-									  BOOL take_keyboard_focus)
+                                      BOOL take_keyboard_focus)
 {
 	BOOL rv = FALSE;
-	if( selection == this )
+	if (selection == this)
 	{
-		mIsSelected = TRUE;
-		if(mListener)
+		if (!isSelected())
+		{
+			selectItem();
+		}
+		if (mListener)
 		{
 			mListener->selectItem();
 		}
@@ -1475,7 +1528,10 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem
 	}
 	else
 	{
-		mIsSelected = FALSE;
+		if (isSelected())
+		{
+			deselectItem();
+		}
 		rv = FALSE;
 	}
 	BOOL child_selected = FALSE;
@@ -1507,21 +1563,31 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem
 	return rv;
 }
 
-// This method is used to change the selection of an item. If
-// selection is 'this', then note selection as true. Returns TRUE
-// if this or a child is now selected.
-BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection,
-										 BOOL selected)
+// This method is used to change the selection of an item.
+// Recursively traverse all children; if 'selection' is 'this' then change
+// the select status if necessary.
+// Returns TRUE if the selection state of this folder, or of a child, was changed.
+BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection, BOOL selected)
 {
 	BOOL rv = FALSE;
 	if(selection == this)
 	{
-		mIsSelected = selected;
-		if(mListener && selected)
+		if (isSelected() != selected)
+		{
+			rv = TRUE;
+			if (selected)
+			{
+				selectItem();
+			}
+			else
+			{
+				deselectItem();
+			}
+		}
+		if (mListener && selected)
 		{
 			mListener->selectItem();
 		}
-		rv = TRUE;
 	}
 
 	for (folders_t::iterator iter = mFolders.begin();
@@ -1545,16 +1611,14 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection,
 	return rv;
 }
 
-S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& selected_items)
+void LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& selected_items)
 {
-	S32 num_selected = 0;
-
 	// pass on to child folders first
 	for (folders_t::iterator iter = mFolders.begin();
 		iter != mFolders.end();)
 	{
 		folders_t::iterator fit = iter++;
-		num_selected += (*fit)->extendSelection(selection, last_selected, selected_items);
+		(*fit)->extendSelection(selection, last_selected, selected_items);
 	}
 
 	// handle selection of our immediate children...
@@ -1647,7 +1711,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
 			if (item->changeSelection(item, TRUE))
 			{
 				selected_items.put(item);
-				num_selected++;
 			}
 		}
 	}
@@ -1657,11 +1720,8 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie
 		if (selection->changeSelection(selection, TRUE))
 		{
 			selected_items.put(selection);
-			num_selected++;
 		}
 	}
-
-	return num_selected;
 }
 
 void LLFolderViewFolder::destroyView()
@@ -1711,6 +1771,10 @@ void LLFolderViewFolder::removeView(LLFolderViewItem* item)
 		return;
 	}
 	// deselect without traversing hierarchy
+	if (item->isSelected())
+	{
+		item->deselectItem();
+	}
 	getRoot()->removeFromSelectionList(item);
 	extractItem(item);
 	delete item;
@@ -1726,16 +1790,24 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item )
 		// This is an evil downcast. However, it's only doing
 		// pointer comparison to find if (which it should be ) the
 		// item is in the container, so it's pretty safe.
-		LLFolderViewFolder* f = reinterpret_cast<LLFolderViewFolder*>(item);
+		LLFolderViewFolder* f = static_cast<LLFolderViewFolder*>(item);
 		folders_t::iterator ft;
 		ft = std::find(mFolders.begin(), mFolders.end(), f);
-		if(ft != mFolders.end())
+		if (ft != mFolders.end())
 		{
+			if ((*ft)->numSelected())
+			{
+				recursiveIncrementNumDescendantsSelected(-(*ft)->numSelected());
+			}
 			mFolders.erase(ft);
 		}
 	}
 	else
 	{
+		if ((*it)->isSelected())
+		{
+			recursiveIncrementNumDescendantsSelected(-1);
+		}
 		mItems.erase(it);
 	}
 	//item has been removed, need to update filter
@@ -1899,6 +1971,10 @@ BOOL LLFolderViewFolder::isRemovable()
 BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
 {
 	mItems.push_back(item);
+	if (item->isSelected())
+	{
+		recursiveIncrementNumDescendantsSelected(1);
+	}
 	item->setRect(LLRect(0, 0, getRect().getWidth(), 0));
 	item->setVisible(FALSE);
 	addChild( item );
@@ -1912,6 +1988,10 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
 BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
 {
 	mFolders.push_back(folder);
+	if (folder->numSelected())
+	{
+		recursiveIncrementNumDescendantsSelected(folder->numSelected());
+	}
 	folder->setOrigin(0, 0);
 	folder->reshape(getRect().getWidth(), 0);
 	folder->setVisible(FALSE);
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 11b644e3aa01116d48ddd3b373c76262af2b6b50..ab9317afd9ebe30e203870336eb7ad901d20bfcf 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -108,7 +108,7 @@ class LLFolderViewItem : public LLView
 
 	// layout constants
 	static const S32 LEFT_PAD = 5;
-    // LEFT_INDENTATION is set via folder_indentation above
+	// LEFT_INDENTATION is set via folder_indentation above
 	static const S32 ICON_PAD = 2;
 	static const S32 ICON_WIDTH = 16;
 	static const S32 TEXT_PAD = 1;
@@ -121,6 +121,9 @@ class LLFolderViewItem : public LLView
 	// Mostly for debugging printout purposes.
 	const std::string& getSearchableLabel() { return mSearchableLabel; }
 
+private:
+	BOOL						mIsSelected;
+
 protected:
 	friend class LLUICtrlFactory;
 	friend class LLFolderViewEventListener;
@@ -134,7 +137,6 @@ class LLFolderViewItem : public LLView
 	time_t						mCreationDate;
 	LLFolderViewFolder*			mParentFolder;
 	LLFolderViewEventListener*	mListener;
-	BOOL						mIsSelected;
 	BOOL						mIsCurSelection;
 	BOOL						mSelectPending;
 	LLFontGL::StyleFlags		mLabelStyle;
@@ -212,19 +214,23 @@ class LLFolderViewItem : public LLView
 
 	virtual void	dirtyFilter();
 
-	// If the selection is 'this' then note that otherwise
-	// ignore. Returns TRUE if this object was affected. If open is
-	// TRUE, then folders are opened up along the way to the
-	// selection.
-	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
-		BOOL take_keyboard_focus);
+	// If 'selection' is 'this' then note that otherwise ignore.
+	// Returns TRUE if this item ends up being selected.
+	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus);
 
-	// This method is used to toggle the selection of an item. If
-	// selection is 'this', then note selection, and return TRUE.
+	// This method is used to set the selection state of an item.
+	// If 'selection' is 'this' then note selection.
+	// Returns TRUE if the selection state of this item was changed.
 	virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
 
 	// this method is used to group select items
-	virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items){ return FALSE; }
+	virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items) { }
+
+	// this method is used to deselect this element
+	void deselectItem();
+
+	// this method is used to select this element
+	void selectItem();
 
 	// gets multiple-element selection
 	virtual std::set<LLUUID> getSelectionList() const;
@@ -238,7 +244,7 @@ class LLFolderViewItem : public LLView
 	// destroys this item recursively
 	virtual void destroyView();
 
-	BOOL isSelected() { return mIsSelected; }
+	BOOL isSelected() const { return mIsSelected; }
 
 	void setUnselected() { mIsSelected = FALSE; }
 
@@ -247,7 +253,7 @@ class LLFolderViewItem : public LLView
 	BOOL getIsCurSelection() { return mIsCurSelection; }
 
 	BOOL hasVisibleChildren() { return mHasVisibleChildren; }
-	
+
 	void setShowLoadStatus(bool status) { mShowLoadStatus = status; }
 
 	// Call through to the viewed object and return true if it can be
@@ -359,6 +365,13 @@ class LLFolderViewFolder : public LLFolderViewItem
 		UNKNOWN, TRASH, NOT_TRASH
 	} ETrash;
 
+private:
+	S32		mNumDescendantsSelected;
+
+public:		// Accessed needed by LLFolderViewItem
+	void recursiveIncrementNumDescendantsSelected(S32 increment);
+	S32 numSelected(void) const { return mNumDescendantsSelected + (isSelected() ? 1 : 0); }
+
 protected:
 	typedef std::list<LLFolderViewItem*> items_t;
 	typedef std::list<LLFolderViewFolder*> folders_t;
@@ -420,18 +433,19 @@ class LLFolderViewFolder : public LLFolderViewItem
 	virtual void dirtyFilter();
 
 	// Passes selection information on to children and record
-	// selection information if necessary. Returns TRUE if this object
-	// (or a child) was affected.
-	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem,
-		BOOL take_keyboard_focus);
-
-	// This method is used to change the selection of an item. If
-	// selection is 'this', then note selection as true. Returns TRUE
-	// if this or a child is now selected.
+	// selection information if necessary.
+	// Returns TRUE if this object (or a child) ends up being selected.
+	// If 'openitem' is TRUE then folders are opened up along the way to the selection.
+	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus);
+
+	// This method is used to change the selection of an item.
+	// Recursively traverse all children; if 'selection' is 'this' then change
+	// the select status if necessary.
+	// Returns TRUE if the selection state of this folder, or of a child, was changed.
 	virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected);
 
 	// this method is used to group select items
-	virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
+	virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
 
 	// Returns true is this object and all of its children can be removed.
 	virtual BOOL isRemovable();
@@ -521,6 +535,7 @@ class LLFolderViewFolder : public LLFolderViewItem
 
 	time_t getCreationDate() const;
 	bool isTrash() const;
+	S32 getNumSelectedDescendants(void) const { return mNumDescendantsSelected; }
 };
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 4f9d51ce58227f2ee9315172ffd8066ca4a12f57..c3e6e1c2dca29c0fd9ea096a3110148559bc9b41 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -283,7 +283,7 @@ mGroupNameBox(NULL),
 mInfoBtn(NULL),
 mGroupID(LLUUID::null)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_list_item.xml");
+	buildFromFile( "panel_group_list_item.xml");
 
 	// Remember group icon width including its padding from the name text box,
 	// so that we can hide and show the icon again later.
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d837ed8205903ae6982f26cc0c88a89f69ad45e4
--- /dev/null
+++ b/indra/newview/llhints.cpp
@@ -0,0 +1,381 @@
+/**
+ * @file llhints.cpp
+ * @brief Hint popups for displaying context sensitive help in a UI overlay
+ *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h" // must be first include
+
+#include "llhints.h"
+
+#include "llbutton.h"
+#include "lltextbox.h"
+#include "llviewerwindow.h"
+#include "llviewercontrol.h"
+#include "llsdparam.h"
+
+class LLHintPopup : public LLPanel
+{
+public:
+
+	typedef enum e_popup_direction
+	{
+		LEFT,
+		TOP,
+		RIGHT,
+		BOTTOM,
+		TOP_RIGHT
+	} EPopupDirection;
+
+	struct PopupDirections : public LLInitParam::TypeValuesHelper<LLHintPopup::EPopupDirection, PopupDirections>
+	{
+		static void declareValues()
+		{
+			declare("left", LLHintPopup::LEFT);
+			declare("right", LLHintPopup::RIGHT);
+			declare("top", LLHintPopup::TOP);
+			declare("bottom", LLHintPopup::BOTTOM);
+			declare("top_right", LLHintPopup::TOP_RIGHT);
+		}
+	};
+
+	struct TargetParams : public LLInitParam::Block<TargetParams>
+	{
+		Mandatory<std::string>	target;
+		Mandatory<EPopupDirection, PopupDirections> direction;
+
+		TargetParams()
+		:	target("target"),
+			direction("direction")
+		{}
+	};
+
+	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+	{
+		Mandatory<LLNotificationPtr>	notification;
+		Optional<TargetParams>			target_params;
+		Optional<S32>					distance;
+		Optional<LLUIImage*>			left_arrow,
+										up_arrow,
+										right_arrow,
+										down_arrow,
+										lower_left_arrow;
+				
+		Optional<S32>					left_arrow_offset,
+										up_arrow_offset,
+										right_arrow_offset,
+										down_arrow_offset;
+		Optional<F32>					fade_in_time,
+										fade_out_time;
+
+		Params()
+		:	distance("distance"),
+			left_arrow("left_arrow"),
+			up_arrow("up_arrow"),
+			right_arrow("right_arrow"),
+			down_arrow("down_arrow"),
+			lower_left_arrow("lower_left_arrow"),
+			left_arrow_offset("left_arrow_offset"),
+			up_arrow_offset("up_arrow_offset"),
+			right_arrow_offset("right_arrow_offset"),
+			down_arrow_offset("down_arrow_offset"),
+			fade_in_time("fade_in_time"),
+			fade_out_time("fade_out_time")
+		{}
+	};
+
+	LLHintPopup(const Params&);
+
+	/*virtual*/ BOOL postBuild();
+
+	void onClickClose() { hide(); LLNotifications::instance().cancel(mNotification); }
+	void draw();
+	void hide() { if(!mHidden) {mHidden = true; mFadeTimer.reset();} }
+
+private:
+	LLNotificationPtr	mNotification;
+	std::string			mTarget;
+	EPopupDirection		mDirection;
+	S32					mDistance;
+	LLUIImagePtr		mArrowLeft,
+						mArrowUp,
+						mArrowRight,
+						mArrowDown,
+						mArrowDownAndLeft;
+	S32					mArrowLeftOffset,
+						mArrowUpOffset,
+						mArrowRightOffset,
+						mArrowDownOffset;
+	LLFrameTimer		mFadeTimer;
+	F32					mFadeInTime,
+						mFadeOutTime;
+	bool				mHidden;
+};
+
+static LLDefaultChildRegistry::Register<LLHintPopup> r("hint_popup");
+
+
+LLHintPopup::LLHintPopup(const LLHintPopup::Params& p)
+:	mNotification(p.notification),
+	mDirection(TOP),
+	mDistance(p.distance),
+	mArrowLeft(p.left_arrow),
+	mArrowUp(p.up_arrow),
+	mArrowRight(p.right_arrow),
+	mArrowDown(p.down_arrow),
+	mArrowDownAndLeft(p.lower_left_arrow),
+	mArrowLeftOffset(p.left_arrow_offset),
+	mArrowUpOffset(p.up_arrow_offset),
+	mArrowRightOffset(p.right_arrow_offset),
+	mArrowDownOffset(p.down_arrow_offset),
+	mHidden(false),
+	mFadeInTime(p.fade_in_time),
+	mFadeOutTime(p.fade_out_time),
+	LLPanel(p)
+{
+	if (p.target_params.isProvided())
+	{
+		mDirection = p.target_params.direction;
+		mTarget = p.target_params.target;
+	}
+	buildFromFile( "panel_hint.xml", NULL, p);
+}
+
+BOOL LLHintPopup::postBuild()
+{
+	LLTextBox& hint_text = getChildRef<LLTextBox>("hint_text");
+	hint_text.setText(mNotification->getMessage());
+	
+	getChild<LLButton>("close")->setClickedCallback(boost::bind(&LLHintPopup::onClickClose, this));
+	getChild<LLTextBox>("hint_title")->setText(mNotification->getLabel());
+
+	LLRect text_bounds = hint_text.getTextBoundingRect();
+	S32 delta_height = text_bounds.getHeight() - hint_text.getRect().getHeight();
+	reshape(getRect().getWidth(), getRect().getHeight() + delta_height);
+	return TRUE;
+}
+
+void LLHintPopup::draw()
+{
+	F32 alpha = 1.f;
+	if (mHidden)
+	{
+		alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeOutTime, 1.f, 0.f);
+		if (alpha == 0.f)
+		{
+			die();
+			return;
+		}
+	}
+	else
+	{
+		alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeInTime, 0.f, 1.f);
+	}
+	
+	{	LLViewDrawContext context(alpha); 
+
+		if (mTarget.empty())
+		{
+			// just draw contents, no arrow, in default position
+			LLPanel::draw();
+		}
+		else 
+		{
+			LLView* targetp = LLHints::getHintTarget(mTarget).get();
+			if (!targetp)
+			{
+				// target widget is no longer valid, go away
+				die();
+			}
+			else if (!targetp->isInVisibleChain()) 
+			{
+				// if target is invisible, don't draw, but keep alive in case widget comes back
+			}
+			else
+			{
+				LLRect target_rect;
+				targetp->localRectToOtherView(targetp->getLocalRect(), &target_rect, getParent());
+
+				LLRect my_local_rect = getLocalRect();
+				LLRect my_rect;
+				LLRect arrow_rect;
+				LLUIImagePtr arrow_imagep;
+
+				switch(mDirection)
+				{
+				case LEFT:
+					my_rect.setCenterAndSize(	target_rect.mLeft - (my_local_rect.getWidth() / 2 + mDistance), 
+												target_rect.getCenterY(), 
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowRight)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 + mArrowRightOffset,
+													my_local_rect.getCenterY(),
+													mArrowRight->getWidth(), 
+													mArrowRight->getHeight());
+						arrow_imagep = mArrowRight;
+					}
+					break;
+				case TOP:
+					my_rect.setCenterAndSize(	target_rect.getCenterX(), 
+												target_rect.mTop + (my_local_rect.getHeight() / 2 + mDistance), 
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowDown)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
+													my_local_rect.mBottom - mArrowDown->getHeight() / 2 + mArrowDownOffset,
+													mArrowDown->getWidth(), 
+													mArrowDown->getHeight());
+						arrow_imagep = mArrowDown;
+					}
+					break;
+				case RIGHT:
+					my_rect.setCenterAndSize(	target_rect.mRight + (my_local_rect.getWidth() / 2 + mDistance), 
+												target_rect.getCenterY(),
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowLeft)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + mArrowLeftOffset,
+													my_local_rect.getCenterY(),
+													mArrowLeft->getWidth(), 
+													mArrowLeft->getHeight());
+						arrow_imagep = mArrowLeft;
+					}
+					break;
+				case BOTTOM:
+					my_rect.setCenterAndSize(	target_rect.getCenterX(), 
+												target_rect.mBottom - (my_local_rect.getHeight() / 2 + mDistance),
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowUp)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.getCenterX(),
+													my_local_rect.mTop + mArrowUp->getHeight() / 2 + mArrowUpOffset,
+													mArrowUp->getWidth(), 
+													mArrowUp->getHeight());
+						arrow_imagep = mArrowUp;
+					}
+					break;
+				case TOP_RIGHT:
+					my_rect.setCenterAndSize(	target_rect.mRight + (my_local_rect.getWidth() / 2),
+												target_rect.mTop + (my_local_rect.getHeight() / 2 + mDistance),
+												my_local_rect.getWidth(), 
+												my_local_rect.getHeight());
+					if (mArrowDownAndLeft)
+					{
+						arrow_rect.setCenterAndSize(my_local_rect.mLeft + mArrowDownAndLeft->getWidth() / 2 + mArrowLeftOffset,
+													my_local_rect.mBottom - mArrowDownAndLeft->getHeight() / 2 + mArrowDownOffset,
+													mArrowDownAndLeft->getWidth(), 
+													mArrowDownAndLeft->getHeight());
+						arrow_imagep = mArrowDownAndLeft;
+					}
+				}
+				setShape(my_rect);
+				LLPanel::draw();
+
+				if (arrow_imagep) arrow_imagep->draw(arrow_rect, LLColor4(1.f, 1.f, 1.f, alpha));
+			}
+		}
+	}
+}
+
+
+LLRegistry<std::string, LLHandle<LLView> > LLHints::sTargetRegistry;
+std::map<LLNotificationPtr, class LLHintPopup*> LLHints::sHints;
+
+//static
+void LLHints::show(LLNotificationPtr hint)
+{
+	LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>());
+
+	LLParamSDParser parser;
+	parser.readSD(hint->getPayload(), p, true);
+	p.notification = hint;
+
+	if (p.validateBlock())
+	{
+		LLHintPopup* popup = new LLHintPopup(p);
+
+		sHints[hint] = popup;
+
+		LLView* hint_holder = gViewerWindow->getHintHolder();
+		if (hint_holder)
+		{
+			hint_holder->addChild(popup);
+			popup->centerWithin(hint_holder->getLocalRect());
+		}
+	}
+}
+
+//static
+void LLHints::hide(LLNotificationPtr hint)
+{
+	hint_map_t::iterator found_it = sHints.find(hint);
+	if (found_it != sHints.end())
+	{
+		found_it->second->hide();
+		sHints.erase(found_it);
+	}
+}
+
+//static
+void LLHints::registerHintTarget(const std::string& name, LLHandle<LLView> target)
+{
+	sTargetRegistry.defaultRegistrar().replace(name, target);
+}
+
+//static 
+LLHandle<LLView> LLHints::getHintTarget(const std::string& name)
+{
+	LLHandle<LLView>* handlep = sTargetRegistry.getValue(name);
+	if (handlep) 
+	{
+		return *handlep;
+	}
+	else
+	{
+		return LLHandle<LLView>();
+	}
+}
+
+//static
+void LLHints::initClass()
+{
+	sRegister.reference();
+
+	LLControlVariablePtr control = gSavedSettings.getControl("EnableUIHints");
+	control->getSignal()->connect(boost::bind(&showHints, _2));
+	gViewerWindow->getHintHolder()->setVisible(control->getValue().asBoolean());
+
+}
+
+//staic
+void LLHints::showHints(const LLSD& show)
+{
+	bool visible = show.asBoolean();
+	gViewerWindow->getHintHolder()->setVisible(visible);
+}
diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h
new file mode 100644
index 0000000000000000000000000000000000000000..ebffe561b9513d1d8fbe92c3640129d10d74e00b
--- /dev/null
+++ b/indra/newview/llhints.h
@@ -0,0 +1,50 @@
+/**
+ * @file llhints.h
+ * @brief Hint popups for displaying context sensitive help in a UI overlay
+ *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLHINTS_H
+#define LL_LLHINTS_H
+
+#include "llpanel.h"
+#include "llnotifications.h"
+
+
+class LLHints :  public LLInitClass<LLHints>
+{
+public:
+	static void show(LLNotificationPtr hint);
+	static void hide(LLNotificationPtr hint);
+	static void registerHintTarget(const std::string& name, LLHandle<LLView> target);
+	static LLHandle<LLView> getHintTarget(const std::string& name);
+	static void initClass();
+private:
+	static LLRegistry<std::string, LLHandle<LLView> > sTargetRegistry;
+	typedef std::map<LLNotificationPtr, class LLHintPopup*> hint_map_t;
+	static hint_map_t sHints;
+	static void showHints(const LLSD& show);
+};
+
+
+#endif
diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp
index 686bcfae1cf6b77e76d506e178831873464b9534..9a63e9935756b3e27873b134844df4b101e2df6b 100644
--- a/indra/newview/llhudview.cpp
+++ b/indra/newview/llhudview.cpp
@@ -50,7 +50,7 @@ const S32 HUD_ARROW_SIZE = 32;
 
 LLHUDView::LLHUDView(const LLRect& r)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_hud.xml");
+	buildFromFile( "panel_hud.xml");
 	setShape(r, true);
 }
 
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 658e9403d874a85666980fe8c7d204e83f992910..56d3ed1c4d1aa9f787d923ad66ffbeada949742d 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -251,14 +251,14 @@ BOOL LLIMFloater::postBuild()
 	}
 
 	mControlPanel->setSessionId(mSessionID);
-	mControlPanel->setVisible(gSavedSettings.getBOOL("IMShowControlPanel"));
+	mControlPanel->getParent()->setVisible(gSavedSettings.getBOOL("IMShowControlPanel"));
 
 	LLButton* slide_left = getChild<LLButton>("slide_left_btn");
-	slide_left->setVisible(mControlPanel->getVisible());
+	slide_left->setVisible(mControlPanel->getParent()->getVisible());
 	slide_left->setClickedCallback(boost::bind(&LLIMFloater::onSlide, this));
 
 	LLButton* slide_right = getChild<LLButton>("slide_right_btn");
-	slide_right->setVisible(!mControlPanel->getVisible());
+	slide_right->setVisible(!mControlPanel->getParent()->getVisible());
 	slide_right->setClickedCallback(boost::bind(&LLIMFloater::onSlide, this));
 
 	mInputEditor = getChild<LLLineEditor>("chat_editor");
@@ -357,12 +357,12 @@ void* LLIMFloater::createPanelAdHocControl(void* userdata)
 
 void LLIMFloater::onSlide()
 {
-	mControlPanel->setVisible(!mControlPanel->getVisible());
+	mControlPanel->getParent()->setVisible(!mControlPanel->getParent()->getVisible());
 
-	gSavedSettings.setBOOL("IMShowControlPanel", mControlPanel->getVisible());
+	gSavedSettings.setBOOL("IMShowControlPanel", mControlPanel->getParent()->getVisible());
 
-	getChild<LLButton>("slide_left_btn")->setVisible(mControlPanel->getVisible());
-	getChild<LLButton>("slide_right_btn")->setVisible(!mControlPanel->getVisible());
+	getChild<LLButton>("slide_left_btn")->setVisible(mControlPanel->getParent()->getVisible());
+	getChild<LLButton>("slide_right_btn")->setVisible(!mControlPanel->getParent()->getVisible());
 
 	LLLayoutStack* stack = getChild<LLLayoutStack>("im_panels");
 	if (stack) stack->setAnimate(true);
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
index 5bbab1f092adf2d094c0613e96dac9143281963d..33cb3a54a7cf69b772e7b4b7e6a0d43f8424a30a 100644
--- a/indra/newview/llimfloatercontainer.cpp
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -94,9 +94,9 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,
 
 	if(gAgent.isInGroup(session_id, TRUE))
 	{
-		LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>();
+		LLGroupIconCtrl::Params icon_params;
 		icon_params.group_id = session_id;
-		icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params);
+		icon = LLUICtrlFactory::instance().create<LLGroupIconCtrl>(icon_params);
 
 		mSessions[session_id] = floaterp;
 		floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id));
@@ -105,9 +105,9 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,
 	{
 		LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id);
 
-		LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>();
+		LLAvatarIconCtrl::Params icon_params;
 		icon_params.avatar_id = avatar_id;
-		icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params);
+		icon = LLUICtrlFactory::instance().create<LLAvatarIconCtrl>(icon_params);
 
 		mSessions[session_id] = floaterp;
 		floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id));
diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp
index bc76092a2014d39099a4e57c2250030d7508a3d5..cd71da73935742a5cce912dd279d4ee95e96613e 100644
--- a/indra/newview/llimhandler.cpp
+++ b/indra/newview/llimhandler.cpp
@@ -115,7 +115,7 @@ bool LLIMHandler::processNotification(const LLSD& notify)
 	{
 		mChannel->killToastByNotificationID(notification->getID());
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 493398c68a0da0e3cb886b3b01e0824f3c7b5e38..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));
@@ -622,7 +627,10 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co
 	LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids, voice);
 	mId2SessionMap[session_id] = session;
 
-	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id);
+	// When notifying observer, 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).
+	std::string session_name = LLIMModel::getInstance()->getName(session_id);
+	LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, session_name, other_participant_id);
 
 	return true;
 
@@ -1029,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(
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/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 311d7913198a0601d55c20f74fb75a6d3da09083..569dfc08e2fe02b915f91437de35e16af52c1368 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2856,6 +2856,66 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
 	return false;
 }
 
+// Returns true if the item can be moved to Current Outfit or any outfit folder.
+static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit)
+{
+	if ((inv_item->getInventoryType() != LLInventoryType::IT_WEARABLE) &&
+		(inv_item->getInventoryType() != LLInventoryType::IT_GESTURE) &&
+		(inv_item->getInventoryType() != LLInventoryType::IT_OBJECT))
+	{
+		return FALSE;
+	}
+
+	if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID()))
+	{
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+void LLFolderBridge::dropToFavorites(LLInventoryItem* inv_item)
+{
+	// use callback to rearrange favorite landmarks after adding
+	// to have new one placed before target (on which it was dropped). See EXT-4312.
+	LLPointer<AddFavoriteLandmarkCallback> cb = new AddFavoriteLandmarkCallback();
+	LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+	LLFolderViewItem* drag_over_item = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
+	if (drag_over_item && drag_over_item->getListener())
+	{
+		cb.get()->setTargetLandmarkId(drag_over_item->getListener()->getUUID());
+	}
+
+	copy_inventory_item(
+		gAgent.getID(),
+		inv_item->getPermissions().getOwner(),
+		inv_item->getUUID(),
+		mUUID,
+		std::string(),
+		cb);
+}
+
+void LLFolderBridge::dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit)
+{
+	// BAP - should skip if dup.
+	if (move_is_into_current_outfit)
+	{
+		LLAppearanceMgr::instance().wearItemOnAvatar(inv_item->getUUID(), true, true);
+	}
+	else
+	{
+		LLPointer<LLInventoryCallback> cb = NULL;
+		link_inventory_item(
+			gAgent.getID(),
+			inv_item->getLinkedUUID(),
+			mUUID,
+			inv_item->getName(),
+			inv_item->getDescription(),
+			LLAssetType::AT_LINK,
+			cb);
+	}
+}
+
 // This is used both for testing whether an item can be dropped
 // into the folder, as well as performing the actual drop, depending
 // if drop == TRUE.
@@ -2868,18 +2928,20 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 	if(!isAgentInventory()) return FALSE; // cannot drag into library
 	if (!isAgentAvatarValid()) return FALSE;
 
+	const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
+	const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
+
+	const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
+	const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
+
 	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
 	BOOL accept = FALSE;
 	LLViewerObject* object = NULL;
 	if(LLToolDragAndDrop::SOURCE_AGENT == source)
 	{
 		const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);
-		const LLUUID &current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
-		const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
 
 		const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
-		const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
-		const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
 		const BOOL move_is_outof_current_outfit = LLAppearanceMgr::instance().getIsInCOF(inv_item->getUUID());
 		const BOOL folder_allows_reorder = (mUUID == favorites_id);
 
@@ -2931,14 +2993,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			accept = FALSE;
 		if (move_is_into_current_outfit || move_is_into_outfit)
 		{
-			if ((inv_item->getInventoryType() != LLInventoryType::IT_WEARABLE) &&
-				(inv_item->getInventoryType() != LLInventoryType::IT_GESTURE) &&
-				(inv_item->getInventoryType() != LLInventoryType::IT_OBJECT))
-				accept = FALSE;
-		}
-		if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID()))
-		{
-			accept = FALSE;
+			accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
 		}
 
 		if(accept && drop)
@@ -2982,50 +3037,13 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			// (copy the item)
 			else if (favorites_id == mUUID)
 			{
-				// use callback to rearrange favorite landmarks after adding
-				// to have new one placed before target (on which it was dropped). See EXT-4312.
-				LLPointer<AddFavoriteLandmarkCallback> cb = new AddFavoriteLandmarkCallback();
-				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-				LLFolderViewItem* drag_over_item = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
-				if (drag_over_item && drag_over_item->getListener())
-				{
-					cb.get()->setTargetLandmarkId(drag_over_item->getListener()->getUUID());
-				}
-
-				copy_inventory_item(
-					gAgent.getID(),
-					inv_item->getPermissions().getOwner(),
-					inv_item->getUUID(),
-					mUUID,
-					std::string(),
-					cb);
+				dropToFavorites(inv_item);
 			}
 			// CURRENT OUTFIT or OUTFIT folder
 			// (link the item)
 			else if (move_is_into_current_outfit || move_is_into_outfit)
 			{
-				if ((inv_item->getInventoryType() == LLInventoryType::IT_WEARABLE) || 
-					(inv_item->getInventoryType() == LLInventoryType::IT_GESTURE) || 
-					(inv_item->getInventoryType() == LLInventoryType::IT_OBJECT))
-				{
-					// BAP - should skip if dup.
-					if (move_is_into_current_outfit)
-					{
-						LLAppearanceMgr::instance().wearItemOnAvatar(inv_item->getUUID(), true, true);
-					}
-					else
-					{
-						LLPointer<LLInventoryCallback> cb = NULL;
-						link_inventory_item(
-							gAgent.getID(),
-							inv_item->getLinkedUUID(),
-							mUUID,
-							inv_item->getName(),
-							inv_item->getDescription(),
-							LLAssetType::AT_LINK,
-							cb);
-					}
-				}
+				dropToOutfit(inv_item, move_is_into_current_outfit);
 			}
 			// NORMAL or TRASH folder
 			// (move the item, restamp if into trash)
@@ -3074,6 +3092,15 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 			is_move = TRUE;
 			accept = TRUE;
 		}
+
+		// Don't allow placing an original item into Current Outfit or an outfit folder
+		// because they must contain only links to wearable items.
+		// *TODO: Probably we should create a link to an item if it was dragged to outfit or COF.
+		if(move_is_into_current_outfit || move_is_into_outfit)
+		{
+			accept = FALSE;
+		}
+
 		if(drop && accept)
 		{
 			LLMoveInv* move_inv = new LLMoveInv;
@@ -3113,15 +3140,36 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 		if(item && item->isFinished())
 		{
 			accept = TRUE;
-			if(drop)
+
+			if (move_is_into_current_outfit || move_is_into_outfit)
 			{
-				copy_inventory_item(
-					gAgent.getID(),
-					inv_item->getPermissions().getOwner(),
-					inv_item->getUUID(),
-					mUUID,
-					std::string(),
-					LLPointer<LLInventoryCallback>(NULL));
+				accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
+			}
+
+			if (accept && drop)
+			{
+				// FAVORITES folder
+				// (copy the item)
+				if (favorites_id == mUUID)
+				{
+					dropToFavorites(inv_item);
+				}
+				// CURRENT OUTFIT or OUTFIT folder
+				// (link the item)
+				else if (move_is_into_current_outfit || move_is_into_outfit)
+				{
+					dropToOutfit(inv_item, move_is_into_current_outfit);
+				}
+				else
+				{
+					copy_inventory_item(
+						gAgent.getID(),
+						inv_item->getPermissions().getOwner(),
+						inv_item->getUUID(),
+						mUUID,
+						std::string(),
+						LLPointer<LLInventoryCallback>(NULL));
+				}
 			}
 		}
 	}
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 14abdd76b9e8970baec559f475f1589ed68e7b88..5ac328dcef2e1d0c303e6b15ba22b3205ed0df16 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -295,6 +295,8 @@ class LLFolderBridge : public LLInvFVBridge
 
 	menuentry_vec_t getMenuItems() { return mItems; } // returns a copy of current menu items
 
+	void dropToFavorites(LLInventoryItem* inv_item);
+	void dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
 
 	//--------------------------------------------------------------------
 	// Messy hacks for handling folder options
diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp
index 1ea91103f15a232ee408561951dfbb60a25a9390..225d0288a978e66df627ba12e83b3eaf7d46f76d 100644
--- a/indra/newview/llinventorylistitem.cpp
+++ b/indra/newview/llinventorylistitem.cpp
@@ -302,7 +302,9 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem
 	}
 	else
 	{
-		mIconCtrl = dynamic_cast<LLIconCtrl*>(LLUICtrlFactory::createDefaultWidget<LLIconCtrl>("item_icon"));
+		LLIconCtrl::Params icon_params;
+		icon_params.name = "item_icon";
+		mIconCtrl = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
 	}
 
 	LLTextBox::Params text_params(params.item_name);
@@ -315,7 +317,9 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem
 	}
 	else
 	{
-		mTitleCtrl = dynamic_cast<LLTextBox*>(LLUICtrlFactory::createDefaultWidget<LLTextBox>("item_title"));
+		LLTextBox::Params text_aprams;
+		text_params.name = "item_title";
+		mTitleCtrl = LLUICtrlFactory::create<LLTextBox>(text_params);
 	}
 }
 
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 7b2f5984a778899df811cdc064c61efb71b47ecd..3def135fb411ffb142ac437f4818f3b2ced68b7a 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -47,6 +47,7 @@
 #include "llfloaterreg.h"
 #include "llnotifications.h"
 #include "llwindow.h"
+#include "llviewerwindow.h"
 #if LL_LINUX || LL_SOLARIS
 #include "lltrans.h"
 #endif
@@ -102,6 +103,7 @@ void LLLoginInstance::reconnect()
 	std::vector<std::string> uris;
 	LLGridManager::getInstance()->getLoginURIs(uris);
 	mLoginModule->connect(uris.front(), mRequestData);
+	gViewerWindow->setShowProgress(true);
 }
 
 void LLLoginInstance::disconnect()
@@ -239,6 +241,7 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
 			LLSD data(LLSD::emptyMap());
 			data["message"] = message_response;
 			data["reply_pump"] = TOS_REPLY_PUMP;
+			gViewerWindow->setShowProgress(FALSE);
 			LLFloaterReg::showInstance("message_tos", data);
 			LLEventPumps::instance().obtain(TOS_REPLY_PUMP)
 				.listen(TOS_LISTENER_NAME,
@@ -259,6 +262,7 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
 				data["certificate"] = response["certificate"];
 			}
 			
+			gViewerWindow->setShowProgress(FALSE);
 			LLFloaterReg::showInstance("message_critical", data);
 			LLEventPumps::instance().obtain(TOS_REPLY_PUMP)
 				.listen(TOS_LISTENER_NAME,
@@ -402,6 +406,8 @@ void LLLoginInstance::updateApp(bool mandatory, const std::string& auth_msg)
 	{
 		mNotifications->add(notification_name, args, payload, 
 			boost::bind(&LLLoginInstance::updateDialogCallback, this, _1, _2));
+
+		gViewerWindow->setShowProgress(false);
 	}
 }
 
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index a6ff76cf844da0f114c7d022854a69cd867afd23..e84c9152b107144166cc386ca576c9a7e21b2c57 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -38,7 +38,6 @@
 #include "llviewermedia.h"
 #include "llviewertexture.h"
 #include "llviewerwindow.h"
-#include "llnotificationsutil.h"
 #include "llweb.h"
 #include "llrender.h"
 #include "llpluginclassmedia.h"
@@ -48,6 +47,13 @@
 
 // linden library includes
 #include "llfocusmgr.h"
+#include "llsdutil.h"
+#include "lllayoutstack.h"
+#include "lliconctrl.h"
+#include "lltextbox.h"
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llnotifications.h"
 
 extern BOOL gRestoreGL;
 
@@ -62,19 +68,21 @@ LLMediaCtrl::Params::Params()
 	texture_width("texture_width", 1024),
 	texture_height("texture_height", 1024),
 	caret_color("caret_color"),
-	initial_mime_type("initial_mime_type")
+	initial_mime_type("initial_mime_type"),
+	media_id("media_id"),
+	trusted_content("trusted_content", false)
 {
 	tab_stop(false);
 }
 
 LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	LLPanel( p ),
+	LLInstanceTracker<LLMediaCtrl, LLUUID>(LLUUID::generateNewID()),
 	mTextureDepthBytes( 4 ),
 	mBorder(NULL),
 	mFrequentUpdates( true ),
 	mForceUpdate( false ),
 	mHomePageUrl( "" ),
-	mTrusted(false),
 	mIgnoreUIScale( true ),
 	mAlwaysRefresh( false ),
 	mMediaSource( 0 ),
@@ -88,7 +96,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	mTextureWidth ( 1024 ),
 	mTextureHeight ( 1024 ),
 	mClearCache(false),
-	mHomePageMimeType(p.initial_mime_type)
+	mHomePageMimeType(p.initial_mime_type),
+	mTrusted(p.trusted_content)
 {
 	{
 		LLColor4 color = p.caret_color().get();
@@ -160,20 +169,11 @@ void LLMediaCtrl::setTakeFocusOnClick( bool take_focus )
 	mTakeFocusOnClick = take_focus;
 }
 
-////////////////////////////////////////////////////////////////////////////////
-void LLMediaCtrl::setTrusted( bool valIn )
-{
-	if(mMediaSource)
-	{
-		mMediaSource->setTrustedBrowser(valIn);
-	}
-	mTrusted = valIn;
-}
-
 ////////////////////////////////////////////////////////////////////////////////
 //
 BOOL LLMediaCtrl::handleHover( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleHover(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -189,6 +189,7 @@ BOOL LLMediaCtrl::handleHover( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleScrollWheel( S32 x, S32 y, S32 clicks )
 {
+	if (LLPanel::handleScrollWheel(x, y, clicks)) return TRUE;
 	if (mMediaSource && mMediaSource->hasMedia())
 		mMediaSource->getMediaPlugin()->scrollEvent(0, clicks, gKeyboard->currentMask(TRUE));
 
@@ -199,6 +200,7 @@ BOOL LLMediaCtrl::handleScrollWheel( S32 x, S32 y, S32 clicks )
 //
 BOOL LLMediaCtrl::handleMouseUp( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleMouseUp(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -223,6 +225,7 @@ BOOL LLMediaCtrl::handleMouseUp( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleMouseDown( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleMouseDown(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -242,6 +245,7 @@ BOOL LLMediaCtrl::handleMouseDown( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleRightMouseUp( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleRightMouseUp(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -266,6 +270,7 @@ BOOL LLMediaCtrl::handleRightMouseUp( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleRightMouseDown(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -285,6 +290,7 @@ BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
 //
 BOOL LLMediaCtrl::handleDoubleClick( S32 x, S32 y, MASK mask )
 {
+	if (LLPanel::handleDoubleClick(x, y, mask)) return TRUE;
 	convertInputCoords(x, y);
 
 	if (mMediaSource)
@@ -339,6 +345,85 @@ void LLMediaCtrl::onFocusLost()
 //
 BOOL LLMediaCtrl::postBuild ()
 {
+	LLLayoutStack::Params layout_p;
+	layout_p.name = "notification_stack";
+	layout_p.rect = LLRect(0,getLocalRect().mTop,getLocalRect().mRight, 30);
+	layout_p.follows.flags = FOLLOWS_ALL;
+	layout_p.mouse_opaque = false;
+	layout_p.orientation = "vertical";
+
+	LLLayoutStack* stackp = LLUICtrlFactory::create<LLLayoutStack>(layout_p);
+	addChild(stackp);
+
+	LLLayoutPanel::Params panel_p;
+	panel_p.rect = LLRect(0, 30, 800, 0);
+	panel_p.min_height = 30;
+	panel_p.name = "notification_area";
+	panel_p.visible = false;
+	panel_p.user_resize = false;
+	panel_p.background_visible = true;
+	panel_p.bg_alpha_image.name = "Yellow_Gradient";
+	panel_p.auto_resize = false;
+	LLLayoutPanel* notification_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(notification_panel);
+
+	panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>();
+	panel_p.auto_resize = true;
+	panel_p.mouse_opaque = false;
+	LLLayoutPanel* dummy_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(dummy_panel);
+
+	layout_p = LLUICtrlFactory::getDefaultParams<LLLayoutStack>();
+	layout_p.rect = LLRect(0, 30, 800, 0);
+	layout_p.follows.flags = FOLLOWS_ALL;
+	layout_p.orientation = "horizontal";
+	stackp = LLUICtrlFactory::create<LLLayoutStack>(layout_p);
+	notification_panel->addChild(stackp);
+
+	panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>();
+	panel_p.rect.height = 30;
+	LLLayoutPanel* panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(panel);
+
+	LLIconCtrl::Params icon_p;
+	icon_p.name = "notification_icon";
+	icon_p.rect = LLRect(5, 23, 21, 8);
+	panel->addChild(LLUICtrlFactory::create<LLIconCtrl>(icon_p));
+
+	LLTextBox::Params text_p;
+	text_p.rect = LLRect(31, 20, 430, 0);
+	text_p.text_color = LLColor4::black;
+	text_p.font = LLFontGL::getFontSansSerif();
+	text_p.font.style = "BOLD";
+	text_p.name = "notification_text";
+	text_p.use_ellipses = true;
+	panel->addChild(LLUICtrlFactory::create<LLTextBox>(text_p));
+
+	panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>();
+	panel_p.auto_resize = false;
+	panel_p.user_resize = false;
+	panel_p.name="form_elements";
+	panel_p.rect = LLRect(0, 30, 130, 0);
+	LLLayoutPanel* form_elements_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(form_elements_panel);
+
+	panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>();
+	panel_p.auto_resize = false;
+	panel_p.user_resize = false;
+	panel_p.rect = LLRect(0, 30, 25, 0);
+	LLLayoutPanel* close_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p);
+	stackp->addChild(close_panel);
+
+	LLButton::Params button_p;
+	button_p.name = "close_notification";
+	button_p.rect = LLRect(5, 23, 21, 7);
+	button_p.image_color=LLUIColorTable::instance().getColor("DkGray_66");
+    button_p.image_unselected.name="Icon_Close_Foreground";
+	button_p.image_selected.name="Icon_Close_Press";
+	button_p.click_callback.function = boost::bind(&LLMediaCtrl::onCloseNotification, this);
+
+	close_panel->addChild(LLUICtrlFactory::create<LLButton>(button_p));
+
 	setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
 	return TRUE;
 }
@@ -347,6 +432,7 @@ BOOL LLMediaCtrl::postBuild ()
 //
 BOOL LLMediaCtrl::handleKeyHere( KEY key, MASK mask )
 {
+	if (LLPanel::handleKeyHere(key, mask)) return TRUE;
 	BOOL result = FALSE;
 	
 	if (mMediaSource)
@@ -372,6 +458,7 @@ void LLMediaCtrl::handleVisibilityChange ( BOOL new_visibility )
 //
 BOOL LLMediaCtrl::handleUnicodeCharHere(llwchar uni_char)
 {
+	if (LLPanel::handleUnicodeCharHere(uni_char)) return TRUE;
 	BOOL result = FALSE;
 	
 	if (mMediaSource)
@@ -572,6 +659,15 @@ void LLMediaCtrl::setHomePageUrl( const std::string& urlIn, const std::string& m
 	}
 }
 
+void LLMediaCtrl::setTarget(const std::string& target)
+{
+	mTarget = target;
+	if (mMediaSource)
+	{
+		mMediaSource->setTarget(mTarget);
+	}
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 //
 bool LLMediaCtrl::setCaretColor(unsigned int red, unsigned int green, unsigned int blue)
@@ -613,6 +709,7 @@ bool LLMediaCtrl::ensureMediaSourceExists()
 		{
 			mMediaSource->setUsedInUI(true);
 			mMediaSource->setHomeURL(mHomePageUrl, mHomePageMimeType);
+			mMediaSource->setTarget(mTarget);
 			mMediaSource->setVisible( getVisible() );
 			mMediaSource->addObserver( this );
 			mMediaSource->setBackgroundColor( getBackgroundColor() );
@@ -824,6 +921,10 @@ void LLMediaCtrl::draw()
 	if ( mBorder && mBorder->getVisible() )
 		mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus( this ) );
 
+	if (mCurNotification && !mCurNotification->isActive())
+	{
+		hideNotification();
+	}
 	
 	LLPanel::draw();
 
@@ -890,6 +991,7 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 		case MEDIA_EVENT_NAVIGATE_BEGIN:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAVIGATE_BEGIN, url is " << self->getNavigateURI() << LL_ENDL;
+			hideNotification();
 		};
 		break;
 		
@@ -924,9 +1026,27 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 		case MEDIA_EVENT_CLICK_LINK_HREF:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << self->getClickTarget() << "\", uri is " << self->getClickURL() << LL_ENDL;
+			// retrieve the event parameters
+			std::string url = self->getClickURL();
+			std::string target = self->getClickTarget();
+			std::string uuid = self->getClickUUID();
+
+			LLNotification::Params notify_params;
+			notify_params.name = "PopupAttempt";
+			notify_params.payload = LLSD().with("target", target).with("url", url).with("uuid", uuid).with("media_id", getKey());
+			notify_params.functor.function = boost::bind(&LLMediaCtrl::onPopup, this, _1, _2);
+
+			if (mTrusted)
+			{
+				LLNotifications::instance().forceResponse(notify_params, 0);
+			}
+			else
+			{
+				LLNotifications::instance().add(notify_params);
+			}
+			break;
 		};
-		break;
-		
+
 		case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is " << self->getClickURL() << LL_ENDL;
@@ -950,6 +1070,24 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAME_CHANGED" << LL_ENDL;
 		};
 		break;
+		
+		case MEDIA_EVENT_CLOSE_REQUEST:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
+		}
+		break;
+		
+		case MEDIA_EVENT_PICK_FILE_REQUEST:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
+		}
+		break;
+		
+		case MEDIA_EVENT_GEOMETRY_CHANGE:
+		{
+			LL_DEBUGS("Media") << "Media event:  MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() << LL_ENDL;
+		}
+		break;
 	};
 
 	// chain all events to any potential observers of this object.
@@ -963,3 +1101,113 @@ std::string LLMediaCtrl::getCurrentNavUrl()
 	return mCurrentNavUrl;
 }
 
+void LLMediaCtrl::onPopup(const LLSD& notification, const LLSD& response)
+{
+	if (response["open"])
+	{
+		LLWeb::loadURL(notification["payload"]["url"], notification["payload"]["target"], notification["payload"]["uuid"]);
+	}
+	else
+	{
+		// Make sure the opening instance knows its window open request was denied, so it can clean things up.
+		LLViewerMedia::proxyWindowClosed(notification["payload"]["uuid"]);
+	}
+
+}
+
+void LLMediaCtrl::onCloseNotification()
+{
+	LLNotifications::instance().cancel(mCurNotification);
+}
+
+void LLMediaCtrl::onClickIgnore(LLUICtrl* ctrl)
+{
+	bool check = ctrl->getValue().asBoolean();
+	if (mCurNotification && mCurNotification->getForm()->getIgnoreType() == LLNotificationForm::IGNORE_SHOW_AGAIN)
+	{
+		// question was "show again" so invert value to get "ignore"
+		check = !check;
+	}
+	mCurNotification->setIgnored(check);
+}
+
+void LLMediaCtrl::onClickNotificationButton(const std::string& name)
+{
+	if (!mCurNotification) return;
+
+	LLSD response = mCurNotification->getResponseTemplate();
+	response[name] = true;
+
+	mCurNotification->respond(response); 
+}
+
+void LLMediaCtrl::showNotification(LLNotificationPtr notify)
+{
+	mCurNotification = notify;
+
+	// add popup here
+	LLSD payload = notify->getPayload();
+
+	LLNotificationFormPtr formp = notify->getForm();
+	LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area");
+	panel.setVisible(true);
+	panel.getChild<LLUICtrl>("notification_icon")->setValue(notify->getIcon());
+	panel.getChild<LLUICtrl>("notification_text")->setValue(notify->getMessage());
+	panel.getChild<LLUICtrl>("notification_text")->setToolTip(notify->getMessage());
+	LLNotificationForm::EIgnoreType ignore_type = formp->getIgnoreType(); 
+	LLLayoutPanel& form_elements = panel.getChildRef<LLLayoutPanel>("form_elements");
+	form_elements.deleteAllChildren();
+
+	const S32 FORM_PADDING_HORIZONTAL = 10;
+	const S32 FORM_PADDING_VERTICAL = 3;
+	S32 cur_x = FORM_PADDING_HORIZONTAL;
+
+	if (ignore_type != LLNotificationForm::IGNORE_NO)
+	{
+		LLCheckBoxCtrl::Params checkbox_p;
+		checkbox_p.name = "ignore_check";
+		checkbox_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL);
+		checkbox_p.label = formp->getIgnoreMessage();
+		checkbox_p.label_text.text_color = LLColor4::black;
+		checkbox_p.commit_callback.function = boost::bind(&LLMediaCtrl::onClickIgnore, this, _1);
+		checkbox_p.initial_value = formp->getIgnored();
+
+		LLCheckBoxCtrl* check = LLUICtrlFactory::create<LLCheckBoxCtrl>(checkbox_p);
+		check->setRect(check->getBoundingRect());
+		form_elements.addChild(check);
+		cur_x = check->getRect().mRight + FORM_PADDING_HORIZONTAL;
+	}
+
+	for (S32 i = 0; i < formp->getNumElements(); i++)
+	{
+		LLSD form_element = formp->getElement(i);
+		if (form_element["type"].asString() == "button")
+		{
+			LLButton::Params button_p;
+			button_p.name = form_element["name"];
+			button_p.label = form_element["text"];
+			button_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL);
+			button_p.click_callback.function = boost::bind(&LLMediaCtrl::onClickNotificationButton, this, form_element["name"].asString());
+			button_p.auto_resize = true;
+
+			LLButton* button = LLUICtrlFactory::create<LLButton>(button_p);
+			button->autoResize();
+			form_elements.addChild(button);
+
+			cur_x = button->getRect().mRight + FORM_PADDING_HORIZONTAL;
+		}
+	}
+
+
+	form_elements.reshape(cur_x, form_elements.getRect().getHeight());
+
+	//LLWeb::loadURL(payload["url"], payload["target"]);
+}
+
+void LLMediaCtrl::hideNotification()
+{
+	LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area");
+	panel.setVisible(FALSE);
+
+	mCurNotification.reset();
+}
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 755d1e1b046b33fbf7b52865bd3c083648b759cc..65dfbbff7864732ad2df9a2523b5198f6671aaee 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -40,7 +40,8 @@ class LLUICtrlFactory;
 class LLMediaCtrl :
 	public LLPanel,
 	public LLViewerMediaObserver,
-	public LLViewerMediaEventEmitter
+	public LLViewerMediaEventEmitter,
+	public LLInstanceTracker<LLMediaCtrl, LLUUID>
 {
 	LOG_CLASS(LLMediaCtrl);
 public:
@@ -51,7 +52,8 @@ class LLMediaCtrl :
 		Optional<bool>			border_visible,
 								ignore_ui_scale,
 								hide_loading,
-								decouple_texture_size;
+								decouple_texture_size,
+								trusted_content;
 								
 		Optional<S32>			texture_width,
 								texture_height;
@@ -59,6 +61,7 @@ class LLMediaCtrl :
 		Optional<LLUIColor>		caret_color;
 
 		Optional<std::string>	initial_mime_type;
+		Optional<std::string>	media_id;
 		
 		Params();
 	};
@@ -103,11 +106,11 @@ class LLMediaCtrl :
 		// Javascript or some other mechanism.  However, we need the search
 		// floater and login page to handle these URLs.  Those are safe
 		// because we control the page content.  See DEV-9530.  JC.
-		void setTrusted( bool valIn );
-
 		void setHomePageUrl( const std::string& urlIn, const std::string& mime_type = LLStringUtil::null );
 		std::string getHomePageUrl();
 
+		void setTarget(const std::string& target);
+
 		// set/clear URL to visit when a 404 page is reached
 		void set404RedirectUrl( std::string redirect_url );
 		void clr404RedirectUrl();
@@ -140,6 +143,8 @@ class LLMediaCtrl :
 
 		void setTextureSize(S32 width, S32 height);
 
+		void showNotification(boost::shared_ptr<class LLNotification> notify);
+		void hideNotification();
 
 		// over-rides
 		virtual BOOL handleKeyHere( KEY key, MASK mask);
@@ -161,16 +166,21 @@ class LLMediaCtrl :
 
 	private:
 		void onVisibilityChange ( const LLSD& new_visibility );
+		void onPopup(const LLSD& notification, const LLSD& response);
+		void onCloseNotification();
+		void onClickNotificationButton(const std::string& name);
+		void onClickIgnore(LLUICtrl* ctrl);
 
 		const S32 mTextureDepthBytes;
 		LLUUID mMediaTextureID;
 		LLViewBorder* mBorder;
 		bool mFrequentUpdates;
 		bool mForceUpdate;
-		bool mTrusted;
+		const bool mTrusted;
 		std::string mHomePageUrl;
 		std::string mHomePageMimeType;
 		std::string mCurrentNavUrl;
+		std::string mTarget;
 		bool mIgnoreUIScale;
 		bool mAlwaysRefresh;
 		viewer_media_t mMediaSource;
@@ -183,6 +193,7 @@ class LLMediaCtrl :
 		S32 mTextureWidth;
 		S32 mTextureHeight;
 		bool mClearCache;
+		boost::shared_ptr<class LLNotification> mCurNotification;
 };
 
 #endif // LL_LLMediaCtrl_H
diff --git a/indra/newview/llmorphview.h b/indra/newview/llmorphview.h
index d135659ba212ba4452f1120b006bff0cceffa484..1d8ee8e9441c65f8ac11ea2a8e6206642bf3be63 100644
--- a/indra/newview/llmorphview.h
+++ b/indra/newview/llmorphview.h
@@ -32,7 +32,6 @@
 #include "llframetimer.h"
 
 class LLJoint;
-class LLFloaterCustomize;
 
 class LLMorphView : public LLView
 {
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 3d0f4cc1ed40528d8d96987522f24b2ba9dcee42..6658e1d7e89b6eefeae012e711ad50ed616a4b6d 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -39,7 +39,9 @@
 #include "llvoavatarself.h" // to check gAgentAvatarp->isSitting()
 #include "llbottomtray.h"
 #include "llbutton.h"
+#include "llfirstuse.h"
 #include "llfloaterreg.h"
+#include "llhints.h"
 #include "lljoystickbutton.h"
 #include "lluictrlfactory.h"
 #include "llviewerwindow.h"
@@ -161,6 +163,7 @@ void LLFloaterMove::setVisible(BOOL visible)
 
 	if (visible)
 	{
+		LLFirstUse::notMoving(false);
 		// Attach the Stand/Stop Flying panel.
 		LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance();
 		ssf_panel->reparent(this);
@@ -560,6 +563,11 @@ void LLPanelStandStopFlying::setStandStopFlyingMode(EStandStopFlyingMode mode)
 {
 	LLPanelStandStopFlying* panel = getInstance();
 
+	if (mode == SSFM_STAND)
+	{
+		LLFirstUse::sit();
+		LLFirstUse::notMoving(false);
+	}
 	panel->mStandButton->setVisible(SSFM_STAND == mode);
 	panel->mStopFlyingButton->setVisible(SSFM_STOP_FLYING == mode);
 
@@ -590,6 +598,7 @@ BOOL LLPanelStandStopFlying::postBuild()
 	mStandButton->setCommitCallback(boost::bind(&LLPanelStandStopFlying::onStandButtonClick, this));
 	mStandButton->setCommitCallback(boost::bind(&LLFloaterMove::enableInstance, TRUE));
 	mStandButton->setVisible(FALSE);
+	LLHints::registerHintTarget("stand_btn", mStandButton->getHandle());
 	
 	mStopFlyingButton = getChild<LLButton>("stop_fly_btn");
 	//mStopFlyingButton->setCommitCallback(boost::bind(&LLFloaterMove::setFlyingMode, FALSE));
@@ -688,7 +697,7 @@ void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view)
 LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel()
 {
 	LLPanelStandStopFlying* panel = new LLPanelStandStopFlying();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_stand_stop_flying.xml");
+	panel->buildFromFile("panel_stand_stop_flying.xml");
 
 	panel->setVisible(FALSE);
 	//LLUI::getRootView()->addChild(panel);
@@ -701,6 +710,8 @@ LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel()
 
 void LLPanelStandStopFlying::onStandButtonClick()
 {
+	LLFirstUse::sit(false);
+
 	LLSelectMgr::getInstance()->deselectAllForStandingUp();
 	gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
 
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index e7e60f544cdf0b5e9296ac02609824e7293cbdf1..6521ae3b1e8302228db6dbf2bcdfcea1dd18980c 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -253,7 +253,8 @@ void LLNameListCtrl::addNameItem(LLNameListCtrl::NameItem& item, EAddPosition po
 LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition pos, void* userdata)
 {
 	LLNameListCtrl::NameItem item_params;
-	LLParamSDParser::instance().readSD(element, item_params);
+	LLParamSDParser parser;
+	parser.readSD(element, item_params);
 	item_params.userdata = userdata;
 	return addNameItemRow(item_params, pos);
 }
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 18bba6e358c657091f06a286670a943e05680fc8..58849393b40ab5aca3f3cc5a39733def909426eb 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -272,7 +272,7 @@ LLNavigationBar::LLNavigationBar()
 	mPurgeTPHistoryItems(false),
 	mSaveToLocationHistory(false)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml");
+	buildFromFile( "panel_navigation_bar.xml");
 
 	// set a listener function for LoginComplete event
 	LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLNavigationBar::handleLoginComplete, this));
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index a8e4a759b7a3f1ac1a2e5ee4544c789c038e12bc..932ad75f298d43486d76b9c0d634b6d81c526c3d 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -32,6 +32,7 @@
 #include "llfloaterreg.h"
 #include "lltrans.h"
 
+#include "llfirstuse.h"
 #include "llnearbychatbar.h"
 #include "llbottomtray.h"
 #include "llagent.h"
@@ -391,8 +392,7 @@ LLCtrlListInterface* LLGestureComboList::getListInterface()
 }
 
 LLNearbyChatBar::LLNearbyChatBar() 
-	: LLPanel()
-	, mChatBox(NULL)
+:	mChatBox(NULL)
 {
 	mSpeakerMgr = LLLocalSpeakerMgr::getInstance();
 }
@@ -484,6 +484,7 @@ BOOL LLNearbyChatBar::matchChatTypeTrigger(const std::string& in_str, std::strin
 
 void LLNearbyChatBar::onChatBoxKeystroke(LLLineEditor* caller, void* userdata)
 {
+	LLFirstUse::otherAvatarChatFirst(false);
 
 	LLNearbyChatBar* self = (LLNearbyChatBar *)userdata;
 
@@ -873,14 +874,14 @@ class LLChatHandler : public LLCommandHandler
 		}
 		else
 		{
-			S32 channel = tokens[0].asInteger();
+		S32 channel = tokens[0].asInteger();
 			// VWR-19499 Restrict function to chat channels greater than 0.
 			if ((channel > 0) && (channel < 2147483647))
 			{
 				retval = true;
-				// Send unescaped message, see EXT-6353.
-				std::string unescaped_mesg (LLURI::unescape(tokens[1].asString()));
-				send_chat_from_viewer(unescaped_mesg, CHAT_TYPE_NORMAL, channel);
+		// Send unescaped message, see EXT-6353.
+		std::string unescaped_mesg (LLURI::unescape(tokens[1].asString()));
+		send_chat_from_viewer(unescaped_mesg, CHAT_TYPE_NORMAL, channel);
 			}
 			else
 			{
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index c80583cd0eb6d16d28d8ac34b6ea3ca9eb034090..47d32e57fbef76394c36831343effdd4e6b26760 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -31,7 +31,9 @@
 
 #include "llbottomtray.h"
 #include "llchatitemscontainerctrl.h"
+#include "llfirstuse.h"
 #include "llfloaterscriptdebug.h"
+#include "llhints.h"
 #include "llnearbychat.h"
 #include "llrecentpeople.h"
 
@@ -56,7 +58,13 @@ class LLNearbyChatScreenChannel: public LLScreenChannelBase
 {
 	LOG_CLASS(LLNearbyChatScreenChannel);
 public:
-	LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) { mStopProcessing = false;};
+	typedef std::vector<LLHandle<LLToast> > toast_vec_t;
+	typedef std::list<LLHandle<LLToast> > toast_list_t;
+
+	LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) 
+	{
+		mStopProcessing = false;
+	}
 
 	void addNotification	(LLSD& notification);
 	void arrangeToasts		();
@@ -76,15 +84,12 @@ class LLNearbyChatScreenChannel: public LLScreenChannelBase
 	}
 
 	// hide all toasts from screen, but not remove them from a channel
-	virtual void		hideToastsFromScreen() 
-	{
-	};
 	// removes all toasts from a channel
 	virtual void		removeToastsFromChannel() 
 	{
-		for(std::vector<LLToast*>::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
+		for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
 		{
-			addToToastPool((*it));
+			addToToastPool(it->get());
 		}
 		m_active_toasts.clear();
 	};
@@ -101,11 +106,12 @@ class LLNearbyChatScreenChannel: public LLScreenChannelBase
 	void	deactivateToast(LLToast* toast);
 	void	addToToastPool(LLToast* toast)
 	{
+		if (!toast) return;
 		LL_DEBUGS("NearbyChat") << "Pooling toast" << llendl;
 		toast->setVisible(FALSE);
 		toast->stopTimer();
 		toast->setIsHidden(true);
-		m_toast_pool.push_back(toast);
+		m_toast_pool.push_back(toast->getHandle());
 	}
 
 	void	createOverflowToast(S32 bottom, F32 timer);
@@ -114,8 +120,8 @@ class LLNearbyChatScreenChannel: public LLScreenChannelBase
 
 	bool	createPoolToast();
 	
-	std::vector<LLToast*> m_active_toasts;
-	std::list<LLToast*> m_toast_pool;
+	toast_vec_t m_active_toasts;
+	toast_list_t m_toast_pool;
 
 	bool	mStopProcessing;
 };
@@ -148,7 +154,7 @@ class LLNearbyChatToast : public LLToast
 
 void LLNearbyChatScreenChannel::deactivateToast(LLToast* toast)
 {
-	std::vector<LLToast*>::iterator pos = std::find(m_active_toasts.begin(), m_active_toasts.end(), toast);
+	toast_vec_t::iterator pos = std::find(m_active_toasts.begin(), m_active_toasts.end(), toast->getHandle());
 
 	if (pos == m_active_toasts.end())
 	{
@@ -173,8 +179,8 @@ void LLNearbyChatScreenChannel::onToastDestroyed(LLToast* toast, bool app_quitti
 	{
 		// Viewer is quitting.
 		// Immediately stop processing chat messages (EXT-1419).
-		mStopProcessing = true;
-	}
+	mStopProcessing = true;
+}
 	else
 	{
 		// The toast is being closed by user (STORM-192).
@@ -185,7 +191,7 @@ void LLNearbyChatScreenChannel::onToastDestroyed(LLToast* toast, bool app_quitti
 }
 
 void LLNearbyChatScreenChannel::onToastFade(LLToast* toast)
-{
+{	
 	LL_DEBUGS("NearbyChat") << "Toast fading" << llendl;
 
 	//fade mean we put toast to toast pool
@@ -215,9 +221,9 @@ bool	LLNearbyChatScreenChannel::createPoolToast()
 	
 	
 	toast->setOnFadeCallback(boost::bind(&LLNearbyChatScreenChannel::onToastFade, this, _1));
-	
-	LL_DEBUGS("NearbyChat") << "Creating and pooling toast" << llendl;
-	m_toast_pool.push_back(toast);
+
+	LL_DEBUGS("NearbyChat") << "Creating and pooling toast" << llendl;	
+	m_toast_pool.push_back(toast->getHandle());
 	return true;
 }
 
@@ -235,17 +241,20 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
 	{
 		LLUUID fromID = notification["from_id"].asUUID();		// agent id or object id
 		std::string from = notification["from"].asString();
-		LLToast* toast = m_active_toasts[0];
-		LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel());
-
-		if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText())
+		LLToast* toast = m_active_toasts[0].get();
+		if (toast)
 		{
-			panel->addMessage(notification);
-			toast->reshapeToPanel();
-			toast->resetTimer();
-	
-			arrangeToasts();
-			return;
+			LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel());
+  
+			if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText())
+			{
+				panel->addMessage(notification);
+				toast->reshapeToPanel();
+				toast->resetTimer();
+	  
+				arrangeToasts();
+				return;
+			}
 		}
 	}
 	
@@ -275,7 +284,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
 	//take 1st element from pool, (re)initialize it, put it in active toasts
 
 	LL_DEBUGS("NearbyChat") << "Getting toast from pool" << llendl;
-	LLToast* toast = m_toast_pool.back();
+	LLToast* toast = m_toast_pool.back().get();
 
 	m_toast_pool.pop_back();
 
@@ -288,25 +297,36 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
 	toast->reshapeToPanel();
 	toast->resetTimer();
 	
-	m_active_toasts.push_back(toast);
+	m_active_toasts.push_back(toast->getHandle());
 
 	arrangeToasts();
 }
 
 void LLNearbyChatScreenChannel::arrangeToasts()
 {
-	if(m_active_toasts.size() == 0 || isHovering())
-		return;
-
-	hideToastsFromScreen();
+	if(!isHovering())
+	{
+		showToastsBottom();
+	}
 
-	showToastsBottom();
+	if (m_active_toasts.empty())
+	{
+		LLHints::registerHintTarget("incoming_chat", LLHandle<LLView>());
+	}
+	else
+	{
+		LLToast* toast = m_active_toasts.front().get();
+		if (toast)
+		{
+			LLHints::registerHintTarget("incoming_chat", m_active_toasts.front().get()->LLView::getHandle());
+		}
+	}
 }
 
-int sort_toasts_predicate(LLToast* first,LLToast* second)
+int sort_toasts_predicate(LLHandle<LLToast> first, LLHandle<LLToast> second)
 {
-	F32 v1 = first->getTimer()->getEventTimer().getElapsedTimeF32();
-	F32 v2 = second->getTimer()->getEventTimer().getElapsedTimeF32();
+	F32 v1 = first.get()->getTimer()->getEventTimer().getElapsedTimeF32();
+	F32 v2 = second.get()->getTimer()->getEventTimer().getElapsedTimeF32();
 	return v1 < v2;
 }
 
@@ -324,20 +344,22 @@ void LLNearbyChatScreenChannel::showToastsBottom()
 
 	//calc max visible item and hide other toasts.
 
-	for(std::vector<LLToast*>::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
+	for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
 	{
-		S32 toast_top = bottom + (*it)->getRect().getHeight() + margin;
+		LLToast* toast = it->get();
+		if (!toast) continue;
+
+		S32 toast_top = bottom + toast->getRect().getHeight() + margin;
 
 		if(toast_top > gFloaterView->getRect().getHeight())
 		{
 			while(it!=m_active_toasts.end())
 			{
-				addToToastPool((*it));
+				addToToastPool(it->get());
 				it=m_active_toasts.erase(it);
 			}
 			break;
 		}
-		LLToast* toast = (*it);
 
 		toast_rect = toast->getRect();
 		toast_rect.setLeftTopAndSize(getRect().mLeft , bottom + toast_rect.getHeight(), toast_rect.getWidth() ,toast_rect.getHeight());
@@ -348,14 +370,17 @@ void LLNearbyChatScreenChannel::showToastsBottom()
 	
 	// use reverse order to provide correct z-order and avoid toast blinking
 	
-	for(std::vector<LLToast*>::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it)
+	for(toast_vec_t::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it)
+	{
+		LLToast* toast = it->get();
+		if (toast)
 	{
-		LLToast* toast = (*it);
 		toast->setIsHidden(false);
 		toast->setVisible(TRUE);
+		}
+	}
 
 	}
-}
 
 void LLNearbyChatScreenChannel::reshape			(S32 width, S32 height, BOOL called_from_parent)
 {
@@ -400,8 +425,6 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
 {
 	if(chat_msg.mMuted == TRUE)
 		return;
-	if(chat_msg.mSourceType == CHAT_SOURCE_AGENT && chat_msg.mFromID.notNull())
-         LLRecentPeople::instance().add(chat_msg.mFromID);
 
 	if(chat_msg.mText.empty())
 		return;//don't process empty messages
@@ -505,6 +528,12 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
 		channel->addNotification(notification);	
 	}
 	
+	if(chat_msg.mSourceType == CHAT_SOURCE_AGENT 
+		&& chat_msg.mFromID.notNull() 
+		&& chat_msg.mFromID != gAgentID)
+	{
+ 		LLFirstUse::otherAvatarChatFirst();
+	}
 }
 
 void LLNearbyChatHandler::onDeleteToast(LLToast* toast)
diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp
index dcbf6b64ce295ef9d454162acac1c9677a533210..9d824dcd592f3cd5e5433a7fd1883217491c7384 100644
--- a/indra/newview/llnotificationalerthandler.cpp
+++ b/indra/newview/llnotificationalerthandler.cpp
@@ -133,7 +133,7 @@ bool LLAlertHandler::processNotification(const LLSD& notify)
 		if(channel)
 			channel->killToastByNotificationID(notification->getID());
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp
index 9933a8a49c88876421bec2bc7c5b72f2da32c26e..9b7fdaef82b0a08f76092edd13e4e2719bfdcb9d 100644
--- a/indra/newview/llnotificationgrouphandler.cpp
+++ b/indra/newview/llnotificationgrouphandler.cpp
@@ -104,7 +104,7 @@ bool LLGroupHandler::processNotification(const LLSD& notify)
 	{
 		mChannel->killToastByNotificationID(notification->getID());
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 060eccf5c7a1666b31704fb6db23b3af3cfb0163..28a69f2373605ebdfd41407c5928348f74391361 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -263,6 +263,29 @@ class LLOfferHandler : public LLSysHandler
 	void onRejectToast(LLUUID& id);
 };
 
+/**
+ * Handler for UI hints.
+ */
+class LLHintHandler : public LLSingleton<LLHintHandler>
+{
+public:
+	LLHintHandler();
+	virtual ~LLHintHandler();
+
+	// base interface functions
+	virtual bool processNotification(const LLSD& notify);
+};
+
+/**
+ * Handler for browser notifications
+ */
+class LLBrowserNotification : public LLSingleton<LLBrowserNotification>
+{
+public:
+	virtual bool processNotification(const LLSD& notify);
+	
+};
+
 class LLHandlerUtil
 {
 public:
diff --git a/indra/newview/llnotificationhinthandler.cpp b/indra/newview/llnotificationhinthandler.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f7163cb04ff769d2c8a8a77be3b7dfcf1d6ae845
--- /dev/null
+++ b/indra/newview/llnotificationhinthandler.cpp
@@ -0,0 +1,58 @@
+/**
+ * @file llnotificationhinthandler.cpp
+ * @brief Notification Handler Class for UI Hints
+ *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h" // must be first include
+
+#include "llnotificationhandler.h"
+#include "llhints.h"
+#include "llnotifications.h"
+
+using namespace LLNotificationsUI;
+
+LLHintHandler::LLHintHandler()
+{
+}
+
+LLHintHandler::~LLHintHandler()
+{
+}
+
+bool LLHintHandler::processNotification(const LLSD& notify)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
+
+	std::string sigtype = notify["sigtype"].asString();
+	if (sigtype == "add" || sigtype == "load")
+	{
+		LLHints::show(notification);
+	}
+	else if (sigtype == "delete")
+	{
+		LLHints::hide(notification);
+	}
+	return false;
+}
diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
index 3bbf6cea16cb2c906726ade6f4d291fe331df784..69882271282d6a6c295d1f837f00352443b296ff 100644
--- a/indra/newview/llnotificationmanager.cpp
+++ b/indra/newview/llnotificationmanager.cpp
@@ -60,6 +60,8 @@ void LLNotificationManager::init()
 	LLNotificationChannel::buildChannel("AlertModal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal"));
 	LLNotificationChannel::buildChannel("IM Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notifytoast"));
 	LLNotificationChannel::buildChannel("Offer", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "offer"));
+	LLNotificationChannel::buildChannel("Hints", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "hint"));
+	LLNotificationChannel::buildChannel("Browser", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "browser"));
   
 	LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
@@ -68,6 +70,8 @@ void LLNotificationManager::init()
 	LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
 	LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1));
+	LLNotifications::instance().getChannel("Hints")->connectChanged(boost::bind(&LLHintHandler::processNotification, LLHintHandler::getInstance(), _1));
+	LLNotifications::instance().getChannel("Browser")->connectChanged(boost::bind(&LLBrowserNotification::processNotification, LLBrowserNotification::getInstance(), _1));
 
 	mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD()));
 	mNotifyHandlers["notifytip"] =  boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD()));
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
index 85f95bd0c718ef0a2f395e6df1ca24d4e9210bed..68fd65be0f9265eaa0bbcda5123ec552239b1c8b 100644
--- a/indra/newview/llnotificationofferhandler.cpp
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -179,7 +179,7 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
 		}
 	}
 
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index b4d28bb346ac531aaca75e5102e3266f83f7e6f6..45590c3cdba6b1794e97dc73fa45039b0bee7e83 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -130,7 +130,7 @@ bool LLScriptHandler::processNotification(const LLSD& notify)
 			mChannel->killToastByNotificationID(notification->getID());
 		}
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp
index 94612975a2615e2849f9f60ed042c7e822f4d748..02b217fc9430736d143477bac3c537d4d52e7195 100644
--- a/indra/newview/llnotificationtiphandler.cpp
+++ b/indra/newview/llnotificationtiphandler.cpp
@@ -96,7 +96,7 @@ bool LLTipHandler::processNotification(const LLSD& notify)
 					LLNearbyChat>("nearby_chat", LLSD());
 			if (nearby_chat->getVisible())
 			{
-				return true;
+				return false;
 			}
 		}
 
@@ -121,7 +121,7 @@ bool LLTipHandler::processNotification(const LLSD& notify)
 		// don't spawn toast for inventory accepted/declined offers if respective IM window is open (EXT-5909)
 		if (!LLHandlerUtil::canSpawnToast(notification))
 		{
-			return true;
+			return false;
 		}
 
 		LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification);
@@ -144,7 +144,7 @@ bool LLTipHandler::processNotification(const LLSD& notify)
 	{
 		mChannel->killToastByNotificationID(notification->getID());
 	}
-	return true;
+	return false;
 }
 
 //--------------------------------------------------------------------------
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index c0f7fa4abfb04f68d9049ef7ed6eca3216e47a82..db9d386b6b61934d6b247bf08add622055ab306f 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -63,6 +63,39 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL
 	return name1 < name2;
 }
 
+struct outfit_accordion_tab_params : public LLInitParam::Block<outfit_accordion_tab_params, LLAccordionCtrlTab::Params>
+{
+	Mandatory<LLWearableItemsList::Params> wearable_list;
+
+	outfit_accordion_tab_params()
+	:	wearable_list("wearable_items_list")
+	{}
+};
+
+const outfit_accordion_tab_params& get_accordion_tab_params()
+{
+	static outfit_accordion_tab_params tab_params;
+	static bool initialized = false;
+	if (!initialized)
+	{
+		initialized = true;
+
+		LLXMLNodePtr xmlNode;
+		if (LLUICtrlFactory::getLayeredXMLNode("outfit_accordion_tab.xml", xmlNode))
+		{
+			LLXUIParser parser;
+			parser.readXUI(xmlNode, tab_params, "outfit_accordion_tab.xml");
+		}
+		else
+		{
+			llwarns << "Failed to read xml of Outfit's Accordion Tab from outfit_accordion_tab.xml" << llendl;
+		}
+	}
+
+	return tab_params;
+}
+
+
 //////////////////////////////////////////////////////////////////////////
 
 class LLOutfitListGearMenu
@@ -156,12 +189,12 @@ class LLOutfitListGearMenu
 	void onTakeOff()
 	{
 		// Take off selected outfit.
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.notNull())
-		{
-			LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id);
+			const LLUUID& selected_outfit_id = getSelectedOutfitID();
+			if (selected_outfit_id.notNull())
+			{
+				LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id);
+			}
 		}
-	}
 
 	void onRename()
 	{
@@ -435,9 +468,12 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 
 		std::string name = cat->getName();
 
-		static LLXMLNodePtr accordionXmlNode = getAccordionTabXMLNode();
-		LLAccordionCtrlTab* tab = LLUICtrlFactory::defaultBuilder<LLAccordionCtrlTab>(accordionXmlNode, NULL, NULL);
+		outfit_accordion_tab_params tab_params(get_accordion_tab_params());
+		LLAccordionCtrlTab* tab = LLUICtrlFactory::create<LLAccordionCtrlTab>(tab_params);
 		if (!tab) continue;
+		LLWearableItemsList* wearable_list = LLUICtrlFactory::create<LLWearableItemsList>(tab_params.wearable_list);
+		wearable_list->setShape(tab->getLocalRect());
+		tab->addChild(wearable_list);
 
 		tab->setName(name);
 		tab->setTitle(name);
@@ -454,7 +490,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 			mAccordion->removeCollapsibleCtrl(tab);
 
 			// kill removed tab
-			tab->die();
+				tab->die();
 			continue;
 		}
 
@@ -727,19 +763,6 @@ bool LLOutfitsList::hasItemSelected()
 //////////////////////////////////////////////////////////////////////////
 // Private methods
 //////////////////////////////////////////////////////////////////////////
-LLXMLNodePtr LLOutfitsList::getAccordionTabXMLNode()
-{
-	LLXMLNodePtr xmlNode = NULL;
-	bool success = LLUICtrlFactory::getLayeredXMLNode("outfit_accordion_tab.xml", xmlNode);
-	if (!success)
-	{
-		llwarns << "Failed to read xml of Outfit's Accordion Tab from outfit_accordion_tab.xml" << llendl;
-		return NULL;
-	}
-
-	return xmlNode;
-}
-
 void LLOutfitsList::computeDifference(
 	const LLInventoryModel::cat_array_t& vcats, 
 	uuid_vec_t& vadded, 
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index faf6f7ce1e34c9b6d457758ce7665feec9a6d6c2..f73ae5bef2a85dbd73c00a87bfe24a7fd7f254e5 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -111,12 +111,6 @@ class LLOutfitsList : public LLPanelAppearanceTab
 	bool hasItemSelected();
 
 private:
-	/**
-	 * Reads xml with accordion tab and Flat list from xml file.
-	 *
-	 * @return LLPointer to XMLNode with accordion tab and flat list.
-	 */
-	LLXMLNodePtr getAccordionTabXMLNode();
 
 	/**
 	 * Wrapper for LLCommonUtils::computeDifference. @see LLCommonUtils::computeDifference
diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp
index d174b8da96108d2ca92a767e7df38c9d0b71ec6e..77d67c7b094ae384784b42573a4a2ac7d38bf4a9 100644
--- a/indra/newview/llpanelavatartag.cpp
+++ b/indra/newview/llpanelavatartag.cpp
@@ -37,7 +37,7 @@ LLPanelAvatarTag::LLPanelAvatarTag(const LLUUID& key, const std::string im_time)
 	, mAvatarId(LLUUID::null)
 //	, mFadeTimer()
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_tag.xml");
+	buildFromFile( "panel_avatar_tag.xml");
 	setLeftButtonClickCallback(boost::bind(&LLPanelAvatarTag::onClick, this));
 	setAvatarId(key);
 	setTime(im_time);
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index bf7214eb3b970fa882dea4fe383e5f2bee9aeeb9..6889b98ab1778e46ef334cb8f6d81b026c5df9c7 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -138,7 +138,7 @@ LLPanelClassifiedInfo::~LLPanelClassifiedInfo()
 LLPanelClassifiedInfo* LLPanelClassifiedInfo::create()
 {
 	LLPanelClassifiedInfo* panel = new LLPanelClassifiedInfo();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_classified_info.xml");
+	panel->buildFromFile("panel_classified_info.xml");
 	return panel;
 }
 
@@ -611,7 +611,7 @@ LLPanelClassifiedEdit::~LLPanelClassifiedEdit()
 LLPanelClassifiedEdit* LLPanelClassifiedEdit::create()
 {
 	LLPanelClassifiedEdit* panel = new LLPanelClassifiedEdit();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_edit_classified.xml");
+	panel->buildFromFile("panel_edit_classified.xml");
 	return panel;
 }
 
diff --git a/indra/newview/llpanelgenerictip.cpp b/indra/newview/llpanelgenerictip.cpp
index 2660814afc8d6719b3b5fcf96ccabe9536520190..4ccdaa78f3e674153a19a8b1dc810204af47d452 100644
--- a/indra/newview/llpanelgenerictip.cpp
+++ b/indra/newview/llpanelgenerictip.cpp
@@ -36,7 +36,7 @@ LLPanelGenericTip::LLPanelGenericTip(
 		const LLNotificationPtr& notification) :
 		LLPanelTipToast(notification)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_generic_tip.xml");
+	buildFromFile( "panel_generic_tip.xml");
 
 	getChild<LLUICtrl>("message")->setValue(notification->getMessage());
 
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/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 840b98213d66bb841a2a2cd29bfc46708dfe31b4..3a31d99598b26bc2caacb8827047748c1d9c75d9 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -740,7 +740,7 @@ void LLPanelGroupGeneral::updateMembers()
 		sSDTime += sd_timer.getElapsedTimeF32();
 
 		element_timer.reset();
-		LLScrollListItem* member_row = mListVisibleMembers->addElement(row);//, ADD_SORTED);
+		LLScrollListItem* member_row = mListVisibleMembers->addElement(row);
 		
 		if ( member->isOwner() )
 		{
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
index 535b2a9e2dea703af2e06e2a9cf7d15483a56649..b26bcc854cf216c8f5ff3cd783edf28556fa68ac 100644
--- a/indra/newview/llpanelgroupinvite.cpp
+++ b/indra/newview/llpanelgroupinvite.cpp
@@ -369,7 +369,7 @@ LLPanelGroupInvite::LLPanelGroupInvite(const LLUUID& group_id)
 	  mPendingUpdate(FALSE)
 {
 	// Pass on construction of this panel to the control factory.
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_invite.xml");
+	buildFromFile( "panel_group_invite.xml");
 }
 
 LLPanelGroupInvite::~LLPanelGroupInvite()
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index d4736d22ae6dce6918c6a76e6e839b3078f627a4..8d8d9bc1c4452247dec00b9e3dcae314beff3a7a 100644
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -522,7 +522,7 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
 			row["columns"][4]["column"] = "hidden";
 			row["columns"][4]["value"] = hidden;
 			
-			mGroupParcelsp->addElement(row, ADD_SORTED);
+			mGroupParcelsp->addElement(row);
 		}
 	}
 }
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 579a271ce818ebee8ed51c220d14d1f35a753cd8..639364ff8de0dc37c0ceebb65f2a34094b8cbe28 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -1625,7 +1625,7 @@ void LLPanelGroupMembersSubTab::updateMembers()
 			row["columns"][2]["value"] = mMemberProgress->second->getOnlineStatus();
 			row["columns"][2]["font"] = "SANSSERIF_SMALL";
 
-			LLScrollListItem* member = mMembersList->addElement(row);//, ADD_SORTED);
+			LLScrollListItem* member = mMembersList->addElement(row);
 
 			LLUUID id = member->getUUID();
 			mHasMatch = TRUE;
diff --git a/indra/newview/llpanelhome.cpp b/indra/newview/llpanelhome.cpp
index 93c4e0c9c7db8d5b184a8a6321158605e9d11010..b03bab31272a8cd5dfca70e90f21b8fd79c03a4e 100644
--- a/indra/newview/llpanelhome.cpp
+++ b/indra/newview/llpanelhome.cpp
@@ -61,7 +61,6 @@ BOOL LLPanelHome::postBuild()
 		std::string url = LLViewerHome::getHomeURL();
 
 		mBrowser->addObserver(this);
-		mBrowser->setTrusted(true);
 		mBrowser->setHomePageUrl(url);
 	}
 
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 24bf67a000a19ba1b679ac1c0a31f98e3c1fbdc5..c4a484d368b413b328805c90666a7fa4da389592 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -197,7 +197,7 @@ LLLandmarksPanel::LLLandmarksPanel()
 	mInventoryObserver = new LLLandmarksPanelObserver(this);
 	gInventory.addObserver(mInventoryObserver);
 
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_landmarks.xml");
+	buildFromFile( "panel_landmarks.xml");
 }
 
 LLLandmarksPanel::~LLLandmarksPanel()
@@ -1013,9 +1013,9 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
 
 			// Disable "Show on Map" if landmark loading is in progress.
 			return !gLandmarkList.isAssetInLoadedCallbackMap(asset_uuid);
-		}
-		else if ("rename" == command_name)
-		{
+	}
+	else if ("rename" == command_name)
+	{
 			LLFolderViewItem* selected_item = getCurSelectedItem();
 			if (!selected_item) return false;
 
@@ -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/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index be1afbd8d70aa473f0a80fe5bbc148e0ed08a3ad..7c93d8a1f9ca3d1b075ee92a5cc2c0b3beec9d68 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -187,7 +187,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	// Logo
 	mLogoImage = LLUI::getUIImage("startup_logo");
 
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_login.xml");
+	buildFromFile( "panel_login.xml");
 	
 #if USE_VIEWER_AUTH
 	//leave room for the login menu bar
@@ -257,13 +257,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	// Clear the browser's cache to avoid any potential for the cache messing up the login screen.
 	web_browser->clearCache();
 
-	// Need to handle login secondlife:///app/ URLs
-	web_browser->setTrusted( true );
-
-	// don't make it a tab stop until SL-27594 is fixed
-	web_browser->setTabStop(FALSE);
-	// web_browser->navigateToLocalPage( "loading", "loading.html" );
-
 	reshapeBrowser();
 
 	// kick off a request to grab the url manually
@@ -1104,9 +1097,10 @@ void LLPanelLogin::updateServerCombo()
 	{
 		if (!grid_choice->first.empty())
 		{
-			server_choice_combo->add(grid_choice->second, grid_choice->first, ADD_SORTED);
+			server_choice_combo->add(grid_choice->second, grid_choice->first);
 		}
 	}
+	server_choice_combo->sortByName();
 	
 	server_choice_combo->addSeparator(ADD_TOP);
 	
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 27e054af349934b40c28ba0285bbf7c1669000f8..5b07e4863bb939c736057b2f6c9e6f7f950bff3a 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -642,7 +642,7 @@ LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* invento
 	mPanelMainInventory(inventory_view),
 	mFilter(inventory_view->getPanel()->getFilter())
 {
-	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL);
+	buildFromFile("floater_inventory_view_finder.xml");
 	updateElementsFromFilter();
 }
 
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index fb31206870985872c4df3d7562e78d8330572ae7..cf2cc14531fe5ef27cab9f3d434732d014687245 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -41,6 +41,7 @@ class LLFilterEditor;
 class LLTabContainer;
 class LLFloaterInventoryFinder;
 class LLMenuGL;
+class LLFloater;
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 // Class LLPanelMainInventory
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 5cd4cea96d7bfbeb111ba20697c5d2494b7e0a12..36a3aae15fbcaca4b0eb222552e4b2159b2c2a28 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -162,7 +162,7 @@ void LLPanelMe::onCancelClicked()
 LLPanelMyProfileEdit::LLPanelMyProfileEdit() 
  : LLPanelMyProfile()
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_edit_profile.xml");
+	buildFromFile( "panel_edit_profile.xml");
 
 	setAvatarId(gAgent.getID());
 }
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 92c8365a7089d6d6c240ce4757b20b17437c0d34..2856ea9db1f20c1b0e3e39cf33410a59aaa76dea 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -74,7 +74,7 @@ LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() :
 	mMediaEditable(false)
 {
 	// build dialog from XML
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_general.xml");
+	buildFromFile( "panel_media_settings_general.xml");
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp
index 339376cbf6a5c7b947a7b209b4bb8c11a8a56696..5378886b56613941294369937c5fbaf526eefc2c 100644
--- a/indra/newview/llpanelmediasettingspermissions.cpp
+++ b/indra/newview/llpanelmediasettingspermissions.cpp
@@ -59,7 +59,7 @@ LLPanelMediaSettingsPermissions::LLPanelMediaSettingsPermissions() :
     mPermsWorldControl( 0 )
 {
     // build dialog from XML
-    LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_permissions.xml");
+    buildFromFile( "panel_media_settings_permissions.xml");
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp
index a0d4c2f761a601432b14f3de14f28d52f4858c15..b588e8f9306faf58dfdd5f1951808ba4801398e0 100644
--- a/indra/newview/llpanelmediasettingssecurity.cpp
+++ b/indra/newview/llpanelmediasettingssecurity.cpp
@@ -53,7 +53,7 @@ LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() :
 	mCommitCallbackRegistrar.add("Media.whitelistDelete",	boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this));	
 
 	// build dialog from XML
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml");
+	buildFromFile( "panel_media_settings_security.xml");
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp
index 811d70ade318276afddb2e5a3af2e6173d658bbf..fcc67d68407a1bc157407437515188b15635fd7e 100644
--- a/indra/newview/llpanelnearbymedia.cpp
+++ b/indra/newview/llpanelnearbymedia.cpp
@@ -96,7 +96,7 @@ LLPanelNearByMedia::LLPanelNearByMedia()
 	mCommitCallbackRegistrar.add("SelectedMediaCtrl.Zoom",		boost::bind(&LLPanelNearByMedia::onClickSelectedMediaZoom, this));
 	mCommitCallbackRegistrar.add("SelectedMediaCtrl.Unzoom",	boost::bind(&LLPanelNearByMedia::onClickSelectedMediaUnzoom, this));
 	
-	LLUICtrlFactory::instance().buildPanel(this, "panel_nearby_media.xml");
+	buildFromFile( "panel_nearby_media.xml");
 }
 
 LLPanelNearByMedia::~LLPanelNearByMedia()
diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp
index 2f1300e0f2a4c9740617978f8c5da072627fa5e1..8202dfe9a316a5bbfd260b9511afcfcb8a3c3441 100644
--- a/indra/newview/llpanelonlinestatus.cpp
+++ b/indra/newview/llpanelonlinestatus.cpp
@@ -35,7 +35,7 @@ LLPanelOnlineStatus::LLPanelOnlineStatus(
 	LLPanelTipToast(notification)
 {
 
-	LLUICtrlFactory::getInstance()->buildPanel(this,
+	buildFromFile(
 			"panel_online_status_toast.xml");
 
 
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 54b0805a6c05f9b5bcc28d0bd0d4b123f523a21a..494db01f7742ee9a1fc692e3e82643f9fc2fd8e5 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -485,7 +485,7 @@ BOOL LLPanelOutfitEdit::postBuild()
 
 	setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2));
 
-	mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
+	mCOFWearables = findChild<LLCOFWearables>("cof_wearables_list");
 	mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
 
 	mCOFWearables->getCOFCallbacks().mAddWearable = boost::bind(&LLPanelOutfitEdit::onAddWearableClicked, this);
@@ -912,7 +912,7 @@ void LLPanelOutfitEdit::onRemoveFromOutfitClicked(void)
 {
 	LLUUID id_to_remove = mCOFWearables->getSelectedUUID();
 	LLWearableType::EType type = getWearableTypeByItemUUID(id_to_remove);
-
+	
 	LLAppearanceMgr::getInstance()->removeItemFromAvatar(id_to_remove);
 
 	if (!mCOFWearables->getSelectedItem())
@@ -1031,7 +1031,7 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void)
 			LLUUID selected_item_id = mWearableItemsList->getSelectedUUID();
 			LLViewerInventoryItem* item = gInventory.getLinkedItem(selected_item_id);
 			if(item)
-			{
+		{
 				showFilteredWearablesListView(item->getWearableType());
 				return;
 			}
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index c6a7bd88a0421547363e52c3b972eaa2eba6189e..d6d8a38ebef146495a1528e089cf500b5a280e36 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -217,15 +217,6 @@ void LLPanelOutfitsInventory::onSave()
 	//payload["ids"].append(*it);
 	
 	LLNotificationsUtil::add("SaveOutfitAs", args, payload, boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1, _2));
-
-	//)
-	
-/*
-	LLOutfitSaveAsDialog* save_as_dialog = LLFloaterReg::showTypedInstance<LLOutfitSaveAsDialog>("outfit_save_as", LLSD(outfit_name), TRUE);
-	if (save_as_dialog)
-	{
-		save_as_dialog->setSaveAsCommit(boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1 ));
-	}*/
 }
 
 //static
@@ -302,10 +293,10 @@ bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
 
 void LLPanelOutfitsInventory::initTabPanels()
 {
-	mCurrentOutfitPanel = getChild<LLPanelWearing>(COF_TAB_NAME);
+	mCurrentOutfitPanel = findChild<LLPanelWearing>(COF_TAB_NAME);
 	mCurrentOutfitPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
 
-	mMyOutfitsPanel = getChild<LLOutfitsList>(OUTFITS_TAB_NAME);
+	mMyOutfitsPanel = findChild<LLOutfitsList>(OUTFITS_TAB_NAME);
 	mMyOutfitsPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
 
 	mAppearanceTabs = getChild<LLTabContainer>("appearance_tabs");
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index 7615a93a49421f6a131aed3c58190ab11df90c59..271728220cc7544a9c215bdfad04f68f979064aa 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -74,7 +74,7 @@
 LLPanelPickInfo* LLPanelPickInfo::create()
 {
 	LLPanelPickInfo* panel = new LLPanelPickInfo();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_PICK_INFO);
+	panel->buildFromFile(XML_PANEL_PICK_INFO);
 	return panel;
 }
 
@@ -344,7 +344,7 @@ void LLPanelPickInfo::onClickBack()
 LLPanelPickEdit* LLPanelPickEdit::create()
 {
 	LLPanelPickEdit* panel = new LLPanelPickEdit();
-	LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_EDIT_PICK);
+	panel->buildFromFile(XML_PANEL_EDIT_PICK);
 	return panel;
 }
 
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index a5c3c9faefc00dc61fc81d08f05f3038b7952c42..27787ac211a87d0457bf061fc6bf04cfebac0a93 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -1039,7 +1039,7 @@ LLPickItem::LLPickItem()
 , mSnapshotID(LLUUID::null)
 , mNeedData(true)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_pick_list_item.xml");
+	buildFromFile("panel_pick_list_item.xml");
 }
 
 LLPickItem::~LLPickItem()
@@ -1169,7 +1169,7 @@ LLClassifiedItem::LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classi
  , mAvatarId(avatar_id)
  , mClassifiedId(classified_id)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_classifieds_list_item.xml");
+	buildFromFile("panel_classifieds_list_item.xml");
 
 	LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this);
 	LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId());
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 5aed1e55e377889ab4d1ac7d1ef5d827359b5a43..f0e60386b6d92dfea17602e4bb8911c53f0c9a59 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -37,6 +37,7 @@
 
 #include "llcombobox.h"
 #include "llfiltereditor.h"
+#include "llfirstuse.h"
 #include "llfloaterreg.h"
 #include "llnotificationsutil.h"
 #include "lltabcontainer.h"
@@ -246,7 +247,7 @@ LLPanelPlaces::LLPanelPlaces()
 	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
 			boost::bind(&LLPanelPlaces::updateVerbs, this));
 
-	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+	//buildFromFile( "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 }
 
 LLPanelPlaces::~LLPanelPlaces()
@@ -321,8 +322,8 @@ BOOL LLPanelPlaces::postBuild()
 		mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false));
 	}
 
-	mPlaceProfile = getChild<LLPanelPlaceProfile>("panel_place_profile");
-	mLandmarkInfo = getChild<LLPanelLandmarkInfo>("panel_landmark_info");
+	mPlaceProfile = findChild<LLPanelPlaceProfile>("panel_place_profile");
+	mLandmarkInfo = findChild<LLPanelLandmarkInfo>("panel_landmark_info");
 	if (!mPlaceProfile || !mLandmarkInfo)
 		return FALSE;
 
@@ -346,6 +347,8 @@ BOOL LLPanelPlaces::postBuild()
 
 void LLPanelPlaces::onOpen(const LLSD& key)
 {
+	LLFirstUse::notUsingDestinationGuide(false);
+
 	if (!mPlaceProfile || !mLandmarkInfo)
 		return;
 
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index f198a411a3dd4a220eadb03bf663ff81a81806fa..b04971f9803036c7c2c47f15e3e120b390181d4b 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -114,7 +114,7 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
 	mCommitCallbackRegistrar.add("MediaCtrl.SkipBack",		boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this));
 	mCommitCallbackRegistrar.add("MediaCtrl.SkipForward",	boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this));
 	
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_prim_media_controls.xml");
+	buildFromFile( "panel_prim_media_controls.xml");
 	mInactivityTimer.reset();
 	mFadeTimer.stop();
 	mCurrentZoom = ZOOM_NONE;
@@ -1173,7 +1173,7 @@ void LLPanelPrimMediaControls::setCurrentURL()
 //	if (media_address_combo && mCurrentURL != "about:blank")
 //	{
 //		media_address_combo->remove(mCurrentURL);
-//		media_address_combo->add(mCurrentURL, ADD_SORTED);
+//		media_address_combo->add(mCurrentURL);
 //		media_address_combo->selectByValue(mCurrentURL);
 //	}
 #else   // USE_COMBO_BOX_FOR_MEDIA_URL
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 65b9e76a4e967dedc2efa695c0adb5a37208b636..4e6356397923769e39c426081cf770af2cf11f06 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -127,11 +127,11 @@ BOOL LLPanelProfile::postBuild()
 
 	getTabCtrl()->setCommitCallback(boost::bind(&LLPanelProfile::onTabSelected, this, _2));
 
-	LLPanelPicks* panel_picks = getChild<LLPanelPicks>(PANEL_PICKS);
+	LLPanelPicks* panel_picks = findChild<LLPanelPicks>(PANEL_PICKS);
 	panel_picks->setProfilePanel(this);
 
 	getTabContainer()[PANEL_PICKS] = panel_picks;
-	getTabContainer()[PANEL_PROFILE] = getChild<LLPanelAvatarProfile>(PANEL_PROFILE);
+	getTabContainer()[PANEL_PROFILE] = findChild<LLPanelAvatarProfile>(PANEL_PROFILE);
 
 	return TRUE;
 }
diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp
index c0f504fef66bf0be674c7eb5ec7205d73b25e7e1..dba047660da33d012a378fcb3d1aff68adf5ccf3 100644
--- a/indra/newview/llpanelprofileview.cpp
+++ b/indra/newview/llpanelprofileview.cpp
@@ -114,7 +114,7 @@ BOOL LLPanelProfileView::postBuild()
 {
 	LLPanelProfile::postBuild();
 
-	getTabContainer()[PANEL_NOTES] = getChild<LLPanelAvatarNotes>(PANEL_NOTES);
+	getTabContainer()[PANEL_NOTES] = findChild<LLPanelAvatarNotes>(PANEL_NOTES);
 	
 	//*TODO remove this, according to style guide we don't use status combobox
 	getTabContainer()[PANEL_PROFILE]->getChildView("online_me_status_text")->setVisible( FALSE);
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index a7cbf5229080fc87f3bcfb471d6ac73393f64297..9b8167b15a687294698b3171d3573f7e2b29b3e1 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -126,7 +126,7 @@ LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistor
 	mRegionName(region_name),
 	mHighlight(hl)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history_item.xml");
+	buildFromFile( "panel_teleport_history_item.xml");
 }
 
 LLTeleportHistoryFlatItem::~LLTeleportHistoryFlatItem()
@@ -377,7 +377,7 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel()
 		mLastSelectedFlatlList(NULL),
 		mLastSelectedItemIndex(-1)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history.xml");
+	buildFromFile( "panel_teleport_history.xml");
 }
 
 LLTeleportHistoryPanel::~LLTeleportHistoryPanel()
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index 0d17fb3e82b2ad10bc38261323d18c68cdc52ca2..a9ca7314ce878429928420591a7e78b09993a0eb 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -66,7 +66,7 @@ LLPanelTopInfoBar::LLPanelTopInfoBar(): mParcelChangedObserver(0)
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar()
 			.add("TopInfoBar.Action", boost::bind(&LLPanelTopInfoBar::onContextMenuItemClicked, this, _2));
 
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_topinfo_bar.xml");
+	buildFromFile( "panel_topinfo_bar.xml");
 }
 
 LLPanelTopInfoBar::~LLPanelTopInfoBar()
diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llpanelvoicedevicesettings.cpp
similarity index 80%
rename from indra/newview/llfloatervoicedevicesettings.cpp
rename to indra/newview/llpanelvoicedevicesettings.cpp
index 34277001ee64f063686a065d27d457d4d3bee5ed..aef870d3524923813410103e8b43cad1f3d040c4 100644
--- a/indra/newview/llfloatervoicedevicesettings.cpp
+++ b/indra/newview/llpanelvoicedevicesettings.cpp
@@ -1,5 +1,5 @@
 /** 
- * @file llfloatervoicedevicesettings.cpp
+ * @file llpanelvoicedevicesettings.cpp
  * @author Richard Nelson
  * @brief Voice communication set-up 
  *
@@ -27,13 +27,10 @@
  
 #include "llviewerprecompiledheaders.h"
 
-#include "llfloatervoicedevicesettings.h"
+#include "llpanelvoicedevicesettings.h"
 
 // Viewer includes
-#include "llbutton.h"
 #include "llcombobox.h"
-#include "llfocusmgr.h"
-#include "lliconctrl.h"
 #include "llsliderctrl.h"
 #include "llviewercontrol.h"
 #include "llvoiceclient.h"
@@ -70,8 +67,10 @@ BOOL LLPanelVoiceDeviceSettings::postBuild()
 	// set mic volume tuning slider based on last mic volume setting
 	volume_slider->setValue(mMicVolume);
 
-	childSetCommitCallback("voice_input_device", onCommitInputDevice, this);
-	childSetCommitCallback("voice_output_device", onCommitOutputDevice, this);
+	getChild<LLComboBox>("voice_input_device")->setCommitCallback(
+		boost::bind(&LLPanelVoiceDeviceSettings::onCommitInputDevice, this));
+	getChild<LLComboBox>("voice_output_device")->setCommitCallback(
+		boost::bind(&LLPanelVoiceDeviceSettings::onCommitOutputDevice, this));
 	
 	return TRUE;
 }
@@ -303,91 +302,20 @@ void LLPanelVoiceDeviceSettings::cleanup()
 	LLVoiceChannel::resume();
 }
 
-// static
-void LLPanelVoiceDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data)
+void LLPanelVoiceDeviceSettings::onCommitInputDevice()
 {
 	if(LLVoiceClient::getInstance())
 	{
-		LLVoiceClient::getInstance()->setCaptureDevice(ctrl->getValue().asString());
+		LLVoiceClient::getInstance()->setCaptureDevice(
+			getChild<LLComboBox>("voice_input_device")->getValue().asString());
 	}
 }
 
-// static
-void LLPanelVoiceDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data)
+void LLPanelVoiceDeviceSettings::onCommitOutputDevice()
 {
 	if(LLVoiceClient::getInstance())
 	{
-		LLVoiceClient::getInstance()->setRenderDevice(ctrl->getValue().asString());
+		LLVoiceClient::getInstance()->setRenderDevice(
+			getChild<LLComboBox>("voice_input_device")->getValue().asString());
 	}
 }
-
-//
-// LLFloaterVoiceDeviceSettings
-//
-
-LLFloaterVoiceDeviceSettings::LLFloaterVoiceDeviceSettings(const LLSD& seed)
-	: LLFloater(seed),
-	  mDevicePanel(NULL)
-{
-	mFactoryMap["device_settings"] = LLCallbackMap(createPanelVoiceDeviceSettings, this);
-	// do not automatically open singleton floaters (as result of getInstance())
-//	BOOL no_open = FALSE;
-//	Called from floater reg:  LLUICtrlFactory::getInstance()->buildFloater(this, "floater_device_settings.xml", no_open);	
-}
-BOOL LLFloaterVoiceDeviceSettings::postBuild()
-{
-	center();
-	return TRUE;
-}
-
-// virtual
-void LLFloaterVoiceDeviceSettings::onOpen(const LLSD& key)
-{
-	if(mDevicePanel)
-	{
-		mDevicePanel->initialize();
-	}
-}
-
-// virtual
-void LLFloaterVoiceDeviceSettings::onClose(bool app_settings)
-{
-	if(mDevicePanel)
-	{
-		mDevicePanel->apply();
-		mDevicePanel->cleanup();
-	}
-}
-
-void LLFloaterVoiceDeviceSettings::apply()
-{
-	if (mDevicePanel)
-	{
-		mDevicePanel->apply();
-	}
-}
-
-void LLFloaterVoiceDeviceSettings::cancel()
-{
-	if (mDevicePanel)
-	{
-		mDevicePanel->cancel();
-	}
-}
-
-void LLFloaterVoiceDeviceSettings::draw()
-{
-	if (mDevicePanel)
-	{
-		mDevicePanel->refresh();
-	}
-	LLFloater::draw();
-}
-
-// static
-void* LLFloaterVoiceDeviceSettings::createPanelVoiceDeviceSettings(void* user_data)
-{
-	LLFloaterVoiceDeviceSettings* floaterp = (LLFloaterVoiceDeviceSettings*)user_data;
-	floaterp->mDevicePanel = new LLPanelVoiceDeviceSettings();
-	return floaterp->mDevicePanel;
-}
diff --git a/indra/newview/llfloatervoicedevicesettings.h b/indra/newview/llpanelvoicedevicesettings.h
similarity index 67%
rename from indra/newview/llfloatervoicedevicesettings.h
rename to indra/newview/llpanelvoicedevicesettings.h
index 5f892972de4ca970fb414631dd9abac3dfcd5310..636b8b99481f9df8b25ed055a7da0fa62ab214dd 100644
--- a/indra/newview/llfloatervoicedevicesettings.h
+++ b/indra/newview/llpanelvoicedevicesettings.h
@@ -25,10 +25,10 @@
  * $/LicenseInfo$
  */
 
-#ifndef LL_LLFLOATERVOICEDEVICESETTINGS_H
-#define LL_LLFLOATERVOICEDEVICESETTINGS_H
+#ifndef LL_LLPANELVOICEDEVICESETTINGS_H
+#define LL_LLPANELVOICEDEVICESETTINGS_H
 
-#include "llfloater.h"
+#include "llpanel.h"
 
 class LLPanelVoiceDeviceSettings : public LLPanel
 {
@@ -47,8 +47,8 @@ class LLPanelVoiceDeviceSettings : public LLPanel
 	/*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
 	
 protected:
-	static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data);
-	static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data);
+	void onCommitInputDevice();
+	void onCommitOutputDevice();
 
 	F32 mMicVolume;
 	std::string mInputDevice;
@@ -58,26 +58,4 @@ class LLPanelVoiceDeviceSettings : public LLPanel
 	BOOL mDevicesUpdated;
 };
 
-class LLFloaterVoiceDeviceSettings : public LLFloater
-{
-	friend class LLFloaterReg;
-
-public:
-
-	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void onOpen(const LLSD& key);
-	/*virtual*/ void onClose(bool app_settings);
-	/*virtual*/ void draw();
-	void apply();
-	void cancel();
-private:
-	LLFloaterVoiceDeviceSettings(const LLSD& seed);
-	
-protected:
-	static void* createPanelVoiceDeviceSettings(void* user_data);
-		
-protected:
-	LLPanelVoiceDeviceSettings* mDevicePanel;
-};
-
-#endif // LL_LLFLOATERVOICEDEVICESETTINGS_H
+#endif // LL_LLPANELVOICEDEVICESETTINGS_H
diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp
index f2772b5d8894e00af6fa39382305a47d10796e33..aea7b33d7f8f182ff254b74e4b59f14f04386f45 100644
--- a/indra/newview/llpanelvolumepulldown.cpp
+++ b/indra/newview/llpanelvolumepulldown.cpp
@@ -54,7 +54,7 @@ LLPanelVolumePulldown::LLPanelVolumePulldown()
 
     mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2));
 	mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2));
-	LLUICtrlFactory::instance().buildPanel(this, "panel_volume_pulldown.xml");
+	buildFromFile( "panel_volume_pulldown.xml");
 }
 
 BOOL LLPanelVolumePulldown::postBuild()
diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp
index b328f65349ad2e8a635203b30dd120cca69b0942..8e8b530e1352c61ec084463ba6a10f2733b87e5d 100644
--- a/indra/newview/llpreviewanim.cpp
+++ b/indra/newview/llpreviewanim.cpp
@@ -43,7 +43,6 @@ extern LLAgent gAgent;
 LLPreviewAnim::LLPreviewAnim(const LLSD& key)
 	: LLPreview( key )
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_animation.xml", FALSE);
 }
 
 // static
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 3f4edbaf97d6e53eca83b45ee928b3e4846b1ccb..16284d1a7ecc30a8f989d300d4a06abdb67e225b 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -311,9 +311,6 @@ LLPreviewGesture::LLPreviewGesture(const LLSD& key)
 	NONE_LABEL =  LLTrans::getString("---");
 	SHIFT_LABEL = LLTrans::getString("KBShift");
 	CTRL_LABEL = LLTrans::getString("KBCtrl");
-	
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_gesture.xml", FALSE);
-
 }
 
 
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index e85a6a7094e0a614f8375faeaa917fc8d2b84069..9f3ee6ac5d21fbcd977800aa4158da9ead916597 100644
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -71,7 +71,6 @@ LLPreviewNotecard::LLPreviewNotecard(const LLSD& key) //const LLUUID& item_id,
 	{
 		mAssetID = item->getAssetUUID();
 	}	
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_notecard.xml", FALSE);
 }
 
 LLPreviewNotecard::~LLPreviewNotecard()
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index d280cf162541e59728bef11446f246dae24f68a0..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;
@@ -151,7 +154,7 @@ LLFloaterScriptSearch::LLFloaterScriptSearch(LLScriptEdCore* editor_core)
 :	LLFloater(LLSD()),
 	mEditorCore(editor_core)
 {
-	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_search.xml", NULL);
+	buildFromFile("floater_script_search.xml");
 
 	sInstance = this;
 	
@@ -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
@@ -654,7 +674,7 @@ void LLScriptEdCore::onBtnDynamicHelp()
 	if (!live_help_floater)
 	{
 		live_help_floater = new LLFloater(LLSD());
-		LLUICtrlFactory::getInstance()->buildFloater(live_help_floater, "floater_lsl_guide.xml", NULL);
+		live_help_floater->buildFromFile("floater_lsl_guide.xml", NULL);
 		LLFloater* parent = dynamic_cast<LLFloater*>(getParent());
 		llassert(parent);
 		if (parent)
@@ -942,7 +962,6 @@ LLPreviewLSL::LLPreviewLSL(const LLSD& key )
 	mPendingUploads(0)
 {
 	mFactoryMap["script panel"] = LLCallbackMap(LLPreviewLSL::createScriptEdPanel, this);
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_preview.xml", FALSE);
 }
 
 // virtual
@@ -1417,7 +1436,6 @@ LLLiveLSLEditor::LLLiveLSLEditor(const LLSD& key) :
 	mIsNew(false)
 {
 	mFactoryMap["script ed panel"] = LLCallbackMap(LLLiveLSLEditor::createScriptEdPanel, this);
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_live_lsleditor.xml", FALSE);
 }
 
 BOOL LLLiveLSLEditor::postBuild()
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/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp
index 6b53b459901847d7d86efe8389a3416d9ce8aa7f..33d2d015ad2c45fce515be71c3bf2e76226ccf80 100644
--- a/indra/newview/llpreviewsound.cpp
+++ b/indra/newview/llpreviewsound.cpp
@@ -45,7 +45,6 @@ const F32 SOUND_GAIN = 1.0f;
 LLPreviewSound::LLPreviewSound(const LLSD& key)
   : LLPreview( key )
 {
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_sound.xml", FALSE);
 }
 
 // virtual
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 1155f35de857956f8022c42b69631778e3c80653..fd6b326ef16fa7df9bb17e1f6480585e145bca8d 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -77,7 +77,6 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
 	{
 		mPreviewToSave = TRUE;
 	}
-	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_texture.xml", FALSE);
 }
 
 LLPreviewTexture::~LLPreviewTexture()
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index cde99f8d7cf3e7d30295e4993536bcc07999b746..e9504cbba07670402edec02e2c6af85741b6e625 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -41,6 +41,7 @@
 #include "llagent.h"
 #include "llbutton.h"
 #include "llfocusmgr.h"
+#include "llnotifications.h"
 #include "llprogressbar.h"
 #include "llstartup.h"
 #include "llviewercontrol.h"
@@ -90,6 +91,8 @@ BOOL LLProgressView::postBuild()
 	// hidden initially, until we need it
 	LLPanel::setVisible(FALSE);
 
+	LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLProgressView::onAlertModal, this, _1));
+
 	sInstance = this;
 	return TRUE;
 }
@@ -128,15 +131,10 @@ void LLProgressView::setVisible(BOOL visible)
 	if (getVisible() && !visible)
 	{
 		mFadeTimer.start();
-		// hiding progress view, so show menu bars
-		LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(TRUE);
 	}
 	// showing progress view
 	else if (!getVisible() && visible)
 	{
-		// showing progress view, so hide menu bars
-		LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(FALSE);
-		
 		setFocus(TRUE);
 		mFadeTimer.stop();
 		mProgressTimer.start();
@@ -294,3 +292,18 @@ bool LLProgressView::handleUpdate(const LLSD& event_data)
 	}
 	return false;
 }
+
+bool LLProgressView::onAlertModal(const LLSD& notify)
+{
+	// if the progress view is visible, it will obscure the notification window
+	// in this case, we want to auto-accept WebLaunchExternalTarget notifications
+	if (isInVisibleChain() && notify["sigtype"].asString() == "add")
+	{
+		LLNotificationPtr notifyp = LLNotifications::instance().find(notify["id"].asUUID());
+		if (notifyp && notifyp->getName() == "WebLaunchExternalTarget")
+		{
+			notifyp->respondWithDefault();
+		}
+	}
+	return false;
+}
diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h
index 01d5e16534955a872d92e094a781103da12eb417..be1744f08a57e81b7e2834b231291a02e27aba83 100644
--- a/indra/newview/llprogressview.h
+++ b/indra/newview/llprogressview.h
@@ -59,6 +59,7 @@ class LLProgressView : public LLPanel
 
 	static void onCancelButtonClicked( void* );
 	static void onClickMessage(void*);
+	bool onAlertModal(const LLSD& sd);
 
 protected:
 	LLProgressBar* mProgressBar;
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
index 2d8c9b0feceb2d026606c4725896bdb76a48c853..05b273cd29c4f14b45bb731f6824442f075e8b1d 100644
--- a/indra/newview/llscrollingpanelparam.cpp
+++ b/indra/newview/llscrollingpanelparam.cpp
@@ -56,7 +56,7 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param
 	  mAllowModify(allow_modify),
 	  mWearable(wearable)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_scrolling_param.xml");
+	buildFromFile( "panel_scrolling_param.xml");
 
 	// *HACK To avoid hard coding texture position, lets use border's position for texture. 
 	LLViewBorder* left_border = getChild<LLViewBorder>("left_border");
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index fb60b1ece712631c611a52cc535c7a6afdb9e336..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;
 	}
@@ -5058,23 +5059,13 @@ LLSelectNode::LLSelectNode(LLViewerObject* object, BOOL glow)
 	mSilhouetteExists(FALSE),
 	mDuplicated(FALSE),
 	mTESelectMask(0),
-	mLastTESelected(0)
+	mLastTESelected(0),
+	mName(LLStringUtil::null),
+	mDescription(LLStringUtil::null),
+	mTouchName(LLStringUtil::null),
+	mSitName(LLStringUtil::null),
+	mCreationDate(0)
 {
-	mObject = object;
-	selectAllTEs(FALSE);
-	mIndividualSelection	= FALSE;
-	mTransient		= FALSE;
-	mValid			= FALSE;
-	mPermissions	= new LLPermissions();
-	mInventorySerial = 0;
-	mName = LLStringUtil::null;
-	mDescription = LLStringUtil::null;
-	mTouchName = LLStringUtil::null;
-	mSitName = LLStringUtil::null;
-	mSilhouetteExists = FALSE;
-	mDuplicated = FALSE;
-	mCreationDate = 0;
-
 	saveColors();
 }
 
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 b4c1516f71bc630f0e000989a42dfb2c2262f015..31ea542743db43c87dd5b52cfe715a37fc318e44 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -31,6 +31,7 @@
 #include "llappearancemgr.h"
 #include "llavataractions.h"
 #include "llbutton.h"
+#include "llfirstuse.h"
 #include "llinventorybridge.h"
 #include "llinventoryfunctions.h"
 #include "llinventorypanel.h"
@@ -50,7 +51,7 @@ LLSidepanelInventory::LLSidepanelInventory()
 		mPanelMainInventory(NULL)
 {
 
-	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
+	//buildFromFile( "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 }
 
 LLSidepanelInventory::~LLSidepanelInventory()
@@ -84,7 +85,7 @@ BOOL LLSidepanelInventory::postBuild()
 		mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn");
 		mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
 		
-		mPanelMainInventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+		mPanelMainInventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 		mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
 		LLTabContainer* tabs = mPanelMainInventory->getChild<LLTabContainer>("inventory filter tabs");
 		tabs->setCommitCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this));
@@ -102,7 +103,7 @@ BOOL LLSidepanelInventory::postBuild()
 
 	// UI elements from item panel
 	{
-		mItemPanel = getChild<LLSidepanelItemInfo>("sidepanel__item_panel");
+		mItemPanel = findChild<LLSidepanelItemInfo>("sidepanel__item_panel");
 		
 		LLButton* back_btn = mItemPanel->getChild<LLButton>("back_btn");
 		back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
@@ -110,7 +111,7 @@ BOOL LLSidepanelInventory::postBuild()
 
 	// UI elements from task panel
 	{
-		mTaskPanel = getChild<LLSidepanelTaskInfo>("sidepanel__task_panel");
+		mTaskPanel = findChild<LLSidepanelTaskInfo>("sidepanel__task_panel");
 		if (mTaskPanel)
 		{
 			LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn");
@@ -123,6 +124,8 @@ BOOL LLSidepanelInventory::postBuild()
 
 void LLSidepanelInventory::onOpen(const LLSD& key)
 {
+	LLFirstUse::newInventory(false);
+
 	if(key.size() == 0)
 		return;
 
@@ -168,7 +171,7 @@ void LLSidepanelInventory::onShopButtonClicked()
 
 void LLSidepanelInventory::performActionOnSelection(const std::string &action)
 {
-	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 	LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
 	if (!current_item)
 	{
@@ -179,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()
@@ -283,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:
@@ -306,25 +327,46 @@ void LLSidepanelInventory::updateVerbs()
 bool LLSidepanelInventory::canShare()
 {
 	LLPanelMainInventory* panel_main_inventory =
-		mInventoryPanel->getChild<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;
+	}
 
-	LLFolderViewItem* current_item = root_folder->hasVisibleChildren()
-		? root_folder->getCurSelectedItem()
-		: NULL;
+	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;
 
-	LLInvFVBridge* bridge = current_item
-		? dynamic_cast <LLInvFVBridge*> (current_item->getListener())
-		: NULL;
+	return LLAvatarActions::canShareSelectedItems(active_panel);
+}
+
+bool LLSidepanelInventory::canWearSelected()
+{
+	LLPanelMainInventory* panel_main_inventory =
+		mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
+
+	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()
 {
-	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 	LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
 	if (!current_item)
 	{
@@ -337,7 +379,7 @@ LLInventoryItem *LLSidepanelInventory::getSelectedItem()
 
 U32 LLSidepanelInventory::getSelectedCount()
 {
-	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
 	std::set<LLUUID> selection_list = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
 	return selection_list.size();
 }
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/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index e41bbe43df82675cb2939ba0deef8ae4a160ee61..b053432f9c696ed08e1aa454a051a9ed9fefe3ec 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -122,8 +122,6 @@ LLSidepanelItemInfo::LLSidepanelItemInfo()
   , mObjectInventoryObserver(NULL)
 {
 	mPropertiesObserver = new LLItemPropertiesObserver(this);
-	
-	//LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
 }
 
 // Destroys the object
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 9ee504cc4c2e6e0b56bb790b1dd7ce4b253abe9a..521e5005e863060b22487d350e26a478a69cad52 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -32,6 +32,8 @@
 #include "llappviewer.h"
 #include "llbottomtray.h"
 #include "llfloaterreg.h"
+#include "llfirstuse.h"
+#include "llhints.h"
 #include "llsidetray.h"
 #include "llviewerwindow.h"
 #include "llaccordionctrl.h"
@@ -111,7 +113,7 @@ class LLSideTrayTab: public LLPanel
 	};
 protected:
 	LLSideTrayTab(const Params& params);
-
+	
 	void			dock();
 	void			undock(LLFloater* floater_tab);
 
@@ -132,7 +134,7 @@ class LLSideTrayTab: public LLPanel
 	const std::string& getTabTitle() const { return mTabTitle;}
 	
 	void			onOpen		(const LLSD& key);
-
+	
 	void			toggleTabDocked();
 
 	LLPanel *getPanel();
@@ -568,7 +570,7 @@ void LLSideTray::toggleTabButton(LLSideTrayTab* tab)
 	{
 		LLButton* btn = it->second;
 		bool new_state = !btn->getToggleState();
-		btn->setToggleState(new_state);
+		btn->setToggleState(new_state); 
 		// Only highlight the tab if side tray is expanded (STORM-157).
 		btn->setImageOverlay( new_state && !getCollapsed() ? tab->mImageSelected : tab->mImage );
 	}
@@ -646,7 +648,7 @@ bool LLSideTray::selectTabByName(const std::string& name, bool keep_prev_visible
 	{
 		// Keep previously active tab visible if requested.
 		if (keep_prev_visible) tab_to_keep_visible = mActiveTab;
-		toggleTabButton(mActiveTab);
+	toggleTabButton(mActiveTab);
 	}
 
 	//select new tab
@@ -654,9 +656,9 @@ bool LLSideTray::selectTabByName(const std::string& name, bool keep_prev_visible
 
 	if (mActiveTab)
 	{
-		toggleTabButton(mActiveTab);
-		LLSD key;//empty
-		mActiveTab->onOpen(key);
+	toggleTabButton(mActiveTab);
+	LLSD key;//empty
+	mActiveTab->onOpen(key);
 	}
 
 	//arrange();
@@ -868,6 +870,7 @@ void	LLSideTray::createButtons	()
 		{
 			mCollapseButton = createButton(name,sidebar_tab->mImage,sidebar_tab->getTabTitle(),
 				boost::bind(&LLSideTray::onToggleCollapse, this));
+			LLHints::registerHintTarget("side_panel_btn", mCollapseButton->getHandle());
 		}
 		else
 		{
@@ -876,6 +879,8 @@ void	LLSideTray::createButtons	()
 			mTabButtons[name] = button;
 		}
 	}
+	LLHints::registerHintTarget("inventory_btn", mTabButtons["sidebar_inventory"]->getHandle());
+	LLHints::registerHintTarget("dest_guide_btn", mTabButtons["sidebar_places"]->getHandle());
 }
 
 void		LLSideTray::processTriState ()
@@ -914,6 +919,7 @@ void		LLSideTray::onTabButtonClick(string name)
 
 void		LLSideTray::onToggleCollapse()
 {
+	LLFirstUse::notUsingSidePanel(false);
 	if(mCollapsed)
 	{
 		expandSideBar();
@@ -1118,11 +1124,11 @@ LLPanel*	LLSideTray::showPanel		(const std::string& panel_name, const LLSD& para
 	{
 		LLPanel* panel = openChildPanel(*child_it, panel_name, params);
 		if (panel) return panel;
-	}
+			}
 
 	// Look up the tab in the list of attached tabs.
 	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
-	{
+			{
 		LLPanel* panel = openChildPanel(*child_it, panel_name, params);
 		if (panel) return panel;
 	}
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/llsplitbutton.cpp b/indra/newview/llsplitbutton.cpp
index 7db42214e1218f9c65d7c9a861fc931c3dfb8702..790305103d522162217faaee38530d40029b0b0f 100644
--- a/indra/newview/llsplitbutton.cpp
+++ b/indra/newview/llsplitbutton.cpp
@@ -220,7 +220,7 @@ LLSplitButton::LLSplitButton(const LLSplitButton::Params& p)
 	addChild(mItemsPanel);
 
 
-	LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin();
+	LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items.begin();
 
 	//processing shown item button
 	mShownItem = prepareItemButton(*it);
@@ -231,7 +231,7 @@ LLSplitButton::LLSplitButton(const LLSplitButton::Params& p)
 
 	//processing hidden item buttons
 	S32 item_top = mItemsPanel->getRect().getHeight();
-	for (++it; it != p.items().end(); ++it)
+	for (++it; it != p.items.end(); ++it)
 	{
 		LLButton* hidden_button = prepareItemButton(*it);
 		hidden_button->setRect(LLRect(btn_left, item_top, btn_right, item_top - rc.getHeight()));
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 975d1f9f32cf77eebfca8057baf5fde16890fdff..c56cacd12ba6c71139f15b2e522e4b554e3cdb28 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -794,10 +794,6 @@ bool idle_startup()
 
 	if (STATE_LOGIN_CLEANUP == LLStartUp::getStartupState())
 	{
-		// Move the progress view in front of the UI immediately when login is performed
-		// this allows not to see main menu after Alt+Tab was pressed while login. EXT-744.
-		gViewerWindow->moveProgressViewToFront();
-
 		//reset the values that could have come in from a slurl
 		// DEV-42215: Make sure they're not empty -- gUserCredential
 		// might already have been set from gSavedSettings, and it's too bad
@@ -1251,9 +1247,6 @@ bool idle_startup()
 
 		if (!gNoRender)
 		{
-			// Move the progress view in front of the UI
-			gViewerWindow->moveProgressViewToFront();
-
 			// direct logging to the debug console's line buffer
 			LLError::logToFixedBuffer(gDebugView->mDebugConsolep);
 			
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 2c15ff9aedd4efd1a1b0d027932d274bc4ce9228..e9fc25404a56cce34049a97b6a918d95fbec8442 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -33,6 +33,7 @@
 #include "llagentcamera.h"
 #include "llbutton.h"
 #include "llcommandhandler.h"
+#include "llfirstuse.h"
 #include "llviewercontrol.h"
 #include "llfloaterbuycurrency.h"
 #include "llbuycurrencyhtml.h"
@@ -41,6 +42,7 @@
 #include "llpanelvolumepulldown.h"
 #include "llfloaterregioninfo.h"
 #include "llfloaterscriptdebug.h"
+#include "llhints.h"
 #include "llhudicon.h"
 #include "llnavigationbar.h"
 #include "llkeyboard.h"
@@ -126,7 +128,7 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
 	mBalanceTimer = new LLFrameTimer();
 	mHealthTimer = new LLFrameTimer();
 
-	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_status_bar.xml");
+	buildFromFile("panel_status_bar.xml");
 }
 
 LLStatusBar::~LLStatusBar()
@@ -174,6 +176,8 @@ BOOL LLStatusBar::postBuild()
 	mMediaToggle->setClickedCallback( &LLStatusBar::onClickMediaToggle, this );
 	mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this));
 
+	LLHints::registerHintTarget("linden_balance", getChild<LLView>("balance_bg")->getHandle());
+
 	gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2));
 
 	// Adding Net Stat Graph
@@ -213,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);
@@ -321,6 +323,11 @@ void LLStatusBar::creditBalance(S32 credit)
 
 void LLStatusBar::setBalance(S32 balance)
 {
+	if (balance > getBalance() && getBalance() != 0)
+	{
+		LLFirstUse::receiveLindens();
+	}
+
 	std::string money_str = LLResMgr::getInstance()->getMonetaryString( balance );
 
 	LLTextBox* balance_box = getChild<LLTextBox>("balance");
@@ -443,6 +450,7 @@ void LLStatusBar::onClickBuyCurrency()
 	// open a currency floater - actual one open depends on 
 	// value specified in settings.xml
 	LLBuyCurrencyHTML::openCurrencyFloater();
+	LLFirstUse::receiveLindens(false);
 }
 
 void LLStatusBar::onMouseEnterVolume()
@@ -506,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/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp
index 4a107fefa8c4bcfba3235ae359bbb86f548061bd..057d80457c65278d89d5914d5765d77af20b1e4f 100644
--- a/indra/newview/llsyswellitem.cpp
+++ b/indra/newview/llsyswellitem.cpp
@@ -38,7 +38,7 @@ LLSysWellItem::LLSysWellItem(const Params& p) : LLPanel(p),
 												mTitle(NULL),
 												mCloseBtn(NULL)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_sys_well_item.xml");
+	buildFromFile( "panel_sys_well_item.xml");
 
 	mTitle = getChild<LLTextBox>("title");
 	mCloseBtn = getChild<LLButton>("close_btn");
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index 750fbe54a725573949dcb62fb01e56f4e399a5ab..99342bb564c0e0ab0a33bb7823450cfaec0c5598 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -249,7 +249,7 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID&
 		S32 chicletCounter, const std::string& name, const LLUUID& otherParticipantId) :
 		LLPanel(LLPanel::Params()), mChiclet(NULL), mParent(parent)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_activeim_row.xml", NULL);
+	buildFromFile( "panel_activeim_row.xml", NULL);
 
 	// Choose which of the pre-created chiclets (IM/group) to use.
 	// The other one gets hidden.
@@ -346,7 +346,7 @@ LLIMWellWindow::ObjectRowPanel::ObjectRowPanel(const LLUUID& notification_id, bo
  : LLPanel()
  , mChiclet(NULL)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_active_object_row.xml", NULL);
+	buildFromFile( "panel_active_object_row.xml", NULL);
 
 	initChiclet(notification_id);
 
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 1625b4bafd475582045d358676e75d779c59f0cf..328298bda43999c6e9418759072871df88a17327 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -196,8 +196,8 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
 	mContextConeOpacity(0.f),
 	mSelectedItemPinned( FALSE )
 {
+	buildFromFile("floater_texture_ctrl.xml");
 	mCanApplyImmediately = can_apply_immediately;
-	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_texture_ctrl.xml",NULL);
 	setCanMinimize(FALSE);
 }
 
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 749cf2c948e184dab17d1cec618ec961fd40b1ca..a9ab98da5fb0b04c3aa29e43f2618d7bfd4fcbea 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -77,7 +77,7 @@ LLToast::LLToast(const LLToast::Params& p)
 {
 	mTimer.reset(new LLToastLifeTimer(this, p.lifetime_secs));
 
-	LLUICtrlFactory::getInstance()->buildFloater(this, "panel_toast.xml", NULL);
+	buildFromFile("panel_toast.xml", NULL);
 
 	setCanDrag(FALSE);
 
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index b22f3b9d093d8bfc783f578e1586a0ce27a17ae4..0a96c092a0de0e54d5fc6be1a08bb14ab20548a9 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -188,6 +188,8 @@ class LLToast : public LLModalDialog
 
 	virtual S32	notifyParent(const LLSD& info);
 
+	LLHandle<LLToast> getHandle() { mHandle.bind(this); return mHandle; }
+
 private:
 
 	void onToastMouseEnter();
@@ -200,6 +202,8 @@ class LLToast : public LLModalDialog
 	LLUUID				mSessionID;
 	LLNotificationPtr	mNotification;
 
+	LLRootHandle<LLToast>	mHandle;
+		
 	LLPanel* mWrapperPanel;
 
 	// timer counts a lifetime of a toast
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index 4c75b07ae8e0de920ac3ca4fb56d573af2e7557f..78cc96b353eb0025f1c094dccad5dbb45846a563 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -54,7 +54,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 :	LLToastPanel(notification),
 	mInventoryOffer(NULL)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_notify.xml");
+	buildFromFile( "panel_group_notify.xml");
 	const LLSD& payload = notification->getPayload();
 	LLGroupData groupData;
 	if (!gAgent.getGroupData(payload["group_id"].asUUID(),groupData))
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
index 82ccca433026f930da8565589b08976be3e8d71e..1d8b82ec1bc0c994b9557aaab2af05d0475db39f 100644
--- a/indra/newview/lltoastimpanel.cpp
+++ b/indra/newview/lltoastimpanel.cpp
@@ -45,7 +45,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notif
 								mAvatarIcon(NULL), mAvatarName(NULL),
 								mTime(NULL), mMessage(NULL), mGroupIcon(NULL)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml");
+	buildFromFile( "panel_instant_message.xml");
 
 	mGroupIcon = getChild<LLGroupIconCtrl>("group_icon");
 	mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon");
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 1a1c94674b60937c5ceaa4c3104e96a1dc640304..9017f5ec5574e175e0f07295a15ae28695fd2bfc 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -61,7 +61,7 @@ mNumButtons(0),
 mAddedDefaultBtn(false),
 mCloseNotificationOnDestroy(true)
 {
-	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml");
+	buildFromFile( "panel_notification.xml");
 	if(rect != LLRect::null)
 	{
 		this->setShape(rect);
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index d6e069b3dcc1e574d316d9f085e9f445df907d22..6bb95168e264135ca54d1e0a1b5d571e04467b72 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -1446,10 +1446,10 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response)
 }
 
 static void show_item_sharing_confirmation(const std::string name,
-										   LLViewerInventoryItem* inv_item,
-										   const LLSD& dest,
-										   const LLUUID& dest_agent,
-										   const LLUUID& session_id = LLUUID::null)
+					   LLViewerInventoryItem* inv_item,
+					   const LLSD& dest,
+					   const LLUUID& dest_agent,
+					   const LLUUID& session_id = LLUUID::null)
 {
 	if (!inv_item)
 	{
@@ -1459,7 +1459,7 @@ static void show_item_sharing_confirmation(const std::string name,
 
 	LLSD substitutions;
 	substitutions["RESIDENTS"] = name;
-	substitutions["ITEMS"] = inv_item ? inv_item->getName() : LLStringUtil::null;
+	substitutions["ITEMS"] = inv_item->getName();
 	LLSD payload;
 	payload["agent_id"] = dest_agent;
 	payload["item_id"] = inv_item->getUUID();
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index 750bb224b1ddf05add1a3021fcd871afaa6159bd..b19c738ed2fbe2dab4e1abb4b302e47d3e239d46 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -114,10 +114,6 @@ void audio_update_volume(bool force_update)
 
 		gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler"));
 		gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff"));
-#ifdef kAUDIO_ENABLE_WIND
-		gAudiop->enableWind(!mute_audio);
-#endif
-
 		gAudiop->setMuted(mute_audio);
 		
 		if (force_update)
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index b6f2d34663ba1ab5b600c45750718b8e502750b6..7490ccf77a655e97ca9b8ed1c504e1cc54db510e 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -95,7 +95,6 @@
 #include "llfloatertos.h"
 #include "llfloatertopobjects.h"
 #include "llfloateruipreview.h"
-#include "llfloatervoicedevicesettings.h"
 #include "llfloatervoiceeffect.h"
 #include "llfloaterwater.h"
 #include "llfloaterwhitelistentry.h"
@@ -202,7 +201,6 @@ void LLViewerFloaterReg::registerFloaters()
 	LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>);
 	LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>);
 	LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>);
-	LLFloaterReg::add("pref_voicedevicesettings", "floater_device_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceDeviceSettings>);
 	LLFloaterReg::add("preview_anim", "floater_preview_animation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewAnim>, "preview");
 	LLFloaterReg::add("preview_gesture", "floater_preview_gesture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewGesture>, "preview");
 	LLFloaterReg::add("preview_notecard", "floater_preview_notecard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewNotecard>, "preview");
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 283669aaef52c1557585af027b5fe8e841bcd1ef..48ab122edffe7c8d6314066a622212a92ac4c6a3 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -51,6 +51,7 @@
 #include "llvoavatarself.h"
 #include "llviewerregion.h"
 #include "llwebsharing.h"	// For LLWebSharing::setOpenIDCookie(), *TODO: find a better way to do this!
+#include "llfilepicker.h"
 
 #include "llevent.h"		// LLSimpleListener
 #include "llnotificationsutil.h"
@@ -60,6 +61,8 @@
 //#include "llfirstuse.h"
 #include "llwindow.h"
 
+#include "llfloatermediabrowser.h"	// for handling window close requests and geometry change requests in media browser windows.
+
 #include <boost/bind.hpp>	// for SkinFolder listener
 #include <boost/signals2.hpp>
 
@@ -1365,6 +1368,38 @@ void LLViewerMedia::openIDCookieResponse(const std::string &cookie)
 	setOpenIDCookie();
 }
 
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::proxyWindowOpened(const std::string &target, const std::string &uuid)
+{
+	if(uuid.empty())
+		return;
+		
+	for (impl_list::iterator iter = sViewerMediaImplList.begin(); iter != sViewerMediaImplList.end(); iter++)
+	{
+		if((*iter)->mMediaSource && (*iter)->mMediaSource->pluginSupportsMediaBrowser())
+		{
+			(*iter)->mMediaSource->proxyWindowOpened(target, uuid);
+		}
+	}
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::proxyWindowClosed(const std::string &uuid)
+{
+	if(uuid.empty())
+		return;
+
+	for (impl_list::iterator iter = sViewerMediaImplList.begin(); iter != sViewerMediaImplList.end(); iter++)
+	{
+		if((*iter)->mMediaSource && (*iter)->mMediaSource->pluginSupportsMediaBrowser())
+		{
+			(*iter)->mMediaSource->proxyWindowClosed(uuid);
+		}
+	}
+}
+
 bool LLViewerMedia::hasInWorldMedia()
 {
 	if (sInWorldMediaDisabled) return false;
@@ -1598,7 +1633,7 @@ void LLViewerMediaImpl::setMediaType(const std::string& media_type)
 
 //////////////////////////////////////////////////////////////////////////////////////////
 /*static*/
-LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height)
+LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height, const std::string target)
 {
 	std::string plugin_basename = LLMIMETypes::implType(media_type);
 	
@@ -1654,7 +1689,9 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
 			// collect 'javascript enabled' setting from prefs and send to embedded browser
 			bool javascript_enabled = gSavedSettings.getBOOL( "BrowserJavascriptEnabled" );
 			media_source->setJavascriptEnabled( javascript_enabled );
-
+			
+			media_source->setTarget(target);
+			
 			if (media_source->init(launcher_name, plugin_name, gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins")))
 			{
 				return media_source;
@@ -1705,7 +1742,7 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type)
 	// Save the MIME type that really caused the plugin to load
 	mCurrentMimeType = mMimeType;
 
-	LLPluginClassMedia* media_source = newSourceFromMediaType(mMimeType, this, mMediaWidth, mMediaHeight);
+	LLPluginClassMedia* media_source = newSourceFromMediaType(mMimeType, this, mMediaWidth, mMediaHeight, mTarget);
 	
 	if (media_source)
 	{
@@ -2805,6 +2842,7 @@ bool LLViewerMediaImpl::isPlayable() const
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event)
 {
+	bool pass_through = true;
 	switch(event)
 	{
 		case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
@@ -2818,28 +2856,6 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 		case MEDIA_EVENT_CLICK_LINK_HREF:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << plugin->getClickTarget() << "\", uri is " << plugin->getClickURL() << LL_ENDL;
-			// retrieve the event parameters
-			std::string url = plugin->getClickURL();
-			U32 target_type = plugin->getClickTargetType();
-			
-			switch (target_type)
-			{
-			case LLPluginClassMedia::TARGET_EXTERNAL:
-				// force url to external browser
-				LLWeb::loadURLExternal(url);
-				break;
-			case LLPluginClassMedia::TARGET_BLANK:
-				// open in SL media browser or external browser based on user pref
-				LLWeb::loadURL(url);
-				break;
-			case LLPluginClassMedia::TARGET_NONE:
-				// ignore this click and let media plugin handle it
-				break;
-			case LLPluginClassMedia::TARGET_OTHER:
-				LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL;
-				break;
-			default: break;
-			}
 		};
 		break;
 		case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:
@@ -2971,13 +2987,70 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 		}
 		break;
 
+		case LLViewerMediaObserver::MEDIA_EVENT_PICK_FILE_REQUEST:
+		{
+			// Display a file picker
+			std::string response;
+			
+			LLFilePicker& picker = LLFilePicker::instance();
+			if (!picker.getOpenFile(LLFilePicker::FFLOAD_ALL))
+			{
+				// The user didn't pick a file -- the empty response string will indicate this.
+			}
+			
+			response = picker.getFirstFile();
+			
+			plugin->sendPickFileResponse(response);
+		}
+		break;
 		
+		case LLViewerMediaObserver::MEDIA_EVENT_CLOSE_REQUEST:
+		{
+			std::string uuid = plugin->getClickUUID();
+
+			llinfos << "MEDIA_EVENT_CLOSE_REQUEST for uuid " << uuid << llendl;
+
+			if(uuid.empty())
+			{
+				// This close request is directed at this instance, let it fall through.
+			}
+			else
+			{
+				// This close request is directed at another instance
+				pass_through = false;
+				LLFloaterMediaBrowser::closeRequest(uuid);
+			}
+		}
+		break;
+
+		case LLViewerMediaObserver::MEDIA_EVENT_GEOMETRY_CHANGE:
+		{
+			std::string uuid = plugin->getClickUUID();
+
+			llinfos << "MEDIA_EVENT_GEOMETRY_CHANGE for uuid " << uuid << llendl;
+
+			if(uuid.empty())
+			{
+				// This geometry change request is directed at this instance, let it fall through.
+			}
+			else
+			{
+				// This request is directed at another instance
+				pass_through = false;
+				LLFloaterMediaBrowser::geometryChanged(uuid, plugin->getGeometryX(), plugin->getGeometryY(), plugin->getGeometryWidth(), plugin->getGeometryHeight());
+			}
+		}
+		break;
+
 		default:
 		break;
 	}
 
-	// Just chain the event to observers.
-	emitEvent(plugin, event);
+	if(pass_through)
+	{
+		// Just chain the event to observers.
+		emitEvent(plugin, event);
+	}
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index e0cc26fa295f7dbf54f94ee033ed6e1673f84133..4025a4484ff0437edb7d708893b8fb1e93c3f772 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -152,6 +152,9 @@ class LLViewerMedia
 	static void openIDSetup(const std::string &openid_url, const std::string &openid_token);
 	static void openIDCookieResponse(const std::string &cookie);
 	
+	static void proxyWindowOpened(const std::string &target, const std::string &uuid);
+	static void proxyWindowClosed(const std::string &uuid);
+	
 private:
 	static void setOpenIDCookie();
 	static void onTeleportFinished();
@@ -271,8 +274,10 @@ class LLViewerMediaImpl
 
 	ECursorType getLastSetCursor() { return mLastSetCursor; }
 	
+	void setTarget(const std::string& target) { mTarget = target; }
+	
 	// utility function to create a ready-to-use media instance from a desired media type.
-	static LLPluginClassMedia* newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height);
+	static LLPluginClassMedia* newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height, const std::string target = LLStringUtil::null);
 
 	// Internally set our desired browser user agent string, including
 	// the Second Life version and skin name.  Used because we can
@@ -438,6 +443,7 @@ class LLViewerMediaImpl
 	bool mNavigateSuspended;
 	bool mNavigateSuspendedDeferred;
 	bool mTrustedBrowser;
+	std::string mTarget;
 	
 private:
 	BOOL mIsUpdated ;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index b46febba63b058f083808f49ec8b08e522329664..f4409b0b425e6c9eb983ed14f07c8401e21b29c5 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -62,6 +62,7 @@
 #include "lllandmarkactions.h"
 #include "llgroupmgr.h"
 #include "lltooltip.h"
+#include "llhints.h"
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
 #include "llimview.h"
@@ -7282,7 +7283,7 @@ void handle_load_from_xml(void*)
 	{
 		std::string filename = picker.getFirstFile();
 		LLFloater* floater = new LLFloater(LLSD());
-		LLUICtrlFactory::getInstance()->buildFloater(floater, filename, NULL);
+		floater->buildFromFile(filename);
 	}
 }
 
@@ -7760,6 +7761,18 @@ class LLUploadCostCalculator : public view_listener_t
 	}
 };
 
+class LLToggleUIHints : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		bool ui_hints_enabled = gSavedSettings.getBOOL("EnableUIHints");
+		// toggle
+		ui_hints_enabled = !ui_hints_enabled;
+		gSavedSettings.setBOOL("EnableUIHints", ui_hints_enabled);
+		return true;
+	}
+};
+
 void LLUploadCostCalculator::calculateCost()
 {
 	S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
@@ -8241,4 +8254,5 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected");
 	view_listener_t::addMenu(new LLEditableSelectedMono(), "EditableSelectedMono");
 
+	view_listener_t::addMenu(new LLToggleUIHints(), "ToggleUIHints");
 }
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index c35173a7d41c197be55c27c54f3e11180cd342bf..26b7e0fb6de18a7ec8cc010818107d8fe806ae3c 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -50,6 +50,7 @@
 #include "llagentcamera.h"
 #include "llcallingcard.h"
 #include "llbuycurrencyhtml.h"
+#include "llfirstuse.h"
 #include "llfloaterbuyland.h"
 #include "llfloaterland.h"
 #include "llfloaterregioninfo.h"
@@ -932,6 +933,15 @@ class LLOpenTaskGroupOffer : public LLInventoryAddedObserver
 //one global instance to bind them
 LLOpenTaskOffer* gNewInventoryObserver=NULL;
 
+class LLNewInventoryHintObserver : public LLInventoryAddedObserver
+{
+protected:
+	/*virtual*/ void done()
+	{
+		LLFirstUse::newInventory();
+	}
+};
+
 void start_new_inventory_observer()
 {
 	if (!gNewInventoryObserver) //task offer observer 
@@ -947,6 +957,8 @@ void start_new_inventory_observer()
 		gInventoryMoveObserver = new LLViewerInventoryMoveFromWorldObserver;
 		gInventory.addObserver(gInventoryMoveObserver);
 	}
+
+	gInventory.addObserver(new LLNewInventoryHintObserver());
 }
 
 class LLDiscardAgentOffer : public LLInventoryFetchItemsObserver
@@ -1873,6 +1885,8 @@ void inventory_offer_handler(LLOfferInfo* info)
 		    LLPostponedNotification::add<LLPostponedOfferNotification>(p, info->mFromID, false);
 		}
 	}
+
+	LLFirstUse::newInventory();
 }
 
 bool lure_callback(const LLSD& notification, const LLSD& response)
@@ -4213,14 +4227,12 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data)
 
 	// Don't play sounds from a region with maturity above current agent maturity
 	LLVector3d pos_global = objectp->getPositionGlobal();
-	if( !gAgent.canAccessMaturityAtGlobal( pos_global ) )
+	if (gAgent.canAccessMaturityAtGlobal(pos_global))
 	{
-		return;
-	}
-	
 	// Add audioData starts a transfer internally.
 	sourcep->addAudioData(datap, FALSE);
 }
+}
 
 void process_attached_sound(LLMessageSystem *msg, void **user_data)
 {
@@ -6441,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);
@@ -6575,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/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index 7f7c24571729686171a15dcc100df3ef68e3424e..b91e407c6dc36734b5696082f5028921936cb4ad 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -304,7 +304,12 @@ void LLGridManager::initialize(const std::string& grid_file)
 		addGrid(grid);		
 	}
 
-	gSavedSettings.getControl("CurrentGrid")->getSignal()->connect(boost::bind(&LLGridManager::updateIsInProductionGrid, this));
+	LLControlVariablePtr grid_control = gSavedSettings.getControl("CurrentGrid");
+	if (grid_control.notNull())
+	{
+		grid_control->getSignal()->connect(boost::bind(&LLGridManager::updateIsInProductionGrid, this));
+	}
+
 	// since above only triggers on changes, trigger the callback manually to initialize state
 	updateIsInProductionGrid();
 
@@ -499,7 +504,8 @@ void LLGridManager::setGridChoice(const std::string& grid)
 		addGrid(grid_data);		
 	}
 	mGrid = grid;
-	gSavedSettings.setString("CurrentGrid", grid);
+	gSavedSettings.setString("CurrentGrid", grid); 
+	updateIsInProductionGrid();
 }
 
 std::string LLGridManager::getGridByLabel( const std::string &grid_label, bool case_sensitive)
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 741a9e6ec475c2e9da4492fd0a733eea3fe1859d..fd3e80d7559a704bb373085a3e2e7f2678df9671 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -4445,6 +4445,13 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow
 		mAudioSourcep = NULL;
 	}
 
+	if (mAudioSourcep && mAudioSourcep->isMuted() &&
+	    mAudioSourcep->getCurrentData() && mAudioSourcep->getCurrentData()->getID() == audio_uuid)
+	{
+		//llinfos << "Already having this sound as muted sound, ignoring" << llendl;
+		return;
+	}
+
 	getAudioSource(owner_id);
 
 	if (mAudioSourcep)
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index e9a4c4dd0a7a786110c53518646adeb55e8de386..99e869dafc153ad29347b5dbfbdde184920b1987 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -568,6 +568,24 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAME_CHANGED" << LL_ENDL;
 		};
 		break;
+
+		case MEDIA_EVENT_CLOSE_REQUEST:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL;
+		}
+		break;
+		
+		case MEDIA_EVENT_PICK_FILE_REQUEST:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL;
+		}
+		break;
+
+		case MEDIA_EVENT_GEOMETRY_CHANGE:
+		{
+			LL_DEBUGS("Media") << "Media event:  MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() << LL_ENDL;
+		}
+		break;
 	};
 }
 
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 36865b798c14124057e143ad9530eb70eaccb19e..275dfaa99605fcc790dfba0eab076218727fb1b5 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -1562,7 +1562,8 @@ bool LLUIImageList::initFromFile()
 	}
 
 	UIImageDeclarations images;
-	LLXUIParser::instance().readXUI(root, images, base_file_path);
+	LLXUIParser parser;
+	parser.readXUI(root, images, base_file_path);
 
 	if (!images.validateBlock()) return false;
 
@@ -1575,8 +1576,8 @@ bool LLUIImageList::initFromFile()
 
 	for (S32 cur_pass = PASS_DECODE_NOW; cur_pass < NUM_PASSES; cur_pass++)
 	{
-		for (LLInitParam::ParamIterator<UIImageDeclaration>::const_iterator image_it = images.textures().begin();
-			image_it != images.textures().end();
+		for (LLInitParam::ParamIterator<UIImageDeclaration>::const_iterator image_it = images.textures.begin();
+			image_it != images.textures.end();
 			++image_it)
 		{
 			std::string file_name = image_it->file_name.isProvided() ? image_it->file_name() : image_it->name();
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 12aa40341acc61c801f35706ffb59ebfd34d471f..64698ed00626e484c1621e7cfbab293a50f9f2b3 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -96,6 +96,7 @@
 #include "llface.h"
 #include "llfeaturemanager.h"
 #include "llfilepicker.h"
+#include "llfirstuse.h"
 #include "llfloater.h"
 #include "llfloaterbuildoptions.h"
 #include "llfloaterbuyland.h"
@@ -1534,7 +1535,7 @@ void LLViewerWindow::initBase()
 	// (But wait to add it as a child of the root view so that it will be in front of the 
 	// other views.)
 	MainPanel* main_view = new MainPanel();
-	LLUICtrlFactory::instance().buildPanel(main_view, "main_view.xml");
+	main_view->buildFromFile("main_view.xml");
 	main_view->setShape(full_window);
 	getRootView()->addChild(main_view);
 
@@ -1542,7 +1543,8 @@ void LLViewerWindow::initBase()
 	mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle();
 	mNonSideTrayView = main_view->getChildView("non_side_tray_view")->getHandle();
 	mFloaterViewHolder = main_view->getChildView("floater_view_holder")->getHandle();
-	mPopupView = main_view->getChild<LLPopupView>("popup_holder");
+	mPopupView = main_view->findChild<LLPopupView>("popup_holder");
+	mHintHolder = main_view->getChild<LLView>("hint_holder")->getHandle();
 
 	// Constrain floaters to inside the menu and status bar regions.
 	gFloaterView = main_view->getChild<LLFloaterView>("Floater View");
@@ -1580,7 +1582,7 @@ void LLViewerWindow::initBase()
 	LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLFloaterPreference::initBusyResponse));
 
 	// Add the progress bar view (startup view), which overrides everything
-	mProgressView = getRootView()->getChild<LLProgressView>("progress_view");
+	mProgressView = getRootView()->findChild<LLProgressView>("progress_view");
 	setShowProgress(FALSE);
 	setProgressCancelButtonVisible(FALSE);
 
@@ -2153,10 +2155,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)))
 		{
@@ -2192,7 +2204,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;
@@ -2410,7 +2421,7 @@ void append_xui_tooltip(LLView* viewp, LLToolTip::Params& params)
 {
 	if (viewp) 
 	{
-		if (!params.styled_message().empty())
+		if (!params.styled_message.empty())
 		{
 			params.styled_message.add().text("\n---------\n"); 
 		}
@@ -2445,6 +2456,18 @@ void LLViewerWindow::updateUI()
 
 	static std::string last_handle_msg;
 
+	if (gLoggedInTime.getStarted())
+	{
+		if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("DestinationGuideHintTimeout"))
+		{
+			LLFirstUse::notUsingDestinationGuide();
+		}
+		if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("SidePanelHintTimeout"))
+		{
+			LLFirstUse::notUsingSidePanel();
+		}
+	}
+
 	LLConsole::updateClass();
 
 	// animate layout stacks so we have up to date rect for world view
@@ -2505,6 +2528,17 @@ void LLViewerWindow::updateUI()
 	// only update mouse hover set when UI is visible (since we shouldn't send hover events to invisible UI
 	if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
 	{
+		// include all ancestors of captor_view as automatically having mouse
+		if (captor_view)
+		{
+			LLView* captor_parent_view = captor_view->getParent();
+			while(captor_parent_view)
+			{
+				mouse_hover_set.insert(captor_parent_view->getHandle());
+				captor_parent_view = captor_parent_view->getParent();
+			}
+		}
+
 		// aggregate visible views that contain mouse cursor in display order
 		LLPopupView::popup_list_t popups = mPopupView->getCurrentPopups();
 
@@ -3932,7 +3966,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	}
 	if(image_buffer_x > 0 && image_buffer_y > 0)
 	{
-		raw->resize(image_buffer_x, image_buffer_y, 3);
+	raw->resize(image_buffer_x, image_buffer_y, 3);
 	}
 	else
 	{
@@ -4266,14 +4300,6 @@ BOOL LLViewerWindow::getShowProgress() const
 	return (mProgressView && mProgressView->getVisible());
 }
 
-void LLViewerWindow::moveProgressViewToFront()
-{
-	if( mProgressView && mRootView )
-	{
-		mRootView->sendChildToFront(mProgressView);
-	}
-}
-
 void LLViewerWindow::setProgressString(const std::string& string)
 {
 	if (mProgressView)
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 21507699b0981a65e6d3fe9711e956654da3f3eb..633c3a41d2a27098da98ac0d50f78496e3957943 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -271,7 +271,6 @@ class LLViewerWindow : public LLWindowCallbacks
 													
 	void			setShowProgress(const BOOL show);
 	BOOL			getShowProgress() const;
-	void			moveProgressViewToFront();
 	void			setProgressString(const std::string& string);
 	void			setProgressPercent(const F32 percent);
 	void			setProgressMessage(const std::string& msg);
@@ -288,6 +287,7 @@ class LLViewerWindow : public LLWindowCallbacks
 	void			updateWorldViewRect(bool use_full_window=false);
 	LLView*			getNonSideTrayView() { return mNonSideTrayView.get(); }
 	LLView*			getFloaterViewHolder() { return mFloaterViewHolder.get(); }
+	LLView*			getHintHolder() { return mHintHolder.get(); }
 	BOOL			handleKey(KEY key, MASK mask);
 	void			handleScrollWheel	(S32 clicks);
 
@@ -447,6 +447,7 @@ class LLViewerWindow : public LLWindowCallbacks
 	LLHandle<LLView> mWorldViewPlaceholder;	// widget that spans the portion of screen dedicated to rendering the 3d world
 	LLHandle<LLView> mNonSideTrayView;		// parent of world view + bottom bar, etc...everything but the side tray
 	LLHandle<LLView> mFloaterViewHolder;	// container for floater_view
+	LLHandle<LLView> mHintHolder;			// container for hints
 	LLPopupView*	mPopupView;			// container for transient popups
 	
 	class LLDebugText* mDebugText; // Internal class for debug text
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 442b3c3e33267eb2eeb0f82096f5d6b1c80af8c3..1cb3962daaedc73e3a89035cb1c43688bb37c237 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -45,25 +45,27 @@ BOOL check_write(LLAPRFile* apr_file, void* src, S32 n_bytes)
 //---------------------------------------------------------------------------
 
 LLVOCacheEntry::LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp)
+	:
+	mLocalID(local_id),
+	mCRC(crc),
+	mHitCount(0),
+	mDupeCount(0),
+	mCRCChangeCount(0)
 {
-	mLocalID = local_id;
-	mCRC = crc;
-	mHitCount = 0;
-	mDupeCount = 0;
-	mCRCChangeCount = 0;
 	mBuffer = new U8[dp.getBufferSize()];
 	mDP.assignBuffer(mBuffer, dp.getBufferSize());
 	mDP = dp;
 }
 
 LLVOCacheEntry::LLVOCacheEntry()
+	:
+	mLocalID(0),
+	mCRC(0),
+	mHitCount(0),
+	mDupeCount(0),
+	mCRCChangeCount(0),
+	mBuffer(NULL)
 {
-	mLocalID = 0;
-	mCRC = 0;
-	mHitCount = 0;
-	mDupeCount = 0;
-	mCRCChangeCount = 0;
-	mBuffer = NULL;
 	mDP.assignBuffer(mBuffer, 0);
 }
 
@@ -74,7 +76,7 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
 
 	success = check_read(apr_file, &mLocalID, sizeof(U32));
 	if(success)
-{
+	{
 		success = check_read(apr_file, &mCRC, sizeof(U32));
 	}
 	if(success)
@@ -84,27 +86,24 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
 	if(success)
 	{
 		success = check_read(apr_file, &mDupeCount, sizeof(S32));
-}
+	}
 	if(success)
-{
+	{
 		success = check_read(apr_file, &mCRCChangeCount, sizeof(S32));
 	}
 	if(success)
 	{
 		success = check_read(apr_file, &size, sizeof(S32));
 
-	// Corruption in the cache entries
-	if ((size > 10000) || (size < 1))
-	{
-		// We've got a bogus size, skip reading it.
-		// We won't bother seeking, because the rest of this file
-		// is likely bogus, and will be tossed anyway.
-		llwarns << "Bogus cache entry, size " << size << ", aborting!" << llendl;
-		mLocalID = 0;
-		mCRC = 0;
-		mBuffer = NULL;
-		return;
-	}
+		// Corruption in the cache entries
+		if ((size > 10000) || (size < 1))
+		{
+			// We've got a bogus size, skip reading it.
+			// We won't bother seeking, because the rest of this file
+			// is likely bogus, and will be tossed anyway.
+			llwarns << "Bogus cache entry, size " << size << ", aborting!" << llendl;
+			success = FALSE;
+		}
 	}
 	if(success && size > 0)
 	{
@@ -113,8 +112,8 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
 
 		if(success)
 		{
-	mDP.assignBuffer(mBuffer, size);
-}
+			mDP.assignBuffer(mBuffer, size);
+		}
 		else
 		{
 			delete[] mBuffer ;
@@ -126,6 +125,9 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
 	{
 		mLocalID = 0;
 		mCRC = 0;
+		mHitCount = 0;
+		mDupeCount = 0;
+		mCRCChangeCount = 0;
 		mBuffer = NULL;
 	}
 }
@@ -258,7 +260,8 @@ void LLVOCache::destroyClass()
 LLVOCache::LLVOCache():
 	mInitialized(FALSE),
 	mReadOnly(TRUE),
-	mNumEntries(0)
+	mNumEntries(0),
+	mCacheSize(1)
 {
 	mEnabled = gSavedSettings.getBOOL("ObjectCacheEnabled");
 	mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
@@ -294,8 +297,8 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)
 	{
 		LLFile::mkdir(mObjectCacheDirName);
 	}	
-	mCacheSize = llmin(size, MAX_NUM_OBJECT_ENTRIES) ;
-	mCacheSize = llmax(mCacheSize, NUM_ENTRIES_TO_PURGE);
+	mCacheSize = llclamp(size,
+			     MAX_NUM_OBJECT_ENTRIES, NUM_ENTRIES_TO_PURGE);
 
 	mMetaInfo.mVersion = cache_version;
 	readCacheHeader();
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/llweb.cpp b/indra/newview/llweb.cpp
index 54accfe4ee5f3c91dc7954ef7e2784d0f457dc33..73a37a6993210a96a3230cad85aded0eb270fd2f 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -78,36 +78,44 @@ void LLWeb::initClass()
 
 
 // static
-void LLWeb::loadURL(const std::string& url)
+void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid)
 {
-	if (gSavedSettings.getBOOL("UseExternalBrowser"))
+	if(target == "_internal")
+	{
+		// Force load in the internal browser, as if with a blank target.
+		loadURLInternal(url, "", uuid);
+	}
+	else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
 	{
 		loadURLExternal(url);
 	}
 	else
 	{
-		loadURLInternal(url);
+		loadURLInternal(url, target, uuid);
 	}
 }
 
 
 // static
-void LLWeb::loadURLInternal(const std::string &url)
+void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
 {
-	LLFloaterReg::showInstance("media_browser", url);
+	LLFloaterMediaBrowser::create(url, target, uuid);
 }
 
 
 // static
-void LLWeb::loadURLExternal(const std::string& url)
+void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid)
 {
-	loadURLExternal(url, true);
+	loadURLExternal(url, true, uuid);
 }
 
 
 // static
-void LLWeb::loadURLExternal(const std::string& url, bool async)
+void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid)
 {
+	// Act like the proxy window was closed, since we won't be able to track targeted windows in the external browser.
+	LLViewerMedia::proxyWindowClosed(uuid);
+	
 	LLSD payload;
 	payload["url"] = url;
 	LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, boost::bind(on_load_url_external_response, _1, _2, async));
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index 1ba856babebaffe6c00ec2f97f99cb50bcf83c33..291537658329e4c7f4f80fe2a012010764bba407 100644
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -43,15 +43,19 @@ class LLWeb
 	static void initClass();
 	
 	/// Load the given url in the user's preferred web browser
-	static void loadURL(const std::string& url);
+	static void loadURL(const std::string& url, const std::string& target, const std::string& uuid = LLStringUtil::null);
+	static void loadURL(const std::string& url) { loadURL(url, LLStringUtil::null); }
 	/// Load the given url in the user's preferred web browser	
-	static void loadURL(const char* url) { loadURL( ll_safe_string(url) ); }
+	static void loadURL(const char* url, const std::string& target) { loadURL( ll_safe_string(url), target); }
+	static void loadURL(const char* url) { loadURL( ll_safe_string(url), LLStringUtil::null ); }
 	/// Load the given url in the Second Life internal web browser
-	static void loadURLInternal(const std::string &url);
+	static void loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
+	static void loadURLInternal(const std::string &url) { loadURLInternal(url, LLStringUtil::null); }
 	/// Load the given url in the operating system's web browser, async if we want to return immediately
 	/// before browser has spawned
-	static void loadURLExternal(const std::string& url);
-	static void loadURLExternal(const std::string& url, bool async);
+	static void loadURLExternal(const std::string& url) { loadURLExternal(url,  LLStringUtil::null); };
+	static void loadURLExternal(const std::string& url, const std::string& uuid);
+	static void loadURLExternal(const std::string& url, bool async, const std::string& uuid = LLStringUtil::null);
 
 	/// Returns escaped url (eg, " " to "%20") - used by all loadURL methods
 	static std::string escapeURL(const std::string& url);
diff --git a/indra/newview/llwebsharing.cpp b/indra/newview/llwebsharing.cpp
index 2b9e5cc8cb2ea233261853cd915021c5ee15c194..43b1a320c34b2d3b2f4751e50b39aa49e029aa06 100644
--- a/indra/newview/llwebsharing.cpp
+++ b/indra/newview/llwebsharing.cpp
@@ -3,31 +3,25 @@
  * @author Aimee
  * @brief Web Snapshot Sharing
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
 
diff --git a/indra/newview/llwebsharing.h b/indra/newview/llwebsharing.h
index 70046ff1d83b3ef59736b99b2935006554315463..ad9c99c224e7fd9031efd66c1819d6917bad71bc 100644
--- a/indra/newview/llwebsharing.h
+++ b/indra/newview/llwebsharing.h
@@ -3,31 +3,25 @@
  * @author Aimee
  * @brief Web Snapshot Sharing
  *
- * $LicenseInfo:firstyear=2010&license=viewergpl$
- * 
- * Copyright (c) 2010, Linden Research, Inc.
- * 
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
  * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab.  Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
  * 
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  * 
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  * 
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
 
diff --git a/indra/newview/skins/default/textures/ff_edit_mine.tga b/indra/newview/skins/default/textures/ff_edit_mine.tga
deleted file mode 100644
index 8f0c35b98fafe79c785401dd11617bd113f84395..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/ff_edit_mine.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_edit_mine_button.tga b/indra/newview/skins/default/textures/ff_edit_mine_button.tga
deleted file mode 100644
index 07627a65c5324d62dede19b26372595bb614f910..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/ff_edit_mine_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_edit_theirs.tga b/indra/newview/skins/default/textures/ff_edit_theirs.tga
deleted file mode 100644
index 005ada2deaa121415d9115313ce1d03d456ee789..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/ff_edit_theirs.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_edit_theirs_button.tga b/indra/newview/skins/default/textures/ff_edit_theirs_button.tga
deleted file mode 100644
index 798ef641d36954c2911df04035662a747f730732..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/ff_edit_theirs_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_online_status_button.tga b/indra/newview/skins/default/textures/ff_online_status_button.tga
deleted file mode 100644
index 9076df6b9e82bb6147915a27eeff096c60594b39..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/ff_online_status_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_visible_map.tga b/indra/newview/skins/default/textures/ff_visible_map.tga
deleted file mode 100644
index a4dad78dad145268a5db9afb68ad4f31c38f54b0..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/ff_visible_map.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_visible_map_button.tga b/indra/newview/skins/default/textures/ff_visible_map_button.tga
deleted file mode 100644
index 8d13adee3f0f27a5ceb3fabc53861dd6610cedc6..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/ff_visible_map_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_visible_online.tga b/indra/newview/skins/default/textures/ff_visible_online.tga
deleted file mode 100644
index 74e3a4e318faa0df3f26da33eed29bbf5a10f326..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/ff_visible_online.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/ff_visible_online_button.tga b/indra/newview/skins/default/textures/ff_visible_online_button.tga
deleted file mode 100644
index 08a6cbedd9b84c4ca567cd4a211ce4a2101c1c3f..0000000000000000000000000000000000000000
Binary files a/indra/newview/skins/default/textures/ff_visible_online_button.tga and /dev/null differ
diff --git a/indra/newview/skins/default/textures/icons/edit_mine.png b/indra/newview/skins/default/textures/icons/edit_mine.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0bc7efd255dbc817b342b922ddb5d3904df9ec8
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/edit_mine.png differ
diff --git a/indra/newview/skins/default/textures/icons/edit_theirs.png b/indra/newview/skins/default/textures/icons/edit_theirs.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed36ad7cfcec78f3d68bed969ea720e05d94ad1d
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/edit_theirs.png differ
diff --git a/indra/newview/skins/default/textures/icons/pop_up_caution.png b/indra/newview/skins/default/textures/icons/pop_up_caution.png
new file mode 100644
index 0000000000000000000000000000000000000000..78b681cb3365a4e25faaafe8c0e9ab6d2aa17802
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/pop_up_caution.png differ
diff --git a/indra/newview/skins/default/textures/icons/see_me_online.png b/indra/newview/skins/default/textures/icons/see_me_online.png
new file mode 100644
index 0000000000000000000000000000000000000000..52dc2ae74f5f8b10216d31e7c67a577a6207d941
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/see_me_online.png differ
diff --git a/indra/newview/skins/default/textures/icons/see_on_map.png b/indra/newview/skins/default/textures/icons/see_on_map.png
new file mode 100644
index 0000000000000000000000000000000000000000..200e64981883774fc8a59c8c7cc0cafbc9b8489a
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/see_on_map.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 273531f9b291e422a9ae4b7a025dcfa08b5abbb5..925e2b5b046a6e59da7e02f4f660fbbae413001d 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -360,10 +360,10 @@ with the same filename but different name
   <texture name="Pause_Over" file_name="icons/Pause_Over.png" preload="false" />
   <texture name="Pause_Press" file_name="icons/Pause_Press.png" preload="false" />
 
-  <texture name="Permission_Visible_Online" file_name="ff_visible_online_button.tga" preload="false" />
-  <texture name="Permission_Visible_Map" file_name="ff_visible_map_button.tga" preload="false" />
-  <texture name="Permission_Edit_Objects_Mine" file_name="ff_edit_mine_button.tga" preload="false" />
-  <texture name="Permission_Edit_Objects_Theirs" file_name="ff_edit_theirs_button.tga" preload="false" />
+  <texture name="Permission_Visible_Online" file_name="icons/see_me_online.png" preload="false" />
+  <texture name="Permission_Visible_Map" file_name="icons/see_on_map.png" preload="false" />
+  <texture name="Permission_Edit_Objects_Mine" file_name="icons/edit_mine.png" preload="false" />
+  <texture name="Permission_Edit_Objects_Theirs" file_name="icons/edit_theirs.png" preload="false" />
 
   <texture name="Play_Off" file_name="icons/Play_Off.png" preload="false" />
   <texture name="Play_Over" file_name="icons/Play_Over.png" preload="false" />
@@ -658,4 +658,13 @@ with the same filename but different name
   <texture name="buy_over" file_name="widgets/buy_over.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/>
   <texture name="buy_press" file_name="widgets/buy_press.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/>
   
+  <texture name="hint_background" file_name="windows/hint_background.png" preload="false" scale.left="8" scale.top="70" scale.right="195" scale.bottom="11"/>
+  <texture name="hint_arrow_left" file_name="windows/hint_arrow_left.png" preload="false"/>
+  <texture name="hint_arrow_right" file_name="windows/hint_arrow_right.png" preload="false"/>
+  <texture name="hint_arrow_up" file_name="windows/hint_arrow_up.png" preload="false"/>
+  <texture name="hint_arrow_down" file_name="windows/hint_arrow_down.png" preload="false"/>
+  <texture name="hint_arrow_lower_left" file_name="windows/hint_arrow_lower_left.png" preload="false"/>
+
+  <texture name="Yellow_Gradient" file_name="windows/yellow_gradient.png"/>
+  <texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>
 </textures>
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_down.png b/indra/newview/skins/default/textures/windows/hint_arrow_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..ddadef0978227caddb51147cef2acd510856179b
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_down.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_left.png
new file mode 100644
index 0000000000000000000000000000000000000000..2794b967e826769f649d20683dccbf5f60eca1a1
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_left.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png
new file mode 100644
index 0000000000000000000000000000000000000000..0dfc99898d41ef4a26360ec4361c9abd8a53dcf6
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_right.png b/indra/newview/skins/default/textures/windows/hint_arrow_right.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ac57f805b70d95cdfcc536deeb8067a5ef67bea
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_right.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_up.png b/indra/newview/skins/default/textures/windows/hint_arrow_up.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb3e1c07fa73a141bd215d071be1eb300b912fb9
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_arrow_up.png differ
diff --git a/indra/newview/skins/default/textures/windows/hint_background.png b/indra/newview/skins/default/textures/windows/hint_background.png
new file mode 100644
index 0000000000000000000000000000000000000000..cfac5deacbab19226e9578c41da9a4dc6ceedaf2
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/hint_background.png differ
diff --git a/indra/newview/skins/default/textures/windows/yellow_gradient.png b/indra/newview/skins/default/textures/windows/yellow_gradient.png
new file mode 100644
index 0000000000000000000000000000000000000000..5fd847aaeff58a6e5d7a5b3d11908bb169554d60
Binary files /dev/null and b/indra/newview/skins/default/textures/windows/yellow_gradient.png differ
diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml
deleted file mode 100644
index a47e0d33df9f21ce319e1de108825d999735d09f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="UDSEENDE">
-	<tab_container name="customize tab container">
-		<text label="Krops Dele" name="body_parts_placeholder">
-			Kropsdele
-		</text>
-		<panel label="Kropsbygning" name="Shape">
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-			<button label="Krop" label_selected="Krop" name="Body"/>
-			<button label="Hoved" label_selected="Hoved" name="Head"/>
-			<button label="Øjne" label_selected="Øjne" name="Eyes"/>
-			<button label="Ører" label_selected="Ører" name="Ears"/>
-			<button label="Næse" label_selected="Næse" name="Nose"/>
-			<button label="Mund" label_selected="Mund" name="Mouth"/>
-			<button label="Kinder" label_selected="Kinder" name="Chin"/>
-			<button label="Overkrop" label_selected="Overkrop" name="Torso"/>
-			<button label="Ben" label_selected="Ben" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Kvinde" name="radio" value="0"/>
-				<radio_item label="Mand" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny kropsbygning ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Figur:
-			</text>
-			<button label="Lav ny krop" label_selected="Lav ny krop" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-		</panel>
-		<panel label="Hud" name="Skin">
-			<button label="Hudfarve" label_selected="Hudfarve" name="Skin Color"/>
-			<button label="Detaljer" label_selected="Detaljer" name="Face Detail"/>
-			<button label="Sminke" label_selected="Sminke" name="Makeup"/>
-			<button label="Kropsdetaljer" label_selected="Kropsdetaljer" name="Body Detail"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny hud ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Hud:
-			</text>
-			<texture_picker label="Tatoveringer hoved" name="Head Tattoos" tool_tip="Klik for at vælge et billede" width="98"/>
-			<texture_picker label="Tatover. overkrop" name="Upper Tattoos" tool_tip="Klik for at vælge et billede" width="98"/>
-			<texture_picker label="Tatover. underkrop" name="Lower Tattoos" tool_tip="Klik for at vælge et billede" width="98"/>
-			<button label="Lav ny hud" label_selected="Lav nyt hud" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="HÃ¥r" name="Hair">
-			<button label="Farve" label_selected="Farve" name="Color"/>
-			<button label="Stil" label_selected="Stil" name="Style"/>
-			<button label="Øjenbryn" label_selected="Øjenbryn" name="Eyebrows"/>
-			<button label="Skæg" label_selected="Skæg" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt hår ved at trække et sådant fra din beholdning over på din avatar. Du kan også oprette et fra bunden og bagefter &apos;tage det på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				HÃ¥r:
-			</text>
-			<texture_picker label="Tekstur" name="Texture" tool_tip="Klik for at vælge et billede"/>
-			<button label="Lav nyt hår" label_selected="Lav nyt hår" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Øjne" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt sæt øjne ved at trække et sådant par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Øjne:
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Klik for at vælge et billede"/>
-			<button label="Lav nye øjne" label_selected="Lav nye øjne" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<text label="Tøje" name="clothes_placeholder">
-			Tøj
-		</text>
-		<panel label="Trøje" name="Shirt">
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Lav ny trøje" label_selected="Lav ny trøje" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny trøje ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Trøje:
-			</text>
-		</panel>
-		<panel label="Bukser" name="Pants">
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Lav nye bukser" label_selected="Lav nye bukser" name="Create New"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt par bukser ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Bukser:
-			</text>
-		</panel>
-		<panel label="Sko" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt par sko ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<button label="Lav nye sko" label_selected="Lav nye sko" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Sko:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Strømper" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt par sokker ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<button label="Lav nye strømper" label_selected="Lav nye strømper" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Strømper:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Jakke" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny jakke ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="Lav ny jakke" label_selected="Lav ny jakke" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Jakke:
-			</text>
-			<texture_picker label="Stof øverst" name="Upper Fabric" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Stof nederst" name="Lower Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Handsker" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et sæt nye handsker ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<button label="Lav nye handsker" label_selected="Lav nye handsker" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Handsker:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Undertrøje" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny undertrøje ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="Lav ny undertrøje" label_selected="Lav ny undertrøje" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Undertrøje:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Underbukser" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg et nyt par underbukser ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter &apos;tage dem på&apos;.
-			</text>
-			<button label="Lav nye underbukser" label_selected="Lav nye underbukser" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Underbukser:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Nederdel" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan ikke redigeres
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Fundet i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny nederdel ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="Lav ny nederdel" label_selected="Lav ny nederdel" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at redigere denne del.
-			</text>
-			<text name="Item Action Label">
-				Nederdel:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/>
-			<color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Annullér" label_selected="Annullér" name="Revert"/>
-		</panel>
-		<panel label="Tatovering" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: kan ikke ændre
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Placeret i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny tatovering ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="lav ny tatovering" label_selected="Lav ny tatovering" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at ændre denne.
-			</text>
-			<text name="Item Action Label">
-				Tatovering:
-			</text>
-			<texture_picker label="Tatovering - hovede" name="Head Tattoo" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Øvre tatovering" name="Upper Tattoo" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Nedre tatovering" name="Lower Tattoo" tool_tip="Klik for at vælge et billede"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Vend tilbage" label_selected="Vend tilbage" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: kan ikke ændre
-			</text>
-			<text name="title_loading">
-				[DESC]: indlæser...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: ikke båret
-			</text>
-			<text name="path">
-				Placeret i [PATH]
-			</text>
-			<text name="not worn instructions">
-				Vælg en ny &apos;alpha maske&apos; ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter &apos;tage den på&apos;.
-			</text>
-			<button label="Lav ny &quot;Alpha&quot;" label_selected="Lav ny &quot;Alpha&quot;" name="Create New"/>
-			<text name="no modify instructions">
-				Du har ikke rettigheder til at ændre denne.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Alpha - nedre" name="Lower Alpha" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Øvre alpha" name="Upper Alpha" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Alpha - hoved" name="Head Alpha" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Alpha - øjne" name="Eye Alpha" tool_tip="Klik for at vælge et billede"/>
-			<texture_picker label="Alpha - hår" name="Hair Alpha" tool_tip="Klik for at vælge et billede"/>
-			<button label="Tag af" label_selected="Tag af" name="Take Off"/>
-			<button label="Gem" label_selected="Gem" name="Save"/>
-			<button label="Gem som..." label_selected="Gem som..." name="Save As"/>
-			<button label="Vend tilbage" label_selected="Vend tilbage" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container name="panel_container"/>
-	<button label="Script info" label_selected="Script info" name="script_info" tool_tip="Vis scripts vedhæftet på din avatar"/>
-	<button label="Lav sæt" label_selected="Lav sæt" name="make_outfit_btn"/>
-	<button label="Annullér" label_selected="Annullér" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_device_settings.xml b/indra/newview/skins/default/xui/da/floater_device_settings.xml
deleted file mode 100644
index 06d431a8f98c9490c30ac3774e33d792067e7e78..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="STEMME CHAT ENHEDSOPSÆTNING"/>
diff --git a/indra/newview/skins/default/xui/da/floater_im.xml b/indra/newview/skins/default/xui/da/floater_im.xml
deleted file mode 100644
index 776bc9ab1391fb1a61a3d1cd197e603a4a24db3a..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Personlig samtale (IM)">
-	<string name="only_user_message">
-		Du er den eneste beboer i denne session.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] er ikke logget på.
-	</string>
-	<string name="invite_message">
-		Tryk på [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat.
-	</string>
-	<string name="muted_message">
-		Du har blokeret denne beboer. Hvis du sender en besked til beboeren vil dette automatisk medføre fjernelse af blokeringen
-	</string>
-	<string name="generic_request_error">
-		Kunne ikke etablere forbindelse, prøv igen senere
-	</string>
-	<string name="insufficient_perms_error">
-		Du har ikke de fornødne rettigheder.
-	</string>
-	<string name="session_does_not_exist_error">
-		Denne samtale er lukket ned
-	</string>
-	<string name="no_ability_error">
-		Du har ikke den mulighed.
-	</string>
-	<string name="not_a_mod_error">
-		Du er ikke moderator for denne samtale.
-	</string>
-	<string name="muted_error">
-		Du er blevet &quot;blokeret&quot;.
-	</string>
-	<string name="add_session_event">
-		Kunne ikke tilføje beboere til chat session med [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Ikke muligt at sende din besked til samtalen med [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Du er blevet fjernet fra gruppen.
-	</string>
-	<string name="close_on_no_ability">
-		Du har ikke længere mulighed for at deltage i samtalen
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/da/floater_im_session.xml b/indra/newview/skins/default/xui/da/floater_im_session.xml
index aa7df6ad2b951ff9ac73ecd64a7409c8630fab19..16df7e4b0311e3080fdaa311399518bcfe4ce61f 100644
--- a/indra/newview/skins/default/xui/da/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/da/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="IM kontrol panel" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="Til" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/da/floater_my_friends.xml b/indra/newview/skins/default/xui/da/floater_my_friends.xml
deleted file mode 100644
index c3db53ce6313f8339380831d1ed9ca654e7cc227..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="KONTAKTER">
-	<tab_container name="friends_and_groups">
-		<panel label="Venner" name="friends_panel"/>
-		<panel label="Grupper" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml
deleted file mode 100644
index 0bcb96b151ad388099cc31120ac95bcdc8aa8f81..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Gem sæt">
-	<button label="Gem" label_selected="Gem" name="Save"/>
-	<button label="Annullér" label_selected="Annullér" name="Cancel"/>
-	<text name="Save item as:">
-		Gem hvad jeg har på som et nyt sæt:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (ny)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_classified.xml b/indra/newview/skins/default/xui/da/floater_preview_classified.xml
deleted file mode 100644
index bc232f3e9f9d0df33cff3198328d4d9f97357cf2..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="ANNONCE INFORMATION">
-	<floater.string name="Title">
-		Annonce: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_event.xml b/indra/newview/skins/default/xui/da/floater_preview_event.xml
deleted file mode 100644
index 3e870b58ae5f5f1521db609c91b3ac267ce76a5d..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="EVENT INFORMATION">
-	<floater.string name="Title">
-		Event: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml
deleted file mode 100644
index 9892a92e4c2dc2520a2d1326c00d9f95e75c659d..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="BEVÆGELSE GENVEJ"/>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 4d4cca1d90a3a51b78d656e29a3fa0260d0384a7..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GENVEJ BEVÆGELSER">
-	<text name="trigger_label">
-		Chat:
-	</text>
-	<text name="key_label">
-		Tastatur:
-	</text>
-	<combo_box label="Intet" name="modifier_combo"/>
-	<combo_box label="Intet" name="key_combo"/>
-	<text name="replace_text" tool_tip="Erstat udløser ord med disse ord. For eksempel uløser &quot;hello&quot; erstat med &quot;hej&quot; vil ændre chat &apos;Jeg ville bare sige hello&apos; til &apos;Jeg ville bare sige hej&apos; samtidig med bevægelsen afspilles!">
-		Erstat:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Erstat udløser ord med disse ord. For eksempel uløser &quot;hello&quot; erstat med &quot;hej&quot; vil ændre chat &apos;Jeg ville bare sige hello&apos; til &apos;Jeg ville bare sige hej&apos; samtidig med bevægelsen afspilles!"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml
deleted file mode 100644
index 9892a92e4c2dc2520a2d1326c00d9f95e75c659d..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="BEVÆGELSE GENVEJ"/>
diff --git a/indra/newview/skins/default/xui/da/floater_statistics.xml b/indra/newview/skins/default/xui/da/floater_statistics.xml
deleted file mode 100644
index 8c33f3ecb35cad4f90c26c87ccf4a2c09a3764b4..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTIK"/>
diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
index 2e59dfd649e9d6f6c4f0e09ea1640800a08b251f..4c956f13a7c03f88f9be424119069726622ca182 100644
--- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Min avatar:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Forlad opkald" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+			<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="Forlad opkald" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml
deleted file mode 100644
index 17d5b9c205184905779c463a28aa851a59d4b3b2..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="">
-	<button label="Gem" label_selected="Gem" name="Save"/>
-	<button label="Annullér" label_selected="Annullér" name="Cancel"/>
-	<text name="Save item as:">
-		Gem genstand i min beholdning som:
-	</text>
-	<line_editor name="name ed">
-		Ny [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/panel_audio_device.xml b/indra/newview/skins/default/xui/da/panel_audio_device.xml
deleted file mode 100644
index f6d817540e9f7b3f56e17d8f4e721e940d8e24cb..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Lydenheder
-	</text>
-	<text name="Input device (microphone):">
-		Input enhed (mikrofon):
-	</text>
-	<text name="Output device (speakers):">
-		Output enhed (højtalere):
-	</text>
-	<text name="Input level:">
-		Input niveau
-	</text>
-	<text_editor name="voice_intro_text1">
-		Med denne skyder kan du regulere hvor højt du lyder i forhold til andre beboere. for at test input niveau kan du blot tale i mikrofon.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Ændre lydstyrke med denne skyder" />
-	<text name="wait_text">
-		Vent venligst
-	</text>
-	<string name="default_text">
-		Standard
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_friends.xml b/indra/newview/skins/default/xui/da/panel_friends.xml
deleted file mode 100644
index a1a25bdc77533006b4c786c741f8ab5c8c7fa878..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Flere venner
-	</string>
-	<scroll_list name="friend_list" tool_tip="Hold Shift eller Ctrl nede imens du klikker for at vælge flere venner">
-		<column name="icon_online_status" tool_tip="Online status"/>
-		<column label="Name" name="friend_name" tool_tip="Navn"/>
-		<column name="icon_visible_online" tool_tip="Venner kan se at du er online"/>
-		<column name="icon_visible_map" tool_tip="Venner kan finde dig på kortet"/>
-		<column name="icon_edit_mine" tool_tip="Venner kan rette i, slette eller tage dine objekter"/>
-		<column name="icon_edit_theirs" tool_tip="Du kan rette i denne vens objekter"/>
-	</scroll_list>
-	<button label="IM" name="im_btn" tool_tip="Skriv en personlig besked (IM)"/>
-	<button label="Profil" name="profile_btn" tool_tip="Vis billede, grupper og anden information"/>
-	<button label="Teleport" name="offer_teleport_btn" tool_tip="Tilbyd denne ven at blive teleporteret til din nuværende position"/>
-	<button label="Betal" name="pay_btn" tool_tip="Giv Linden dollars (L$) til denne ven"/>
-	<button label="Fjern" name="remove_btn" tool_tip="Fjern denne beboer fra din venneliste"/>
-	<button label="Tilføj" name="add_btn" tool_tip="Tilbyd venskab til en beboer"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_groups.xml b/indra/newview/skins/default/xui/da/panel_groups.xml
deleted file mode 100644
index 5877226e5704228925228edb1caa953ede05e641..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/panel_groups.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="groups">
-	<scroll_list name="group list">
-		<column label="" name="name" />
-	</scroll_list>
-	<text name="groupdesc" width="300">
-		Din nuværende aktive gruppe er fremhævet i listen.
-	</text>
-	<text name="groupcount" width="300">
-		Du er medlem i [COUNT] grupper (ud af maksimalt [MAX]).
-	</text>
-	<button label="IM/Opkald" name="IM" tool_tip="Ã…bner IM session" />
-	<button label="Info" name="Info" />
-	<button label="Aktivér" name="Activate" />
-	<button label="Forlad" name="Leave" />
-	<button label="Opret..." name="Create" />
-	<button label="Søg..." name="Search..." />
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_nearby_chat.xml b/indra/newview/skins/default/xui/da/panel_nearby_chat.xml
deleted file mode 100644
index 7f94345976ddfeaaaedfd3cd8fb7d9f33f7524c3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			CHAT NÆRVED
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_notes.xml b/indra/newview/skins/default/xui/da/panel_notes.xml
index 5b3a2d09066de927b0e5bf3f9bbec08f081e046e..00128497ba41b61bdd3813e98147035b1dab146b 100644
--- a/indra/newview/skins/default/xui/da/panel_notes.xml
+++ b/indra/newview/skins/default/xui/da/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Noter &amp; Privatliv" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Min private noter:"/>
@@ -11,13 +11,13 @@
 					<check_box label="Editére, slette og tage mine objekter" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
 			<button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til beboer"/>
 			<button label="IM" name="im" tool_tip="Ã…ben session med personlig besked (IM)"/>
 			<button label="Kald" name="call" tool_tip="Opkald til denne beboer"/>
 			<button label="Kort" name="show_on_map_btn" tool_tip="Vis beboer på kort"/>
 			<button label="Teleport" name="teleport" tool_tip="Tilbyd teleport"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_online_status.xml b/indra/newview/skins/default/xui/da/panel_online_status.xml
deleted file mode 100644
index fdc489f375ec6eabd344b633f4fb6eb00c3ccef3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
index d3b3c7e21ec149075592841b080b3cc0fe734e71..cfb32500c6568c9db3fb8eac4195dea719169406 100644
--- a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Medie hentes"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml b/indra/newview/skins/default/xui/da/panel_region_general_layout.xml
deleted file mode 100644
index f3c32d6169732b2c54ff9a0a56945c50d83469fe..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Region" name="General">
-	<text name="region_text_lbl">
-		Region:
-	</text>
-	<text name="region_text">
-		ukendt
-	</text>
-	<text name="version_channel_text_lbl">
-		Version:
-	</text>
-	<text name="version_channel_text">
-		ukendt
-	</text>
-	<text name="region_type_lbl">
-		Type:
-	</text>
-	<text name="region_type">
-		ukendt
-	</text>
-	<check_box label="Blokér for redigering af terræn" name="block_terraform_check"/>
-	<check_box label="Blokér for flyvning" name="block_fly_check"/>
-	<check_box label="Tillad skader" name="allow_damage_check"/>
-	<check_box label="Begræns skubning" name="restrict_pushobject"/>
-	<check_box label="Tillad at sælge land" name="allow_land_resell_check"/>
-	<check_box label="Tillad at samle/dele land" name="allow_parcel_changes_check"/>
-	<check_box label="Blokér visning af land i Søgning" name="block_parcel_search_check" tool_tip="Lad beboere se denne region og dens parceller i søgeresultater"/>
-	<spinner label="Max besøgende" name="agent_limit_spin"/>
-	<spinner label="Objekt bonus" name="object_bonus_spin"/>
-	<text label="Rating" name="access_text">
-		Rating:
-	</text>
-	<combo_box label="Moderat" name="access_combo">
-		<combo_box.item label="Voksent" name="Adult"/>
-		<combo_box.item label="Moderat" name="Mature"/>
-		<combo_box.item label="Generel" name="PG"/>
-	</combo_box>
-	<button label="Gem" name="apply_btn"/>
-	<button label="Teleportér en beboer hjem..." name="kick_btn"/>
-	<button label="Teleportér alle beboere hjem..." name="kick_all_btn"/>
-	<button label="Send besked til region..." name="im_btn"/>
-	<button label="Vedligehold telehub..." name="manage_telehub_btn"/>
-</panel>
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_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml
deleted file mode 100644
index 36515777978d50b9671122bc3c1f4f7e2b360724..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_customize.xml
+++ /dev/null
@@ -1,529 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="AUSSEHEN">
-	<tab_container name="customize tab container">
-		<text label="Körperteile" name="body_parts_placeholder">
-			Körperteile
-		</text>
-		<panel label="Form" name="Shape">
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-			<button label="Körper" label_selected="Körper" name="Body"/>
-			<button label="Kopf" label_selected="Kopf" name="Head"/>
-			<button label="Augen" label_selected="Augen" name="Eyes"/>
-			<button label="Ohren" label_selected="Ohren" name="Ears"/>
-			<button label="Nase" label_selected="Nase" name="Nose"/>
-			<button label="Mund" label_selected="Mund" name="Mouth"/>
-			<button label="Kinn" label_selected="Kinn" name="Chin"/>
-			<button label="Oberkörper" label_selected="Oberkörper" name="Torso"/>
-			<button label="Beine" label_selected="Beine" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Weiblich" name="radio" value="0"/>
-				<radio_item label="Männlich" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Form aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label">
-				Form:
-			</text>
-			<button label="Neue Form/Gestalt" label_selected="Neue Form/Gestalt" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-		</panel>
-		<panel label="Haut" name="Skin">
-			<button label="Hautfarbe" label_selected="Hautfarbe" left="2" name="Skin Color" width="92"/>
-			<button label="Gesichtsdetails" label_selected="Gesichtsdetails" left="2" name="Face Detail" width="92"/>
-			<button label="Make-Up" label_selected="Make-Up" left="2" name="Makeup" width="92"/>
-			<button label="Körperdetails" label_selected="Körperdetails" left="2" name="Body Detail" width="92"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Skin (Haut) aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Haut:
-			</text>
-			<texture_picker label="Kopftattoo" name="Head Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<texture_picker label="Obere Tattoos" name="Upper Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<texture_picker label="Untere Tattoos" name="Lower Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<button label="Neue Haut" label_selected="Neue Haut" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Haar" name="Hair">
-			<button label="Farbe" label_selected="Farbe" name="Color"/>
-			<button label="Stil" label_selected="Stil" name="Style"/>
-			<button label="Augenbrauen" label_selected="Augenbrauen" name="Eyebrows"/>
-			<button label="Gesichtshaar" label_selected="Gesichtshaar" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie Haar aus dem Inventar auf Ihren Avatar, um dieses anzulegen. Sie können aber auch neues Haar erstellen und anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Haare:
-			</text>
-			<texture_picker label="Textur" name="Texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<button label="Neue Haare" label_selected="Neue Haare" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Augen" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie neue Augen aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch neue Augen erstellen und diese anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Augen:
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<button label="Neue Augen" label_selected="Neue Augen" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<text label="Kleidung" name="clothes_placeholder">
-			Kleidung
-		</text>
-		<panel label="Hemd" name="Shirt">
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button label="Neues Hemd" label_selected="Neues Hemd" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie ein neues Hemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Hemd erstellen und dieses anlegen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Hemd:
-			</text>
-		</panel>
-		<panel label="Hose" name="Pants">
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button label="Neue Hose" label_selected="Neue Hose" name="Create New"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Hose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen.
-			</text>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Hose:
-			</text>
-		</panel>
-		<panel label="Schuhe" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie neue Schuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue Schuhe erstellen und diese anlegen.
-			</text>
-			<button label="Neue Schuhe" label_selected="Neue Schuhe" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Schuhe:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Socken" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie neue Socken aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen.
-			</text>
-			<button label="Neue Socken" label_selected="Neue Socken" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Socken:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Jacke" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Jacke aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen.
-			</text>
-			<button label="Neue Jacke" label_selected="Neue Jacke" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Jacke:
-			</text>
-			<texture_picker label="Stoff: oben" name="Upper Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<texture_picker label="Stoff: unten" name="Lower Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Handschuhe" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie neue Handschuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen.
-			</text>
-			<button label="Neue Handschuhe" label_selected="Neue Handschuhe" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Handschuhe:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Unterhemd" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie ein neues Unterhemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Unterhemd erstellen und dieses anziehen.
-			</text>
-			<button label="Neues Unterhemd" label_selected="Neues Unterhemd" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Unterhemd:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Unterhose" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Unterhose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen.
-			</text>
-			<button label="Neue Unterhose" label_selected="Neue Unterhose" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Unterhose:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Rock" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[DESC]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nicht getragen
-			</text>
-			<text name="path">
-				In [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie einen neuen Rock aus dem Inventar auf Ihren Avatar, um diesen anzuziehen. Sie können aber auch einen neuen Rock erstellen und diesen anziehen.
-			</text>
-			<button label="Neuer Rock" label_selected="Neuer Rock" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label" right="100">
-				Rock:
-			</text>
-			<texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
-			<color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
-			<button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/>
-			<button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Tätowierung" name="Tattoo">
-			<text name="title">
-				Tätowierung
-			</text>
-			<text name="title_no_modify">
-				[BESCHR]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[BESCHR]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[BESCHR]: nicht getragen
-			</text>
-			<text name="path">
-				Befindet sich in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ziehen Sie eine neue Tätowierung aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen.
-			</text>
-			<button label="Neue Tätowierung erstellen" label_selected="Neue Tätowierung erstellen" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label">
-				Tätowierung:
-			</text>
-			<texture_picker label="Kopftattoo" name="Head Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Obere Tattoos" name="Upper Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Untere Tattoos" name="Lower Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<button label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button label="Speichern" label_selected="Speichern" name="Save"/>
-			<button label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				Alpha
-			</text>
-			<text name="title_no_modify">
-				[BESCHR]: bearbeiten nicht möglich
-			</text>
-			<text name="title_loading">
-				[BESCHR]: wird geladen...
-			</text>
-			<text name="title_not_worn">
-				[BESCHR]: nicht getragen
-			</text>
-			<text name="path">
-				Befindet sich in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Sie können eine neue Alpha-Maske anlegen, indem Sie eine von Ihrem Inventar auf Ihren Avatar ziehen. Sie können aber auch eine neue erstellen und diese anlegen.
-			</text>
-			<button label="Neue Alpha erstellen" label_selected="Neue Alpha erstellen" name="Create New"/>
-			<text name="no modify instructions">
-				Sie sind nicht berechtigt, diese Kleidung zu bearbeiten.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Alpha: Unten" name="Lower Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Alpha: Oben" name="Upper Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Kopf: Alpha" name="Head Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Alpha: Augen" name="Eye Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<texture_picker label="Alpha: Haare" name="Hair Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
-			<button label="Ausziehen" label_selected="Ausziehen" name="Take Off"/>
-			<button label="Speichern" label_selected="Speichern" name="Save"/>
-			<button label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/>
-			<button label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/>
-		</panel>
-	</tab_container>
-	<button label="Skriptinfo" label_selected="Skriptinfo" name="script_info" tool_tip="Skripts, die an Ihren Avatar angehängt sind, anzeigen"/>
-	<button label="Outfit erstellen" label_selected="Outfit erstellen" name="make_outfit_btn"/>
-	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_device_settings.xml b/indra/newview/skins/default/xui/de/floater_device_settings.xml
deleted file mode 100644
index 3d7e9c96c1abeecf2ea19bd072db0fa631c98852..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="EINSTELLUNGEN FÃœR VOICE-CHAT"/>
diff --git a/indra/newview/skins/default/xui/de/floater_first_time_tip.xml b/indra/newview/skins/default/xui/de/floater_first_time_tip.xml
deleted file mode 100644
index 9546cc2c42211236d10425e4070811615eade297..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_first_time_tip.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="set_name_in_the_cladd">
-	<check_box label="Turn off Quick Tips" name="DontShowFirstTimeTip_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_im.xml b/indra/newview/skins/default/xui/de/floater_im.xml
deleted file mode 100644
index 8ae8f120cffb511ede8c051cdbdd73004bd9b1ed..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_im.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Instant Message">
-	<string name="only_user_message">
-		Sie sind der einzige Einwohner in dieser Sitzung.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] ist offline.
-	</string>
-	<string name="invite_message">
-		Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen.
-	</string>
-	<string name="muted_message">
-		Sie haben diesen Einwohner ignoriert. Wenn Sie eine Nachricht senden, wird dieser freigeschaltet.
-	</string>
-	<string name="generic_request_error">
-		Fehler bei Anfrage, bitte versuchen Sie es später.
-	</string>
-	<string name="insufficient_perms_error">
-		Sie sind dazu nicht berechtigt.
-	</string>
-	<string name="session_does_not_exist_error">
-		Die Sitzung ist abgelaufen
-	</string>
-	<string name="no_ability_error">
-		Sie besitzen diese Fähigkeit nicht.
-	</string>
-	<string name="not_a_mod_error">
-		Sie sind kein Sitzungsmoderator.
-	</string>
-	<string name="muted_error">
-		Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert.
-	</string>
-	<!-- ALL of the event strings should have [RECIPIENT] in them -->
-	<string name="add_session_event">
-		Es konnten keine Einwohner zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden.
-	</string>
-	<string name="message_session_event">
-		Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden.
-	</string>
-	<string name="removed_from_group">
-		Sie wurden von der Gruppe ausgeschlossen.
-	</string>
-	<string name="close_on_no_ability">
-		Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/de/floater_im_session.xml b/indra/newview/skins/default/xui/de/floater_im_session.xml
index c69bb600eace1d73e22f377195ccde29c3766aee..abaf27565191c4bd18979ba083e76f8c802bbeb6 100644
--- a/indra/newview/skins/default/xui/de/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/de/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="IM Steuerkonsole" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="An" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/floater_my_friends.xml b/indra/newview/skins/default/xui/de/floater_my_friends.xml
deleted file mode 100644
index 61cb0d5c1408e56ba0e1c3346b0d89d9fa0b28d0..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="KONTAKTE">
-	<tab_container name="friends_and_groups">
-		<panel label="Freunde" name="friends_panel"/>
-		<panel label="Gruppen" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml
deleted file mode 100644
index 8c110e5516da99479c05b80577774172ee497e74..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Outfit speichern">
-	<button label="Speichern" label_selected="Speichern" name="Save"/>
-	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
-	<text name="Save item as:">
-		Meine aktuelle Kleidung
-als neues Outfit speichern:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (neu)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_classified.xml b/indra/newview/skins/default/xui/de/floater_preview_classified.xml
deleted file mode 100644
index 401758769d8fa4d39bcd38d64c6073d7541fe269..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFORMATIONEN ÃœBER ANZEIGE">
-	<floater.string name="Title">
-		Anzeige: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_event.xml b/indra/newview/skins/default/xui/de/floater_preview_event.xml
deleted file mode 100644
index 7e46bbab546fb509ec4862a622efb5bb752a38aa..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="EVENT-INFORMATION">
-	<floater.string name="Title">
-		Veranstaltung: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
deleted file mode 100644
index 0d0d28f96fee2f4c1d77218e268f00d27ab46d37..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTE - SCHNELLTASTE"/>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 0b5df133951cf144fcff0a78df637a28c95d223c..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTE - SCHNELLTASTE">
-	<text name="trigger_label">
-		Chat:
-	</text>
-	<text name="key_label">
-		Tastatur:
-	</text>
-	<combo_box label="Keiner" name="modifier_combo"/>
-	<combo_box label="Keiner" name="key_combo"/>
-	<text name="replace_text" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht&apos;s“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht&apos;s sagen“ und die zugehörige Geste wird abgespielt.">
-		Ersetzen:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht&apos;s“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht&apos;s sagen“ und die zugehörige Geste wird abgespielt."/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
deleted file mode 100644
index 0d0d28f96fee2f4c1d77218e268f00d27ab46d37..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTE - SCHNELLTASTE"/>
diff --git a/indra/newview/skins/default/xui/de/floater_statistics.xml b/indra/newview/skins/default/xui/de/floater_statistics.xml
deleted file mode 100644
index 72a87a9566be69937d7fa892819aa4d68db05e80..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTIKEN"/>
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/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
index 07b7689cd0b49ada985d93cf35307493a57816fe..22f2fd93ab3e135e3a69f2a1bb9a6c8f51e17d27 100644
--- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mein Avatar:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Anruf beenden" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+			<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="Anruf beenden" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml
deleted file mode 100644
index f9b3552e8b04e23268dae65b6f622c3e6ec9f1b5..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title=" ">
-	<button label="Speichern" label_selected="Speichern" name="Save"/>
-	<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
-	<text name="Save item as:">
-		Objekt in meinem Inventar speichern als:
-	</text>
-	<line_editor name="name ed">
-		Neu [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/panel_audio_device.xml b/indra/newview/skins/default/xui/de/panel_audio_device.xml
deleted file mode 100644
index 6ecd1f0241d03ab1505e3236a1ca73b0e37e5342..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Audiogeräte
-	</text>
-	<text name="Output device (speakers):">
-		Ausgabegerät (Lautsprecher):
-	</text>
-	<text name="Input device (microphone):">
-		Eingabegerät (Mikro):
-	</text>
-	<text name="Input level:">
-		Eingangslautstärke
-	</text>
-	<text_editor name="voice_intro_text1">
-		Mit dem Regler steuern Sie, wie laut andere Einwohner Sie hören. Testen Sie die Eingangslautstärke, indem Sie in das Mikro sprechen.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Ändern Sie die Lautstärke mit dem Regler" />
-	<text name="wait_text">
-		Bitte warten
-	</text>
-	<text name="default_text">
-		Standard
-	</text>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_friends.xml b/indra/newview/skins/default/xui/de/panel_friends.xml
deleted file mode 100644
index 50013a2b240c0adb6de9e3a47748b678236004a3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/panel_friends.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Mehrere Freunde
-	</string>
-	<scroll_list name="friend_list" tool_tip="Halten Sie die Tasten „Umschalt“ oder „Strg“ gedrückt, um durch Klicken mehrere Freunde auszuwählen.">
-		<column name="icon_online_status" tool_tip="Online-Status"/>
-		<column label="Name" name="friend_name" tool_tip="Name"/>
-		<column name="icon_visible_online" tool_tip="Freund kann sehen, wenn Sie online sind"/>
-		<column name="icon_visible_map" tool_tip="Freund kann Sie auf der Karte finden"/>
-		<column name="icon_edit_mine" tool_tip="Freunde können Objekte bearbeiten, löschen und an sich nehmen"/>
-		<column name="icon_edit_theirs" tool_tip="Sie können die Objekte dieses Freunds bearbeiten"/>
-	</scroll_list>
-	<panel name="rights_container">
-		<text name="friend_name_label">
-			Wählen Sie den/die Freund(e) aus, dessen/deren Rechte Sie ändern möchten...
-		</text>
-		<check_box label="Kann meinen Online-Status sehen" name="online_status_cb" tool_tip="Festlegen, ob dieser Freund meinen Online-Status auf seiner Freundesliste oder Visitenkarte einsehen kann"/>
-		<check_box label="Kann mich auf der Weltkarte sehen" name="map_status_cb" tool_tip="Festlegen, ob dieser Freund auf seiner Karte meinen Standort sehen kann"/>
-		<check_box label="Kann meine Objekte verändern" name="modify_status_cb" tool_tip="Festlegen, ob dieser Freund meine Objekte verändern kann"/>
-		<text name="process_rights_label">
-			Rechte werden geändert...
-		</text>
-	</panel>
-	<button label="IM/Anruf" name="im_btn" tool_tip="Beginnt eine Instant Message-Sitzung"/>
-	<button label="Profil" name="profile_btn" tool_tip="Bilder, Gruppen und andere Informationen anzeigen"/>
-	<button label="Teleportieren" name="offer_teleport_btn" tool_tip="Bieten Sie diesem Freund einen Teleport an Ihre Position an"/>
-	<button label="Bezahlen" name="pay_btn" tool_tip="Diesem Freund Linden-Dollar (L$) geben"/>
-	<button label="Entfernen" name="remove_btn" tool_tip="Diese Person von Ihrer Freundesliste entfernen"/>
-	<button label="Hinzufügen" name="add_btn" tool_tip="Bieten Sie einem Einwohner die Freundschaft an"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_groups.xml b/indra/newview/skins/default/xui/de/panel_groups.xml
deleted file mode 100644
index f857a6c7ac39980cb11a34e84667f86e4aa7c825..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/panel_groups.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="groups">
-	<text name="groupdesc" width="300">
-		Die derzeit aktive Gruppe ist fett hervorgehoben.
-	</text>
-	<text name="groupcount" width="360">
-		Sie sind Mitglied bei [COUNT] Gruppen (von max. [MAX]).
-	</text>
-	<button label="IM/Anruf" name="IM" tool_tip="Beginnt eine Instant Message-Sitzung" />
-	<button label="Info" name="Info" />
-	<button label="Aktivieren" name="Activate" />
-	<button label="Verlassen" name="Leave" />
-	<button label="Erstellen..." name="Create" />
-	<button label="Suchen..." name="Search..." />
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat.xml
deleted file mode 100644
index 3f4f5a71b58088ddd07954ce45842f3b13b73326..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name" width="200">
-			CHAT IN DER NÄHE
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml
index e2166f7baf77fb6e5c2e4e297bc1f98b7ab75091..35bd76ce7099e396c1ca34a29cb6251d7bf9a27e 100644
--- a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="notifications_panel">
 	<layout_stack name="stack1">
-		<scroll_list name="notifications_list">
-			<column label="Name" name="name"/>
-			<column label="Inhalt" name="content"/>
-			<column label="Datum" name="date"/>
-		</scroll_list>
-		<scroll_list name="notification_rejects_list">
-			<column label="Name" name="name"/>
-			<column label="Inhalt" name="content"/>
-			<column label="Datum" name="date"/>
-		</scroll_list>
+	     <layout_panel name="notifications_list_panel" >
+			<scroll_list name="notifications_list">
+				<column label="Name" name="name"/>
+				<column label="Inhalt" name="content"/>
+				<column label="Datum" name="date"/>
+			</scroll_list>
+		</layout_panel>
+	     <layout_panel name="rejects_list_panel" >
+			<scroll_list name="notification_rejects_list">
+				<column label="Name" name="name"/>
+				<column label="Inhalt" name="content"/>
+				<column label="Datum" name="date"/>
+			</scroll_list>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_online_status.xml b/indra/newview/skins/default/xui/de/panel_online_status.xml
deleted file mode 100644
index 7c7448c06117cf11ea2a32a8b2535cd398fb2f22..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Freunde_online_Status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
index 0a19483f8b7078827a2946023dd9c3a9a21e101c..c85f2762b124f1c526cabf73074bc319926c9208 100644
--- a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
@@ -7,9 +7,9 @@
 		0.2
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Medien werden geladen"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/de/panel_region_general_layout.xml b/indra/newview/skins/default/xui/de/panel_region_general_layout.xml
deleted file mode 100644
index 09142ada6f7209f2a00b583e61394705523e1bd5..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/de/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Region" name="General">
-	<text name="region_text_lbl">
-		Region:
-	</text>
-	<text name="region_text">
-		unbekannt
-	</text>
-	<text name="version_channel_text_lbl">
-		Version:
-	</text>
-	<text name="version_channel_text">
-		unbekannt
-	</text>
-	<text name="region_type_lbl">
-		Typ:
-	</text>
-	<text name="region_type">
-		unbekannt
-	</text>
-	<check_box label="Terraformen blockieren" name="block_terraform_check"/>
-	<check_box label="Fliegen blockieren" name="block_fly_check"/>
-	<check_box label="Schaden zulassen" name="allow_damage_check"/>
-	<check_box label="Stoßen beschränken" name="restrict_pushobject"/>
-	<check_box label="Landwiederverkauf zulassen" name="allow_land_resell_check"/>
-	<check_box label="Zusammenlegen/Teilen von Land zulassen" name="allow_parcel_changes_check"/>
-	<check_box label="Landanzeige in Suche blockieren" name="block_parcel_search_check" tool_tip="Diese Region und ihre Parzellen in Suchergebnissen anzeigen"/>
-	<spinner label="Avatar-Limit" name="agent_limit_spin"/>
-	<spinner label="Objektbonus" name="object_bonus_spin"/>
-	<text label="Alterseinstufung" name="access_text">
-		Einstufung:
-	</text>
-	<combo_box label="Moderat" name="access_combo">
-		<combo_box.item label="Adult" name="Adult"/>
-		<combo_box.item label="Moderat" name="Mature"/>
-		<combo_box.item label="Allgemein" name="PG"/>
-	</combo_box>
-	<button label="Ãœbernehmen" name="apply_btn"/>
-	<button label="Einen Einwohner nach Hause teleportieren..." name="kick_btn"/>
-	<button label="Alle Einwohner nach Hause teleportieren..." name="kick_all_btn"/>
-	<button label="Nachricht an Region senden..." name="im_btn"/>
-	<button label="Telehub verwalten..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/alert_check_box.xml b/indra/newview/skins/default/xui/en/alert_check_box.xml
index 9f1bdb51939f7c8f9b518ad9c5221daee6b6793c..5535a5dc2ae56478a29e744c99708a3de595cb9f 100644
--- a/indra/newview/skins/default/xui/en/alert_check_box.xml
+++ b/indra/newview/skins/default/xui/en/alert_check_box.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <check_box
-  text_enabled_color="LabelTextColor"
-  text_disabled_color="LabelDisabledColor"
+  label_text.text_color="LabelTextColor"
+  label_text.text_readonly_color="LabelDisabledColor"
   font="SansSerif"
   follows="left|top"
   name="check"/>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
index b365040c2028838ef583991af18a8a06d0ddbfcf..e7dd62eb6427aa57e3a8a57af92f3108478661cc 100644
--- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml
+++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
@@ -22,6 +22,6 @@
  pad_right="9"
  scale_image="true"
  tab_stop="false"
- top="0"
+ bottom="0"
  use_ellipses="true"
  width="140" />
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index cae61468804f17ebf84fd7effd0a3ab85d8d97a2..930bbaa8cb10b74b80ce297f27bd71d56649c7fb 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -20,7 +20,7 @@
   <string name="nudge_parabuild" translate="false">Nudge 1</string>
   <string name="test_the_vlt">This string CHANGE2 is extracted.</string>
   <string name="testing_eli">Just a test. changes.</string>
-  <chat_history
+  <text_editor
    parse_urls="true"
    bg_readonly_color="ChatHistoryBgColor"
    bg_writeable_color="ChatHistoryBgColor" 
@@ -32,26 +32,51 @@
    layout="topleft"
 	 height="260"
    name="chat_history"
+   max_length="200000" 
    parse_highlights="true"
    text_color="ChatHistoryTextColor"
    text_readonly_color="ChatHistoryTextColor"
    translate="false"
+   track_end="true" 
+   wrap="true" 
    width="320">
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-Really long line that is long enough to wrap once with jyg descenders.
-  </chat_history>
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    Really long line that is long enough to wrap once with jyg descenders.
+    </text_editor>
 </floater>
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_buy_currency_html.xml b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
index 4b990fa566021733f14714fc215b38b3d5a46194..b9c415633f929d2ad7f5254f902a65d7c13fd795 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
@@ -16,6 +16,7 @@
     https://quick-buy.secondlife.com/[LANGUAGE]/display/?sa=[SPECIFIC_AMOUNT]&amp;sum=[SUM]&amp;msg=[MSG]&amp;bal=[BAL]
   </floater.string>
   <web_browser
+    trusted_content="true" 
     follows="all"
     layout="topleft"
     left="1"
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
deleted file mode 100644
index 01bced81d062392651f135069dbe491b1382eedd..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ /dev/null
@@ -1,3389 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_minimize="false"
- follows="left|top"
- height="583"
- layout="topleft"
- left_delta="-3"
- name="floater customize"
- help_topic="floater_customize"
- save_rect="true"
- title="APPEARANCE"
- top_delta="-185"
- width="600">
-    <tab_container
-     height="517"
-     layout="topleft"
-     left="10"
-     name="customize tab container"
-     tab_min_width="96"
-     tab_position="left"
-     tab_height="50"
-     top="26"
-     width="580">
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="5"
-             name="body_parts_placeholder"
-	     font="SansSerifSmallBold"
-             top="10"
-             width="100">
-                Body Parts
-            </text>
-	    <placeholder />
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Shape"
-         layout="topleft"
-         name="Shape"
-         help_topic="customize_shape_tab"
-         width="400">
-            <icon
-             follows="top|right"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="315"
-             mouse_opaque="true"
-             name="square"
-             top="4"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Shape"
-             label_selected="Create New Shape"
-             layout="topleft"
-             left="10"
-             name="Create New"
-             top="104"
-             width="160" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Body"
-             label_selected="Body"
-             layout="topleft"
-             left="10"
-             name="Body"
-             top="63"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Head"
-             label_selected="Head"
-             layout="topleft"
-             left_delta="0"
-             name="Head"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Eyes"
-             label_selected="Eyes"
-             layout="topleft"
-             left_delta="0"
-             name="Eyes"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Ears"
-             label_selected="Ears"
-             layout="topleft"
-             left_delta="0"
-             name="Ears"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Nose"
-             label_selected="Nose"
-             layout="topleft"
-             left_delta="0"
-             name="Nose"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Mouth"
-             label_selected="Mouth"
-             layout="topleft"
-             left_delta="0"
-             name="Mouth"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Chin"
-             label_selected="Chin"
-             layout="topleft"
-             left_delta="0"
-             name="Chin"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Torso"
-             label_selected="Torso"
-             layout="topleft"
-             left_delta="0"
-             name="Torso"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Legs"
-             label_selected="Legs"
-             layout="topleft"
-             left_delta="0"
-             name="Legs"
-             top_pad="4"
-             width="82" />
-            <radio_group
-             control_name="AvatarSex"
-             height="34"
-             layout="topleft"
-             name="sex radio"
-	     top_pad="10"
-             width="82">
-                <radio_item
-                 height="16"
-                 label="Female"
-                 layout="topleft"
-                 name="radio"
-                 value="0"
-                 width="82" />
-                <radio_item
-                 height="16"
-                 label="Male"
-                 layout="topleft"
-                 name="radio2"
-                 value="1"
-                 width="82" />
-            </radio_group>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new shape by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <text
-             type="string"
-             length="1"
-             top="488"
-             follows="left|top"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="topleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Shape:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             name="Save"
-             left_pad="2"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             name="Save As"
-             top="477"
-             left_pad="3"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Skin"
-         layout="topleft"
-         name="Skin"
-         help_topic="customize_skin_tab"
-         width="400">
-            <icon
-             follows="top|right"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="315"
-             mouse_opaque="true"
-             name="square"
-             top="4"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Skin"
-             label_selected="Create New Skin"
-             layout="topleft"
-             left_delta="0"
-             name="Create New"
-             top_delta="-249"
-             width="160" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Skin Color"
-             label_selected="Skin Color"
-             layout="topleft"
-             left="10"
-             name="Skin Color"
-             top="63"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Face Detail"
-             label_selected="Face Detail"
-             layout="topleft"
-             left_delta="0"
-             name="Face Detail"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Makeup"
-             label_selected="Makeup"
-             layout="topleft"
-             left_delta="0"
-             name="Makeup"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Body Detail"
-             label_selected="Body Detail"
-             layout="topleft"
-             left_delta="0"
-             name="Body Detail"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new skin by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             allow_no_texture="true"
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Head Tattoos"
-             layout="topleft"
-             left="10"
-             name="Head Tattoos"
-             tool_tip="Click to choose a picture"
-             top="176"
-             width="82" />
-            <texture_picker
-             allow_no_texture="true"
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Upper Tattoos"
-             layout="topleft"
-             left_delta="0"
-             name="Upper Tattoos"
-             tool_tip="Click to choose a picture"
-             top_delta="102"
-             width="82" />
-            <texture_picker
-             allow_no_texture="true"
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Lower Tattoos"
-             layout="topleft"
-             left_delta="0"
-             name="Lower Tattoos"
-             tool_tip="Click to choose a picture"
-             top_delta="102"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             top="488"
-             follows="left|top"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="topleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Skin:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Hair"
-         layout="topleft"
-         name="Hair"
-         help_topic="customize_hair_tab"
-         width="400">
-            <icon
-             follows="top|right"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="315"
-             mouse_opaque="true"
-             name="square"
-             top="4"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Color"
-             label_selected="Color"
-             layout="topleft"
-             left="10"
-             name="Color"
-             top="63"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Style"
-             label_selected="Style"
-             layout="topleft"
-             left_delta="0"
-             name="Style"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Eyebrows"
-             label_selected="Eyebrows"
-             layout="topleft"
-             name="Eyebrows"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Facial"
-             label_selected="Facial"
-             layout="topleft"
-             name="Facial"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new hair by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Texture"
-             layout="topleft"
-             left="10"
-             name="Texture"
-             tool_tip="Click to choose a picture"
-             top="176"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Hair"
-             label_selected="Create New Hair"
-             layout="topleft"
-             left_delta="0"
-             name="Create New"
-             top_delta="-89"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             top="488"
-             follows="left|top"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="topleft"
-             name="Item Action Label"
-             left="10"
-             width="130">
-                Hair:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Eyes"
-         layout="topleft"
-         name="Eyes"
-         help_topic="customize_eyes_tab"
-         width="400">
-            <icon
-             follows="top|right"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="315"
-             mouse_opaque="true"
-             name="square"
-             top="4"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new set of eyes by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Iris"
-             layout="topleft"
-             left="10"
-             name="Iris"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Eyes"
-             label_selected="Create New Eyes"
-             layout="topleft"
-             name="Create New"
-             top="66"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             name="Item Action Label"
-             left="10"
-             width="130">
-                Eyes:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="5"
-             name="clothes_placeholder"
-	     font="SansSerifSmallBold"
-             top="125"
-             width="100">
-                Clothes
-            </text>
-	    <placeholder />
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Shirt"
-         layout="topleft"
-         name="Shirt"
-         help_topic="customize_shirt_tab"
-         top_delta="0"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-	     top="10"
-	     left="10"
-             layout="topleft"
-             mouse_opaque="true"
-             width="16" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Shirt"
-             label_selected="Create New Shirt"
-             layout="topleft"
-             name="Create New"
-             top="66"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             name="Item Action Label"
-             left="10"
-             width="130">
-                Shirt:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new shirt by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Pants"
-         layout="topleft"
-         name="Pants"
-         help_topic="customize_pants_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Pants"
-             label_selected="Create New Pants"
-             layout="topleft"
-             name="Create New"
-             top="66"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             name="Item Action Label"
-             left="10"
-             width="130">
-                Pants:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on new pants by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Shoes"
-         layout="topleft"
-         name="Shoes"
-         help_topic="customize_shoes_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new pair of shoes by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Shoes"
-             label_selected="Create New Shoes"
-             layout="topleft"
-             name="Create New"
-             top_pad="18"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Shoes:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Socks"
-         layout="topleft"
-         name="Socks"
-         help_topic="customize_socks_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on new socks by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Socks"
-             label_selected="Create New Socks"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Socks:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Jacket"
-         layout="topleft"
-         name="Jacket"
-         help_topic="customize_jacket_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new jacket by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Jacket"
-             label_selected="Create New Jacket"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Upper Fabric"
-             layout="topleft"
-             left="10"
-             name="Upper Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Lower Fabric"
-             layout="topleft"
-             name="Lower Fabric"
-             tool_tip="Click to choose a picture"
-             top_delta="102"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Jacket:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Gloves"
-         layout="topleft"
-         name="Gloves"
-         help_topic="customize_gloves_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on new gloves by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Gloves"
-             label_selected="Create New Gloves"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Gloves:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Undershirt"
-         layout="topleft"
-         name="Undershirt"
-         help_topic="customize_undershirt_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new undershirt by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Undershirt"
-             label_selected="Create New Undershirt"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Undershirt:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Underpants"
-         layout="topleft"
-         name="Underpants"
-         help_topic="customize_underpants_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on new underpants by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Underpants"
-             label_selected="Create New Underpants"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Underpants:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Skirt"
-         layout="topleft"
-         name="Skirt"
-         help_topic="customize_skirt_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new skirt by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Skirt"
-             label_selected="Create New Skirt"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Fabric"
-             layout="topleft"
-             left="10"
-             name="Fabric"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="108"
-             label="Color/Tint"
-             layout="topleft"
-             name="Color/Tint"
-             tool_tip="Click to open color picker"
-             top_delta="102"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Skirt:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Tattoo"
-         layout="topleft"
-         name="Tattoo"
-         help_topic="customize_tattoo_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new tattoo by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Tattoo"
-             label_selected="Create New Tattoo"
-             layout="topleft"
-             name="Create New"
-             top_pad="7"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Head Tattoo"
-             layout="topleft"
-             left="10"
-             name="Head Tattoo"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Upper Tattoo"
-             layout="topleft"
-             name="Upper Tattoo"
-             tool_tip="Click to choose a picture"
-             left_delta="90"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Lower Tattoo"
-             layout="topleft"
-             name="Lower Tattoo"
-             tool_tip="Click to choose a picture"
-             left_delta="90"
-             width="82" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             top_pad="4"
-             left="10"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Tattoo:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-        <panel
-         border="false"
- background_visible="true"
- bg_alpha_color="DkGray2"
-         follows="left|top|right|bottom"
-         height="508"
-         label="Alpha"
-         layout="topleft"
-         name="Alpha"
-         help_topic="customize_alpha_tab"
-         width="400">
-            <icon
-             follows="top|left"
-             height="18"
-             image_name="Lock"
-             layout="topleft"
-             left="10"
-             mouse_opaque="true"
-             name="square"
-             top="10"
-             width="18" />
-            <icon
-             height="16"
-             layout="topleft"
-	     left="10"
-             mouse_opaque="true"
-	     top="10"
-             width="16" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title"
-             top="10"
-             width="355">
-                [DESC]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_no_modify"
-             top="10"
-             width="355">
-                [DESC]: cannot modify
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_loading"
-             top="10"
-             width="355">
-                [DESC]: loading...
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             font="SansSerif"
-             height="16"
-             layout="topleft"
-             left="31"
-             name="title_not_worn"
-             top="10"
-             width="355">
-                [DESC]: not worn
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="14"
-             layout="topleft"
-             left="10"
-             name="path"
-             top="36"
-             width="373">
-                Located in [PATH]
-            </text>
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="not worn instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                Put on a new alpha mask by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it.
-            </text>
-            <button
-             follows="left|top"
-             height="23"
-             label="Create New Alpha"
-             label_selected="Create New Alpha"
-             layout="topleft"
-             name="Create New"
-             top_pad="18"
-             width="160" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top|right"
-             height="28"
-             layout="topleft"
-             left="10"
-             name="no modify instructions"
-             top="31"
-             word_wrap="true"
-             width="373">
-                You do not have permission to modify this wearable.
-            </text>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Lower Alpha"
-             layout="topleft"
-             left="10"
-             name="Lower Alpha"
-             tool_tip="Click to choose a picture"
-             top="66"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Upper Alpha"
-             layout="topleft"
-             name="Upper Alpha"
-             tool_tip="Click to choose a picture"
-             left_delta="90"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Head Alpha"
-             layout="topleft"
-             name="Head Alpha"
-             tool_tip="Click to choose a picture"
-             left_delta="90"
-             width="82" />
-            <check_box
-             control_name="LowerAlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left="43"
-             name="lower alpha texture invisible"
-             top_delta="96"
-             width="16" />
-            <check_box
-             control_name="UpperAlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left_pad="72"
-             name="upper alpha texture invisible"
-             width="16" />
-            <check_box
-             control_name="HeadAlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left_pad="72"
-             name="head alpha texture invisible"
-             width="16" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Eye Alpha"
-             layout="topleft"
-             name="Eye Alpha"
-             tool_tip="Click to choose a picture"
-             left="10"
-             top_pad="20"
-             width="82" />
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             follows="left|top"
-             height="108"
-             label="Hair Alpha"
-             layout="topleft"
-             name="Hair Alpha"
-             left_delta="90"
-             tool_tip="Click to choose a picture"
-             width="82" />
-            <check_box
-             control_name="Eye AlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left="43"
-             name="eye alpha texture invisible"
-             top_delta="96"
-             width="16" />
-            <check_box
-             control_name="HairAlphaTextureInvisible"
-             follows="left"
-             height="16"
-             layout="topleft"
-             left_pad="72"
-             name="hair alpha texture invisible"
-             width="16" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Take Off"
-             label_selected="Take Off"
-             layout="topleft"
-             name="Take Off"
-             left="10"
-             top_pad="20"
-             width="82" />
-            <text
-             type="string"
-             length="1"
-             bottom="4"
-             follows="left|bottom"
-             font="SansSerif"
-             halign="right"
-             height="23"
-             layout="bottomleft"
-             left="10"
-             name="Item Action Label"
-             width="130">
-                Alpha:
-            </text>
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save"
-             label_selected="Save"
-             layout="topleft"
-             left_pad="2"
-             name="Save"
-             top="477"
-             width="82" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Save As..."
-             label_selected="Save As..."
-             layout="topleft"
-             left_pad="3"
-             name="Save As"
-             top="477"
-             width="115" />
-            <button
-             follows="left|bottom"
-             height="23"
-             label="Revert"
-             label_selected="Revert"
-             layout="topleft"
-             left_pad="3"
-             name="Revert"
-             top="477"
-             width="120" />
-        </panel>
-    </tab_container>
-    <scroll_container
-     follows="left|top|right|bottom"
-     height="409"
-     layout="topleft"
-     left="247"
-     mouse_opaque="false"
-     name="panel_container"
-     top="92"
-     width="330">
-        <scrolling_panel_list
-         follows="left|bottom"
-         layout="topleft"
-         name="panel_list" />
-    </scroll_container>
-    <button
-     bottom="460"
-     follows="right|left"
-     height="23"
-     label="Script Info"
-     label_selected="Script Info"
-     layout="topleft"
-     name="script_info"
-     tool_tip="Show scripts attached to your avatar"
-     left="13"
-     width="90" ></button>
-    <button
-     bottom="574"
-     follows="right|bottom"
-     height="23"
-     label="Make Outfit"
-     label_selected="Make Outfit"
-     layout="topleft"
-     name="make_outfit_btn"
-     right="-218"
-     width="120" />
-    <button
-     bottom="574"
-     follows="right|bottom"
-     height="23"
-     label="Cancel"
-     label_selected="Cancel"
-     layout="topleft"
-     name="Cancel"
-     right="-10"
-     width="100" />
-    <button
-     bottom="574"
-     follows="right|bottom"
-     height="23"
-     label="OK"
-     label_selected="OK"
-     layout="topleft"
-     name="Ok"
-     right="-114"
-     width="100" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_device_settings.xml b/indra/newview/skins/default/xui/en/floater_device_settings.xml
deleted file mode 100644
index 91a7a678da1f7d4d2d50b794b90b28803efcd3ac..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_device_settings.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="260"
- layout="topleft"
- name="floater_device_settings"
- help_topic="floater_device_settings"
- title="VOICE CHAT DEVICE SETTINGS"
- width="405">
-    <panel
-     bottom="260"
-     filename="panel_audio_device.xml"
-     layout="topleft"
-     left="2"
-     name="device_settings"
-     right="-5"
-     top="20" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml
deleted file mode 100644
index e4ac8fed77afc45e1bb354b80c0b06145582b916..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_close="true"
- can_minimize="false"
- height="250"
- layout="topleft"
- name="set_name_in_the_cladd"
- help_topic="set_name_in_the_cladd"
- save_rect="true"
- width="300">
-    <check_box
-     height="20"
-     follows="left|bottom|right"
-     label="Turn off Quick Tips"
-     layout="topleft"
-     left="5"
-     name="DontShowFirstTimeTip_checkbox"
-     text_enabled_color="white"
-     top="225"
-     width="200" />
-</floater>
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 214fb6ce54df615b975e01ad2f1816f0336d38f0..837923bcf606c48dce7a36eb858eda8d2e36e324 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -24,6 +24,7 @@
      follows="left|right|top|bottom"
      layout="topleft"
      left="5"
+     orientation="vertical" 
      name="stack1"
      top="20"
      width="640">
@@ -35,7 +36,8 @@
          user_resize="false"
          width="620">
             <web_browser
-             bottom="-11"
+              trusted_content="true" 
+             bottom="-25"
              follows="left|right|top|bottom"
              layout="topleft"
              left="0"
diff --git a/indra/newview/skins/default/xui/en/floater_im.xml b/indra/newview/skins/default/xui/en/floater_im.xml
deleted file mode 100644
index 55efe83820c07c41315c4ced38755ac81d7e466b..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_im.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<multi_floater
- legacy_header_height="18" 
- can_resize="true"
- follows="left|bottom"
- height="422"
- layout="topleft"
- min_height="130"
- min_width="350"
- name="im_floater"
- help_topic="im_floater"
- save_rect="true"
- title="Instant Message"
- width="419">
-    <multi_floater.string
-     name="only_user_message">
-        You are the only Resident in this session.
-    </multi_floater.string>
-    <multi_floater.string
-     name="offline_message">
-        [FIRST] [LAST] is offline.
-    </multi_floater.string>
-    <multi_floater.string
-     name="invite_message">
-        Click the [BUTTON NAME] button to accept/connect to this voice chat.
-    </multi_floater.string>
-    <multi_floater.string
-     name="muted_message">
-        You have blocked this Resident. Sending a message will automatically unblock them.
-    </multi_floater.string>
-    <multi_floater.string
-     name="generic_request_error">
-        Error making request, please try again later.
-    </multi_floater.string>
-    <multi_floater.string
-     name="insufficient_perms_error">
-        You do not have sufficient permissions.
-    </multi_floater.string>
-    <multi_floater.string
-     name="session_does_not_exist_error">
-        The session no longer exists
-    </multi_floater.string>
-    <multi_floater.string
-     name="no_ability_error">
-        You do not have that ability.
-    </multi_floater.string>
-    <multi_floater.string
-     name="not_a_mod_error">
-        You are not a session moderator.
-    </multi_floater.string>
-    <multi_floater.string
-     name="muted_error">
-        A group moderator disabled your text chat.
-    </multi_floater.string>
-    <multi_floater.string
-     name="add_session_event">
-        Unable to add Residents to chat session with [RECIPIENT].
-    </multi_floater.string>
-    <multi_floater.string
-     name="message_session_event">
-        Unable to send your message to the chat session with [RECIPIENT].
-    </multi_floater.string>
-    <multi_floater.string
-     name="removed_from_group">
-        You have been removed from the group.
-    </multi_floater.string>
-    <multi_floater.string
-     name="close_on_no_ability">
-        You no longer have the ability to be in the chat session.
-    </multi_floater.string>
-    <tab_container
-     follows="left|top|right|bottom"
-     height="406"
-     layout="topleft"
-     left="1"
-     name="Preview Tabs"
-     tab_position="bottom"
-     top="16"
-     width="417" />
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 6c1214f15220c6fbcb5818e65e7489eef354a668..a371e9832278914486f2e318ea1bf51a04d7292b 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -30,12 +30,19 @@
   top="20"
   left="0">
     <layout_panel
-      name="panel_im_control_panel"
-      layout="topleft"
-      follows="left"
-      min_width="115" 
+      name="im_control_panel_holder"
+      min_width="115"
+      width="150" 
+      height="320" 
       auto_resize="false"
-      user_resize="true" />
+      user_resize="false">
+      <panel
+        name="panel_im_control_panel"
+        layout="topleft"
+        height="320"
+        width="150" 
+        follows="all"/>
+      </layout_panel>
     <layout_panel
        default_tab_group="3"
        left="0"
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index c02d6075866ab69c720d1dcae353d92c9316d122..4701d7eca83e74564c3241f70fc3f91e04bad79f 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -9,7 +9,7 @@
  name="floater_about"
  help_topic="floater_about"
  save_rect="true"
- single_instance="true"
+ auto_tile="true"
  title="MEDIA BROWSER"
  width="820">
     <floater.string
@@ -26,10 +26,12 @@
      layout="topleft"
      left="10"
      name="stack1"
+     orientation="vertical" 
      top="20"
      width="800">
         <layout_panel
          auto_resize="false"
+         default_tab_group="1" 
          height="20"
          layout="topleft"
          left="0"
@@ -77,11 +79,13 @@
             <combo_box
              allow_text_entry="true"
              follows="left|top|right"
+             tab_group="1"
              height="20"
              layout="topleft"
              left_pad="5"
              max_chars="1024"
              name="address"
+             combo_editor.select_on_focus="true"
              top_delta="0"
              width="540">
 				<combo_box.commit_callback
@@ -189,9 +193,9 @@
          top_delta="0"
          user_resize="false"
          width="540">
-            <web_browser
+          <web_browser
              bottom="-30"
-             follows="left|right|top|bottom"
+             follows="all"
              layout="topleft"
              left="0"
              name="browser"
diff --git a/indra/newview/skins/default/xui/en/floater_my_friends.xml b/indra/newview/skins/default/xui/en/floater_my_friends.xml
deleted file mode 100644
index e7efcc78444355bc343468a5ac8bd3d5ebeb41b9..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_my_friends.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_close="false"
- can_resize="true"
- height="390"
- layout="topleft"
- min_height="240"
- min_width="365"
- name="floater_my_friends"
- help_topic="floater_my_friends"
- save_rect="true"
- single_instance="true"
- title="CONTACTS"
- width="395">
-    <tab_container
-     follows="all"
-     height="364"
-     layout="topleft"
-     left="4"
-     name="friends_and_groups"
-     tab_position="top"
-     tab_width="80"
-     top="20"
-     width="383">
-        <panel
-         bottom="364"
-         filename="panel_friends.xml"
-         label="Friends"
-         layout="topleft"
-         left="0"
-         help_topic="my_friends_friends_tab"
-         name="friends_panel"
-         width="370" />
-        <panel
-         bottom="364"
-         filename="panel_groups.xml"
-         label="Groups"
-         layout="topleft"
-         left="0"
-         help_topic="my_friends_groups_tab"
-         name="groups_panel"
-         width="370" />
-    </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml
index ca81b9bcf0f9ea0a2d74e7f8d9f5a3756977e840..e243ccd2f91e1401217fdca93e7f76b280609887 100644
--- a/indra/newview/skins/default/xui/en/floater_notifications_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_notifications_console.xml
@@ -36,6 +36,7 @@
      follows="left|right|top|bottom"
      layout="topleft"
      left="5"
+     orientation="vertical" 
      name="notification_channels"
      right="-5"
      top="42" />
diff --git a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
deleted file mode 100644
index 1d73d516d0bc6508597f397216462d61e5d67249..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- can_close="false"
- can_minimize="false"
- height="100"
- layout="topleft"
- title="Save Outfit"
- name="modal container"
- width="240">
-    <button
-     height="23"
-     label="Save"
-     label_selected="Save"
-     layout="topleft"
-     left="20"
-     name="Save"
-     top="70"
-     width="82" />
-    <button
-     height="23"
-     label="Cancel"
-     label_selected="Cancel"
-     layout="topleft"
-     left_pad="36"
-     name="Cancel"
-     top_delta="0"
-     width="82" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="30"
-     layout="topleft"
-     left="20"
-     word_wrap="true"
-     name="Save item as:"
-     top="10"
-     width="200">
-        Save what I'm wearing
-as a new Outfit:
-    </text>
-    <line_editor
-     type="string"
-     length="1"
-     border_style="line"
-     border_thickness="1"
-     follows="left|top"
-     height="23"
-     layout="topleft"
-     left_delta="0"
-     show_text_as_tentative="false"
-     top_pad="0"
-     max_length="63"
-     name="name ed"
-     width="200">
-        [DESC] (new)
-    </line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_classified.xml b/indra/newview/skins/default/xui/en/floater_preview_classified.xml
deleted file mode 100644
index 2017cf2bd102aaed5f659ab6127517012c028d21..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_classified.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- auto_tile="true"
- height="510"
- layout="topleft"
- name="classified_preview"
- help_topic="classified_preview"
- save_rect="true"
- title="CLASSIFIED INFORMATION"
- width="440">
-    <floater.string
-     name="Title">
-        Classified: [NAME]
-    </floater.string>
-    <panel
-     follows="bottom|left"
-     height="470"
-     layout="topleft"
-     left="0"
-     name="classified_details_panel"
-     top="20"
-     width="440" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_event.xml b/indra/newview/skins/default/xui/en/floater_preview_event.xml
deleted file mode 100644
index a4066b34c56d57a3241eae44201da7131532aef7..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_event.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- auto_tile="true"
- height="510"
- layout="topleft"
- name="event_preview"
- help_topic="event_preview"
- save_rect="true"
- title="EVENT INFORMATION"
- width="440">
-    <floater.string
-     name="Title">
-        Event: [NAME]
-    </floater.string>
-    <panel
-     follows="bottom|left"
-     height="470"
-     layout="topleft"
-     left="0"
-     name="event_details_panel"
-     top="20"
-     width="440" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
deleted file mode 100644
index 66408a50572f3d23c06553851e4b63180730b27d..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_minimize="false"
- follows="left|top"
- height="155"
- layout="topleft"
- name="Gesture"
- help_topic="gesture"
- save_rect="true"
- title="GESTURE SHORTCUT"
- width="260">
-    <scroll_list
-     follows="top|left"
-     height="110"
-     layout="topleft"
-     left="10"
-     name="library_list"
-     top="10"
-     width="240">
-        <scroll_list.rows
-         value="Animation" />
-        <scroll_list.rows
-         value="Sound" />
-        <scroll_list.rows
-         value="Chat" />
-        <scroll_list.rows
-         value="Wait" />
-    </scroll_list>
-    <!--button
-     follows="top|left"
-     height="20"
-     label="Preview"
-     layout="topleft"
-     left="20"
-     name="preview_btn"
-     top_pad="50"
-     width="80" />
-    <button
-     follows="top|left"
-     height="20"
-     label="Save"
-     layout="topleft"
-     left_pad="5"
-     name="save_btn"
-     top_delta="0"
-     width="80" />
-    <button
-     follows="top|left"
-     height="20"
-     label="Cancel (not working)"
-     layout="topleft"
-     left_pad="5"
-     name="save_btn"
-     top_delta="0"
-     width="80" /-->   
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 26252a7a16d91baf9ce358ce27d40ec327be7481..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_minimize="false"
- follows="left|top"
- height="90"
- layout="topleft"
- name="Gesture"
- help_topic="gesture"
- save_rect="true"
- title="GESTURE SHORTCUT"
- width="260">
-      <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="trigger_label"
-     top_pad="10"
-     width="100">
-        Chat:
-    </text>
-    <line_editor
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     max_length="31"
-     name="trigger_editor"
-     top_delta="-4"
-     width="135" />
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="key_label"
-     top_pad="10"
-     width="100">
-        Keyboard:
-    </text>
-    <combo_box
-     height="20"
-     label="None"
-     layout="topleft"
-     left_pad="13"
-     name="modifier_combo"
-     top_delta="-4"
-     width="50" />
-    <combo_box
-     height="20"
-     label="None"
-     layout="topleft"
-     left_pad="5"
-     name="key_combo"
-     top_delta="0"
-     width="45" />
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="replace_text"
-     tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture!"
-     top_pad="10"
-     width="100">
-        Replace:
-    </text>
-    <line_editor
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     max_length="31"
-     name="replace_editor"
-     tool_tip="Replace the trigger word(s) with these words. For example, trigger &apos;hello&apos; replace with &apos;howdy&apos; will turn the chat &apos;I wanted to say hello&apos; into &apos;I wanted to say howdy&apos; as well as playing the gesture"
-     top_delta="-4"
-     width="135" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
deleted file mode 100644
index 34f707cd2aea957b915dff6f7d8857b5fc62f603..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_minimize="false"
- follows="left|top"
- height="155"
- layout="topleft"
- name="Gesture"
- help_topic="gesture"
- save_rect="true"
- title="GESTURE SHORTCUT"
- width="260">
-    <scroll_list
-     follows="top|left"
-     height="110"
-     layout="topleft"
-     left="10"
-     name="step_list"
-     top_pad="10"
-     width="240" />
-    <!--text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="60"
-     layout="topleft"
-     left="10"
-     name="help_label"
-     top_pad="10"
-     width="200">
-        All steps happen simultaneously, 
-unless you add wait steps.
-    </text-->
-    <!--text
-     follows="top|left"
-     height="60"
-     layout="topleft"
-     left="10"
-     name="options_text"
-     top_pad="10"
-     width="205" /-->
-    <!--combo_box
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="10"
-     name="animation_list"
-     top_pad="10"
-     width="100" />
-    <combo_box
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     name="sound_list"
-     top_delta="10"
-     width="100" />
-    <line_editor
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     max_length="127"
-     name="chat_editor"
-     top_pad="10"
-     width="100" />
-    <radio_group
-     draw_border="false"
-     follows="top|left"
-     height="40"
-     layout="topleft"
-     left_pad="8"
-     name="animation_trigger_type"
-     top_pad="10"
-     width="80">
-        <radio_item
-         height="16"
-         label="Start"
-         layout="topleft"
-         left="3"
-         name="start"
-         top="-11"
-         width="80" />
-        <radio_item
-         height="16"
-         label="Stop"
-         layout="topleft"
-         left_delta="0"
-         name="stop"
-         top_pad="10"
-         width="80" />
-    </radio_group>
-    <check_box
-     follows="top|left"
-     height="20"
-     label="until animations are done"
-     layout="topleft"
-     left="16"
-     name="wait_anim_check"
-     top_pad="10"
-     width="100" />
-    <check_box
-     follows="top|left"
-     height="20"
-     label="time in seconds"
-     layout="topleft"
-     left_delta="0"
-     name="wait_time_check"
-     top_pad="10"
-     width="100" />
-    <line_editor
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     max_length="15"
-     name="wait_time_editor"
-     top_pad="10"
-     width="50" /-->   
-
-
-
-    <!--For pop out floater-->
-    <!--scroll_list
-     follows="top|left"
-     height="110"
-     layout="topleft"
-     left="10"
-     name="library_list"
-     top_pad="10"
-     width="260">
-        <scroll_list.rows
-         value="Animation" />
-        <scroll_list.rows
-         value="Sound" />
-        <scroll_list.rows
-         value="Chat" />
-        <scroll_list.rows
-         value="Wait" />
-    </scroll_list>
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifSmall"
-     height="60"
-     layout="topleft"
-     left="10"
-     name="help_label"
-     top_pad="10"
-     width="200">
-        All steps happen simultaneously, 
-unless you add wait steps.
-    </text>
-    <text
-     follows="top|left"
-     height="60"
-     layout="topleft"
-     left="10"
-     name="options_text"
-     top_pad="10"
-     width="205" />
-    <combo_box
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="10"
-     name="animation_list"
-     top_pad="10"
-     width="100" />
-    <combo_box
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     name="sound_list"
-     top_delta="0"
-     width="100" />
-    <line_editor
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     max_length="127"
-     name="chat_editor"
-     top_delta="0"
-     width="100" />
-    <radio_group
-     draw_border="false"
-     follows="top|left"
-     height="40"
-     layout="topleft"
-     left_pad="8"
-     name="animation_trigger_type"
-     top="445"
-     width="80">
-        <radio_item
-         height="16"
-         label="Start"
-         layout="topleft"
-         left="3"
-         name="start"
-         top="-11"
-         width="80" />
-        <radio_item
-         height="16"
-         label="Stop"
-         layout="topleft"
-         left_delta="0"
-         name="stop"
-         top_pad="10"
-         width="80" />
-    </radio_group>
-    <check_box
-     follows="top|left"
-     height="20"
-     label="until animations are done"
-     layout="topleft"
-     left="16"
-     name="wait_anim_check"
-     top="430"
-     width="100" />
-    <check_box
-     follows="top|left"
-     height="20"
-     label="time in seconds"
-     layout="topleft"
-     left_delta="0"
-     name="wait_time_check"
-     top_delta="20"
-     width="100" />
-    <line_editor
-     follows="top|left"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     max_length="15"
-     name="wait_time_editor"
-     top_delta="0"
-     width="50" /-->   
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 354f1de85e163b986bff23c182f3df80841a0929..8770ede7e9f920348ed84c0d0536357d0ecf8ff5 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -38,6 +38,7 @@
          user_resize="false"
          width="630">
             <web_browser
+              trusted_content="true" 
              follows="left|right|top|bottom"
              layout="topleft"
              left="0"
diff --git a/indra/newview/skins/default/xui/en/floater_statistics.xml b/indra/newview/skins/default/xui/en/floater_statistics.xml
deleted file mode 100644
index 3a4e84514111db6c6b35e95e8b518a276922be36..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_statistics.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_resize="true"
- follows="right|top"
- height="392"
- layout="topleft"
- mouse_opaque="false"
- name="stats floater"
- help_topic="stats_floater"
- title="STATISTICS"
- width="250" />
diff --git a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
index 1935edfcc1c69cffd2ac01281acf95b9ef15eb2a..95aaadfcf3f565b0a3a19ad20fb5be930d87414b 100644
--- a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
@@ -41,7 +41,7 @@
      layout="topleft"
      left_delta="0"
      name="text_enabled_color_checkbox"
-     text_enabled_color="EmphasisColor"
+     label_text.text_color="EmphasisColor"
      top_pad="14"
      width="150" />
     <check_box
@@ -51,7 +51,7 @@
      layout="topleft"
      left_delta="0"
      name="text_disabled_color_checkbox"
-     text_disabled_color="EmphasisColor_35"
+     label_text.text_readonly_color="EmphasisColor_35"
      top_pad="14"
      width="150" />
     <check_box
diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
index fb583114c08d24fb9858b1372382df470e5e374f..13c850c86c0300c1000a46c372011795bdf3b13b 100644
--- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
@@ -79,7 +79,7 @@
    follows="top|left"
    left="10"
    height="16">
-    For widget list see https://wiki.lindenlab.com/wiki/Viewer:UI/Widgets
+    For widget list see http://wiki.secondlife.com/wiki/XUI_Reference
   </text>
 
   <!-- First column -->
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/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml
index cbfaac958bdfc4a63dd74785200a0231781ed4c5..af1617eb39d45690ce0e653033e60c26d4cf9939 100644
--- a/indra/newview/skins/default/xui/en/floater_tos.xml
+++ b/indra/newview/skins/default/xui/en/floater_tos.xml
@@ -58,6 +58,7 @@
         Please read the following Terms of Service and Privacy Policy carefully. To continue logging in to [SECOND_LIFE], you must accept the agreement.
     </text>
     <web_browser
+      trusted_content="true" 
      follows="left|top"
      height="340"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index bf5bd87ad6492b0b03443e834d1b1e475d36ba20..14320995908068ff3df7eabd02c6109ee81c458c 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -86,6 +86,7 @@
              visible="true"
              width="20" />
         </layout_panel>
+        <layout_panel name="leave_call_panel" height="26" auto_resize="false">
         <layout_stack
          clip="true"
          auto_resize="false"
@@ -96,11 +97,15 @@
          name="voice_effect_and_leave_call_stack"
          orientation="horizontal"
          width="262">
-          <panel
-           class="panel_voice_effect"
-           name="panel_voice_effect"
-           visiblity_control="VoiceMorphingEnabled"
-           filename="panel_voice_effect.xml" />
+          <layout_panel
+            height="26"
+            width="200">
+            <panel
+             class="panel_voice_effect"
+             name="panel_voice_effect"
+             visiblity_control="VoiceMorphingEnabled"
+             filename="panel_voice_effect.xml" />
+          </layout_panel>
           <layout_panel
            auto_resize="false"
            user_resize="false"
@@ -118,6 +123,7 @@
              width="100" />
           </layout_panel>
         </layout_stack>
+          </layout_panel>
       <layout_panel
           follows="all"
           layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
deleted file mode 100644
index 71812bd1a67a8b7f28b7ff951c2cf2151cdd29fc..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="0"
- can_close="false"
- can_minimize="false"
- height="100"
- layout="topleft"
- name="modal container"
- width="240">
-    <button
-     height="23"
-     label="Save"
-     label_selected="Save"
-     layout="topleft"
-     left="20"
-     name="Save"
-     top="70"
-     width="82" />
-    <button
-     height="23"
-     label="Cancel"
-     label_selected="Cancel"
-     layout="topleft"
-     left_pad="36"
-     name="Cancel"
-     top_delta="0"
-     width="82" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="30"
-     layout="topleft"
-     word_wrap="true"
-     left="20"
-     name="Save item as:"
-     top="10"
-     width="200">
-        Save item to my inventory as:
-    </text>
-    <line_editor
-     type="string"
-     length="1"
-     border_style="line"
-     border_thickness="1"
-     follows="left|top"
-     height="23"
-     layout="topleft"
-     left_delta="0"
-     max_length="63"
-     name="name ed"
-     top_pad="0"
-     width="200">
-        New [DESC]
-    </line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index a1ca910cbbb96b7d84d29d5526f675b980dba296..8d9ebf6e06b568cf3ff37976d5df54dced5a9bc8 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -20,6 +20,7 @@
                   mouse_opaque="false"
                   name="nav_bar_container"
                   tab_stop="false"
+                  min_height="10" 
                   width="1024"
                   user_resize="false" 
                   visible="false">
@@ -65,25 +66,24 @@
                         mouse_opaque="false"
                         name="world_stack"
                         orientation="vertical">
-            <panel auto_resize="true"
-                   follows="all"
-                   height="500"
-                   layout="topleft"
-                   tab_stop="false"
-                   mouse_opaque="false"
-                name="hud container"
-                   width="500">
-            <panel auto_resize="false"
-                   follows="left|top"
-                   height="19"
-                   left="0"
-                   mouse_opaque="false"
-                   name="topinfo_bar_container"
-                   tab_stop="false"
-                   top="0"
-                   user_resize="false"
-                   visible="false"
-                   width="1024"/>
+            <layout_panel auto_resize="true"
+                          follows="all"
+                          height="500"
+                          layout="topleft"
+                          tab_stop="false"
+                          mouse_opaque="false"
+                          user_resize="false" 
+                          name="hud container"
+                          width="500">
+              <panel follows="left|top"
+                     height="19"
+                     left="0"
+                     mouse_opaque="false"
+                     name="topinfo_bar_container"
+                     tab_stop="false"
+                     top="0"
+                     visible="false"
+                     width="1024"/>
               <panel follows="right|top|bottom"
                      height="500"
                      mouse_opaque="false"
@@ -101,10 +101,10 @@
                      name="stand_stop_flying_container"
                      visible="false"
                      width="500"/>
-            </panel>
+            </layout_panel>
             <layout_panel auto_resize="false"
-                   follows="all"
                    min_height="33"
+                   height="33" 
                    mouse_opaque="false"
                    name="bottom_tray_container"
                    visible="false"/>
@@ -112,7 +112,7 @@
         </layout_panel>
         <!-- side tray -->
         <layout_panel auto_resize="false"
-                      follows="all"
+                      follows="top|bottom"
                       height="500"
                       min_width="333"
                       mouse_opaque="false"
@@ -184,15 +184,6 @@
                            visible="false"
                            width="1024"/>
   </panel>
-  <panel top="0"
-         follows="all"
-         height="768"
-         mouse_opaque="true"
-         name="progress_view"
-         filename="panel_progress.xml"
-         class="progress_view"
-         width="1024"
-         visible="false"/>
   <panel top="0"
          follows="all"
          height="768"
@@ -208,6 +199,22 @@
           bottom="-1"
           height="11" />
   </panel>
+  <view top="0"
+        left="0"
+        width="1024"
+        height="768"
+        name="hint_holder"
+        mouse_opaque="false"
+        follows="all"/>
+  <panel top="0"
+         follows="all"
+         height="768"
+         mouse_opaque="true"
+         name="progress_view"
+         filename="panel_progress.xml"
+         class="progress_view"
+         width="1024"
+         visible="false"/>
   <menu_holder top="0"
                follows="all"
                height="768"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 72677de3579fcf419280984c242b0ea9a8e94e19..9a08be24050969914ce179817c854f689de78525 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">
@@ -950,6 +968,14 @@
              function="Floater.Show"
              parameter="sl_about" />
         </menu_item_call>
+        <menu_item_check
+         label="Enable Hints"
+         name="Enable Hints">
+          <on_check
+            control="EnableUIHints"/>
+          <on_click
+            function="ToggleUIHints"/>
+        </menu_item_check>
     </menu>
     <menu
      create_jump_keys="true"
@@ -2629,8 +2655,8 @@
                  function="Advanced.PrintTextureMemoryStats" />
             </menu_item_call>
             <menu_item_check
-             label="Double-Click Auto-Pilot"
-             name="Double-Click Auto-Pilot">
+             label="Double-ClickAuto-Pilot"
+             name="Double-ClickAuto-Pilot">
                 <menu_item_check.on_check
                  function="CheckControl"
                  parameter="DoubleClickAutoPilot" />
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index c496b1d5a57aa584c79ba4481946007b67418336..cace5b96edcf4cb3bf2ef97d818219f911b61970 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" ?><notifications>
-
-  <global name="skipnexttime">
+    <global name="skipnexttime">
 
 		Don&apos;t show me this again
   </global>
@@ -97,7 +96,7 @@
   </template>
 
   <notification
-   functor="GenericAcknowledge"
+ functor="GenericAcknowledge"
    icon="alertmodal.tga"
    name="MissingAlert"
    label="Unknown Notification Message"
@@ -723,7 +722,7 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now?
     <url
 	option="0"
 	name="url"
-	openexternally = "1">
+	target = "_external">
 
 			http://join.secondlife.com/
     </url>
@@ -2033,8 +2032,8 @@ Offer friendship to [NAME]?
   </notification>
 
   <notification
-   icon="alertmodal.tga"
-   label="Add Friend"
+ icon="alertmodal.tga"
+ label="Add Friend"
    name="AddFriendWithMessage"
    type="alertmodal">
 Friends can give permissions to track each other on the map and receive online status updates.
@@ -2060,7 +2059,8 @@ Would you be my friend?
  icon="alertmodal.tga"
  label="Save Outfit"
  name="SaveOutfitAs"
- type="alertmodal">
+ type="alertmodal"
+ unique="true">
     Save what I'm wearing as a new Outfit:
     <form name="form">
       <input name="message" type="text">
@@ -2076,7 +2076,6 @@ Would you be my friend?
        name="Cancel"
        text="Cancel"/>
     </form>
-    <unique/>
   </notification>
 
   <notification
@@ -4011,37 +4010,37 @@ Go to your [http://secondlife.com/account/ Dashboard] to see your account histor
   <notification
    icon="alertmodal.tga"
    name="ConfirmQuit"
-   type="alertmodal">
+   type="alertmodal"
+   unique="true">
 Are you sure you want to quit?
     <usetemplate
      ignoretext="Confirm before I quit"
      name="okcancelignore"
      notext="Don&apos;t Quit"
      yestext="Quit"/>
-     <unique/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
    name="DeleteItems"
-   type="alertmodal">
+   type="alertmodal"
+   unique="true">
     [QUESTION]
     <usetemplate
      ignoretext="Confirm before deleting items"
      name="okcancelignore"
      notext="Cancel"
      yestext="OK"/>
-    <unique/>
   </notification>
 
   <notification
    icon="alertmodal.tga"
    name="HelpReportAbuseEmailLL"
-   type="alert">
+   type="alert"
+   unique="true">
 Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
 
 All reported abuses are investigated and resolved.
-   <unique/>
   </notification>
 
   <notification
@@ -4983,47 +4982,47 @@ Message from [NAME]:
    icon="notify.tga"
    name="NotSafe"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This land has damage enabled.
 You can be hurt here. If you die, you will be teleported to your home location.
-    <unique/>
   </notification>
 
   <notification
    icon="notify.tga"
    name="NoFly"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This area has flying disabled.
 You can&apos;t fly here.
-    <unique/>
   </notification>
 
   <notification
    icon="notify.tga"
    name="PushRestricted"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This area does not allow pushing. You can&apos;t push others here unless you own the land.
-    <unique/>
   </notification>
 
   <notification
    icon="notify.tga"
    name="NoVoice"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This area has voice chat disabled. You won&apos;t be able to hear anyone talking.
-    <unique/>
   </notification>
 
   <notification
    icon="notify.tga"
    name="NoBuild"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 This area has building disabled. You can&apos;t build or rez objects here.
-    <unique/>
   </notification>
 
   <notification
@@ -5944,9 +5943,9 @@ The voice call you are trying to join, [VOICE_CHANNEL_NAME], has reached maximum
   <notification
    icon="notifytip.tga"
    name="ProximalVoiceChannelFull"
-   type="notifytip">
+   type="notifytip"
+   unique="true">
 We&apos;re sorry.  This area has reached maximum capacity for voice conversations.  Please try to use voice in another area.
-    <unique/>
   </notification>
 
   <notification
@@ -6003,9 +6002,9 @@ Failed to connect to [VOICE_CHANNEL_NAME], please try again later.  You will now
    duration="10"
    icon="notifytip.tga"
    name="VoiceLoginRetry"
-   type="notifytip">
+   type="notifytip"
+   unique="true">
 We are creating a voice channel for you. This may take up to one minute.
-    <unique/>
   </notification>
 
   <notification
@@ -6013,10 +6012,10 @@ We are creating a voice channel for you. This may take up to one minute.
    name="VoiceEffectsExpired"
    sound="UISndAlert"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 One or more of your subscribed Voice Morphs has expired.
 [[URL] Click here] to renew your subscription.
-    <unique/>
   </notification>
 
   <notification
@@ -6024,10 +6023,10 @@ One or more of your subscribed Voice Morphs has expired.
    name="VoiceEffectsExpiredInUse"
    sound="UISndAlert"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 The active Voice Morph has expired, your normal voice settings have been applied.
 [[URL] Click here] to renew your subscription.
-    <unique/>
   </notification>
 
   <notification
@@ -6035,21 +6034,20 @@ The active Voice Morph has expired, your normal voice settings have been applied
    name="VoiceEffectsWillExpire"
    sound="UISndAlert"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 One or more of your Voice Morphs will expire in less than [INTERVAL] days.
 [[URL] Click here] to renew your subscription.
-    <unique/>
   </notification>
-		LLNotificationsUtil::add("VoiceEffectsNew");
 
   <notification
    icon="notify.tga"
    name="VoiceEffectsNew"
    sound="UISndAlert"
    persist="true"
-   type="notify">
+   type="notify"
+   unique="true">
 New Voice Morphs are available!
-    <unique/>
   </notification>
 
   <notification
@@ -6375,8 +6373,8 @@ Are you sure you want to leave this call?
      ignoretext="Confirm before I leave call"
      name="okcancelignore"
      notext="No"
-     yestext="Yes"/>
-    <unique/>
+     yestext="Yes"
+     unique="true"/>
   </notification>
 
   <notification
@@ -6392,10 +6390,84 @@ Mute everyone?
      ignoretext="Confirm before I mute all participants in a group call"
      name="okcancelignore"
      yestext="Ok"
-     notext="Cancel"/>
-    <unique/>
+     notext="Cancel"
+     unique="true"/>
+  </notification>
+
+  <notification
+  name="HintChat"
+  label="Chat"
+  type="hint"
+  unique="true">
+    To join the conversation, type into the chat field below.
   </notification>
 
+  <notification
+  name="HintSit"
+  label="Stand"
+  type="hint"
+  unique="true">
+    To stand up and exit the sitting position, click the Stand button.
+  </notification>
+
+  <notification
+  name="HintDestinationGuide"
+  label="Explore the World"
+  type="hint"
+  unique="true">
+    The Destination Guide contains thousands of new places to discover. Select a location and choose Teleport to start exploring.
+  </notification>
+
+  <notification
+    name="HintSidePanel"
+    label="Side Panel"
+    type="hint"
+    unique="true">
+    Get quick access to your inventory, outfits, profiles and more in the side panel.
+  </notification>
+
+  <notification
+  name="HintMove"
+  label="Move"
+  type="hint"
+  unique="true">
+    To walk or run, open the Move Panel and use the directional arrows to navigate. You can also use the directional keys on your keyboard.
+  </notification>
+
+  <notification
+  name="HintInventory"
+  label="Inventory"
+  type="hint"
+  unique="true">
+    Check your inventory to find items. Newest items can be easily found in the Recent tab.
+  </notification>
+
+  <notification
+  name="HintLindenDollar"
+  label="You've got Linden Dollars!"
+  type="hint"
+  unique="true">
+    Here's your current balance of L$. Click Buy L$ to purchase more Linden Dollars.
+  </notification>
+
+  <notification
+  name="PopupAttempt"
+  icon="Popup_Caution"
+  type="browser">
+    A pop-up was prevented from opening.
+    <form name="form">
+      <ignore name="ignore"
+              control="MediaEnablePopups"
+              invert_control="false"
+              text="Enable all pop-ups"/>
+      <button default="true"
+              index="0"
+              name="open"
+              text="Open pop-up window"/>
+    </form>
+  </notification>
+
+  
   <global name="UnsupportedCPU">
 - Your CPU speed does not meet the minimum requirements.
   </global>
diff --git a/indra/newview/skins/default/xui/en/panel_audio_device.xml b/indra/newview/skins/default/xui/en/panel_audio_device.xml
deleted file mode 100644
index 546f46205f6eb32ad12590f06076ec96e00e3e9e..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_audio_device.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="240"
- layout="topleft"
- left="8"
- name="device_settings"
- top="240"
- width="404">
-    <panel.string
-     name="default_text">
-        Default
-    </panel.string>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="6"
-     name="Audio Devices"
-     width="200">
-        Audio Devices
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="20"
-     name="Input device (microphone):"
-     top="26"
-     width="200">
-        Input device (microphone):
-    </text>
-    <combo_box
-     height="18"
-     layout="topleft"
-     left_delta="0"
-     max_chars="128"
-     name="voice_input_device"
-     top_pad="2"
-     width="225" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left_delta="0"
-     name="Output device (speakers):"
-     top_pad="9"
-     width="200">
-        Output device (speakers):
-    </text>
-    <combo_box
-     height="18"
-     layout="topleft"
-     left_delta="0"
-     max_chars="128"
-     name="voice_output_device"
-     top_pad="2"
-     width="225" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     left="6"
-     name="Input level:"
-     top="121"
-     width="200">
-        Input Level
-    </text>
-    <text_editor
-     type="string"
-     length="1"
-	 top="135"
-     bg_readonly_color="0 0 0 0"
-     enabled="false"
-     height="60"
-     border_visible="false"
-     layout="topleft"
-     left_delta="10"
-     max_length="65535"
-     name="voice_intro_text1"
-     tab_stop="false"
-     width="380"
-     word_wrap="true">
-        Adjust the slider to control how loud you sound to other Residents. To test the input level, simply speak into your microphone.
-    </text_editor>
-    <slider_bar
-     follows="left|top"
-     height="17"
-     increment="0.05"
-     initial_value="1.0"
-     layout="topleft"
-     left_delta="5"
-     max_val="2"
-     name="mic_volume_slider"
-     tool_tip="Change the volume using this slider"
-     top="202"
-     width="90" />
-    <text
-     type="string"
-     length="1"
-     follows="left|top"
-     height="20"
-     layout="topleft"
-     left_pad="5"
-     name="wait_text"
-     top_delta="1"
-     width="200">
-        Please wait
-    </text>
-    <locate
-     height="20"
-     layout="topleft"
-     left_delta="0"
-     name="bar0"
-     top_delta="5"
-     width="20" />
-    <locate
-     height="20"
-     layout="topleft"
-     left_pad="2"
-     name="bar1"
-     top_delta="0"
-     width="20" />
-    <locate
-     height="20"
-     layout="topleft"
-     left_pad="2"
-     name="bar2"
-     top_delta="0"
-     width="20" />
-    <locate
-     height="20"
-     layout="topleft"
-     left_pad="2"
-     name="bar3"
-     top_delta="0"
-     width="20" />
-    <locate
-     height="20"
-     layout="topleft"
-     left_pad="2"
-     name="bar4"
-     top_delta="0"
-     width="20" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
index b385654010e2d7be9107ac5276964d151f52d2c6..6f3629cc8fc2a7521847597c8dfdb2fc3d8410fc 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
@@ -19,6 +19,11 @@
     <string name="FormatMonths">[COUNT]mon</string>
     <string name="FormatYears">[COUNT]y</string>
  
+    <!--
+    *NOTE: llavatarlistitem.cpp lays these controls out depending on which
+           ones are visible. Trying to change their order here will break it
+           ... which kinda sucks.
+    -->
     <icon
      follows="top|right|left"
      height="24"
@@ -71,49 +76,49 @@
      value="0s"
      width="35" />
     <icon
-     height="20"
+     height="16"
      follows="right"
-     image_name="Permission_Visible_Online"
+     image_name="Permission_Edit_Objects_Theirs"
      layout="topleft"
      left_pad="3"
-     right="-141"
-     name="permission_online_icon"
-     tool_tip="This friend can see when you&apos;re online"
-     top="2"
-     width="20" />
+     right="-129"
+     name="permission_edit_theirs_icon"
+     tool_tip="You can edit this friend&apos;s objects"
+     top="4"
+     width="16" />
     <icon
-     height="20"
+     height="16"
      follows="right"
-     image_name="Permission_Visible_Map"
+     image_name="Permission_Edit_Objects_Mine"
      layout="topleft"
      left_pad="3"
-     tool_tip="This friend can locate you on the map"
-     right="-118"
-     name="permission_map_icon"
+     right="-110"
+     name="permission_edit_mine_icon"
+     tool_tip="This friend can edit, delete or take your objects"
      top_delta="0"
-     width="20" />
+     width="16" />
     <icon
-     height="20"
+     height="16"
      follows="right"
-     image_name="Permission_Edit_Objects_Mine"
+     image_name="Permission_Visible_Map"
      layout="topleft"
      left_pad="3"
-     right="-95"
-     name="permission_edit_mine_icon"
-     tool_tip="This friend can edit, delete or take your objects"
+     tool_tip="This friend can locate you on the map"
+     right="-91"
+     name="permission_map_icon"
      top_delta="0"
-     width="20" />
+     width="16" />
     <icon
-     height="20"
+     height="16"
      follows="right"
-     image_name="Permission_Edit_Objects_Theirs"
+     image_name="Permission_Visible_Online"
      layout="topleft"
      left_pad="3"
      right="-72"
-     name="permission_edit_theirs_icon"
-     tool_tip="You can edit this friend&apos;s objects"
+     name="permission_online_icon"
+     tool_tip="This friend can see when you&apos;re online"
      top_delta="0"
-     width="20" />
+     width="16" />
     <button
      follows="right"
      height="16"
@@ -124,7 +129,7 @@
      right="-53"
      name="info_btn"
      tab_stop="false"
-     top_delta="2"
+     top_delta="0"
      width="16" />
     <button
      follows="right"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index cdd596222d988eae7f2ed032006b9bb37aebe59a..63068a069f4b608c2d01056067ac3faae7de76c0 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -32,31 +32,32 @@
      orientation="horizontal"
      top="0"
      width="1310">
-        <icon
+        <layout_panel
          auto_resize="false"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
+         user_resize="false" 
          min_width="2"
-         top="0"
          width="2" />
         <layout_panel
          auto_resize="false"
-         filename="panel_nearby_chat_bar.xml"
-         follows="left|right"
-         height="28"
          layout="topleft"
-         left="0"
          max_width="320"
-         min_height="23"
          min_width="214"
+         height="28" 
          mouse_opaque="false"
-         name="chat_bar"
-         top="4"
+		 name="chat_bar_layout_panel"
          user_resize="true"
-         width="308" />
+         width="308" >
+          <panel
+         name="chat_bar"
+            filename="panel_nearby_chat_bar.xml"
+            left="0"
+            height="28"
+            width="308"
+            top="0"
+            mouse_opaque="false"
+            follows="left|right"
+          />
+        </layout_panel>
         <!--
         There is resize bar between chatbar and Speak button. It has 2px width (is is set as 2*UIResizeBarOverlap)
         -->
@@ -404,18 +405,10 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
                  width="7" />
             </chiclet_panel>
         </layout_panel>
-        <icon
-         auto_resize="false"
-         color="0 0 0 0"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
-         min_width="4"
-         name="DUMMY"
-         top="0"
-         width="4" />
+        <layout_panel auto_resize="false"
+                      user_resize="false" 
+                      width="4"
+                      min_width="4"/>
         <layout_panel
          auto_resize="false"
          follows="right"
@@ -507,17 +500,11 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
                 </button>
             </chiclet_notification>
         </layout_panel>
-      <icon
+      <layout_panel
          auto_resize="false"
-         color="0 0 0 0"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
+         user_resize="false" 
          min_width="4"
          name="DUMMY2"
-         top="0"
          width="8" />
     </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
index 6e9476f8146ad1e1a3a7a10e86600458f389d972..efb1da4c05b57805d885d60ebb43c00c02fb9eff 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
@@ -28,30 +28,28 @@
      orientation="horizontal"
      top="0"
      width="1000">
-        <icon
+        <layout_panel
          auto_resize="false"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
+         user_resize="false" 
          min_width="2"
-         left="0"
-         top="0"
          width="2" />
         <layout_panel
          mouse_opaque="false"
          auto_resize="true"
-         follows="left|right"
          height="28"
          layout="topleft"
-         left="0"
-         min_height="23"
          width="310"
-         top="4"
          min_width="188"
-         name="chat_bar"
-         user_resize="false"
-         filename="panel_nearby_chat_bar.xml" />
+         user_resize="false">
+          <panel
+            left="0"
+            filename="panel_nearby_chat_bar.xml"
+            follows="left|right"
+            top="4"
+            width="310"
+            name="chat_bar"
+            mouse_opaque="false"/>
+        </layout_panel>
         <layout_panel
          mouse_opaque="false"
          auto_resize="false"
@@ -79,17 +77,11 @@
                  use_ellipses="true" />
             </gesture_combo_list>
         </layout_panel>
-        <icon
+        <layout_panel
          auto_resize="false"
-         color="0 0 0 0"
-         follows="left|right"
-         height="10"
-         image_name="spacer24.tga"
-         layout="topleft"
-         left="0"
+         user_resize="false" 
          min_width="3"
          name="after_gesture_panel"
-         top="0"
          width="3"/>
     </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 903dcd4c2463f012ad551047f3587920483f5e3d..6781a761200f3b5bc32716b079672e57b249a844 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -242,7 +242,7 @@
        left="8"
        name="show_in_search_checkbox"
        height="15"
-       text_enabled_color="white"
+       label_text.text_color="white"
        top_pad="12"
        width="100" />
       <text
@@ -351,15 +351,15 @@
 		      user_resize="false" 
 		      auto_resize="true"
 			  width="153">
-			<button
+        <button
 		         follows="bottom|left|right"
-		         height="23"
-		         label="Save Changes"
-		         layout="topleft"
+         height="23"
+         label="Save Changes"
+         layout="topleft"
 		         left="1"
-		         name="save_btn"
+         name="save_btn"
 		         top="0"
-		         width="152" />
+         width="152" />
 		  </layout_panel>
 		  
 		  <layout_panel
@@ -372,15 +372,15 @@
 		      user_resize="false" 
 		      auto_resize="true"
 			  width="154">
-	        <button
+        <button
 		         follows="bottom|left|right"
-		         height="23"
-		         label="Cancel"
-		         layout="topleft"
+         height="23"
+         label="Cancel"
+         layout="topleft"
 		         left="1"
-		         name="cancel_btn"
+         name="cancel_btn"
 		         top="0"
-		         width="153" />
+         width="153" />
 		  </layout_panel>
 	   </layout_stack>
     </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_friends.xml b/indra/newview/skins/default/xui/en/panel_friends.xml
deleted file mode 100644
index c315adb33ebaa2e8745d15e718b837f1bc7a5e04..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_friends.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- border="true"
- follows="all"
- height="347"
- layout="topleft"
- name="friends"
- width="100">
-    <panel.string
-     name="Multiple">
-        Multiple friends
-    </panel.string>
-    <scroll_list
-     bottom="337"
-     column_padding="0"
-     draw_heading="true"
-     follows="left|top|bottom|right"
-     layout="topleft"
-     left="10"
-     multi_select="true"
-     name="friend_list"
-     right="-100"
-     search_column="1"
-     tool_tip="Hold shift or control while clicking to select multiple friends"
-     top="10">
-        <scroll_list.columns
-         image="ff_online_status_button.tga"
-         name="icon_online_status"
-         tool_tip="Online status"
-         width="20" />
-        <scroll_list.columns
-         dynamic_width="true"
-         label="Name"
-         name="friend_name"
-         tool_tip="Name" />
-        <scroll_list.columns
-         image="ff_visible_online_button.tga"
-         name="icon_visible_online"
-         tool_tip="Friend can see when you&apos;re online"
-         width="20" />
-        <scroll_list.columns
-         image="ff_visible_map_button.tga"
-         name="icon_visible_map"
-         tool_tip="Friend can locate you on the map"
-         width="20" />
-        <scroll_list.columns
-         image="ff_edit_mine_button.tga"
-         name="icon_edit_mine"
-         tool_tip="Friend can edit, delete or take objects"
-         width="20" />
-        <scroll_list.columns
-         image="ff_edit_theirs_button.tga"
-         name="icon_edit_theirs"
-         tool_tip="You can edit this friend&apos;s objects"
-         width="20" />
-        <scroll_list.columns
-         name="friend_last_update_generation"
-         width="0" />
-    </scroll_list>
-    <locate
-     bottom="7"
-     layout="topleft"
-     left="-90" />
-    <button
-     follows="top|right"
-     height="22"
-     label="IM/Call"
-     layout="topleft"
-     left_pad="10"
-     name="im_btn"
-     tool_tip="Open Instant Message session"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Profile"
-     layout="topleft"
-     left_delta="0"
-     name="profile_btn"
-     tool_tip="Show picture, groups, and other information"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Teleport"
-     layout="topleft"
-     left_delta="0"
-     name="offer_teleport_btn"
-     tool_tip="Offer this friend a teleport to your current location"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Pay"
-     layout="topleft"
-     left_delta="0"
-     name="pay_btn"
-     tool_tip="Give Linden dollars (L$) to this friend"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Remove"
-     layout="topleft"
-     left_delta="0"
-     name="remove_btn"
-     tool_tip="Remove this person from your friends list"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Add"
-     layout="topleft"
-     left_delta="0"
-     name="add_btn"
-     tool_tip="Offer friendship to a Resident"
-     top_pad="13"
-     width="80" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index 76f7484c6803deb2d088a312d6ebf3452b7c68f2..1e1d2d18ca30fd7f7de98fa33732d31ac3134cc9 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -60,6 +60,8 @@
      left="0"
      right="-1"
      top="0"
+     sort_column="0"
+     sort_ascending="true"
      name="group_parcel_list"
      width="313">
         <scroll_list.columns
diff --git a/indra/newview/skins/default/xui/en/panel_groups.xml b/indra/newview/skins/default/xui/en/panel_groups.xml
deleted file mode 100644
index bba399481b4e1ab5efb49719adf8de6eb1f45f29..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_groups.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- border="true"
- follows="all"
- height="347"
- layout="topleft"
- left="280"
- name="groups"
- top="24"
- width="350">
-    <scroll_list
-     bottom="302"
-     follows="left|top|right|bottom"
-     layout="topleft"
-     left="10"
-     name="group list"
-     top="10"
-     width="240">
-        <scroll_list.columns
-         label=""
-         name="name"
-         width="248" />
-    </scroll_list>
-    <text
-     type="string"
-     length="1"
-     follows="left|bottom"
-     height="16"
-     layout="topleft"
-     left_delta="2"
-     mouse_opaque="false"
-     name="groupdesc"
-     top_pad="7"
-     width="248">
-        Your currently active group is displayed in bold.
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="left|bottom"
-     height="16"
-     layout="topleft"
-     left_delta="0"
-     mouse_opaque="false"
-     name="groupcount"
-     top_pad="1"
-     width="248">
-        You belong to [COUNT] groups (of [MAX] maximum).
-    </text>
-    <locate
-     height="0"
-     layout="topleft"
-     left="-90"
-     top="7"
-     width="1" />
-    <button
-     follows="top|right"
-     height="22"
-     label="IM/Call"
-     layout="topleft"
-     left_delta="0"
-     name="IM"
-     tool_tip="Open Instant Message session"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Info"
-     layout="topleft"
-     left_delta="0"
-     name="Info"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Activate"
-     layout="topleft"
-     left_delta="0"
-     name="Activate"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Leave"
-     layout="topleft"
-     left_delta="0"
-     name="Leave"
-     top_pad="3"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Create..."
-     layout="topleft"
-     left_delta="0"
-     name="Create"
-     top_pad="13"
-     width="80" />
-    <button
-     follows="top|right"
-     height="22"
-     label="Search..."
-     layout="topleft"
-     left_delta="0"
-     name="Search..."
-     top_pad="3"
-     width="80" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e2e9d0aef0941378a67896f9ef6836e8183f27f6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_hint.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ width="205"
+ height="100">
+  <text name="hint_title"
+        font="SansSerifMedium" 
+        left="8"
+        right="180"
+        top="8"
+        bottom="20"
+        follows="left|right|top"
+        text_color="Black"
+        wrap="false"/>
+  <text name="hint_text"
+        left="8"
+        right="197"
+        top="26"
+        bottom="92"
+        follows="all" 
+        text_color="Black"
+        wrap="true"/>
+  <button right="197" 
+          top="8"
+          width="16" 
+          height="16"
+          name="close" 
+          follows="right|top" 
+          image_color="DkGray" 
+          image_unselected="Icon_Close_Foreground"
+          image_selected="Icon_Close_Press"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 33a5e01e4c48f6c6f7f84c1e4bc80064abeb734b..aa0edbfb8a6d8ba7b3f6baaac02cbfc26e32b857 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -3,11 +3,11 @@
  border="false"
  height="300"
  name="panel_im_control_panel"
- width="119">
+ width="150">
     <avatar_icon
      follows="left|top"
      height="105"
-     left_delta="5"
+     left_delta="20"
      name="avatar_icon"
      top="-5"
      width="114"/>
@@ -22,7 +22,7 @@
      name="button_stack"
      orientation="vertical"
      top_pad="5"
-     width="114">
+     width="145">
         <layout_panel
          mouse_opaque="false"
          auto_resize="true"
@@ -31,7 +31,7 @@
          layout="topleft"
          left="2"
          min_height="0"
-         width="109"
+         width="140"
          top="0"
          name="spacer"
          user_resize="false" />
@@ -41,7 +41,7 @@
          height="20"
          layout="topleft"
          min_height="20"
-         width="109"
+         width="140"
          name="view_profile_btn_panel"
          user_resize="false">
             <button
@@ -50,7 +50,7 @@
              label="Profile"
              name="view_profile_btn"
              top="0"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -58,7 +58,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="add_friend_btn_panel"
          user_resize="false">
             <button
@@ -67,7 +67,7 @@
              label="Add Friend"
              name="add_friend_btn"
              top="5"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -75,7 +75,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="teleport_btn_panel"
          user_resize="false">
         <button
@@ -85,7 +85,7 @@
              label="Teleport"
              name="teleport_btn"
              tool_tip = "Offer to teleport this person"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -93,7 +93,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="share_btn_panel"
          user_resize="false">
            <button
@@ -102,7 +102,7 @@
              height="23"
              label="Share"
              name="share_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -110,7 +110,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="pay_btn_panel"
          user_resize="false">
            <button
@@ -119,7 +119,7 @@
              height="23"
              label="Pay"
              name="pay_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -127,7 +127,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="call_btn_panel"
          user_resize="false">
             <button
@@ -135,7 +135,7 @@
              height="23"
              label="Call"
              name="call_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -143,7 +143,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="end_call_btn_panel"
          user_resize="false"
          visible="false">
@@ -152,7 +152,7 @@
              height="23"
              label="End Call"
              name="end_call_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
         <layout_panel
          auto_resize="false"
@@ -160,7 +160,7 @@
          height="25"
          layout="topleft"
          min_height="25"
-         width="109"
+         width="140"
          name="voice_ctrls_btn_panel"
          user_resize="false"
          visible="false">
@@ -169,7 +169,7 @@
              height="23"
              label="Voice Controls"
              name="voice_ctrls_btn"
-             width="109" />
+             width="140" />
         </layout_panel>
     </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 6b136495d2960b53149ff41b56a39d77fd7d47b9..891616b83848492ef16bf8c9eb0bdda1ae24889c 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -24,6 +24,8 @@ top="600"
 </panel.string>
 <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp -->
 <web_browser
+  tab_stop="false" 
+trusted_content="true" 
 bg_opaque_color="Black"
 border_visible="false"
 bottom="600"
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat.xml
deleted file mode 100644
index 50a78e1c7152c777fcfbc6ed9d6e4e92115fdc13..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-
-<panel
-  name="nearby_chat"  visible="true" width="250" height="480" background_opaque="false"
-  background_visible="true" bevel_style="in" follows="left|top" bg_alpha_color="0.3 0.3 0.3 1.0">
-	<panel bottom="380" width="250" height="30" background_visible="true" background_opaque="false" bg_alpha_color="0.0 0.0 0.0 1.0" name="chat_caption">
-    	<text
-        	width="140" left="25" height="20" follows="left|right|top"
-        	font="SansSerifBigBold" text_color="white" word_wrap="true"
-        	mouse_opaque="true" name="sender_name" >NEARBY CHAT  </text>
-    	<icon top="25" left="180"
-      			width="20" height="20" follows="top|right"
-		      	color="1 1 1 1" enabled="true" image_name="icn_voice-groupfocus.tga"
-      			mouse_opaque="true" name="nearby_speakers_btn"/>
-    	<icon top="25" left="205"
-      		width="20" height="20" follows="top|right"
-      		color="1 1 1 1" enabled="true" image_name="inv_item_landmark_visited.tga"
-      		mouse_opaque="true" name="tearoff_btn"/>
-    	<icon top="22" left="230"
-      		width="15" height="15" follows="top|right"
-      		color="1 1 1 1" enabled="true" image_name="closebox.tga"
-      		name="close_btn"/>
-	</panel>
-  <chat_history_view bottom="0" width="250" height="320" follows="left|right|top|bottom" name="chat_scroll" />    
-</panel>
-
diff --git a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
index 3143b0a40ca32dcb62c2c4720ccfbf0c73e8483f..c3dc588ba2bd0eef928b1466abc04cc39fece045 100644
--- a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
@@ -14,6 +14,9 @@
      orientation="horizontal"
      top="20"
      width="100">
+      <layout_panel name="notifications_list_panel" 
+                    width="100"
+                    user_resize="true">
         <scroll_list
          draw_heading="true"
          follows="left|right|top|bottom"
@@ -24,7 +27,6 @@
          sort_ascending="false"
          sort_column="2"
          top="0"
-         user_resize="true"
          width="100">
             <scroll_list.columns
              label="Name"
@@ -39,6 +41,10 @@
              name="date"
              width="150" />
         </scroll_list>
+      </layout_panel>
+      <layout_panel name="rejects_list_panel"
+                    width="100"
+                    user_resize="true">
         <scroll_list
          draw_heading="true"
          follows="left|right|top|bottom"
@@ -49,7 +55,6 @@
          sort_ascending="false"
          sort_column="2"
          top="0"
-         user_resize="true"
          width="100">
             <scroll_list.columns
              label="Name"
@@ -64,6 +69,7 @@
              name="date"
              width="150" />
         </scroll_list>
+      </layout_panel>
     </layout_stack>
     <button
      follows="left|right|top"
diff --git a/indra/newview/skins/default/xui/en/panel_online_status.xml b/indra/newview/skins/default/xui/en/panel_online_status.xml
deleted file mode 100644
index 14cb5fffee2fb43ed9dae9353227b70148427a85..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_online_status.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- background_visible="false"
- height="152"
- label="friend_online_status"
- layout="topleft"
- left="0"
- name="friend_online_status"
- top="0"
- width="305">
-    <avatar_icon
-	 follows="top|left"
-	 height="18"
-	 image_name="Generic_Person"
-	 layout="topleft"
-	 left="3"
-	 mouse_opaque="false"
-	 name="avatar_icon"
-	 top="10"
-	 width="18" />
-    <text
-     font="SansSerifSmall"
-     follows="all"
-     height="137"
-     layout="topleft"
-     left_pad="5"
-     name="message"
-     text_color="white"
-     top="15"
-     use_ellipses="true"
-     value=""
-     width="285"
-     word_wrap="true"
-     max_length="350" />
-</panel>
\ No newline at end of file
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 883cbb30c60f5632751009d4ef4063e19ae3d776..e0426c75b400aa8a973de7d4583a0a6395b16e3e 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -183,6 +183,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap
              follows="all"
              height="185"
              width="313"
+             orientation="vertical" 
              layout="topleft"
              name="filter_panels"
              top="0"
@@ -514,30 +515,30 @@ It is calculated as border_size + 2*UIResizeBarOverlap
                      user_resize="false" 
                      auto_resize="true"
                      width="156">
-                    <button
+        <button
                          follows="bottom|left|right"
-                         height="23"
-                         label="Save"
+         height="23"
+         label="Save"
                          left="1"
-                         layout="topleft"
-                         name="save_btn"
-                         top="0"
-                         width="155" />
-                    <button
+         layout="topleft"
+         name="save_btn"
+         top="0"
+         width="155" />
+        <button
                          follows="bottom|right"
-                         height="23"
-                         name="save_flyout_btn"
-                         label=""
-                         layout="topleft"
-                         left_pad="-20"
-                         tab_stop="false"
-                         top="0"
-                         image_selected="SegmentedBtn_Right_Selected_Press"
-                         image_unselected="SegmentedBtn_Right_Off"
-                         image_pressed="SegmentedBtn_Right_Press"
-                         image_pressed_selected="SegmentedBtn_Right_Selected_Press"
-                         image_overlay="Arrow_Small_Up"
-                         width="20"/>
+         height="23"
+         name="save_flyout_btn"
+         label=""
+         layout="topleft"
+         left_pad="-20"
+         tab_stop="false"
+         top="0"
+         image_selected="SegmentedBtn_Right_Selected_Press"
+         image_unselected="SegmentedBtn_Right_Off"
+         image_pressed="SegmentedBtn_Right_Press"
+         image_pressed_selected="SegmentedBtn_Right_Selected_Press"
+         image_overlay="Arrow_Small_Up"
+         width="20"/>
 			    </layout_panel>
 			    <layout_panel
                      follows="bottom|left|right"
@@ -549,16 +550,16 @@ It is calculated as border_size + 2*UIResizeBarOverlap
                      user_resize="false" 
                      auto_resize="true"
                      width="147">
-                    <button
-                         follows="bottom|left|right"
-                         height="23"
+        <button
+         follows="bottom|left|right"
+         height="23"
                          left="0"
-                         label="Undo Changes"
-                         layout="topleft"
-                         name="revert_btn"
-                         top="0"
-                         tool_tip="Revert to last saved version"
-                         width="147" />
+         label="Undo Changes"
+         layout="topleft"
+         name="revert_btn"
+         top="0"
+         tool_tip="Revert to last saved version"
+         width="147" />
 			    </layout_panel>
 			</layout_stack>
     </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
index 516457dd931d066b7fa558fca2e2b220403990e4..559df5bec946a8b0e7f16c28e1258d100ae92cd2 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
@@ -57,6 +57,8 @@
      left="10"
      multi_select="true"
      name="enabled_popups"
+     sort_column="0"
+     sort_ascending="true" 
      width="495" />
 	 <button
 	 enabled_control="FirstSelectedDisabledPopups"
@@ -103,6 +105,8 @@
      height="140"
      layout="topleft"
      left="10"
+     sort_column="0"
+     sort_ascending="true"
      multi_select="true"
      name="disabled_popups"
      width="495" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 113d5fb6dc37dc89f365320d441218d29063417f..7ae717d0e3d4bd8c675b4ab59f82196c4317ae9d 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -291,7 +291,7 @@
       control_name="RenderReflectionDetail"
       height="23"
       layout="topleft"
-      left_="10"
+      left_delta="10"
       top_pad ="0"
       name="Reflections"
       width="150">
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 2c6ceeef2e3df40ce5fa80c5c2602f2b5d876e83..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"
@@ -320,7 +319,19 @@
     radio_style="false"
     width="400"
     top_pad="5"/>
-
+  <check_box
+    top_delta="4"
+    enabled="true"
+    follows="left|top"
+    height="14"
+    initial_value="false"
+    control_name="MediaEnablePopups"
+    label="Enable media browser pop-ups"
+    left_delta="0"
+    mouse_opaque="true"
+    name="media_popup_enabled"
+    width="400"           
+    top_pad="5"/>
   <check_box
     top_delta="4"
     enabled="true"
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index 6bf00373ea6ee055abe65b293949f6ed1d8030e3..b25fd695c96cc6151f36cff0b567a9c48a990812 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -33,10 +33,9 @@
 		mouse_opaque="false"
 		layout="topleft"
 		user_resize="false" />
-	<panel
+	<layout_panel
 		name="media_progress_indicator"
 		mouse_opaque="false"
-		follows="left|right|top"
 		height="8"
 		layout="topleft"
 		left="0"
@@ -55,7 +54,7 @@
 		  top="0"
 		  left="0"
 		  tool_tip="Media is Loading"/>
-	</panel>
+	</layout_panel>
 	<layout_panel
 		name="right_bookend_bottom"
 		width="0"
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
index 727c5fb7b24f7e21fc8e9f126219edb1587abaee..2868d91cc7229ab0af485bca648574364199afb0 100644
--- a/indra/newview/skins/default/xui/en/panel_progress.xml
+++ b/indra/newview/skins/default/xui/en/panel_progress.xml
@@ -34,6 +34,7 @@
              height="768"
              layout="topleft"
              left="0"
+             orientation="vertical" 
              name="stack2"
              top="0"
              width="640">
diff --git a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
deleted file mode 100644
index ffa1a257d579a9ac6d27c998736f2807864e24ba..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- border="true"
- follows="top|left"
- height="360"
- label="Region"
- layout="topleft"
- left="0"
- name="General"
- top="360"
- width="280">
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left="10"
-     name="region_text_lbl"
-     top="10"
-     width="100">
-        Region:
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left_delta="50"
-     name="region_text"
-     top_delta="0"
-     width="200">
-        unknown
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left="10"
-     name="version_channel_text_lbl"
-     top="30"
-     width="100">
-        Version:
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left_delta="50"
-     name="version_channel_text"
-     top_delta="0"
-     width="200">
-        unknown
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left="10"
-     name="region_type_lbl"
-     top="50"
-     width="100">
-        Type:
-    </text>
-    <text
-     follows="left|top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left_delta="50"
-     name="region_type"
-     top_delta="0"
-     width="200">
-        unknown
-    </text>
-    <check_box
-     height="20"
-     label="Block Terraform"
-     layout="topleft"
-     left="10"
-     name="block_terraform_check"
-     top="70"
-     width="80" />
-    <check_box
-     height="20"
-     label="Block Fly"
-     layout="topleft"
-     left="10"
-     name="block_fly_check"
-     top="90"
-     width="80" />
-    <check_box
-     height="20"
-     label="Allow Damage"
-     layout="topleft"
-     left="10"
-     name="allow_damage_check"
-     top="110"
-     width="80" />
-    <check_box
-     height="20"
-     label="Restrict Pushing"
-     layout="topleft"
-     left="10"
-     name="restrict_pushobject"
-     top="130"
-     width="80" />
-    <check_box
-     height="20"
-     label="Allow Land Resell"
-     layout="topleft"
-     left="10"
-     name="allow_land_resell_check"
-     top="160"
-     width="80" />
-    <check_box
-     height="20"
-     label="Allow Land Join/Divide"
-     layout="topleft"
-     left="10"
-     name="allow_parcel_changes_check"
-     top="180"
-     width="80" />
-    <check_box
-     height="20"
-     label="Block Land Show in Search"
-     layout="topleft"
-     left="10"
-     name="block_parcel_search_check"
-     tool_tip="Let people see this region and its parcels in search results"
-     top="200"
-     width="80" />
-    <spinner
-     follows="left|top"
-     height="20"
-     increment="1"
-     label="Agent Limit"
-     label_width="97"
-     layout="topleft"
-     left="10"
-     max_val="100"
-     min_val="1"
-     name="agent_limit_spin"
-     top="240"
-     width="170" />
-    <spinner
-     follows="left|top"
-     height="20"
-     increment="0.5"
-     label="Object Bonus"
-     label_width="97"
-     layout="topleft"
-     left="10"
-     max_val="10"
-     min_val="1"
-     name="object_bonus_spin"
-     top="260"
-     width="170" />
-    <text
-     follows="left|top"
-     height="20"
-     label="Maturity"
-     layout="topleft"
-     left="10"
-     name="access_text"
-     top="290"
-     width="100">
-        Rating:
-    </text>
-    <combo_box
-     height="20"
-     label="Moderate"
-     layout="topleft"
-     left_delta="100"
-     name="access_combo"
-     top_delta="0"
-     width="85">
-        <combo_box.item
-         label="Adult"
-         name="Adult"
-         value="42" />
-        <combo_box.item
-         label="Moderate"
-         name="Mature"
-         value="21" />
-        <combo_box.item
-         label="General"
-         name="PG"
-         value="13" />
-    </combo_box> 
-    <button
-     enabled="false"
-     follows="left|top"
-     height="20"
-     label="Apply"
-     layout="topleft"
-     left="108"
-     name="apply_btn"
-     top="320"
-     width="100"/>
-   <button
-     follows="left|top"
-     height="20"
-     label="Teleport Home One Resident..."
-     layout="topleft"
-     left="10"
-     name="kick_btn"
-     top_pad="10"
-     width="250" />
-    <button
-     follows="left|top"
-     height="20"
-     label="Teleport Home All Residents..."
-     layout="topleft"
-     left_delta="0"
-     name="kick_all_btn"
-     top_pad="3"
-     width="250" />
-    <button
-     follows="left|top"
-     height="20"
-     label="Send Message To Region..."
-     layout="topleft"
-     left_delta="0"
-     name="im_btn"
-     top_pad="20"
-     width="200" />
-    <button
-     follows="left|top"
-     height="20"
-     label="Manage Telehub..."
-     layout="topleft"
-     left_delta="0"
-     name="manage_telehub_btn"
-     top_pad="20"
-     width="150" >
-		<button.commit_callback
-         function="RegionInfo.ManageTelehub" />
-    </button> 
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
index 9dff00fa0b93019f87595aac6953a5c879b35b78..c5e8bf5803dc57358e56a4599ef39908d5a7c8b2 100644
--- a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
@@ -79,6 +79,8 @@
      layout="topleft"
      left_delta="0"
      multi_select="true"
+     sort_column="0"
+     sort_ascending="true"
      name="scripts_list"
      top_delta="16"
      width="460">
diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
index ab3cc036d5b0e914d566a5c635699dd04702f3f6..72b2f5e84fa505230ac281dddedffcedb6f86a3e 100644
--- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
+++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
@@ -17,15 +17,18 @@
    left="10"
    name="stack"
    top_pad="10"
+   orientation="vertical" 
    width="313">
     <layout_panel
      height="550"
      layout="topleft"
      left_delta="0"
      name="browser_layout"
+     orientation="vertical" 
      top_delta="0"
      width="313">
       <web_browser
+        trusted_content="true"
        border_visible="false"
        follows="all"
        height="550"
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/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/en/widgets/check_box.xml b/indra/newview/skins/default/xui/en/widgets/check_box.xml
index 726ae803fe28c5364c6f49325ef1772bc237c35c..7a60bee338f3d8927f346214ce965f33b2595c40 100644
--- a/indra/newview/skins/default/xui/en/widgets/check_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/check_box.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<check_box text_enabled_color="LabelTextColor"
-           text_disabled_color="LabelDisabledColor"
-           font="SansSerifSmall"
+<check_box font="SansSerifSmall"
            follows="left|top">
-  <check_box.label_text name="checkbox label" />
+  <check_box.label_text name="checkbox label"
+                        text_color="LabelTextColor"
+                        text_readonly_color="LabelDisabledColor"/>
   <check_box.check_button name="CheckboxCtrl Button"
                           commit_on_return="false"
                           label=""
diff --git a/indra/newview/skins/default/xui/en/widgets/hint_popup.xml b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
new file mode 100644
index 0000000000000000000000000000000000000000..92080df1548c933572029bbc52214f62e5cf44bb
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<hint_popup
+ name="hint"
+ background_opaque="true"
+ background_visible="true"
+ chrome="true" 
+ layout="topleft"
+ bg_opaque_image="hint_background"
+ distance="24"
+ left_arrow="hint_arrow_left"
+ up_arrow="hint_arrow_up" 
+ right_arrow="hint_arrow_right"
+ down_arrow="hint_arrow_down"
+ lower_left_arrow="hint_arrow_lower_left"
+ left_arrow_offset="3"
+ up_arrow_offset="-2"
+ right_arrow_offset="-3"
+ down_arrow_offset="5"
+ fade_in_time="0.2"
+ fade_out_time="0.3">
+</hint_popup>
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
index 48bc021e6dcac6200d7c3f7fcb03dd031e4f2c50..830ea12e414b415e78ab31cba10230b36e5cc061 100644
--- a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
+++ b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
@@ -8,18 +8,18 @@
             thickness="15">
   <up_button image_unselected="ScrollArrow_Up"
              image_selected="ScrollArrow_Up"
-             scale_image="true" thickness="15"
+             scale_image="true"
              hover_glow_amount="0.35"/>
   <down_button image_unselected="ScrollArrow_Down"
                image_selected="ScrollArrow_Down"
-               scale_image="true" thickness="15"
+               scale_image="true"
                hover_glow_amount="0.35"/>
   <left_button image_unselected="ScrollArrow_Left"
                image_selected="ScrollArrow_Left"
-               scale_image="true" thickness="15"
+               scale_image="true"
                hover_glow_amount="0.35"/>
   <right_button image_unselected="ScrollArrow_Right"
                image_selected="ScrollArrow_Right"
-               scale_image="true" thickness="15"
+               scale_image="true"
                hover_glow_amount="0.35"/>
 </scroll_bar>
diff --git a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
index 3878c7a144c9481355954fc7007243d27318a61b..a120b1aec80013ebc3135da66b1b05096c0e4760 100644
--- a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
@@ -23,7 +23,4 @@
   bg_writeable_color="TextBgWriteableColor"
   bg_selected_color="EmphasisColor"
   bg_focus_color="TextBgFocusColor">
-  <simple_text_editor.border
-    bevel_style="in"
-    follows="all" />
 </simple_text_editor>
diff --git a/indra/newview/skins/default/xui/en/widgets/text_editor.xml b/indra/newview/skins/default/xui/en/widgets/text_editor.xml
index 180120ec89d22d2e48514c1cfb6444b0a495590d..0f7f50b3129a7a1b14638208f65b6c706e08c6b3 100644
--- a/indra/newview/skins/default/xui/en/widgets/text_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/text_editor.xml
@@ -2,5 +2,4 @@
 <!-- Core parameters are in simple_text_editor.xml -->
 <text_editor
   parse_urls="false"
-  text_readonly_color="LabelDisabledColor"
   show_context_menu="true"/>
diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml
deleted file mode 100644
index 77b670d5f0c98b719eed42ad1799b513a47f94d1..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="APARIENCIA">
-	<tab_container name="customize tab container">
-		<text label="Partes del cuerpo" name="body_parts_placeholder">
-			Partes del cuerpo
-		</text>
-		<panel label="Forma" name="Shape">
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-			<button label="Cuerpo" label_selected="Cuerpo" name="Body"/>
-			<button label="Cabeza" label_selected="Cabeza" name="Head"/>
-			<button label="Ojos" label_selected="Ojos" name="Eyes"/>
-			<button label="Orejas" label_selected="Orejas" name="Ears"/>
-			<button label="Nariz" label_selected="Nariz" name="Nose"/>
-			<button label="Boca" label_selected="Boca" name="Mouth"/>
-			<button label="Barbilla" label_selected="Barbilla" name="Chin"/>
-			<button label="Torso" label_selected="Torso" name="Torso"/>
-			<button label="Piernas" label_selected="Piernas" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Mujer" name="radio" value="0"/>
-				<radio_item label="Varón" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una anatomía nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label">
-				Forma:
-			</text>
-			<button label="Crear una forma nueva" label_selected="Crear una forma nueva" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-		</panel>
-		<panel label="Piel" name="Skin">
-			<button label="Color de piel" label_selected="Color de piel" name="Skin Color" width="115"/>
-			<button label="Detalles faciales" label_selected="Detalles faciales" name="Face Detail" width="115"/>
-			<button label="Maquillaje" label_selected="Maquillaje" name="Makeup" width="115"/>
-			<button label="Detalles del cuerpo" label_selected="Detalles del cuerpo" name="Body Detail" width="115"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una piel nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Piel:
-			</text>
-			<texture_picker label="Tatuaje: cabeza" name="Head Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/>
-			<texture_picker label="Tatuaje: superior" name="Upper Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/>
-			<texture_picker label="Tatuaje: inferior" name="Lower Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/>
-			<button label="Crear una piel nueva" label_selected="Crear una piel nueva" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Pelo" name="Hair">
-			<button label="Color" label_selected="Color" name="Color"/>
-			<button label="Peinado" label_selected="Peinado" name="Style"/>
-			<button label="Cejas" label_selected="Cejas" name="Eyebrows"/>
-			<button label="Facial" label_selected="Facial" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situado en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte un pelo nuevo arrastrándolo desde tu inventario hasta tu avatar. O bien puedes crear uno nuevo partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Pelo:
-			</text>
-			<texture_picker label="Textura" name="Texture" tool_tip="Pulse para elegir una imagen"/>
-			<button label="Crear un pelo nuevo" label_selected="Crear un pelo nuevo" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Ojos" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos ojos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Ojos:
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Pulse para elegir una imagen"/>
-			<button label="Crear unos ojos nuevos" label_selected="Crear unos ojos nuevos" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<text label="Ropa" name="clothes_placeholder">
-			Ropas
-		</text>
-		<panel label="Camisa" name="Shirt">
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una camisa nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Camisa:
-			</text>
-		</panel>
-		<panel label="Pantalones" name="Pants">
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
-			<button label="Crear unos pantalones nuevos" label_selected="Crear unos pantalones nuevos" name="Create New" width="185"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos pantalones nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Pantalones:
-			</text>
-		</panel>
-		<panel label="Zapatos" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos zapatos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<button label="Crear unos zapatos nuevos" label_selected="Crear unos zapatos nuevos" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Zapatos:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Calcetines" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos calcetines nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<button label="Crear unos calcetines nuevos" label_selected="Crear unos calcetines nuevos" name="Create New" width="185"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Calcetines:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Chaqueta" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una chaqueta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una chaqueta nueva" label_selected="Crear una chaqueta nueva" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Chaqueta:
-			</text>
-			<texture_picker label="Tela superior" name="Upper Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<texture_picker label="Tela inferior" name="Lower Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Guantes" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificables
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situados en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte unos guantes nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero.
-			</text>
-			<button label="Crear unos guantes nuevos" label_selected="Crear unos guantes nuevos" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Guantes:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Camiseta" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una camiseta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una camiseta nueva" label_selected="Crear una camiseta nueva" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Camiseta:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Ropa interior" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una ropa interior nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una ropa interior nueva" label_selected="Crear una ropa interior nueva" name="Create New" width="185"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Ropa interior:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Falda" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no lleva
-			</text>
-			<text name="path">
-				Situada en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Ponte una falda nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/>
-			<text name="no modify instructions">
-				No tiene permiso para modificar este ítem.
-			</text>
-			<text name="Item Action Label" right="107">
-				Falda:
-			</text>
-			<texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/>
-			<color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/>
-			<button label="Quitarla" label_selected="Quitarla" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" left="113" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Restablecer" label_selected="Restablecer" name="Revert"/>
-		</panel>
-		<panel label="Tatuaje" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no puesto
-			</text>
-			<text name="path">
-				Situado en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pon un tatuaje nuevo arrastrándolo desde tu inventario a tu avatar. O bien puedes crear uno nuevo partiendo de cero.
-			</text>
-			<button label="Crear un tatuaje nuevo" label_selected="Crear un tatuaje nuevo" name="Create New"/>
-			<text name="no modify instructions">
-				No tienes permiso para modificar este artículo.
-			</text>
-			<text name="Item Action Label">
-				Tatuaje:
-			</text>
-			<texture_picker label="Tatuaje de la cabeza" name="Head Tattoo" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Tatuaje superior" name="Upper Tattoo" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Tatuaje inferior" name="Lower Tattoo" tool_tip="Pulsa para elegir una imagen"/>
-			<button label="Quitarme" label_selected="Quitarme" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Revertir" label_selected="Revertir" name="Revert"/>
-		</panel>
-		<panel label="Alfa" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: no modificable
-			</text>
-			<text name="title_loading">
-				[DESC]: cargando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: no puesto
-			</text>
-			<text name="path">
-				Situado en [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pon una capa Alfa nueva arrastrándola desde tu inventario a tu avatar. O bien puedes crear una nueva partiendo de cero.
-			</text>
-			<button label="Crear una capa Alfa nueva" label_selected="Crear una capa Alfa nueva" name="Create New"/>
-			<text name="no modify instructions">
-				No tienes permiso para modificar este artículo.
-			</text>
-			<text name="Item Action Label">
-				Alfa:
-			</text>
-			<texture_picker label="Alfa inferior" name="Lower Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Alfa superior" name="Upper Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Alfa de la cabeza" name="Head Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Alfa de los ojos" name="Eye Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<texture_picker label="Alfa del pelo" name="Hair Alpha" tool_tip="Pulsa para elegir una imagen"/>
-			<button label="Quitarme" label_selected="Quitarme" name="Take Off"/>
-			<button label="Guardar" label_selected="Guardar" name="Save"/>
-			<button label="Guardar como..." label_selected="Guardar como..." name="Save As"/>
-			<button label="Revertir" label_selected="Revertir" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container name="panel_container"/>
-	<button label="Información del script" label_selected="Información del script" name="script_info" tool_tip="Mostrar los scripts anexados a tu avatar"/>
-	<button label="Hacer un vestuario" label_selected="Hacer un vestuario" name="make_outfit_btn"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_device_settings.xml b/indra/newview/skins/default/xui/es/floater_device_settings.xml
deleted file mode 100644
index eadf04a4170103c42aaaf6b875903d9da17e3724..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="CONFIGURACIÓN DE LOS DISPOSITIVOS DEL CHAT DE VOZ"/>
diff --git a/indra/newview/skins/default/xui/es/floater_im.xml b/indra/newview/skins/default/xui/es/floater_im.xml
deleted file mode 100644
index 3850b94fd67fd4ad678c88caa565b49148ef99fe..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Mensaje Instantáneo">
-	<string name="only_user_message">
-		Eres el único Residente en esta sesión.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] no está conectado.
-	</string>
-	<string name="invite_message">
-		Pulse el botón [BUTTON NAME] para aceptar/conectar este chat de voz.
-	</string>
-	<string name="muted_message">
-		Has ignorado a este Residente. Enviándole un mensaje, automáticamente dejarás de ignorarle.
-	</string>
-	<string name="generic_request_error">
-		Error al hacer lo solicitado; por favor, inténtelo más tarde.
-	</string>
-	<string name="insufficient_perms_error">
-		Usted no tiene permisos suficientes.
-	</string>
-	<string name="session_does_not_exist_error">
-		La sesión ya acabó
-	</string>
-	<string name="no_ability_error">
-		Usted no tiene esa capacidad.
-	</string>
-	<string name="not_a_mod_error">
-		Usted no es un moderador de la sesión.
-	</string>
-	<string name="muted_error">
-		Un moderador del grupo le ha desactivado el chat de texto.
-	</string>
-	<string name="add_session_event">
-		No es posible añadir Residentes a la sesión de chat con [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		No se ha podido enviar su mensaje a la sesión de chat con [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Ha sido eliminado del grupo.
-	</string>
-	<string name="close_on_no_ability">
-		Usted ya no tendrá más la capacidad de estar en la sesión de chat.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/es/floater_im_session.xml b/indra/newview/skins/default/xui/es/floater_im_session.xml
index c7312e609bfedad222121949b80e6e2d88b08b48..3d9d17fc81ada808766e00cd9c8bb4b0bf33ad78 100644
--- a/indra/newview/skins/default/xui/es/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/es/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Panel de control de MI" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="A" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/es/floater_my_friends.xml b/indra/newview/skins/default/xui/es/floater_my_friends.xml
deleted file mode 100644
index 07f362560b99bac0979368b4c5d0d65a97144756..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTACTOS">
-	<tab_container name="friends_and_groups">
-		<panel label="Amigos" name="friends_panel"/>
-		<panel label="Grupos" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml
deleted file mode 100644
index 9f9902a3a0191de0f19c8254ea78deebc8fc0e08..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Guardar el vestuario">
-	<button label="Guardar" label_selected="Guardar" name="Save"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<text name="Save item as:">
-		Guardar lo que llevo puesto
-como un vestuario nuevo:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (nuevo)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_classified.xml b/indra/newview/skins/default/xui/es/floater_preview_classified.xml
deleted file mode 100644
index d9c9c51ba8d647a98b6a4df46384ec054865b63e..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFORMACIÓN DEL CLASIFICADO">
-	<floater.string name="Title">
-		Clasificado: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_event.xml b/indra/newview/skins/default/xui/es/floater_preview_event.xml
deleted file mode 100644
index 7edd4f9e3fdc08abe68d03c91a4515eebf8803e8..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="INFORMACIÓN DEL EVENTO">
-	<floater.string name="Title">
-		Evento: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml
deleted file mode 100644
index f5b771c6e744cda78dd3e27f7f13c33f07c3b36f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATAJO DE TECLADO PARA GESTOS"/>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index ea955f9727e10cf9f070358f376a88c2d9d90fd0..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATAJO DE TECLADO PARA GESTOS">
-	<text name="trigger_label">
-		Chat :
-	</text>
-	<text name="key_label">
-		Teclado:
-	</text>
-	<combo_box label="Ninguno/a" name="modifier_combo"/>
-	<combo_box label="Ninguno/a" name="key_combo"/>
-	<text name="replace_text" tool_tip="Reemplaza la/s palabra/s clave con estas palabras. Por ejemplo, si cambias la palabra clave &apos;hola&apos; por &apos;qué tal&apos;, se cambiará en el chat &apos;Quería decir hola&apos; por &apos;Quería decir qué tal&apos; en cuanto realices el gesto.">
-		Reemplazar por:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Reemplaza la/s palabra/s clave con estas palabras. Por ejemplo, si cambias la palabra clave &apos;hola&apos; por &apos;qué tal&apos;, se cambiará en el chat &apos;Quería decir hola&apos; por &apos;Quería decir qué tal&apos; en cuanto realices el gesto."/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml
deleted file mode 100644
index f5b771c6e744cda78dd3e27f7f13c33f07c3b36f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATAJO DE TECLADO PARA GESTOS"/>
diff --git a/indra/newview/skins/default/xui/es/floater_statistics.xml b/indra/newview/skins/default/xui/es/floater_statistics.xml
deleted file mode 100644
index c9b0a76df0c6d969d0e1309ed3af73214c4bafac..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="ESTADÍSTICAS"/>
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/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
index 51adeb4dff521e6c11c133f7ec3a20ee1379c8f9..6f4782417df748a50fd3acfc9d2d5e4c6e67073e 100644
--- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mi avatar:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Colgar" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+			<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="Colgar" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml
deleted file mode 100644
index bf96ed53ce15068679320266e81caad5ab089b7a..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title=" ">
-	<button label="Guardar" label_selected="Guardar" name="Save"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<text name="Save item as:">
-		Guardar el ítem en mi inventario como:
-	</text>
-	<line_editor name="name ed">
-		Nuevo [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/panel_audio_device.xml b/indra/newview/skins/default/xui/es/panel_audio_device.xml
deleted file mode 100644
index d20a0af4fbcafb8d285b42745a7768e58a0a01a2..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Dispositivos de sonido
-	</text>
-	<text name="Input device (microphone):">
-		Dispositivo de entrada (micrófono):
-	</text>
-	<text name="Output device (speakers):">
-		Dispositivo de salida (altavoces):
-	</text>
-	<text name="Input level:">
-		Volumen de entrada
-	</text>
-	<text_editor name="voice_intro_text1">
-		Ajuste el deslizable para controlar el volumen con el que usted le sonará a otros residentes. Para probar el volumen de entrada, basta con que hable al micrófono.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Cambie el volumen usando este deslizable"/>
-	<text name="wait_text">
-		Por favor, espere
-	</text>
-	<string name="default_text">
-		Por defecto
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_friends.xml b/indra/newview/skins/default/xui/es/panel_friends.xml
deleted file mode 100644
index e1cac7c2c364f8cfbe8ccb8962cf2e0239122b7b..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Varios amigos
-	</string>
-	<scroll_list name="friend_list" tool_tip="Para seleccionar a varios amigos, mantenga pulsado Ctrl o Mays. mientras les va pulsando.">
-		<column name="icon_online_status" tool_tip="Estado de conexión"/>
-		<column label="Nombre" name="friend_name" tool_tip="Nombre"/>
-		<column name="icon_visible_online" tool_tip="El amigo puede ver cuándo está conectado"/>
-		<column name="icon_visible_map" tool_tip="El amigo puede localizarle en el mapa"/>
-		<column name="icon_edit_mine" tool_tip="El amigo puede editar, borrar o tomar sus objetos"/>
-		<column name="icon_edit_theirs" tool_tip="Puede editar los objetos de este amigo"/>
-	</scroll_list>
-	<button label="MI/Llamada" name="im_btn" tool_tip="Abrir sesión de mensajes instantáneos"/>
-	<button label="Perfil" name="profile_btn" tool_tip="Mostrar la imagen, los grupos, y otra información"/>
-	<button label="Teleporte" name="offer_teleport_btn" tool_tip="Ofrecer a este amigo teleportarle hasta su posición"/>
-	<button label="Pagar" name="pay_btn" tool_tip="Dar dólares Linden (L$) a este amigo"/>
-	<button label="Quitar" name="remove_btn" tool_tip="Quitar a esta persona de su lista de amigos"/>
-	<button label="Añadir" name="add_btn" tool_tip="Ofrecer amistad a un Residente"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_groups.xml b/indra/newview/skins/default/xui/es/panel_groups.xml
deleted file mode 100644
index 232de855224a5343262fe8216fe8f902d9300e43..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/panel_groups.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<scroll_list bottom="50" name="group list"/>
-	<text bottom="16" height="32" name="groupdesc" width="268">
-		El grupo que tiene activado actualmente se
-muestra en negrilla.
-	</text>
-	<text bottom="3" name="groupcount" width="268">
-		Pertenece a [COUNT] grupo/s (de un máximo de [MAX]).
-	</text>
-	<button label="MI/Llamar" name="IM" tool_tip="Abrir una sesión de mensajes instantáneos"/>
-	<button label="Información" name="Info"/>
-	<button label="Activar" name="Activate"/>
-	<button label="Abandonar" name="Leave"/>
-	<button label="Crear..." name="Create"/>
-	<button label="Buscar..." name="Search..."/>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat.xml
deleted file mode 100644
index 986c109c41ced822c7c336b4562c02cb43e1bb76..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			CHAT
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_notes.xml b/indra/newview/skins/default/xui/es/panel_notes.xml
index 8de2afa767f42ede857ac92c6590a51bd7159550..da98e1b15ec34032e56231ac15ec1cf06f87fdf9 100644
--- a/indra/newview/skins/default/xui/es/panel_notes.xml
+++ b/indra/newview/skins/default/xui/es/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Notas y Privacidad" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Mis notas privadas:"/>
@@ -11,13 +11,13 @@
 					<check_box label="Edite, borre o coja mis objetos" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
 			<button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/>
 			<button label="MI" name="im" tool_tip="Abrir un mensaje instantáneo"/>
 			<button label="Llamar" name="call" tool_tip="Llamar a este Residente"/>
 			<button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar al Residente en el mapa"/>
 			<button label="Teleportar" name="teleport" tool_tip="Ofrecer teleporte"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_online_status.xml b/indra/newview/skins/default/xui/es/panel_online_status.xml
deleted file mode 100644
index fdc489f375ec6eabd344b633f4fb6eb00c3ccef3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
index 174922e28e224c1b01a34b636614fbd3e98adbb6..90b9e475e7b4e5ec11785319274d3ac86763e928 100644
--- a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Los media se están cargando"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml b/indra/newview/skins/default/xui/es/panel_region_general_layout.xml
deleted file mode 100644
index 9ff88e2f79c7467e563e4cb9dead31e22c01dd5f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Región" name="General">
-	<text name="region_text_lbl">
-		Región:
-	</text>
-	<text name="region_text">
-		desconocida
-	</text>
-	<text name="version_channel_text_lbl">
-		Versión:
-	</text>
-	<text name="version_channel_text">
-		desconocida
-	</text>
-	<text name="region_type_lbl">
-		Tipo:
-	</text>
-	<text name="region_type">
-		desconocido
-	</text>
-	<check_box label="No permitir modificar el terreno" name="block_terraform_check"/>
-	<check_box label="Prohibir volar" name="block_fly_check"/>
-	<check_box label="Permitir el daño" name="allow_damage_check"/>
-	<check_box label="Impedir los &apos;empujones&apos;" name="restrict_pushobject"/>
-	<check_box label="Permitir la reventa del terreno" name="allow_land_resell_check"/>
-	<check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/>
-	<check_box label="Bloquear el mostrar el terreno en la búsqueda" name="block_parcel_search_check" tool_tip="Permite que la gente vea esta región y sus parcelas en los resultados de la búsqueda"/>
-	<spinner label="Nº máximo de avatares" name="agent_limit_spin"/>
-	<spinner label="Plus de objetos" name="object_bonus_spin"/>
-	<text label="Calificación" name="access_text">
-		Calificación:
-	</text>
-	<combo_box label="Moderado" name="access_combo">
-		<combo_box.item label="Adulto" name="Adult"/>
-		<combo_box.item label="Moderado" name="Mature"/>
-		<combo_box.item label="General" name="PG"/>
-	</combo_box>
-	<button label="Aplicar" name="apply_btn"/>
-	<button label="Teleportar a su Base a un Residente..." name="kick_btn"/>
-	<button label="Teleportar a sus Bases a todos los Residentes..." name="kick_all_btn"/>
-	<button label="Enviar un mensaje a toda la región..." name="im_btn"/>
-	<button label="Administrar el Punto de Teleporte..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml
deleted file mode 100644
index ff407b25c1657e0e62bb952892540104b05c04d6..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="APPARENCE">
-	<tab_container name="customize tab container" tab_min_width="150">
-		<text label="Parties du corps" name="body_parts_placeholder">
-			Parties du corps
-		</text>
-		<panel label="Silhouette" left="154" name="Shape" width="389">
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-			<button label="Corps" label_selected="Corps" name="Body"/>
-			<button label="Tête" label_selected="Tête" name="Head"/>
-			<button label="Yeux" label_selected="Yeux" name="Eyes"/>
-			<button label="Oreilles" label_selected="Oreilles" name="Ears"/>
-			<button label="Nez" label_selected="Nez" name="Nose"/>
-			<button label="Bouche" label_selected="Bouche" name="Mouth"/>
-			<button label="Menton" label_selected="Menton" name="Chin"/>
-			<button label="Torse" label_selected="Torse" name="Torso"/>
-			<button label="Jambes" label_selected="Jambes" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Femme" name="radio" value="0"/>
-				<radio_item label="Homme" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de silhouette, faites-en glisser une de votre inventaire à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Silhouette :
-			</text>
-			<button label="Créer une silhouette" label_selected="Créer une silhouette" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-		</panel>
-		<panel label="Peau" name="Skin">
-			<button label="Couleur" label_selected="Couleur" name="Skin Color" width="84"/>
-			<button label="Détails visage" label_selected="Détails visage" name="Face Detail" width="84"/>
-			<button label="Maquillage" label_selected="Maquillage" name="Makeup" width="84"/>
-			<button label="Détails corps" label_selected="Détails corps" name="Body Detail" width="84"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de peau, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Peau :
-			</text>
-			<texture_picker label="Tatouages tête" name="Head Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/>
-			<texture_picker label="Tatouages haut" name="Upper Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/>
-			<texture_picker label="Tatouages bas" name="Lower Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/>
-			<button label="Créer une peau" label_selected="Créer une peau" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Cheveux" name="Hair">
-			<button label="Couleur" label_selected="Couleur" name="Color"/>
-			<button label="Style" label_selected="Style" name="Style"/>
-			<button label="Sourcils" label_selected="Sourcils" name="Eyebrows"/>
-			<button label="Pilosité" label_selected="Pilosité" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portés
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de cheveux, faites-en glisser à partir de votre inventaire. Vous pouvez aussi en créer de nouveaux et les porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Cheveux :
-			</text>
-			<texture_picker label="Texture" name="Texture" tool_tip="Cliquez pour sélectionner une image"/>
-			<button label="Créer des cheveux" label_selected="Créer des cheveux" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Yeux" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portés
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer d&apos;yeux, faites-en glisser une paire de votre inventaire à votre avatar. Vous pouvez aussi en créer de nouveaux et les porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Yeux :
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Cliquez pour sélectionner une image"/>
-			<button label="Créer des yeux" label_selected="Créer des yeux" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<text label="Habits" name="clothes_placeholder">
-			Habits
-		</text>
-		<panel label="Chemise" name="Shirt">
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Créer une chemise" label_selected="Créer une chemise" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de chemise, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Chemise :
-			</text>
-		</panel>
-		<panel label="Pantalon" name="Pants">
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Créer un pantalon" label_selected="Créer un pantalon" name="Create New"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de pantalon, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Pantalon :
-			</text>
-		</panel>
-		<panel label="Chaussures" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portées
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de chaussures, faites-en glisser une paire de votre inventaire à votre avatar. Vous pouvez aussi en créer des nouvelles et les porter.
-			</text>
-			<button label="Créer des chaussures" label_selected="Créer des chaussures" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Chaussures :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Chaussettes" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portées
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de chaussettes, faites-en glisser une paire à partir de votre inventaire. Vous pouvez aussi en créer des nouvelles et les porter.
-			</text>
-			<button label="Créer des chaussettes" label_selected="Créer des chaussettes" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Chaussettes :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Veste" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de veste, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<button label="Créer une veste" label_selected="Créer une veste" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Veste :
-			</text>
-			<texture_picker label="Tissu (dessus)" name="Upper Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/>
-			<texture_picker label="Tissu (dessous)" name="Lower Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="81"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Gants" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portés
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de gants, faites-en glisser une paire à partir de votre inventaire. Vous pouvez aussi en créer de nouveaux et les porter.
-			</text>
-			<button label="Créer des gants" label_selected="Créer des gants" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Gants :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Débardeur" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de débardeur, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<button label="Créer un débardeur" label_selected="Créer un débardeur" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label">
-				Débardeur :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Caleçon" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de caleçon, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<button label="Créer un caleçon" label_selected="Créer un caleçon" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label">
-				Caleçon :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Jupe" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non portée
-			</text>
-			<text name="path">
-				Emplacement : [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de jupe, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
-			</text>
-			<button label="Créer une jupe" label_selected="Créer une jupe" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas la permission de modifier cet objet.
-			</text>
-			<text name="Item Action Label" right="92">
-				Jupe :
-			</text>
-			<texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/>
-			<color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/>
-			<button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Tatouage" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Dans [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de tatouage, faites-en glisser un de votre inventaire à votre avatar. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<button label="Créer un nouveau tatouage" label_selected="Créer un nouveau tatouage" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas le droit de modifier cet objet.
-			</text>
-			<text name="Item Action Label">
-				Tatouage :
-			</text>
-			<texture_picker label="Tatouage tête" name="Head Tattoo" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Tatouage haut" name="Upper Tattoo" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Tatouage bas" name="Lower Tattoo" tool_tip="Cliquez pour sélectionner une image"/>
-			<button label="Enlever" label_selected="Enlever" name="Take Off"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: impossible de modifier
-			</text>
-			<text name="title_loading">
-				[DESC]: en cours de chargement...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non porté
-			</text>
-			<text name="path">
-				Dans [PATH]
-			</text>
-			<text name="not worn instructions">
-				Pour changer de masque alpha, faites-en glisser un de votre inventaire à votre avatar. Vous pouvez aussi en créer un nouveau et le porter.
-			</text>
-			<button label="Créer un nouvel alpha" label_selected="Créer un nouvel alpha" name="Create New"/>
-			<text name="no modify instructions">
-				Vous n&apos;avez pas le droit de modifier cet objet.
-			</text>
-			<text name="Item Action Label">
-				Alpha :
-			</text>
-			<texture_picker label="Alpha bas" name="Lower Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Alpha haut" name="Upper Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Alpha tête" name="Head Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Alpha yeux" name="Eye Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<texture_picker label="Alpha cheveux" name="Hair Alpha" tool_tip="Cliquez pour sélectionner une image"/>
-			<button label="Enlever" label_selected="Enlever" name="Take Off"/>
-			<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-			<button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/>
-			<button label="Rétablir" label_selected="Rétablir" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container left="251" name="panel_container"/>
-	<button label="Infos scripts" label_selected="Infos scripts" name="script_info" tool_tip="Afficher les scripts attachés à votre avatar"/>
-	<button label="Créer tenue" label_selected="Créer une tenue..." name="make_outfit_btn"/>
-	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_device_settings.xml b/indra/newview/skins/default/xui/fr/floater_device_settings.xml
deleted file mode 100644
index f5994cb604b2520d4d3cf206bd8978482a4f0340..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="PARAMÈTRES DU MATÉRIEL UTILISÉ POUR LE CHAT VOCAL"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml b/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml
deleted file mode 100644
index a1c6a19e8c5a69168765dde44049bee4b4759d81..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="set_name_in_the_cladd">
-	<check_box label="Désactiver les astuces" name="DontShowFirstTimeTip_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_im.xml b/indra/newview/skins/default/xui/fr/floater_im.xml
deleted file mode 100644
index 15b01dbf12effc0357e5fbf9a1bfe05f29a1d431..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Message instantané">
-	<text name="only_user_message">
-		Vous êtes le seul résident participant à cette session.
-	</text>
-	<text name="offline_message">
-		[FIRST] [LAST] est déconnecté(e).
-	</text>
-	<string name="invite_message">
-		Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME].
-	</string>
-	<string name="muted_message">
-		Vous ignorez ce résident. Si vous lui envoyez un message, il ne sera plus ignoré.
-	</string>
-	<string name="generic_request_error">
-		Erreur lors de la requête, veuillez réessayer ultérieurement.
-	</string>
-	<string name="insufficient_perms_error">
-		Vous n&apos;avez pas les droits requis.
-	</string>
-	<string name="session_does_not_exist_error">
-		La session a expiré
-	</string>
-	<string name="no_ability_error">
-		Vous n&apos;avez pas ce pouvoir.
-	</string>
-	<string name="not_a_mod_error">
-		Vous n&apos;êtes pas modérateur de session.
-	</string>
-	<string name="muted_error">
-		Un modérateur de groupe a désactivé votre chat écrit.
-	</string>
-	<string name="add_session_event">
-		Impossible d&apos;ajouter des résidents à la session de chat avec [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Impossible d&apos;envoyer votre message à la session de chat avec [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Vous avez été supprimé du groupe.
-	</string>
-	<string name="close_on_no_ability">
-		Vous ne pouvez plus participer à la session de chat.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_im_session.xml b/indra/newview/skins/default/xui/fr/floater_im_session.xml
index c3df4a869cb5d0ac3fb1ea9c9d870be05c529890..516eb41362f37960d6208c839fbd8ecb5846bc97 100644
--- a/indra/newview/skins/default/xui/fr/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/fr/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Panneau de contrôle IM" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="À" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_my_friends.xml b/indra/newview/skins/default/xui/fr/floater_my_friends.xml
deleted file mode 100644
index db7c026e22388488f6daadbadd9142c90057b80f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTACTS">
-	<tab_container name="friends_and_groups">
-		<panel label="Amis" name="friends_panel"/>
-		<panel label="Groupes" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml
deleted file mode 100644
index d77dfbdf82514fcd437bdb985a77d486eced9214..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Enregistrer la tenue">
-	<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
-	<text name="Save item as:">
-		Enregistrer ce que je porte
-comme une nouvelle tenue :
-	</text>
-	<line_editor name="name ed">
-		[DESC] (nouv.)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
deleted file mode 100644
index 23f86d88b9a7c1e30e1ad75b2e89448c97207fbe..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFOS SUR LA PETITE ANNONCE">
-	<floater.string name="Title">
-		Petite annonce : [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_event.xml b/indra/newview/skins/default/xui/fr/floater_preview_event.xml
deleted file mode 100644
index 7590c43af12451fdf3d808d6c64cbfbdc094960a..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="INFORMATIONS SUR LES ÉVÉNEMENTS">
-	<floater.string name="Title">
-		Événement : [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
deleted file mode 100644
index 4a91992f6aed3365b815fe6ddefea2e8be56cc47..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="RACCOURCI DU GESTE"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index d866c328827b2de949af41834fa9782041f89d3a..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="RACCOURCI DU GESTE">
-	<text name="trigger_label">
-		Chat :
-	</text>
-	<text name="key_label">
-		Clavier :
-	</text>
-	<combo_box label="Aucun" name="modifier_combo" width="62"/>
-	<combo_box label="Aucun" name="key_combo" width="62"/>
-	<text name="replace_text" tool_tip="Remplacez le ou les mots-clés par ces mots. Par exemple, si vous remplacez le mot-clé &quot; bonjour &quot; par &quot; salut &quot;, le chat &quot; Je voulais te dire bonjour &quot; devient &quot; Je voulais te dire salut &quot; et le geste correspondant s&apos;affiche.">
-		Remplacer :
-	</text>
-	<line_editor name="replace_editor" tool_tip="Remplacez le ou les mots-clés par ces mots. Par exemple, si vous remplacez le mot-clé &quot; bonjour &quot; par &quot; salut &quot;, le chat &quot; Je voulais te dire bonjour &quot; devient &quot; Je voulais te dire salut &quot; et le geste correspondant s&apos;affiche."/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
deleted file mode 100644
index 4a91992f6aed3365b815fe6ddefea2e8be56cc47..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="RACCOURCI DU GESTE"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_statistics.xml b/indra/newview/skins/default/xui/fr/floater_statistics.xml
deleted file mode 100644
index a2e3c199ab79e8d779ef5e740e659dc81ddd90be..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTIQUES"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
index 5c26527ed6b947485cd767aaf5ea5fece4ec8a50..8397dc426350f11acf22dee2080d2c41e0928118 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mon avatar :"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Quitter l&apos;appel" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+			<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="Quitter l&apos;appel" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml
deleted file mode 100644
index 5dda347fcfbddcab62c247300ed09ed401d2931f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container">
-	<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
-	<button label="Annuler" label_selected="Annuler" name="Cancel"/>
-	<text name="Save item as:">
-		Enregistrer l&apos;objet dans mon inventaire comme :
-	</text>
-	<line_editor name="name ed">
-		Nouveau [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/panel_audio_device.xml b/indra/newview/skins/default/xui/fr/panel_audio_device.xml
deleted file mode 100644
index 2caa013f541258bc5a63a3db6a76ddd58cb1d802..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Matériel audio
-	</text>
-	<text name="Input device (microphone):">
-		Périphérique d&apos;entrée (micro) :
-	</text>
-	<text name="Output device (speakers):" width="300">
-		Périphérique de sortie (haut-parleurs) :
-	</text>
-	<text name="Input level:">
-		Volume d&apos;entrée
-	</text>
-	<text_editor name="voice_intro_text1">
-		Pour que les autres résidents vous entendent plus ou moins fort, utilisez le curseur. Pour tester le volume, parlez dans le micro.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Réglez le volume avec ce curseur."/>
-	<text name="wait_text">
-		Veuillez patienter
-	</text>
-	<string name="default_text">
-		Défaut
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_friends.xml b/indra/newview/skins/default/xui/fr/panel_friends.xml
deleted file mode 100644
index ad9e3daf3d948b671ee6871b0dc4eb84d5e91327..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Amis multiples
-	</string>
-	<scroll_list name="friend_list" tool_tip="Pour sélectionner plusieurs amis, cliquez en maintenant la touche Maj ou Ctrl appuyée">
-		<column name="icon_online_status" tool_tip="Statut en ligne"/>
-		<column label="Nom" name="friend_name" tool_tip="Nom"/>
-		<column name="icon_visible_online" tool_tip="Votre ami voit si vous êtes connecté(e)"/>
-		<column name="icon_visible_map" tool_tip="Votre ami peut vous situer sur la carte"/>
-		<column name="icon_edit_mine" tool_tip="Votre ami peut modifier, supprimer ou prendre vos objets"/>
-		<column name="icon_edit_theirs" tool_tip="Vous pouvez modifier les objets de cet ami"/>
-	</scroll_list>
-	<button label="IM/Appel" name="im_btn" tool_tip="Envoyez un IM à ce résident"/>
-	<button label="Profil" name="profile_btn" tool_tip="Consultez le profil de ce résident (photos, groupes et autres infos)"/>
-	<button label="Téléporter" name="offer_teleport_btn" tool_tip="Proposez à cet ami d&apos;être téléporté là où vous êtes"/>
-	<button label="Payer" name="pay_btn" tool_tip="Donnez des L$ à cet ami"/>
-	<button label="Supprimer" name="remove_btn" tool_tip="Supprimez ce résident de votre liste d&apos;amis"/>
-	<button label="Ajouter" name="add_btn" tool_tip="Proposer à un résident de devenir votre ami"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_groups.xml b/indra/newview/skins/default/xui/fr/panel_groups.xml
deleted file mode 100644
index 4cda98b9f7063d1fb245e90f0f2917ae617d4a95..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/panel_groups.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<scroll_list bottom="50" name="group list"/>
-	<text name="groupdesc">
-		Le groupe actif est en gras.
-	</text>
-	<text name="groupcount" width="280">
-		Vous appartenez à [COUNT] groupes ([MAX] max).
-	</text>
-	<button label="IM/Appel" name="IM" tool_tip="Ouvrir une session de messagerie instantanée"/>
-	<button label="Infos" name="Info"/>
-	<button label="Activer" name="Activate"/>
-	<button label="Quitter" name="Leave"/>
-	<button label="Créer..." name="Create"/>
-	<button label="Rechercher..." name="Search..."/>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
deleted file mode 100644
index b506a202bdd62bf2d0dc6b8800574f7aff9b0e59..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-    	<text 
-	name="sender_name" 
-width="170">CHAT PRÈS DE MOI</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
index 5beb71981c45ffec8c209966ec778099ed1b25bd..110e0170500aa7ec827dee13239d0cf2c70fe42f 100644
--- a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="notifications_panel">
 	<layout_stack name="stack1">
-		<scroll_list name="notifications_list">
-			<column label="Nom" name="name"/>
-			<column label="Contenu" name="content"/>
-			<column label="Date" name="date"/>
-		</scroll_list>
-		<scroll_list name="notification_rejects_list">
-			<column label="Nom" name="name"/>
-			<column label="Contenu" name="content"/>
-			<column label="Date" name="date"/>
-		</scroll_list>
+	     <layout_panel name="notifications_list_panel" >
+			<scroll_list name="notifications_list">
+				<column label="Nom" name="name"/>
+				<column label="Contenu" name="content"/>
+				<column label="Date" name="date"/>
+			</scroll_list>
+		</layout_panel>
+	     <layout_panel name="rejects_list_panel" >
+			<scroll_list name="notification_rejects_list">
+				<column label="Nom" name="name"/>
+				<column label="Contenu" name="content"/>
+				<column label="Date" name="date"/>
+			</scroll_list>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_online_status.xml b/indra/newview/skins/default/xui/fr/panel_online_status.xml
deleted file mode 100644
index fdc489f375ec6eabd344b633f4fb6eb00c3ccef3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
index f6b9bdcb8163ca1734cebaecb812af56608f1966..f16fcebd023ee3a050e03cfde787003aa3786a99 100644
--- a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
@@ -7,9 +7,9 @@
 		0.2
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Le média est en cours de chargement"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml b/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml
deleted file mode 100644
index 663ae5513411b5e66d475c819c781a8b83fbfe18..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Région" name="General">
-	<text name="region_text_lbl">
-		Région :
-	</text>
-	<text left_delta="56" name="region_text">
-		inconnu
-	</text>
-	<text name="version_channel_text_lbl">
-		Version :
-	</text>
-	<text left_delta="56" name="version_channel_text">
-		inconnu
-	</text>
-	<text name="region_type_lbl">
-		Type :
-	</text>
-	<text left_delta="56" name="region_type">
-		inconnu
-	</text>
-	<check_box label="Interdire le terraformage" name="block_terraform_check"/>
-	<check_box label="Interdire le vol" name="block_fly_check"/>
-	<check_box label="Autoriser les dégâts" name="allow_damage_check"/>
-	<check_box label="Interdire les bousculades" name="restrict_pushobject"/>
-	<check_box label="Autoriser la revente de terrains" name="allow_land_resell_check"/>
-	<check_box label="Autoriser la fusion/division de terrains" name="allow_parcel_changes_check"/>
-	<check_box label="Interdire l&apos;affichage du terrain dans les recherches" name="block_parcel_search_check" tool_tip="Permettre aux autres résidents de voir cette région et ses parcelles dans les résultats de recherche"/>
-	<spinner label="Nombre maximum d&apos;avatars" label_width="160" name="agent_limit_spin" width="240"/>
-	<spinner label="Bonus objet" label_width="160" name="object_bonus_spin" width="240"/>
-	<text label="Accès" name="access_text">
-		Catégorie :
-	</text>
-	<combo_box label="Modéré" name="access_combo">
-		<combo_box.item label="Adulte" name="Adult"/>
-		<combo_box.item label="Modéré" name="Mature"/>
-		<combo_box.item label="Général" name="PG"/>
-	</combo_box>
-	<button label="Appliquer" name="apply_btn"/>
-	<button label="Téléporter un résident chez lui…" name="kick_btn"/>
-	<button label="Téléporter tous les résidents chez eux…" name="kick_all_btn"/>
-	<button label="Envoyer un message à la région..." name="im_btn"/>
-	<button label="Gérer le téléhub..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml
deleted file mode 100644
index 63c26b4d732e4161c8644a0da42acc6d8c807026..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="ASPETTO">
-	<tab_container name="customize tab container" tab_min_width="120">
-		<text label="Parti del corpo" name="body_parts_placeholder">
-			Parti del corpo
-		</text>
-		<panel label="Forma del corpo" left="124" name="Shape">
-			<button label="Crea una nuova forma del corpo" label_selected="Crea una nuova forma del corpo" name="Create New" width="190"/>
-			<button label="Corpo" label_selected="Corpo" name="Body"/>
-			<button label="Testa" label_selected="Testa" name="Head"/>
-			<button label="Occhi" label_selected="Occhi" name="Eyes"/>
-			<button label="Orecchie" label_selected="Orecchie" name="Ears"/>
-			<button label="Naso" label_selected="Naso" name="Nose"/>
-			<button label="Bocca" label_selected="Bocca" name="Mouth"/>
-			<button label="Mento" label_selected="Mento" name="Chin"/>
-			<button label="Torso" label_selected="Torso" name="Torso"/>
-			<button label="Gambe" label_selected="Gambe" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Femmina" name="radio" value="0"/>
-				<radio_item label="Maschio" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossato
-			</text>
-			<text name="path">
-				Ubicato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova figura corporea trascinandola dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label">
-				Forma del corpo:
-			</text>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert"/>
-		</panel>
-		<panel label="Pelle" name="Skin">
-			<button label="Colore della pelle" label_selected="Colore della pelle" name="Skin Color" width="115"/>
-			<button label="Dettagli della faccia" label_selected="Dettagli della faccia" name="Face Detail" width="115"/>
-			<button label="Trucco" label_selected="Trucco" name="Makeup" width="115"/>
-			<button label="Dettagli del corpo" label_selected="Dettagli del corpo" name="Body Detail" width="115"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Per mettere una nuova pelle, trascinala dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Pelle:
-			</text>
-			<texture_picker label="Tatuaggi: testa" name="Head Tattoos" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<texture_picker label="Tatuaggi: superiori" name="Upper Tattoos" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<texture_picker label="Tatuaggi: inferiori" name="Lower Tattoos" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<button label="Crea una nuova pelle" label_selected="Crea una nuova pelle" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert"/>
-		</panel>
-		<panel label="Capelli" name="Hair">
-			<button label="Capelli" label_selected="Colore" name="Color"/>
-			<button label="Stile" label_selected="Stile" name="Style"/>
-			<button label="Sopracciglia" label_selected="Sopracciglia" name="Eyebrows"/>
-			<button label="Facciale" label_selected="Facciale" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossati
-			</text>
-			<text name="path">
-				Ubicati in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Per cambiare capelli, trascinali dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso per modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Capelli:
-			</text>
-			<texture_picker label="Texture" name="Texture" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<button label="Crea nuovi capelli" label_selected="Crea nuovi capelli" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Occhi" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossati
-			</text>
-			<text name="path">
-				Ubicati in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Puoi cambiare gli occhi trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Occhi:
-			</text>
-			<texture_picker label="Iride" name="Iris" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<button label="Crea nuovi occhi" label_selected="Crea nuovi occhi" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<text label="Vestiti" name="clothes_placeholder">
-			Abiti
-		</text>
-		<panel label="Camicia" name="Shirt">
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Crea una nuova camicia" label_selected="Crea una nuova camicia" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche"  name="Revert" width="120"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova camicia trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Camicia:
-			</text>
-		</panel>
-		<panel label="Pantaloni" name="Pants">
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Crea nuovi pantaloni" label_selected="Crea nuovi pantaloni" name="Create New"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossato
-			</text>
-			<text name="path">
-				Ubicati in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti dei nuovi pantaloni trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Pantaloni:
-			</text>
-		</panel>
-		<panel label="Scarpe" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossate
-			</text>
-			<text name="path">
-				Ubicate in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti delle nuove scarpe trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuove scarpe" label_selected="Crea nuove scarpe" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Scarpe:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Calze" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossate
-			</text>
-			<text name="path">
-				Ubicato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti delle nuove calze trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuove calze" label_selected="Crea nuove calze" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Calze:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Giacca" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova giacca trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea una nuova giacca" label_selected="Crea una nuova giacca" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Giacca:
-			</text>
-			<texture_picker label="Tessuto: superiore" name="Upper Fabric" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<texture_picker label="Tessuto: inferiore" name="Lower Fabric" tool_tip="Clicca per scegliere un&apos;immagine" width="96"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Guanti" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossati
-			</text>
-			<text name="path">
-				Ubicati in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti dei nuovi guanti trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuovi guanti" label_selected="Crea nuovi guanti" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Guanti:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Canottiera" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova maglietta intima trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea una nuova canottiera" label_selected="Crea una nuova canottiera" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Canottiera:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Mutande" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabili
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossate
-			</text>
-			<text name="path">
-				Ubicato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti dei nuovi slip trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuove mutande" label_selected="Crea nuove mutande" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Mutande:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Gonna" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: immodificabile
-			</text>
-			<text name="title_loading">
-				[DESC]: in caricamento...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossata
-			</text>
-			<text name="path">
-				Ubicata in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova gonna trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea una nuova gonna" label_selected="Crea una nuova gonna" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai il permesso di modificare questo indumento.
-			</text>
-			<text name="Item Action Label" right="89">
-				Gonna:
-			</text>
-			<texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un&apos;immagine"/>
-			<color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/>
-			<button font="SansSerifSmall" label="Rimuovi l&apos;indumento" label_selected="Rimuovi l&apos;indumento" name="Take Off" width="115"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/>
-			<button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/>
-		</panel>
-		<panel label="Tatuaggio" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: non può essere modificato
-			</text>
-			<text name="title_loading">
-				[DESC]: caricamento in corso...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossato
-			</text>
-			<text name="path">
-				Collocato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti un nuovo tatuaggio trascinandolo dal tuo inventario al avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea un nuovo tatuaggio" label_selected="Crea un nuovo tatuaggio" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai i permessi per modificare questo capo.
-			</text>
-			<text name="Item Action Label">
-				Tatuaggio:
-			</text>
-			<texture_picker label="Tatuaggio della testa" name="Head Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Tattuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una fotografia"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/>
-			<button label="Ripristina" label_selected="Ripristina" name="Revert"/>
-		</panel>
-		<panel label="Alpha (Trasparenza)" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: non può essere modificato
-			</text>
-			<text name="title_loading">
-				[DESC]: caricamento in corso...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: non indossato
-			</text>
-			<text name="path">
-				Collocato in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Metti una nuova alpha mask trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo.
-			</text>
-			<button label="Crea nuovo Alpha" label_selected="Crea nuovo Alpha" name="Create New"/>
-			<text name="no modify instructions">
-				Non hai i permessi per modificare questo capo.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Alpha inferiore" name="Lower Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Alpha della testa" name="Head Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Alpha dell&apos;occhio" name="Eye Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<texture_picker label="Alpha dei capelli" name="Hair Alpha" tool_tip="Clicca per scegliere una fotografia"/>
-			<button label="Togli" label_selected="Togli" name="Take Off"/>
-			<button label="Salva" label_selected="Salva" name="Save"/>
-			<button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/>
-			<button label="Ripristina" label_selected="Ripristina" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container name="panel_container"/>
-	<button label="Informazioni script" label_selected="Informazioni script" name="script_info" tool_tip="Mostra gli script collegati al tuo avatar"/>
-	<button label="Crea vestiario" label_selected="Crea vestiario" name="make_outfit_btn"/>
-	<button label="Annulla" label_selected="Annulla" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_device_settings.xml b/indra/newview/skins/default/xui/it/floater_device_settings.xml
deleted file mode 100644
index 97aa64086d4c4c4f8a7bf4f746255b09ad9711b2..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="OPZIONI CHAT VOCALE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_im.xml b/indra/newview/skins/default/xui/it/floater_im.xml
deleted file mode 100644
index aa916adf2c00a7faf60677c3d9b912822d71d4ed..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="">
-	<string name="only_user_message">
-		Sei il solo residente presente nella sessione.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] è offline.
-	</string>
-	<string name="invite_message">
-		Clicca il tasto [BUTTON NAME] per accettare/connetterti a questa voice chat.
-	</string>
-	<string name="muted_message">
-		Hai bloccato questo residente. Quando gli invii un messaggio, verrà automaticamente sbloccato.
-	</string>
-	<string name="generic_request_error">
-		Errore durante la richiesta, riprova più tardi.
-	</string>
-	<string name="insufficient_perms_error">
-		Non hai sufficienti permessi.
-	</string>
-	<string name="session_does_not_exist_error">
-		Questa sessione non esiste più
-	</string>
-	<string name="no_ability_error">
-		Non hai questa abilitazione.
-	</string>
-	<string name="not_a_mod_error">
-		Non sei un moderatore.
-	</string>
-	<string name="muted_error">
-		Un moderatore di gruppo ti ha disabilitato dalla chat di testo.
-	</string>
-	<string name="add_session_event">
-		Impossibile aggiungere residenti alla sessione chat con [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Impossibile inviare il messaggio nella chat con [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Sei stato espulso dal gruppo.
-	</string>
-	<string name="close_on_no_ability">
-		Non hai più le abilitazioni per rimanere nella sessione chat.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/it/floater_im_session.xml b/indra/newview/skins/default/xui/it/floater_im_session.xml
index 8d395ea04bc5e64e184e05e4efe06d7a8da85d4a..3d9d17fc81ada808766e00cd9c8bb4b0bf33ad78 100644
--- a/indra/newview/skins/default/xui/it/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/it/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Pannello di controllo IM" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="A" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/it/floater_my_friends.xml b/indra/newview/skins/default/xui/it/floater_my_friends.xml
deleted file mode 100644
index faeba0a6d9a580cab2502691bae6e5c1dabec317..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTATTI">
-	<tab_container name="friends_and_groups">
-		<panel label="Amici" name="friends_panel"/>
-		<panel label="Gruppi" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml
deleted file mode 100644
index dff5f33e5751d41fc9ad2395e64d1f397c169237..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Salva vestiario">
-	<button label="Salva" label_selected="Salva" name="Save"/>
-	<button label="Annulla" label_selected="Annulla" name="Cancel"/>
-	<text name="Save item as:">
-		Salva quello che indosso
-come nuovo vestiario:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (nuovo)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_classified.xml b/indra/newview/skins/default/xui/it/floater_preview_classified.xml
deleted file mode 100644
index c617f81f7bb328f052d8881463581af2a04ce991..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFORMAZIONI RISERVATE">
-	<floater.string name="Title">
-		Riservato: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_event.xml b/indra/newview/skins/default/xui/it/floater_preview_event.xml
deleted file mode 100644
index 1e1653e7581a62bb3c25c572e5e6dfc28ad73a38..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="INFORMAZIONI SULL&apos;EVENTO">
-	<floater.string name="Title">
-		Evento: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml
deleted file mode 100644
index d490416cc7e7de128e11fdfe42f0a83a60f2e244..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="SCORCIATOIA GESTURE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index eb0bc4d86877e1265bd2d70becba32e4d436b86b..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="SCORCIATOIA GESTURE">
-	<text name="trigger_label">
-		Chat:
-	</text>
-	<text name="key_label">
-		Tastiera:
-	</text>
-	<combo_box label="Nessuno" name="modifier_combo"/>
-	<combo_box label="Nessuno" name="key_combo"/>
-	<text name="replace_text" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave &apos;ciao&apos; con &apos;buongiorno&apos;, nella chat il testo &apos;Volevo dire ciao&apos; diventerà &apos;Volevo dire buongiorno&apos; e verrà attivata la gesture.">
-		Sostituisci:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave &apos;ciao&apos; con &apos;buongiorno&apos;, nella chat il testo &apos;Volevo dire ciao&apos; diventerà &apos;Volevo dire buongiorno&apos; e verrà attivata la gesture"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml
deleted file mode 100644
index d490416cc7e7de128e11fdfe42f0a83a60f2e244..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="SCORCIATOIA GESTURE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_statistics.xml b/indra/newview/skins/default/xui/it/floater_statistics.xml
deleted file mode 100644
index 00df1ff99493e0230e8c42951a6734f28f2c9d5c..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTICHE"/>
diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
index d2fd462062c415d23d6e7692dc156c44dc5c7e8a..4741d8d32f223653c26e5de0f6be0119b36e6c65 100644
--- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Il mio avatar:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Abbandona chiamata" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+				<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="Abbandona chiamata" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+        </layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml
deleted file mode 100644
index 7c3754f00473b98a41f7302afba22b302c748ece..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="">
-	<button label="Salva" label_selected="Salva" name="Save"/>
-	<button label="Annulla" label_selected="Annulla" name="Cancel"/>
-	<text name="Save item as:">
-		Salva oggetto nel mio inventario come:
-	</text>
-	<line_editor name="name ed">
-		Nuovo [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/panel_audio_device.xml b/indra/newview/skins/default/xui/it/panel_audio_device.xml
deleted file mode 100644
index 166db8199952be5a6e8fff142482101a8b6cfee3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Periferiche audio
-	</text>
-	<text name="Input device (microphone):">
-		Periferica di input (microfono):
-	</text>
-	<text name="Output device (speakers):">
-		Periferica di Output (altoparlanti):
-	</text>
-	<text name="Input level:">
-		Livello d&apos;ingresso
-	</text>
-	<text_editor name="voice_intro_text1">
-		Sposta il cursore per impostare il livello della tua voce per gli altri residenti. Per controllare il livello di ingresso, parla semplicemente nel microfono.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Cambia il volume usando il cursore"/>
-	<text name="wait_text">
-		Attendi
-	</text>
-	<string name="default_text">
-		Default
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_friends.xml b/indra/newview/skins/default/xui/it/panel_friends.xml
deleted file mode 100644
index cfe162a67bfd5fe1fd29a3356b65c6a4dd3d2b66..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Più amici
-	</string>
-	<scroll_list name="friend_list" tool_tip="Tieni premuto shift o control mentre clicchi per selezionare più di un amico">
-		<column name="icon_online_status" tool_tip="Stato Online"/>
-		<column label="Nome" name="friend_name" tool_tip="Nome"/>
-		<column name="icon_visible_online" tool_tip="Questo amico può vedere quando sei online"/>
-		<column name="icon_visible_map" tool_tip="Questo amico può localizzarti sulla mappa"/>
-		<column name="icon_edit_mine" tool_tip="Questo amico può modificare, cancellare o prendere i tuoi oggetti"/>
-		<column name="icon_edit_theirs" tool_tip="Puoi modificare gli oggetti di questo amico"/>
-	</scroll_list>
-	<button label="IM/Chiama" name="im_btn" tool_tip="Apri una sessione di IM - Messaggio Privato"/>
-	<button label="Profilo" name="profile_btn" tool_tip="Mostra foto, gruppi, ed altre informazioni"/>
-	<button label="Teleport" name="offer_teleport_btn" tool_tip="Offri a questo amico un teleport per dove sei tu ora"/>
-	<button label="Paga" name="pay_btn" tool_tip="Dai Linden dollar (L$) a questo amico"/>
-	<button label="Rimuovi" name="remove_btn" tool_tip="Rimuovi questa persona dalla tua lista amici"/>
-	<button label="Aggiungi" name="add_btn" tool_tip="Offri amicizia a un residente"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_groups.xml b/indra/newview/skins/default/xui/it/panel_groups.xml
deleted file mode 100644
index 43fd36710ebac7d3a3f34211b128446e320af155..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/panel_groups.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<scroll_list bottom="50" name="group list"/>
-	<text bottom="16" height="32" name="groupdesc" width="268">
-		Il tuo gruppo attualmente attivo è visualizzato
-in grassetto.
-	</text>
-	<text bottom="3" name="groupcount" width="268">
-		Appartieni a [COUNT] gruppo/i (su un massimo di [MAX]).
-	</text>
-	<button label="IM/Chiama" name="IM" tool_tip="Apri una sessione di IM/Instant Messages"/>
-	<button label="Informazioni" name="Info"/>
-	<button label="Attiva" name="Activate"/>
-	<button label="Abbandona" name="Leave"/>
-	<button label="Crea..." name="Create"/>
-	<button label="Cerca..." name="Search..."/>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat.xml
deleted file mode 100644
index 7ffe972181bd84cc61b8bfab8c290a461f3b4b87..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			CHAT NEI DINTORNI
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_notes.xml b/indra/newview/skins/default/xui/it/panel_notes.xml
index 9ce6b47a325deba1d9a84a1f880eeb9b938a8c70..945bff16039405586c79fe755f8f228a0cbbd3a9 100644
--- a/indra/newview/skins/default/xui/it/panel_notes.xml
+++ b/indra/newview/skins/default/xui/it/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Note e Privacy" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Le mie note private:"/>
@@ -11,13 +11,13 @@
 					<check_box label="Modificare, eliminare o prendere i miei oggetti" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
 			<button label="Aggiungi amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/>
 			<button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/>
 			<button label="Chiama" name="call" tool_tip="Chiama questo residente"/>
 			<button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/>
 			<button label="Teleport" name="teleport" tool_tip="Offri teleport"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_online_status.xml b/indra/newview/skins/default/xui/it/panel_online_status.xml
deleted file mode 100644
index fdc489f375ec6eabd344b633f4fb6eb00c3ccef3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
index ef7aaf2e8cb924bd7da7def6ab16ca89bdd212dd..4620d729770308bc47b5fdda955e29881a33c03f 100644
--- a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="L&apos;elemento multimediale è in caricamento"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/it/panel_region_general_layout.xml b/indra/newview/skins/default/xui/it/panel_region_general_layout.xml
deleted file mode 100644
index 4cf31f4b6e409ad6ecf48fc6346ac258a2399f21..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/it/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Regione" name="General">
-	<text name="region_text_lbl">
-		Regione:
-	</text>
-	<text name="region_text">
-		sconosciuto
-	</text>
-	<text name="version_channel_text_lbl">
-		Versione:
-	</text>
-	<text name="version_channel_text">
-		sconosciuto
-	</text>
-	<text name="region_type_lbl">
-		Tipo:
-	</text>
-	<text name="region_type">
-		sconosciuto
-	</text>
-	<check_box label="Impedisci Terraform" name="block_terraform_check"/>
-	<check_box label="Impedisci volo" name="block_fly_check"/>
-	<check_box label="Permetti danni" name="allow_damage_check"/>
-	<check_box label="Limita spinte" name="restrict_pushobject"/>
-	<check_box label="Permetti la rivendita dei terreni" name="allow_land_resell_check"/>
-	<check_box label="Permetti l&apos;unione/divisione del terreno" name="allow_parcel_changes_check"/>
-	<check_box label="Impedisci la visualizzazione del terreno nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti alla gente di vedere questa regione e i suoi lotti nei risultati dellla ricerca"/>
-	<spinner label="N. massimo di avatar" name="agent_limit_spin"/>
-	<spinner label="Bonus oggetto" name="object_bonus_spin"/>
-	<text label="Categoria di accesso" name="access_text">
-		Categoria:
-	</text>
-	<combo_box label="Moderato" name="access_combo">
-		<combo_box.item label="Adulti" name="Adult"/>
-		<combo_box.item label="Moderato" name="Mature"/>
-		<combo_box.item label="Generale" name="PG"/>
-	</combo_box>
-	<button label="Applica" name="apply_btn"/>
-	<button label="Teleport a casa un residente..." name="kick_btn"/>
-	<button label="Teleport a casa tutti i residenti..." name="kick_all_btn"/>
-	<button label="Invia messaggio alla regione..." name="im_btn"/>
-	<button label="Gestisci telehub..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_customize.xml b/indra/newview/skins/default/xui/ja/floater_customize.xml
deleted file mode 100644
index cc0032e1ab037237d9e94f7afcec1bcef81280b0..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_customize.xml
+++ /dev/null
@@ -1,529 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="容姿">
-	<tab_container name="customize tab container">
-		<text label="身体部位" name="body_parts_placeholder">
-			身体部位
-		</text>
-		<panel label="シェイプ" name="Shape">
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-			<button label="身体" label_selected="身体" name="Body"/>
-			<button label="é ­" label_selected="é ­" name="Head"/>
-			<button label="眼" label_selected="眼" name="Eyes"/>
-			<button label="耳" label_selected="耳" name="Ears"/>
-			<button label="é¼»" label_selected="é¼»" name="Nose"/>
-			<button label="口" label_selected="口" name="Mouth"/>
-			<button label="あご" label_selected="あご" name="Chin"/>
-			<button label="胴体" label_selected="胴体" name="Torso"/>
-			<button label="両脚" label_selected="両脚" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="女性" name="radio" value="0"/>
-				<radio_item label="男性" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいシェイプをつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				シェイプ:
-			</text>
-			<button label="新しいシェイプ(体型)を作成" label_selected="新しいシェイプ(体型)を作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-		</panel>
-		<panel label="スキン" name="Skin">
-			<button label="スキンの色" label_selected="スキンの色" name="Skin Color"/>
-			<button label="顔の細部" label_selected="顔の細部" name="Face Detail"/>
-			<button label="メイク" label_selected="メイク" name="Makeup"/>
-			<button label="身体細部" label_selected="身体細部" name="Body Detail"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいスキンをつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				スキン:
-			</text>
-			<texture_picker label="頭部のタトゥー" name="Head Tattoos" tool_tip="写真をクリックして選択"/>
-			<texture_picker label="上半身のタトゥー" name="Upper Tattoos" tool_tip="写真をクリックして選択"/>
-			<texture_picker label="下部のタトゥー" name="Lower Tattoos" tool_tip="写真をクリックして選択"/>
-			<button label="新しいスキンを作成" label_selected="新しいスキンを作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="髪" name="Hair">
-			<button label="色" label_selected="色" name="Color"/>
-			<button label="スタイル" label_selected="スタイル" name="Style"/>
-			<button label="眉毛" label_selected="眉毛" name="Eyebrows"/>
-			<button label="é¡”" label_selected="é¡”" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しい髪をつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				髪型:
-			</text>
-			<texture_picker label="テクスチャ" name="Texture" tool_tip="写真をクリックして選択"/>
-			<button label="新しい髪を作成" label_selected="新しい髪を作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="眼" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい目をつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				目:
-			</text>
-			<texture_picker label="虹彩" name="Iris" tool_tip="写真をクリックして選択"/>
-			<button label="新しい眼を作成" label_selected="新しい眼を作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<text label="服" name="clothes_placeholder">
-			衣類
-		</text>
-		<panel label="シャツ" name="Shirt">
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="新しいシャツを作成" label_selected="新しいシャツを作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいシャツを着ます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				シャツ:
-			</text>
-		</panel>
-		<panel label="パンツ" name="Pants">
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="新しいパンツを作成" label_selected="新しいパンツを作成" name="Create New"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しいパンツを履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				パンツ:
-			</text>
-		</panel>
-		<panel label="靴" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい靴を履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい靴を作成" label_selected="新しい靴を作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				靴:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="靴下" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい靴下を履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい靴下を作成" label_selected="新しい靴下を作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				靴下:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="上着" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいジャケットを着ます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい上着を作成" label_selected="新しい上着を作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				上着:
-			</text>
-			<texture_picker label="上半身の生地" name="Upper Fabric" tool_tip="写真をクリックして選択"/>
-			<texture_picker label="下層生地" name="Lower Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="手袋" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい手袋をつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい手袋を作成" label_selected="新しい手袋を作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				手袋:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="下着シャツ" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに1つドラッグして、新しい下着(上)を着ます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しい下着シャツを作成" label_selected="新しい下着シャツを作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				下着シャツ:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="下着パンツ" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しい下着(下)を履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しいパンツを作成" label_selected="新しいパンツを作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				下着パンツ:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="スカート" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正できません。
-			</text>
-			<text name="title_loading">
-				[DESC]: ロード中...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未装着。
-			</text>
-			<text name="path">
-				[PATH] に所在
-			</text>
-			<text name="not worn instructions">
-				持ち物からあなたのアバターに 1 つドラッグして、新しいスカートを履きます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="スカートを作成" label_selected="スカートを作成" name="Create New"/>
-			<text name="no modify instructions">
-				あなたはこの服の修正を許されていません。
-			</text>
-			<text name="Item Action Label">
-				スカート:
-			</text>
-			<texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/>
-			<color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="戻す" label_selected="戻す" name="Revert"/>
-		</panel>
-		<panel label="タトゥ" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正不可
-			</text>
-			<text name="title_loading">
-				[DESC]: ローディング...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未着用
-			</text>
-			<text name="path">
-				参照 [PATH]
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しいタトゥをつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しいタトゥを作成" label_selected="新しいタトゥを作成" name="Create New"/>
-			<text name="no modify instructions">
-				この着用物を修正する権限がありません。
-			</text>
-			<text name="Item Action Label">
-				タトゥ:
-			</text>
-			<texture_picker label="頭部のタトゥー" name="Head Tattoo" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="上部のタトゥー" name="Upper Tattoo" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="下部のタトゥー" name="Lower Tattoo" tool_tip="クリックして写真を選択します"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="元に戻す" label_selected="元に戻す" name="Revert"/>
-		</panel>
-		<panel label="アルファ" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: 修正不可
-			</text>
-			<text name="title_loading">
-				[DESC]: ローディング...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: 未着用
-			</text>
-			<text name="path">
-				参照 [PATH]
-			</text>
-			<text name="not worn instructions">
-				あなたの持ち物からアバターにドラッグして、新しいアルファマスクをつけます。 代わりに、はじめから新しく作成して着用することもできます。
-			</text>
-			<button label="新しいアルファを作成" label_selected="新しいアルファを作成" name="Create New"/>
-			<text name="no modify instructions">
-				この着用物を修正する権限がありません。
-			</text>
-			<text name="Item Action Label">
-				アルファ:
-			</text>
-			<texture_picker label="アルファ(下)" name="Lower Alpha" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="アルファ(上)" name="Upper Alpha" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="頭部のアルファ" name="Head Alpha" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="目のアルファ" name="Eye Alpha" tool_tip="クリックして写真を選択します"/>
-			<texture_picker label="髪のアルファ" name="Hair Alpha" tool_tip="クリックして写真を選択します"/>
-			<button label="取り外す" label_selected="取り外す" name="Take Off"/>
-			<button label="保存" label_selected="保存" name="Save"/>
-			<button label="別名で保存..." label_selected="別名で保存..." name="Save As"/>
-			<button label="元に戻す" label_selected="元に戻す" name="Revert"/>
-		</panel>
-	</tab_container>
-	<button label="スクリプト情報" label_selected="スクリプト情報" name="script_info" tool_tip="あなたのアバターに付いているスクリプトを表示します"/>
-	<button label="アウトフィット作成" label_selected="アウトフィット作成" name="make_outfit_btn"/>
-	<button label="キャンセル" label_selected="キャンセル" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_device_settings.xml b/indra/newview/skins/default/xui/ja/floater_device_settings.xml
deleted file mode 100644
index 3ae7356fb65fa3d132c4c845e8f9677b3fb06170..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="ボイスチャット機器の設定"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml b/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml
deleted file mode 100644
index fce9185b8ac94d1f0cbd5310a1573e231a69d73f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="set_name_in_the_cladd">
-	<check_box label="クイックヒントをオフにする" name="DontShowFirstTimeTip_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_im.xml b/indra/newview/skins/default/xui/ja/floater_im.xml
deleted file mode 100644
index 2e8993ec2123db44b34c4cf3672c5c0fdbf87d81..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_im.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="インスタント・メッセージ">
-	<string name="only_user_message">
-		このセッションには、あなたしかいません。
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST]はオフラインです。
-	</string>
-	<string name="invite_message">
-		このボイスチャットに応答/接続する場合は、[BUTTON NAME]をクリックしてください。
-	</string>
-	<string name="muted_message">
-		この住人をブロックしています。 メッセージを送ると、ブロックが自動的に解除されます。
-	</string>
-	<string name="generic_request_error">
-		要求中にエラーが発生しました。後でもう一度試してください。
-	</string>
-	<string name="insufficient_perms_error">
-		あなたには充分な権限がありません。
-	</string>
-	<string name="session_does_not_exist_error">
-		このセッションは既に切断されています。
-	</string>
-	<string name="no_ability_error">
-		あなたにはその能力がありません。
-	</string>
-	<string name="not_a_mod_error">
-		あなたはセッション・モデレータではありません。
-	</string>
-	<string name="muted_error">
-		グループモデレータがあなたのテキストチャットを無効化しました
-	</string>
-	<!-- ALL of the event strings should have [RECIPIENT] in them -->
-	<string name="add_session_event">
-		[RECIPIENT] とのチャットセッションに住人を追加できません。
-	</string>
-	<string name="message_session_event">
-		[RECIPIENT] とのチャット・セッションにメッセージを送ることができません
-	</string>
-	<string name="removed_from_group">
-		あなたはグループから削除されました。
-	</string>
-	<string name="close_on_no_ability">
-		このチャット・セッションを継続することはできません
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_im_session.xml b/indra/newview/skins/default/xui/ja/floater_im_session.xml
index 6646cc0b251c4d27d5fe89796b6555003ec9f683..dfa1c85ca23b4bad4545f613ad9769ebc43d6a43 100644
--- a/indra/newview/skins/default/xui/ja/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/ja/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="IM コントロールパネル" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="宛先" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_my_friends.xml b/indra/newview/skins/default/xui/ja/floater_my_friends.xml
deleted file mode 100644
index b55cdde5b5bcf9d7a368c9b88671549b40fabaff..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater min_width="500" name="floater_my_friends" title="連絡先">
-	<tab_container name="friends_and_groups">
-		<panel label="フレンド" name="friends_panel"/>
-		<panel label="グループ" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml
deleted file mode 100644
index 70555e6ded8e623e38d57ecbdb5270adece2b974..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="アウトフィットを保存する">
-	<button label="保存" label_selected="保存" name="Save"/>
-	<button label="キャンセル" label_selected="キャンセル" name="Cancel"/>
-	<text name="Save item as:">
-		着用しているものを
-新しいアウトフィットに保存:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (新)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
deleted file mode 100644
index ba3bb028b2600bc5f709a9600ec17aff16b2a4be..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="クラシファイド広告情報">
-	<floater.string name="Title">
-		クラシファイド広告: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_event.xml b/indra/newview/skins/default/xui/ja/floater_preview_event.xml
deleted file mode 100644
index 21f57ca7a3ef1763f1138d8bbdd7b7e1423a69a6..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="イベント情報">
-	<floater.string name="Title">
-		イベント: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
deleted file mode 100644
index 682b295a146092739d4fae03bd9bd46830373c55..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ジェスチャーのショートカット"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index e96a43d0c1b1b350a5ec4e736e244c3bccd7deee..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ジェスチャーのショートカット">
-	<text name="trigger_label">
-		チャット:
-	</text>
-	<text name="key_label">
-		キーボード:
-	</text>
-	<combo_box label="なし" name="modifier_combo" width="60"/>
-	<combo_box label="なし" name="key_combo" width="60"/>
-	<text name="replace_text" tool_tip="これらの単語にトリガーとなる単語を置き換えます。 例えば、「howdy」と「hello」を置き換えると、「I wanted to say hello」というチャットは、ジェスチャーを交えながらの「I wanted to say howdy」に変わります。">
-		置き換え:
-	</text>
-	<line_editor name="replace_editor" tool_tip="これらの単語にトリガーとなる単語を置き換えます。 例えば、「howdy」と「hello」を置き換えると、「I wanted to say hello」というチャットは、ジェスチャーを交えながらの「I wanted to say howdy」に変わります。"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
deleted file mode 100644
index 682b295a146092739d4fae03bd9bd46830373c55..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ジェスチャーのショートカット"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_statistics.xml b/indra/newview/skins/default/xui/ja/floater_statistics.xml
deleted file mode 100644
index de83e97b80309e0d2392fe3f8e5913b70ee61b4b..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="統計"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
index 4b95aa544f9ebfaf50b2dd2c41df738fe3e80979..0caca22bc114574d6653c5a25809a8924c00fa8b 100644
--- a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="マイ アバター:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="コール終了" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+			<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="コール終了" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml
deleted file mode 100644
index de8b590a802b12e284c31df67ffc0257dd439235..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title=" ">
-	<button label="保存" label_selected="保存" name="Save"/>
-	<button label="取り消し" label_selected="取り消し" name="Cancel"/>
-	<text name="Save item as:">
-		アイテムを別名で持ち物に保存:
-	</text>
-	<line_editor name="name ed">
-		New [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/panel_audio_device.xml b/indra/newview/skins/default/xui/ja/panel_audio_device.xml
deleted file mode 100644
index 2352c609899d0505ab06be4dc9290d72aa0f0a39..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/panel_audio_device.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		オーディオ機器
-	</text>
-	<text name="Output device (speakers):">
-		出力機器 (スピーカー):
-	</text>
-	<text name="Input device (microphone):">
-		入力機器(マイクロフォン):
-	</text>
-	<text name="Input level:">
-		入力レベル
-	</text>
-	<text_editor name="voice_intro_text1">
-		スライダを調節して、他の住人に聞こえるあなたの音量を制御します。マイクロフォンに向かって話すだけで、入力レベルをテストできます。
-	</text_editor>
-	<volume_slider name="mic_volume_slider"
-	     tool_tip="このスライダーを使用して、ボリュームを変えてください。" />
-	<text name="wait_text">
-		お待ちください
-	</text>
-	<text name="default_text">
-		デフォルト
-	</text>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_friends.xml b/indra/newview/skins/default/xui/ja/panel_friends.xml
deleted file mode 100644
index 0c7114dbb7c5e0d07e01c383dcd98ae73baefc9f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/panel_friends.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		複数のフレンド
-	</string>
-	<scroll_list name="friend_list" tool_tip="複数のフレンドを選択するには、Shift キーまたは Ctrl キーを押しながら名前をクリックします。">
-		<column name="icon_online_status" tool_tip="オンライン状態"/>
-		<column label="名前" name="friend_name" tool_tip="名前"/>
-		<column name="icon_visible_online" tool_tip="フレンドは、あなたがオンラインかどうか確認することができます。"/>
-		<column name="icon_visible_map" tool_tip="フレンドは、地図であなたの居場所を見つけることができます。"/>
-		<column name="icon_edit_mine" tool_tip="フレンドは、オブジェクトを編集、削除、または取得することができます。"/>
-		<column name="icon_edit_theirs" tool_tip="あなたは、このフレンドのオブジェクトを編集することができます。"/>
-	</scroll_list>
-	<panel name="rights_container">
-		<text name="friend_name_label" right="-10">
-			フレンドを選択して権利を変更...
-		</text>
-		<check_box label="オンライン状態の確認を許可する" name="online_status_cb" tool_tip="コーリングカードあるいはフレンドリストでこのフレンドがオンライン状態を確認できるよう設定します"/>
-		<check_box label="世界地図上であなたの居場所を検索可能にする" name="map_status_cb" tool_tip="このフレンドが地図で私の位置を発見できるように設定します"/>
-		<check_box label="オブジェクトの修正を許可する" name="modify_status_cb" tool_tip="このフレンドに私のオブジェクトを改造する許可を与えます"/>
-		<text name="process_rights_label">
-			権利変更をプロセス中...
-		</text>
-	</panel>
-	<pad left="-95"/>
-	<button label="IM・コール" name="im_btn" tool_tip="インスタントメッセージセッションを開きます。" width="90"/>
-	<button label="プロフィール" name="profile_btn" tool_tip="写真、グループ、およびその他の情報を表示します。" width="90"/>
-	<button label="テレポート" name="offer_teleport_btn" tool_tip="このフレンドに、あなたの現在地へのテレポートを申し出ます。" width="90"/>
-	<button label="支払う" name="pay_btn" tool_tip="リンデンドル (L$) をこのフレンドにあげます。" width="90"/>
-	<button label="削除" name="remove_btn" tool_tip="この人物をフレンドリストから外します。" width="90"/>
-	<button label="追加" name="add_btn" tool_tip="フレンド登録を申し出ます。" width="90"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_groups.xml b/indra/newview/skins/default/xui/ja/panel_groups.xml
deleted file mode 100644
index de81a6431ab4fae0af1c134d70627d4be106a44e..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/panel_groups.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="groups">
-	<text name="groupdesc">
-		アクティブなグループは太字で表示されています
-	</text>
-	<text name="groupcount" width="270">
-		[COUNT] のグループに所属しています (最大[MAX])
-	</text>
-	<button label="IM・コール" name="IM"
-	     tool_tip="インスタントメッセージ・セッションを開く" />
-	<button label="情報" name="Info" />
-	<button label="アクティブ" name="Activate" />
-	<button label="抜ける" name="Leave" />
-	<button label="作成..." name="Create" />
-	<button label="検索..." name="Search..." />
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml
deleted file mode 100644
index c0549c8ae9ca77d837e4d798117852a0b325b97c..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			近くのチャット
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml
index 5723535fd2185aa522e74395770e93c905f236ac..aff427ed49fa4de14a60e8a9bfa2ad5f6a063df9 100644
--- a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml
+++ b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="notifications_panel">
 	<layout_stack name="stack1">
-		<scroll_list name="notifications_list">
-			<column label="名前" name="name"/>
-			<column label="コンテンツ" name="content"/>
-			<column label="日付" name="date"/>
-		</scroll_list>
-		<scroll_list name="notification_rejects_list">
-			<column label="名前" name="name"/>
-			<column label="コンテンツ" name="content"/>
-			<column label="日付" name="date"/>
-		</scroll_list>
+		<layout_panel name="notifications_list_panel">
+			<scroll_list name="notifications_list">
+				<column label="名前" name="name"/>
+				<column label="コンテンツ" name="content"/>
+				<column label="日付" name="date"/>
+			</scroll_list>
+		</layout_panel>
+		<layout_panel name="rejects_list_panel">
+			<scroll_list name="notification_rejects_list">
+				<column label="名前" name="name"/>
+				<column label="コンテンツ" name="content"/>
+				<column label="日付" name="date"/>
+			</scroll_list>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_online_status.xml b/indra/newview/skins/default/xui/ja/panel_online_status.xml
deleted file mode 100644
index fdc489f375ec6eabd344b633f4fb6eb00c3ccef3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
index a9897c7ae4cfe6ad5c85a002b6f8db3588245ba4..5506373eb08a01300d271345c08be6ab3ffb6b9f 100644
--- a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
@@ -7,9 +7,9 @@
 		0.2
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="ローディング"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml b/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml
deleted file mode 100644
index 188a60eb603971b1c8538a0baad27aae4fab2ddf..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="リージョン(地域)" name="General">
-	<text name="region_text_lbl">
-		地域:
-	</text>
-	<text left_delta="70" name="region_text">
-		不明
-	</text>
-	<text name="version_channel_text_lbl">
-		バージョン:
-	</text>
-	<text left_delta="70" name="version_channel_text">
-		不明
-	</text>
-	<text name="region_type_lbl">
-		種類:
-	</text>
-	<text left_delta="70" name="region_type">
-		不明
-	</text>
-	<check_box label="地形編集をブロック" name="block_terraform_check"/>
-	<check_box label="飛行をブロック" name="block_fly_check"/>
-	<check_box label="ダメージを許可" name="allow_damage_check"/>
-	<check_box label="プッシュを制限" name="restrict_pushobject"/>
-	<check_box label="土地の再販を許可" name="allow_land_resell_check"/>
-	<check_box label="土地の統合・分割を許可" name="allow_parcel_changes_check"/>
-	<check_box label="土地の検索表示をブロック" name="block_parcel_search_check" tool_tip="検索結果で、この地域と区画を表示するかどうかの設定です"/>
-	<spinner label="アバター数上限" label_width="110" name="agent_limit_spin" width="190"/>
-	<spinner label="物体ボーナス" label_width="110" name="object_bonus_spin" width="190"/>
-	<text label="レーティング区分" name="access_text">
-		レーティング区分:
-	</text>
-	<combo_box label="Moderate" name="access_combo">
-		<combo_box.item label="Adult" name="Adult"/>
-		<combo_box.item label="Moderate" name="Mature"/>
-		<combo_box.item label="General" name="PG"/>
-	</combo_box>
-	<button label="適用" name="apply_btn"/>
-	<button label="住人 1 名をホームにテレポート..." name="kick_btn"/>
-	<button label="住人全員をホームにテレポート..." name="kick_all_btn"/>
-	<button label="メッセージを地域に送信..." name="im_btn"/>
-	<button label="テレハブの管理..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/nl/floater_customize.xml b/indra/newview/skins/default/xui/nl/floater_customize.xml
deleted file mode 100644
index e6a4ed7a2749b2455864e92ed63d5831d912ebc8..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/nl/floater_customize.xml
+++ /dev/null
@@ -1,469 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="UITERLIJK">
-	<tab_container name="customize tab container" tab_min_width="120">
-		<placeholder label="Lichaamsdelen" name="body_parts_placeholder"/>
-		<panel label="Postuur" name="Shape" left="124" width="389">
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-			<button label="Lichaam" label_selected="Lichaam" name="Body"/>
-			<button label="Hoofd" label_selected="Hoofd" name="Head"/>
-			<button label="Ogen" label_selected="Ogen" name="Eyes"/>
-			<button label="Oren" label_selected="Oren" name="Ears"/>
-			<button label="Neus" label_selected="Neus" name="Nose"/>
-			<button label="Mond" label_selected="Mond" name="Mouth"/>
-			<button label="Kin" label_selected="Kin" name="Chin"/>
-			<button label="Torso" label_selected="Torso" name="Torso"/>
-			<button label="Benen" label_selected="Benen" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item name="radio" label="Vrouw" />
-				<radio_item name="radio2" label="Man" />
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe postuur door hem vanuit uw inventaris naar uw avatar
-te slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Postuur:
-			</text>
-			<button label="Nieuw postuur maken" label_selected="Nieuw postuur maken" name="Create New"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-		</panel>
-		<panel label="Huid" name="Skin">
-			<button width="104" label="Huidskleur" label_selected="Huidskleur" name="Skin Color"/>
-			<button width="104" label="Gezichtsdetail" label_selected="Gezichtsdetail" name="Face Detail"/>
-			<button width="104" label="Make-up" label_selected="Make-up" name="Makeup"/>
-			<button width="104" label="Lichaam detail" label_selected="Lichaam detail" name="Body Detail"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe huid door haar vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Huid:
-			</text>
-			<texture_picker width="104" label="Hoofd tatoeages" name="Head Tattoos" tool_tip="Klik om een afbeelding te kiezen"/>
-			<texture_picker width="104" label="Bovenste tatoeage" name="Upper Tattoos" tool_tip="Klik om een afbeelding te kiezen"/>
-			<texture_picker width="104" label="Onderste tatoeages" name="Lower Tattoos" tool_tip="Klik om een afbeelding te kiezen"/>
-			<button label="Nieuwe huid maken" label_selected="Nieuwe huid maken" name="Create New"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Haar" name="Hair">
-			<button label="Kleur" label_selected="Kleur" name="Color"/>
-			<button label="Stijl" label_selected="Stijl" name="Style"/>
-			<button label="Wenkbrauwen" label_selected="Wenkbrauwen" name="Eyebrows"/>
-			<button label="Aangezicht" label_selected="Aangezicht" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuw haar door het vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan nieuw creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Haar:
-			</text>
-			<texture_picker label="Textuur" name="Texture" tool_tip="Klik om een afbeelding te kiezen"/>
-			<button label="Nieuw haar maken" label_selected="Nieuw haar maken" name="Create New"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Ogen" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuwe ogen door ze vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Ogen:
-			</text>
-			<texture_picker label="Iris" name="Iris" tool_tip="Klik om een afbeelding te kiezen"/>
-			<button label="Nieuwe ogen maken" label_selected="Nieuwe ogen maken" name="Create New"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Kleding" name="clothes_placeholder"/>
-		<panel label="Hemd" name="Shirt">
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuw hemd maken" label_selected="Nieuw hemd maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuw hemd door hem vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Hemd:
-			</text>
-		</panel>
-		<panel label="Broek" name="Pants">
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe broek maken" label_selected="Nieuwe broek maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe broek door hem vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Broek:
-			</text>
-		</panel>
-		<panel label="Schoenen" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuwe schoenen door ze vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Schoenen:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe schoenen maken" label_selected="Nieuwe schoenen maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Sokken" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuwe sokken door ze vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Sokken:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe sokken maken" label_selected="Nieuwe sokken maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Jas" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe jas door hem vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Jas:
-			</text>
-			<texture_picker width="78" label="Bovenste stof" name="Upper Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<texture_picker width="78" label="Onderste stof" name="Lower Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch width="78" label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe jas maken" label_selected="Nieuwe jas maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Handschoenen" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag nieuwe handschoenen door ze vanuit uw inventaris naar uw avatar
-te slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Handschoenen:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe handschoenen maken" label_selected="Nieuwe handschoenen maken" name="Create New" width="190"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Onderhemd" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuw onderhemd door hem vanuit uw inventaris naar uw avatar
-te slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Onderhemd:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuw onderhemd maken" label_selected="Nieuw onderhemd maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Onderbroek" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe onderbroek door hem vanuit uw inventaris naar uw
-avatar te slepen. Ook kunt u zelf van begin af aan een nieuwe creëren
-en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Onderbroek:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe onderbroek maken" label_selected="Nieuwe onderbroek maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-		<panel label="Rok" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Kan niet wijzigen
-			</text>
-			<text name="title_loading">
-				[DESC]: laden...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niet gedragen
-			</text>
-			<text name="path">
-				Gelegen in [PATH]
-			</text>
-			<text name="not worn instructions">
-				Draag een nieuwe rok door hem vanuit uw inventaris naar uw avatar te
-slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen.
-			</text>
-			<text name="no modify instructions">
-				U heeft geen permissie om dit draagbare item te wijzigen.
-			</text>
-			<text name="Item Action Label">
-				Rok:
-			</text>
-			<texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/>
-			<color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/>
-			<button label="Nieuwe rok maken" label_selected="Nieuwe rok maken" name="Create New"/>
-			<button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/>
-			<button label="Opslaan" label_selected="Opslaan" name="Save"/>
-			<button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/>
-			<button label="Herstel" label_selected="Herstel" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container name="panel_container"/>
-	<button label="Annuleren" label_selected="Annuleren" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-	<button label="Maak kleding..." label_selected="Maak kleding..." name="Make Outfit" left="110"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_im.xml b/indra/newview/skins/default/xui/nl/floater_im.xml
deleted file mode 100644
index 3167af532108a2e4c204a51011d96df525b0efb3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/nl/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Instant Message">
-	<string name="only_user_message">
-		U bent de enige gebruiker in deze sessie.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] is offline.
-	</string>
-	<string name="invite_message">
-		Klik de [BUTTON NAME] knop om deze voicechat te accepteren/verbinden.
-	</string>
-	<string name="muted_message">
-		U heeft deze inwoner genegeerd. Door het sturen van een bericht zal deze automatisch van de negeerlijst verwijderd worden.
-	</string>
-	<string name="generic_request_error">
-		Fout tijdens het maken van het verzoek, probeer het later nog een keer.
-	</string>
-	<string name="insufficient_perms_error">
-		U heeft niet voldoende permissies.
-	</string>
-	<string name="session_does_not_exist_error">
-		De sessie bestaat niet meer
-	</string>
-	<string name="no_ability_error">
-		U beschikt niet over die mogelijkheid.
-	</string>
-	<string name="not_a_mod_error">
-		U bent geen sessie moderateur
-	</string>
-	<string name="muted_error">
-		Een groepsmoderator heeft uw textchat uitgeschakeld.
-	</string>
-	<string name="add_session_event">
-		Kan geen gebruikers toevoegen aan chatsessie met [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Kan uw bericht niet versturen naar de chatsessie met [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		U bent verwijderd uit de groep.
-	</string>
-	<string name="close_on_no_ability">
-		U heeft niet langer de mogelijkheid om in deze chatsessie te zijn.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_my_friends.xml b/indra/newview/skins/default/xui/nl/floater_my_friends.xml
deleted file mode 100644
index 8d709d3c0046392d747ed1ad183b9ced693c5cb2..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/nl/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTACTEN">
-	<tab_container name="friends_and_groups">
-		<panel label="Vrienden" name="friends_panel"/>
-		<panel label="Groepen" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_statistics.xml b/indra/newview/skins/default/xui/nl/floater_statistics.xml
deleted file mode 100644
index 7684a73663b63eee7fa0670d5ec7d63608d64bfc..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/nl/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATISTIEKEN"/>
diff --git a/indra/newview/skins/default/xui/nl/panel_audio_device.xml b/indra/newview/skins/default/xui/nl/panel_audio_device.xml
deleted file mode 100644
index fd5dda799f479b27de5dca2a8982da2119c644ad..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/nl/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Audioapparaten
-	</text>
-	<text name="Input device (microphone):">
-		Invoerapparaat (microfoon):
-	</text>
-	<text name="Output device (speakers):">
-		Uitvoerapparaat (luidsprekers)
-	</text>
-	<text name="Input level:">
-		Invoerniveau
-	</text>
-	<text_editor name="voice_intro_text1">
-		Wijzig de schuifbalk om in te stellen hoe luid u klinkt voor andere inwoners. Spreek gewoon in uw microfoon om het invoerniveau te testen.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Wijzig het volume met deze schuifknop"/>
-	<text name="wait_text">
-		Wacht u alstublieft
-	</text>
-	<string name="default_text">
-		Standaard
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/nl/panel_friends.xml b/indra/newview/skins/default/xui/nl/panel_friends.xml
deleted file mode 100644
index eaf6e5d55b3ec3dc5d879e47de52abd60b784901..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/nl/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Meerdere vrienden...
-	</string>
-	<scroll_list name="friend_list" tool_tip="Houd shift of control ingedrukt terwijl u meerdere vrienden klikt">
-		<column name="icon_online_status" tool_tip="Online status"/>
-		<column label="Naam" name="friend_name" tool_tip="Naam"/>
-		<column name="icon_visible_online" tool_tip="Vriend kan zien wanneer u online bent"/>
-		<column name="icon_visible_map" tool_tip="Vriend kan u op de kaart lokaliseren"/>
-		<column name="icon_edit_mine" tool_tip="Vriend kan objecten wijzigen, verwijderen of oppakken"/>
-		<column name="icon_edit_theirs" tool_tip="U kunt de objecten van deze vriend bewerken"/>
-	</scroll_list>
-	<button label="IM/Oproepen" name="im_btn" tool_tip="Open Instant Message sessie" width="86"/>
-	<button label="Profiel" name="profile_btn" tool_tip="Toon afbeelding, groepen en andere informatie" width="86"/>
-	<button label="Teleport..." name="offer_teleport_btn" tool_tip="Bied deze vriend een teleport naar uw huidige locatie aan" width="86"/>
-	<button label="Betaal..." name="pay_btn" tool_tip="Geef Linden dollars (L$) aan deze vriend" width="86"/>
-	<button label="Verwijderen..." name="remove_btn" tool_tip="Verwijder deze persoon van uw vriendenlijst" width="86"/>
-	<button label="Toevoegen..." name="add_btn" tool_tip="Bied vriendschap aan een inwoner aan" width="86"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/nl/panel_groups.xml b/indra/newview/skins/default/xui/nl/panel_groups.xml
deleted file mode 100644
index a0c77b83ffbfa42fbabbf0c76bfb7a221650e234..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/nl/panel_groups.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<text name="groupdesc">
-		Uw huidige actieve groep wordt vet getoond.
-	</text>
-	<text name="groupcount" width="300">
-		U behoort tot [COUNT] groepen (maximaal [MAX]).
-	</text>
-	<button label="IM/Oproepen" name="IM" tool_tip="Open Instant Message sessie" width="86"/>
-	<button label="Info" name="Info" width="86"/>
-	<button label="Activeren" name="Activate" width="86"/>
-	<button label="Verlaten" name="Leave" width="86"/>
-	<button label="Maak…" name="Create" width="86"/>
-	<button label="Zoeken…" name="Search..." width="86"/>
-</panel>
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/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml
deleted file mode 100644
index 373e74ffe0d48a80e162d0e8c34820433dc488b0..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_customize.xml
+++ /dev/null
@@ -1,529 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="WYGLÄ„D">
-	<tab_container name="customize tab container">
-		<text label="Części ciała" name="body_parts_placeholder">
-			Części ciała
-		</text>
-		<panel label="Kształt" name="Shape">
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-			<button label="Ciało" label_selected="Ciało" name="Body"/>
-			<button label="GÅ‚owa" label_selected="GÅ‚owa" name="Head"/>
-			<button label="Oczy" label_selected="Oczy" name="Eyes"/>
-			<button label="Uszy" label_selected="Uszy" name="Ears"/>
-			<button label="Nos" label_selected="Nos" name="Nose"/>
-			<button label="Usta" label_selected="Usta" name="Mouth"/>
-			<button label="Broda " label_selected="Broda" name="Chin"/>
-			<button label="Tułów" label_selected="Tułów" name="Torso"/>
-			<button label="Nogi" label_selected="Nogi" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Kobieta" name="radio" value="0"/>
-				<radio_item label="Mężczyzna" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: zabroniona modyfikacja
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowy kształt poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny kształt z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tego kształtu.
-			</text>
-			<text name="Item Action Label">
-				Kształt:
-			</text>
-			<button label="Nowy kształt" label_selected="Nowy kształt" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-		</panel>
-		<panel label="Skórka" name="Skin">
-			<button label="Kolor skórki" label_selected="Kolor skórki" name="Skin Color"/>
-			<button label="Detale twarzy" label_selected="Detale twarzy" name="Face Detail"/>
-			<button label="Makijaż" label_selected="Makijaż" name="Makeup"/>
-			<button label="Detale ciała" label_selected="Detale ciała" name="Body Detail"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową skórkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną skórkę z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej skórki.
-			</text>
-			<text name="Item Action Label">
-				Skórka:
-			</text>
-			<texture_picker label="Tatuaże głowy" name="Head Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
-			<texture_picker label="Tatuaże górne" name="Upper Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
-			<texture_picker label="Tatuaże dolne" name="Lower Tattoos" tool_tip="Kliknij by wybrać teksturę"/>
-			<button label="Nowa skórka" label_selected="Nowa skórka" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="WÅ‚osy" name="Hair">
-			<button label="Kolor" label_selected="Kolor" name="Color"/>
-			<button label="Styl" label_selected="Styl" name="Style"/>
-			<button label="Brwi" label_selected="Brwi" name="Eyebrows"/>
-			<button label="Twarzy" label_selected="Twarzy" name="Facial"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe włosy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne włosy z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych włosów.
-			</text>
-			<text name="Item Action Label">
-				WÅ‚osy:
-			</text>
-			<texture_picker label="Tekstura" name="Texture" tool_tip="Kliknij by wybrać teksturę"/>
-			<button label="Nowe włosy" label_selected="Nowe włosy" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Oczy" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe oczy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne oczy z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych oczów.
-			</text>
-			<text name="Item Action Label">
-				Oczy:
-			</text>
-			<texture_picker label="Tęczówka" name="Iris" tool_tip="Kliknij by wybrać teksturę"/>
-			<button label="Nowe oczy" label_selected="Nowe oczy" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<text label="Ubrania" name="clothes_placeholder">
-			Ubrania
-		</text>
-		<panel label="Koszula" name="Shirt">
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Nowa koszula" label_selected="Nowa Koszula" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikowanie zabronione
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową koszulę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną koszulę z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej koszuli.
-			</text>
-			<text name="Item Action Label">
-				Koszula:
-			</text>
-		</panel>
-		<panel label="Spodnie" name="Pants">
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij tutaj by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Nowe spodnie" label_selected="Nowe spodnie" name="Create New"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikcja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe spodnie poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne spodnie z plików roboczych.
-			</text>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych spodni.
-			</text>
-			<text name="Item Action Label">
-				Spodnie:
-			</text>
-		</panel>
-		<panel label="Buty" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adwanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe buty poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne buty z plików roboczych.
-			</text>
-			<button label="Nowe Buty" label_selected="Nowe Buty" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych butów.
-			</text>
-			<text name="Item Action Label">
-				Buty:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Skarpety" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe skarpety poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne skarpety z plików roboczych.
-			</text>
-			<button label="Nowe Skarpety" label_selected="Nowe Skarpety" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych skarpet.
-			</text>
-			<text name="Item Action Label">
-				Skarpetki:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Kurtka" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową kurtkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną kurtkę z plików roboczych.
-			</text>
-			<button label="Nowa Kurtka" label_selected="Nowa Kurtka" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej kurtki.
-			</text>
-			<text name="Item Action Label">
-				Kurtka:
-			</text>
-			<texture_picker label="Górny materiał" name="Upper Fabric" tool_tip="Kliknij by wybrać teksturę" width="76"/>
-			<texture_picker label="Dolny materiał" name="Lower Fabric" tool_tip="Kliknij by wybrać kolor" width="76"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor" width="76"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Rękawiczki" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowe rękawiczki poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne rękawiczki z plików roboczych.
-			</text>
-			<button label="Nowe Rękawiczki" label_selected="Nowe Rękawiczki" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tych rękawiczek
-			</text>
-			<text name="Item Action Label">
-				Rękawiczki:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Podkoszulek" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowy podkoszulek poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny podkoszulek z plików roboczych.
-			</text>
-			<button label="Nowy Podkoszulek" label_selected="Nowy Podkoszulek" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tego podkoszulka.
-			</text>
-			<text name="Item Action Label">
-				Podkoszulka:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Bielizna" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową bieliznę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną bieliznę z plików roboczych.
-			</text>
-			<button label="Nowa Bielizna" label_selected="Nowa Bielizna" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej bielizny.
-			</text>
-			<text name="Item Action Label">
-				Bielizna:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Spódnica" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: modyfikacja zabroniona
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: niezałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową spódnicę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną spódnicę z plików roboczych.
-			</text>
-			<button label="Nowa Spódnica" label_selected="Nowa Spódnica" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz prawa do modyfikowania tej spódnicy.
-			</text>
-			<text name="Item Action Label">
-				Spódnica:
-			</text>
-			<texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/>
-			<color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Tatuaż" name="Tattoo">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: nie można modyfikować
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nienałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nowy tatuaż poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny tatuaż z plików roboczych.
-			</text>
-			<button label="Utwórz Nowy Tatuaż" label_selected="Stwórz Nowy Tatuaż" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała.
-			</text>
-			<text name="Item Action Label">
-				Tatuaż:
-			</text>
-			<texture_picker label="Tatuaż głowy" name="Head Tattoo" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Górny tatuaż" name="Upper Tattoo" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Tatuaż dolnej części ciała" name="Lower Tattoo" tool_tip="Kliknij aby wybrać teksturę"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: nie można modyfikować
-			</text>
-			<text name="title_loading">
-				[DESC]: Å‚adowanie...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: nienałożone
-			</text>
-			<text name="path">
-				Zapisane w [PATH]
-			</text>
-			<text name="not worn instructions">
-				Załóż nową maskę alpha poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną z plików roboczych.
-			</text>
-			<button label="Stwórz nową Alpha" label_selected="Utwórz nową Alpha" name="Create New"/>
-			<text name="no modify instructions">
-				Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Dolna Alpha" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Alpha górnej części ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Alpha głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Alpha oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<texture_picker label="Alpha włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/>
-			<button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/>
-			<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-			<button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/>
-			<button label="Wróć" label_selected="Wróć" name="Revert"/>
-		</panel>
-	</tab_container>
-	<button label="Info o skrypcie" label_selected="Info o skrypcie" name="script_info" tool_tip="Pokaż skrypty przyłączone do Twojego awatara"/>
-	<button label="Stwórz ubranie" label_selected="Stwórz Ubranie" name="make_outfit_btn"/>
-	<button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_device_settings.xml b/indra/newview/skins/default/xui/pl/floater_device_settings.xml
deleted file mode 100644
index c485fb2e293ed9c445f81e41ab74f396bbf420d6..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="USTAWIENIA URZĄDZEŃ KOMUNIKACJI GŁOSOWEJ"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_im.xml b/indra/newview/skins/default/xui/pl/floater_im.xml
deleted file mode 100644
index e40935ccb7bee20ba8c5c61e2bf957abeb5cad37..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Wiadomość (IM)">
-	<string name="only_user_message">
-		JesteÅ› jedynym uczestnikiem tej konferencji.
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] - ta osoba jest obecnie niedostępna.
-	</string>
-	<string name="invite_message">
-		Kliknij na [BUTTON NAME] przycisk by zaakceptować/dołączyć do tej rozmowy.
-	</string>
-	<string name="muted_message">
-		Zablokowałeś tego Rezydenta. Wysłanie wiadomości automatycznie odblokuje go.
-	</string>
-	<string name="generic_request_error">
-		Błąd. Spróbuj ponownie za kilka minut.
-	</string>
-	<string name="insufficient_perms_error">
-		Nie posiadasz praw do kontynuacji.
-	</string>
-	<string name="session_does_not_exist_error">
-		Ta konferencja jest już zakończona.
-	</string>
-	<string name="no_ability_error">
-		Nie posiadesz tego przywileju.
-	</string>
-	<string name="not_a_mod_error">
-		Nie jesteÅ› moderatorem konferencji.
-	</string>
-	<string name="muted_error">
-		Moderator wyciszył Cię.
-	</string>
-	<string name="add_session_event">
-		Niemożliwość dodania Rezydentów do tej konferencji z [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Nie można wysłać Twojej wiadomości do sesji czatu z [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Usunięto Cię z grupy.
-	</string>
-	<string name="close_on_no_ability">
-		Nie posiadasz praw by uczestniczyć w tej konferencji.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_im_session.xml b/indra/newview/skins/default/xui/pl/floater_im_session.xml
index db513f787cbb3ad108697ec9614e1217c290a6b2..9041ff7416c74d0d345f7f09a8aea3d7a2a0cb3c 100644
--- a/indra/newview/skins/default/xui/pl/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/pl/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Panel kontroli wiadomości prywatnej (IM)" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="Do" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/pl/floater_my_friends.xml b/indra/newview/skins/default/xui/pl/floater_my_friends.xml
deleted file mode 100644
index 847c93f8919beb2f0de0b638789a1e7c50e09f6b..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="KONTAKTY">
-	<tab_container name="friends_and_groups">
-		<panel label="Znajomi" name="friends_panel"/>
-		<panel label="Grupy" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml
deleted file mode 100644
index a8d2e10c5fbe9c42bd2e04316aabc8663edec62f..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Stwórz ubranie">
-	<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-	<button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
-	<text name="Save item as:">
-		Zapisz to co mam w tej chwili założone
-jako nowy komplet ubrania:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (nowy)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
deleted file mode 100644
index d3d6588397f7702f3d47cdb1afb4612bf17c7b5e..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFO O REKLAMIE">
-	<floater.string name="Title">
-		Reklama: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_event.xml b/indra/newview/skins/default/xui/pl/floater_preview_event.xml
deleted file mode 100644
index 5d9e47bc00500d851fca62b7e8b42cad8fc96b80..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="INFO O IMPREZIE">
-	<floater.string name="Title">
-		Impreza: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
deleted file mode 100644
index a041472f68f70d7dee899b0efc74e13863bc4795..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTURKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 9692fca9cd78e5ad7a166bb78e6ec6fc833b0cee..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTURKI">
-	<text name="trigger_label">
-		Czat:
-	</text>
-	<text name="key_label">
-		Klawiatura:
-	</text>
-	<combo_box label="Żaden" name="modifier_combo"/>
-	<combo_box label="Żaden" name="key_combo"/>
-	<text name="replace_text" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana &apos;witam&apos; na &apos;cześć&apos; zmieni czat &apos;Chciałem powiedzieć witam&apos; na &apos;Chciałem powiedzieć cześć&apos; i pokaże animację!">
-		Zamień na:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana &apos;witam&apos; na &apos;cześć&apos; zmieni czat &apos;Chciałem powiedzieć witam&apos; na &apos;Chciałem powiedzieć cześć&apos; i pokaże animację"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
deleted file mode 100644
index a041472f68f70d7dee899b0efc74e13863bc4795..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="GESTURKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_statistics.xml b/indra/newview/skins/default/xui/pl/floater_statistics.xml
deleted file mode 100644
index b7025e484d50a385427d8c9fdbe7b641d8ca549c..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="STATYSTYKI"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
index c222e4edbbc078eebb95f3632b5f9cf82dad8838..80200cfb216c4ee5630a9736c0f76b0578629427 100644
--- a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mój awatar:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Zakończ rozmowę" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+			<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="Zakończ rozmowę" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml
deleted file mode 100644
index 925295102e405522690007628ceb4c1c67c4e606..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="">
-	<button label="Zapisz" label_selected="Zapisz" name="Save"/>
-	<button label="Anuluj" label_selected="Anuluj" name="Cancel"/>
-	<text name="Save item as:">
-		Zapisz obiekt w mojej Szafie jako:
-	</text>
-	<line_editor name="name ed">
-		Nowe [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/panel_audio_device.xml b/indra/newview/skins/default/xui/pl/panel_audio_device.xml
deleted file mode 100644
index 9074296bd53bc268d690771956b28a727c82f160..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/panel_audio_device.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		UrzÄ…dzenia audio
-	</text>
-	<text name="Input device (microphone):">
-		Urządzenia wejściowe (mikrofon):
-	</text>
-	<text name="Output device (speakers):">
-		Urządzenia wyjściowe (głośniki):
-	</text>
-	<text name="Input level:">
-		Poziom wejścia
-	</text>
-	<text_editor name="voice_intro_text1">
-		Za pomocą suwaka ustaw poziom głośności Twojego mówienia dla innych Rezydentów. W celu przetestowania poziomu wejścia, zacznij mówić do mikrofonu.
-	</text_editor>
-	<volume_slider name="mic_volume_slider"
-	     tool_tip="By zmienić poziom głośności użyj suwaka" />
-	<text name="wait_text">
-		Proszę poczekać
-	</text>
-	<string name="default_text">
-		Domyślne
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_friends.xml b/indra/newview/skins/default/xui/pl/panel_friends.xml
deleted file mode 100644
index 9d8dc69a3511bb0cde91014dc67682d1b468ff0d..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Znajomi
-	</string>
-	<scroll_list name="friend_list" tool_tip="Aby wybrać wielu znajomych za jednym razem przetrzymaj klawisz Shift lub Control">
-		<column name="icon_online_status" tool_tip="Status dostępności"/>
-		<column label="ImiÄ™" name="friend_name" tool_tip="ImiÄ™"/>
-		<column name="icon_visible_online" tool_tip="Ta osoba może widzieć czy jesteś w Second Life"/>
-		<column name="icon_visible_map" tool_tip="Ta osoba może zlokalizować Ciebie na mapie"/>
-		<column name="icon_edit_mine" tool_tip="Ta osoba może edytować, usunąć lub wziąć Twoje obiekty"/>
-		<column name="icon_edit_theirs" tool_tip="Możesz edytować obiekty tej osoby"/>
-	</scroll_list>
-	<button label="Czat/IM" name="im_btn" tool_tip="Rozpocznij sesjÄ™ czatu/IM"/>
-	<button label="Profil" name="profile_btn" tool_tip="Pokaż zdjęcia, grupy i inne informacje"/>
-	<button label="Teleportuj" name="offer_teleport_btn" tool_tip="Zaoferuj teleportacjÄ™ do siebie"/>
-	<button label="Zapłać" name="pay_btn" tool_tip="Zapłać L$ tej osobie"/>
-	<button label="Usuń" name="remove_btn" tool_tip="Usuń tę osobę z listy znajomych"/>
-	<button label="Dodaj" name="add_btn" tool_tip="Zaoferuj znajomość"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_groups.xml b/indra/newview/skins/default/xui/pl/panel_groups.xml
deleted file mode 100644
index 671d8fd2f020af970c230c096856876690d08f7a..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/panel_groups.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel name="groups">
-	<scroll_list name="group list">
-		<column label="" name="name" />
-	</scroll_list>
-	<text name="groupdesc">
-		Twoja aktywna grupa jest pogrubiona.
-	</text>
-	<text name="groupcount">
-		Należysz do [COUNT] grup (maksimum to [MAX]).
-	</text>
-	<button label="Czat/IM" name="IM" tool_tip="Rozpocznij sesjÄ™ czatu (IM)" />
-	<button label="O grupie" name="Info" />
-	<button label="Wybierz" name="Activate" />
-	<button label="Opuść" name="Leave" />
-	<button label="Stwórz..." name="Create" />
-	<button label="Szukaj..." name="Search..." />
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml
deleted file mode 100644
index bcecaeabb3812f815c33d4bcd7da304f4207e508..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			CZAT LOKALNY
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_notes.xml b/indra/newview/skins/default/xui/pl/panel_notes.xml
index 35cb7e1bce5f23fbd72ca178fa25bf99b4b33824..ec6008065f2d50ee43cc3d309d0db161f5ea373b 100644
--- a/indra/newview/skins/default/xui/pl/panel_notes.xml
+++ b/indra/newview/skins/default/xui/pl/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Notatki &amp; Prywatność" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Notatki:"/>
@@ -11,13 +11,13 @@
 					<check_box label="Edytowanie, kasowanie lub zabieranie moich obiektów" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
 			<button label="Dodaj do znajomych" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/>
 			<button label="IM" name="im" tool_tip="Otwórz wiadomości IM"/>
 			<button label="Dzwoń" name="call" tool_tip="Zadzwoń do Rezydenta"/>
 			<button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/>
 			<button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_online_status.xml b/indra/newview/skins/default/xui/pl/panel_online_status.xml
deleted file mode 100644
index fdc489f375ec6eabd344b633f4fb6eb00c3ccef3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
index a1a9be92426fae8cf91d7d2afce49bc5662327c4..b5763e1291a0e7d73bf471865cc227d257c139f8 100644
--- a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Wczytywanie mediów"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
deleted file mode 100644
index 84d7d7ab6290b0f7f30c0ee49fb2e51f22a6efa3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Region" name="General">
-	<text name="region_text_lbl">
-		Region:
-	</text>
-	<text name="region_text">
-		nieznany
-	</text>
-	<text name="version_channel_text_lbl">
-		Wersja:
-	</text>
-	<text name="version_channel_text">
-		nieznany
-	</text>
-	<text name="region_type_lbl">
-		Typ:
-	</text>
-	<text name="region_type">
-		nieznany
-	</text>
-	<check_box label="Zablokuj zmiany terenu" name="block_terraform_check"/>
-	<check_box label="Zablokuj latanie" name="block_fly_check"/>
-	<check_box label="Uszkodzenia dozwolone" name="allow_damage_check"/>
-	<check_box label="Zablokuj popychanie" name="restrict_pushobject"/>
-	<check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/>
-	<check_box label="Łączenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/>
-	<check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy Regionu i Posiadłości w wynikach wyszukiwania"/>
-	<spinner label="Limit gości" name="agent_limit_spin"/>
-	<spinner label="Ekstra obiekty" name="object_bonus_spin"/>
-	<text label="Restrykcje wieku" name="access_text">
-		Rodzaj:
-	</text>
-	<combo_box label="Moderuj" name="access_combo">
-		<combo_box.item label="Adult" name="Adult"/>
-		<combo_box.item label="Moderate" name="Mature"/>
-		<combo_box.item label="General" name="PG"/>
-	</combo_box>
-	<button label="Zastosuj" name="apply_btn"/>
-	<button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/>
-	<button label="Teleportuj do Miejsca Startu wszystkich Rezydentów..." name="kick_all_btn"/>
-	<button label="Wyślij wiadomość do Regionu..." name="im_btn"/>
-	<button label="Obsługa teleportera..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml
deleted file mode 100644
index a9ec0b9b1ff84d140e2d5dfb7d361dbc3c70f3be..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_customize.xml
+++ /dev/null
@@ -1,530 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater customize" title="APARÊNCIA">
-	<tab_container name="customize tab container" tab_min_width="115">
-		<text label="Corpo" name="body_parts_placeholder">
-			Partes do corpo
-		</text>
-		<panel label="Forma" name="Shape">
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-			<button label="Corpo" label_selected="Corpo" name="Body"/>
-			<button label="Cabeça" label_selected="Cabeça" name="Head"/>
-			<button label="Olhos" label_selected="Olhos" name="Eyes"/>
-			<button label="Orelhas" label_selected="Orelhas" name="Ears"/>
-			<button label="Nariz" label_selected="Nariz" name="Nose"/>
-			<button label="Boca" label_selected="Boca" name="Mouth"/>
-			<button label="Queixo" label_selected="Queixo" name="Chin"/>
-			<button label="Tórax" label_selected="Tórax" name="Torso"/>
-			<button label="Pernas" label_selected="Pernas" name="Legs"/>
-			<radio_group name="sex radio">
-				<radio_item label="Feminino" name="radio" value="0"/>
-				<radio_item label="Masculino" name="radio2" value="1"/>
-			</radio_group>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter um físico novo, arraste um do inventário para o seu avatar. Ou crie um novo.
-			</text>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Forma:
-			</text>
-			<button label="Nova" label_selected="Nova" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-		</panel>
-		<panel label="Pele" name="Skin">
-			<button label="Cor de pele" label_selected="Cor de pele" name="Skin Color" width="115"/>
-			<button label="Detalhes faciais" label_selected="Detalhes faciais" name="Face Detail" width="115"/>
-			<button label="Maquilagem" label_selected="Maquilagem" name="Makeup" width="115"/>
-			<button label="Detalhes do corpo" label_selected="Detalhes do corpo" name="Body Detail" width="115"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando..
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizada em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter uma pele nova, arraste uma do inventário para o seu avatar. Ou crie uma pele nova.
-			</text>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Pele:
-			</text>
-			<texture_picker label="Tattoo: cabeça" name="Head Tattoos" tool_tip="Clique para escolher um desenho" width="86"/>
-			<texture_picker label="Tattoo: superior" name="Upper Tattoos" tool_tip="Clique para escolher um desenho" width="86"/>
-			<texture_picker label="Tattoo: inferior" name="Lower Tattoos" tool_tip="Clique para escolher um desenho" width="86"/>
-			<button label="Novo" label_selected="Novo" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Cabelo" name="Hair">
-			<button label="Cor" label_selected="Cor" name="Color" width="115"/>
-			<button label="Estilo" label_selected="Estilo" name="Style" width="115"/>
-			<button label="Sombrancelhas" label_selected="Sombrancelhas" name="Eyebrows" width="115"/>
-			<button label="Rosto" label_selected="Rosto" name="Facial" width="115"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter um cabelo novo, arraste um tipo de cabelo do inventário para o seu avatar. Ou crie um cabelo novo.
-			</text>
-			<text name="no modify instructions">
-				Você não ter permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Cabelo:
-			</text>
-			<texture_picker label="Texture" name="Texture" tool_tip="Clique para escolher uma imagem"/>
-			<button label="Criar novo cabelo" label_selected="Criar novo cabelo" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Olhos" name="Eyes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos.
-			</text>
-			<text name="no modify instructions">
-				Você não tem permissão para alterar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Olhos:
-			</text>
-			<texture_picker label="Íris" name="Iris" tool_tip="Clique para escolher uma imagem"/>
-			<button label="Criar novos olhos" label_selected="Criar novos olhos" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<text label="Roupas" name="clothes_placeholder">
-			Roupa
-		</text>
-		<panel label="Camisa" name="Shirt">
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Criar nova camisa" label_selected="Criar nova camisa" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter uma camisa nova, arraste uma do inventário para o seu avatar. Ou crie uma camisa nova.
-			</text>
-			<text name="no modify instructions">
-				Você não ter permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Camisa:
-			</text>
-		</panel>
-		<panel label="Calças" name="Pants">
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Criar novas calças" label_selected="Criar novas calças" name="Create New"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestindo
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter calças novas, arraste uma do inventário para o seu avatar. Ou crie calças novas.
-			</text>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Calças:
-			</text>
-		</panel>
-		<panel label="Sapatos" name="Shoes">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos.
-			</text>
-			<button label="Criar novos sapatos" label_selected="Criar novos sapatos" name="Create New" width="166"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Sapatos:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Meias" name="Socks">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido.
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter meias novas, arraste um par do inventário para o seu avatar. Ou crie meias novas.
-			</text>
-			<button label="Criar novas meias" label_selected="Criar novas meias" name="Create New"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Meias:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Jaqueta" name="Jacket">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: Não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para por uma jaqueta nova, arraste uma do inventário para o seu avatar. Ou crie uma jaqueta nova.
-			</text>
-			<button label="Criar nova jaqueta" label_selected="Criar nova jaqueta" name="Create New"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Jaqueta:
-			</text>
-			<texture_picker label="Tecido superior" name="Upper Fabric" tool_tip="Clique para escolher uma imagem." width="84"/>
-			<texture_picker label="Tecido Inferior" name="Lower Fabric" tool_tip="Clique para escolher uma imagem." width="84"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Luvas" name="Gloves">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando....
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter luvas novas, arraste um par do inventário para o seu avatar. Ou crie luvas novas.
-			</text>
-			<button label="Criar novas luvas" label_selected="Criar novas luvas" name="Create New"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Luvas:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Camiseta" name="Undershirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter uma camiseta nova, arraste uma do inventário para o seu avatar. Ou crie uma camiseta nova.
-			</text>
-			<button label="Criar nova camiseta" label_selected="Criar nova camiseta" name="Create New"/>
-			<text name="no modify instructions">
-				Você não ter permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Camiseta:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Roupas de Baixo" name="Underpants">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter roupa de baixo nova, arraste um modelo do inventário para o seu avatar. Ou crie uma roupa de baixo nova.
-			</text>
-			<button label="Criar novas" label_selected="Criar novas" name="Create New" width="180"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar essa vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Roupas de baixo:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Saia" name="Skirt">
-			<text name="title">
-				[DESC]
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não foi possível modificar
-			</text>
-			<text name="title_loading">
-				[DESC]: carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localizado em [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para obter um saia nova, arraste uma saia do inventário para o seu avatar. Ou crie uma saia nova.
-			</text>
-			<button label="Criar nova saia" label_selected="Criar nova saia" name="Create New"/>
-			<text name="no modify instructions">
-				Você não tem permissão para modificar esta vestimenta.
-			</text>
-			<text name="Item Action Label">
-				Saia:
-			</text>
-			<texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/>
-			<color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/>
-			<button label="Remover" label_selected="Remover" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Tatuagem" name="Tattoo">
-			<text name="title">
-				[DESC]:
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não pode ser modificado
-			</text>
-			<text name="title_loading">
-				[DESC]: Carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localização: [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para por uma tatuagem nova, arraste uma tatuagem do inventário para o seu avatar. Ou crie uma tatuagem nova.
-			</text>
-			<button label="Criar tatuagem" label_selected="Criar tatuagem" name="Create New"/>
-			<text name="no modify instructions">
-				Você não está autorizado a modificar este acessório.
-			</text>
-			<text name="Item Action Label">
-				Tatuagem:
-			</text>
-			<texture_picker label="Tatuagem na cabeça" name="Head Tattoo" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Tatuagem parte de cima" name="Upper Tattoo" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Tatuagem de baixo" name="Lower Tattoo" tool_tip="Selecionar imagem"/>
-			<button label="Tirar" label_selected="Tirar" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-		<panel label="Alpha" name="Alpha">
-			<text name="title">
-				[DESC]:
-			</text>
-			<text name="title_no_modify">
-				[DESC]: não pode ser modificado
-			</text>
-			<text name="title_loading">
-				[DESC]: Carregando...
-			</text>
-			<text name="title_not_worn">
-				[DESC]: não vestido
-			</text>
-			<text name="path">
-				Localização: [PATH]
-			</text>
-			<text name="not worn instructions">
-				Para por uma máscara alpha nova, arraste a máscara do inventário para o seu avatar. Ou crie uma máscara nova.
-			</text>
-			<button label="Criar Alpha novo" label_selected="Criar Alpha novo" name="Create New"/>
-			<text name="no modify instructions">
-				Você não está autorizado a modificar este acessório.
-			</text>
-			<text name="Item Action Label">
-				Alpha:
-			</text>
-			<texture_picker label="Alpha inferior" name="Lower Alpha" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Alpha de cima" name="Upper Alpha" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Cabeça Alpha" name="Head Alpha" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Olhos Alpha" name="Eye Alpha" tool_tip="Selecionar imagem"/>
-			<texture_picker label="Cabelo alpha" name="Hair Alpha" tool_tip="Selecionar imagem"/>
-			<button label="Tirar" label_selected="Tirar" name="Take Off"/>
-			<button label="Salvar" label_selected="Salvar" name="Save"/>
-			<button label="Salvar como..." label_selected="Salvar como..." name="Save As"/>
-			<button label="Reverter" label_selected="Reverter" name="Revert"/>
-		</panel>
-	</tab_container>
-	<scroll_container left="249" name="panel_container"/>
-	<button label="Dados do script" label_selected="Dados do script" name="script_info" tool_tip="Mostrar scripts anexados ao seu avatar"/>
-	<button label="Criar look" label_selected="Criar look" name="make_outfit_btn"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<button label="OK" label_selected="OK" name="Ok"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_device_settings.xml b/indra/newview/skins/default/xui/pt/floater_device_settings.xml
deleted file mode 100644
index 48a4a6ef6f4539b3fee8e94cf4758f89593afb0d..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_device_settings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_device_settings" title="CONFIGURAÇÃO DE DISPOSITIVO DE VOZ"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_im.xml b/indra/newview/skins/default/xui/pt/floater_im.xml
deleted file mode 100644
index c81d0dd7ef37d079c0641a4044a9cc20a11d28a0..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_im.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="im_floater" title="Mensagem Instantânea">
-	<string name="only_user_message">
-		Você é o único residente nesta sessão
-	</string>
-	<string name="offline_message">
-		[FIRST] [LAST] está offline.
-	</string>
-	<string name="invite_message">
-		Clique no botão [BUTTON NAME] para aceitar/ conectar a este bate-papo em voz.
-	</string>
-	<string name="muted_message">
-		Você bloqueou este residente.  Se quiser retirar o bloqueio, basta enviar uma mensagem.
-	</string>
-	<string name="generic_request_error">
-		Erro na requisição, por favor, tente novamente.
-	</string>
-	<string name="insufficient_perms_error">
-		Você não tem permissões suficientes.
-	</string>
-	<string name="session_does_not_exist_error">
-		A sessão deixou de existir
-	</string>
-	<string name="no_ability_error">
-		Você não possui esta habilidade.
-	</string>
-	<string name="not_a_mod_error">
-		Você não é um moderador de sessão.
-	</string>
-	<string name="muted_error">
-		Um moderador do grupo desabilitou seu bate-papo em texto.
-	</string>
-	<string name="add_session_event">
-		Não foi possível adicionar residentes ao bate-papo com [RECIPIENT].
-	</string>
-	<string name="message_session_event">
-		Não foi possível enviar sua mensagem na sessão de bate- papo com [RECIPIENT].
-	</string>
-	<string name="removed_from_group">
-		Você foi removido do grupo.
-	</string>
-	<string name="close_on_no_ability">
-		Você não possui mais a habilidade de estar na sessão de bate-papo.
-	</string>
-</multi_floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_im_session.xml b/indra/newview/skins/default/xui/pt/floater_im_session.xml
index 39dde3408bd4c305b5de7cb39dd914cf712e4fa4..5543ffa41da8aa8b8a777f2839913f621595373c 100644
--- a/indra/newview/skins/default/xui/pt/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/pt/floater_im_session.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
 	<layout_stack name="im_panels">
-		<layout_panel label="Painel de controle de MI" name="panel_im_control_panel"/>
 		<layout_panel>
 			<line_editor label="Para" name="chat_editor"/>
 		</layout_panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_my_friends.xml b/indra/newview/skins/default/xui/pt/floater_my_friends.xml
deleted file mode 100644
index 68f2a19998df9a9f60e4c61e377701cd6ba73471..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_my_friends.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_my_friends" title="CONTATOS">
-	<tab_container name="friends_and_groups">
-		<panel label="Amigos" name="friends_panel"/>
-		<panel label="Grupos" name="groups_panel"/>
-	</tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml
deleted file mode 100644
index dec8a7676ad4d465bdb3b0bf1686350c017bfed8..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title="Salvar este look">
-	<button label="Salvar" label_selected="Salvar" name="Save"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<text name="Save item as:">
-		Veja o meu novo visual:
-	</text>
-	<line_editor name="name ed">
-		[DESC] (new)
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
deleted file mode 100644
index bb626430ed2ab59fddc05e0f9e8e33878238c2c3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="classified_preview" title="INFORMAÇÕES CLASSIFICADAS">
-	<floater.string name="Title">
-		Classificados: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_event.xml b/indra/newview/skins/default/xui/pt/floater_preview_event.xml
deleted file mode 100644
index b422580f3b83fe1160e30647990b69e69721c428..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_event.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="event_preview" title="DADOS DO EVENTO">
-	<floater.string name="Title">
-		Evento: [NAME]
-	</floater.string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml
deleted file mode 100644
index aabcff70d3b999d131ff73bebcff4643da65224c..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATALHO DE GESTO"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml
deleted file mode 100644
index 64bb7785f6fb05cb5dc8142270b9b595f283f0e4..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATALHO DE GESTO">
-	<text name="trigger_label">
-		Bate-papo:
-	</text>
-	<text name="key_label">
-		Tecla:
-	</text>
-	<combo_box label="Nenhum" name="modifier_combo"/>
-	<combo_box label="Nenhum" name="key_combo"/>
-	<text name="replace_text" tool_tip="Substituir a(s) palavra(s) de comando.   Por exemplo, substitua o comando &apos;olá&apos; por &apos;oi&apos; para trocar &apos;Olá, tudo bem&apos; por &apos;Oi tudo bem&apos;. O gesto também será executado.">
-		Trocar:
-	</text>
-	<line_editor name="replace_editor" tool_tip="Substituir a(s) palavra(s) de comando.   Por exemplo, substitua o comando &apos;olá&apos; por &apos;oi&apos; para trocar &apos;Olá, tudo bem&apos; por &apos;Oi tudo bem&apos;. O gesto também será executado."/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml
deleted file mode 100644
index aabcff70d3b999d131ff73bebcff4643da65224c..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Gesture" title="ATALHO DE GESTO"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_statistics.xml b/indra/newview/skins/default/xui/pt/floater_statistics.xml
deleted file mode 100644
index ecbf638157fb3f2216761ea0c41fc8f45c60359a..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_statistics.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="stats floater" title="ESTATÍSTICAS"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
index 44f08b76b5ecec93c94e561df8751a09bc4546bc..2337ee3074292e6b3a22ff5d917dd9fd7b7518a6 100644
--- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
@@ -19,10 +19,12 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Meu avatar:"/>
 		</layout_panel>
-		<layout_stack name="voice_effect_and_leave_call_stack">
-			<layout_panel name="leave_call_btn_panel">
-				<button label="Desligar" name="leave_call_btn"/>
-			</layout_panel>
-		</layout_stack>
+        <layout_panel name="leave_call_panel">
+			<layout_stack name="voice_effect_and_leave_call_stack">
+				<layout_panel name="leave_call_btn_panel">
+					<button label="Desligar" name="leave_call_btn"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
deleted file mode 100644
index 282bf0e268c7168fbb685664d81478e1061f4ded..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="modal container" title=" ">
-	<button label="Salvar" label_selected="Salvar" name="Save"/>
-	<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
-	<text name="Save item as:">
-		Salvar item no inventário como:
-	</text>
-	<line_editor name="name ed">
-		Novo [DESC]
-	</line_editor>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/panel_audio_device.xml b/indra/newview/skins/default/xui/pt/panel_audio_device.xml
deleted file mode 100644
index 967dc270707d7c48f7efef42c9186f601b17a479..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/panel_audio_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="device_settings">
-	<text name="Audio Devices">
-		Dispositivos de Áudio
-	</text>
-	<text name="Input device (microphone):">
-		Dispositivo de entrada (microfone):
-	</text>
-	<text name="Output device (speakers):">
-		Dispositivo de saída (falantes):
-	</text>
-	<text name="Input level:">
-		Nível de Entrada
-	</text>
-	<text_editor name="voice_intro_text1">
-		Ajuste a barra para controlar o volume de som para os outros residentes. Para testar o nível de entrada, basta falar em seu microfone.
-	</text_editor>
-	<volume_slider name="mic_volume_slider" tool_tip="Altere o volume usando este controle gradual"/>
-	<text name="wait_text">
-		Por Favor aguarde
-	</text>
-	<string name="default_text">
-		Padrão
-	</string>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_friends.xml b/indra/newview/skins/default/xui/pt/panel_friends.xml
deleted file mode 100644
index 34073f9ce1c9589227d213e5fb5463130b5cc352..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/panel_friends.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="friends">
-	<string name="Multiple">
-		Diversos amigos
-	</string>
-	<scroll_list name="friend_list" tool_tip="Aperte shift ou control enquanto clica para selecionar múltiplos amigos">
-		<column name="icon_online_status" tool_tip="Status Online"/>
-		<column label="Nome" name="friend_name" tool_tip="Nome"/>
-		<column name="icon_visible_online" tool_tip="Amigo pode ver quando você está online"/>
-		<column name="icon_visible_map" tool_tip="Amigo pode localizá-lo no mapa"/>
-		<column name="icon_edit_mine" tool_tip="Amigo pode editar, apagar ou pegar seus objetos"/>
-		<column name="icon_edit_theirs" tool_tip="Você pode editar os objetos deste amigo"/>
-	</scroll_list>
-	<button label="MI/Chamar" name="im_btn" tool_tip="Abrir sessão de Mensagem Instantânea" width="86"/>
-	<button label="Perfil" name="profile_btn" tool_tip="Mostrar foto, grupos e outras informações" width="86"/>
-	<button label="Teletransportar" name="offer_teleport_btn" tool_tip="Oferecer a este amigo o teletransporte para sua localização atual" width="86"/>
-	<button label="Pagar" name="pay_btn" tool_tip="Dar Linden dólares (L$) a este amigo" width="86"/>
-	<button label="Tirar" name="remove_btn" tool_tip="Remover esta pessoa de sua lista de amigos" width="86"/>
-	<button label="Adicionar" name="add_btn" tool_tip="Oferecer amizade para um residente" width="86"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_groups.xml b/indra/newview/skins/default/xui/pt/panel_groups.xml
deleted file mode 100644
index 0aea0d53dd90f4cf57cee63672b94686eacc68bd..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/panel_groups.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="groups">
-	<text name="groupdesc" width="268">
-		Seu grupo ativo atual está em negrito.
-	</text>
-	<text name="groupcount" width="300">
-		Você pertence a [COUNT] grupos (máximo [MAX]).
-	</text>
-	<button width="86" label="MI/Ligação" name="IM" tool_tip="Abrir sessão de Mensagem Instantânea"/>
-	<button width="86" label="Informações" name="Info"/>
-	<button width="86" label="Ativar" name="Activate"/>
-	<button width="86" label="Sair" name="Leave"/>
-	<button width="86" label="Criar..." name="Create"/>
-	<button width="86" label="Buscar..." name="Search..."/>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml
deleted file mode 100644
index bdbf29e70bc3e20db55e548df60a1440d5df5c4e..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<!-- All our XML is utf-8 encoded. -->
-<panel name="nearby_chat">
-	<panel name="chat_caption">
-		<text name="sender_name">
-			Bate-papo local
-		</text>
-	</panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_notes.xml b/indra/newview/skins/default/xui/pt/panel_notes.xml
index 9aa842d9a5c5624b3c1032c833ed63c9f666078a..6fb614a8c450b720e224baa997326e9f83da1542 100644
--- a/indra/newview/skins/default/xui/pt/panel_notes.xml
+++ b/indra/newview/skins/default/xui/pt/panel_notes.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Anotações e Privacidade" name="panel_notes">
 	<layout_stack name="layout">
-		<panel name="notes_stack">
+		<layout_panel name="notes_stack">
 			<scroll_container name="profile_scroll">
 				<panel name="profile_scroll_panel">
 					<text name="status_message" value="Minhas anotações privadas:"/>
@@ -11,13 +11,13 @@
 					<check_box label="Pegar, editar ou excluir objetos meus" name="objects_check"/>
 				</panel>
 			</scroll_container>
-		</panel>
-		<panel name="notes_buttons_panel">
+		</layout_panel>
+		<layout_panel name="notes_buttons_panel">
 			<button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade ao residente"/>
 			<button label="MI" name="im" tool_tip="Abrir sessão de mensagem instantânea"/>
 			<button label="Ligar" name="call" tool_tip="Ligar para este residente"/>
 			<button label="Mapa" name="show_on_map_btn" tool_tip="Exibir o residente no mapa"/>
 			<button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_online_status.xml b/indra/newview/skins/default/xui/pt/panel_online_status.xml
deleted file mode 100644
index fdc489f375ec6eabd344b633f4fb6eb00c3ccef3..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/panel_online_status.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="friend_online_status" name="friend_online_status"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
index a1254b4da073c9caa0de2112b29af103647bec07..9e07b6772f26c149a930691e70e7ee0d2902efcd 100644
--- a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
@@ -13,9 +13,9 @@
 		50
 	</string>
 	<layout_stack name="progress_indicator_area">
-		<panel name="media_progress_indicator">
+		<layout_panel name="media_progress_indicator">
 			<progress_bar name="media_progress_bar" tool_tip="Carregando mídia"/>
-		</panel>
+		</layout_panel>
 	</layout_stack>
 	<layout_stack name="media_controls">
 		<layout_panel name="back">
diff --git a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml
deleted file mode 100644
index 534b2826af0fad4c338f86e485a9fcb5558b2448..0000000000000000000000000000000000000000
--- a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Região" name="General">
-	<text name="region_text_lbl">
-		Região:
-	</text>
-	<text name="region_text">
-		(Desconhecido)
-	</text>
-	<text name="version_channel_text_lbl">
-		Versão:
-	</text>
-	<text name="version_channel_text">
-		(Desconhecido)
-	</text>
-	<text name="region_type_lbl">
-		Tipo:
-	</text>
-	<text name="region_type">
-		(Desconhecido)
-	</text>
-	<check_box label="Bloquear terraplanagens" name="block_terraform_check"/>
-	<check_box label="Bloquear voos" name="block_fly_check"/>
-	<check_box label="Permitir danos" name="allow_damage_check"/>
-	<check_box label="Limitar empurrões" name="restrict_pushobject"/>
-	<check_box label="Permitir revenda de terrenos" name="allow_land_resell_check"/>
-	<check_box label="Permitir união e divisão de terrenos" name="allow_parcel_changes_check"/>
-	<check_box label="Não mostrar nos resultados de pesquisa" name="block_parcel_search_check" tool_tip="Mostrar esta região e lotes nos resultados de pesquisa"/>
-	<spinner label="Limite do agente" name="agent_limit_spin"/>
-	<spinner label="Bônus do objeto" name="object_bonus_spin"/>
-	<text label="Nível de maturidade" name="access_text">
-		Classificação:
-	</text>
-	<combo_box label="Moderado" name="access_combo">
-		<combo_box.item label="Público adulto" name="Adult"/>
-		<combo_box.item label="Moderado" name="Mature"/>
-		<combo_box.item label="Geral" name="PG"/>
-	</combo_box>
-	<button label="Aplicar" name="apply_btn"/>
-	<button label="Teletransportar um residente para início..." name="kick_btn"/>
-	<button label="Teletransportar todos para início..." name="kick_all_btn"/>
-	<button label="Enviar mensagem para região..." name="im_btn"/>
-	<button label="Gerenciar telehub..." name="manage_telehub_btn"/>
-</panel>
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index 55823fc386f420c8f96545f92dca22a914df80b9..db50b896204988faff21ca5d606e97d086bcc715 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -62,6 +62,12 @@ LLSLURL LLStartUp::sStartSLURL;
 static std::string gLoginURI;
 static LLSD gLoginCreds;
 static bool gDisconnectCalled = false;
+
+#include "../llviewerwindow.h"
+void LLViewerWindow::setShowProgress(BOOL show) {}
+
+LLViewerWindow* gViewerWindow;
+
 class LLLogin::Impl
 {
 };
@@ -107,6 +113,8 @@ void LLGridManager::addGrid(LLSD& grid_data)
 {
 }
 LLGridManager::LLGridManager()
+:
+	mIsInProductionGrid(false)
 {	
 }
 
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 40ac019721ff1b3104d728f20ab4a8e5a8d8dc18..873fa23db8675b55c8e5cfca4c3311a9411fafee 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -954,6 +954,23 @@ mediaPanel*  LLMediaPluginTest::findMediaPanel( LLPluginClassMedia* source )
 	return result;
 }
 
+////////////////////////////////////////////////////////////////////////////////
+//
+mediaPanel* LLMediaPluginTest::findMediaPanel( const std::string &target_name )
+{
+	mediaPanel *result = NULL;
+
+	for( int panel = 0; panel < (int)mMediaPanels.size(); ++panel )
+	{
+		if ( mMediaPanels[ panel ]->mTarget == target_name )
+		{
+			result = mMediaPanels[ panel ];
+		}
+	}
+
+	return result;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 //
 void LLMediaPluginTest::navigateToNewURI( std::string uri )
@@ -1566,7 +1583,7 @@ std::string LLMediaPluginTest::pluginNameFromMimeType( std::string& mime_type )
 
 ////////////////////////////////////////////////////////////////////////////////
 //
-void LLMediaPluginTest::addMediaPanel( std::string url )
+mediaPanel* LLMediaPluginTest::addMediaPanel( std::string url )
 {
 	// Get the plugin filename using the URL
 	std::string mime_type = mimeTypeFromUrl( url );
@@ -1598,7 +1615,7 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
 	if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
 	{
 		std::cerr << "Couldn't get cwd - probably too long - failing to init." << std::endl;
-		return;
+		return NULL;
 	}
 	std::string user_data_path = std::string( cwd ) + "/";
 #endif
@@ -1668,6 +1685,8 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
 
 		std::cout << "Adding new media panel for " << url << "(" << media_width << "x" << media_height << ") with index " << panel->mId << " - total panels = " << mMediaPanels.size() << std::endl;
 	}
+	
+	return panel;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -1773,15 +1792,15 @@ void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )
 
 ////////////////////////////////////////////////////////////////////////////////
 //
-void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
+mediaPanel* LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
 {
 	// no media panels so we can't change anything - have to add
 	if ( mMediaPanels.size() == 0 )
-		return;
+		return NULL;
 
 	// sanity check
 	if ( ! panel )
-		return;
+		return NULL;
 
 	int index;
 	for(index = 0; index < (int)mMediaPanels.size(); index++)
@@ -1793,7 +1812,7 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
 	if(index >= (int)mMediaPanels.size())
 	{
 		// panel isn't in mMediaPanels
-		return;
+		return NULL;
 	}
 
 	std::cout << "Replacing media panel with index " << panel->mId << std::endl;
@@ -1835,7 +1854,7 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
 	if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
 	{
 		std::cerr << "Couldn't get cwd - probably too long - failing to init." << std::endl;
-		return;
+		return NULL;
 	}
 	std::string user_data_path = std::string( cwd ) + "/";
 #endif
@@ -1875,6 +1894,8 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
 	// load and start the URL
 	panel->mMediaSource->loadURI( url );
 	panel->mMediaSource->start();
+	
+	return panel;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -2134,7 +2155,39 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 		break;
 
 		case MEDIA_EVENT_CLICK_LINK_HREF:
-			std::cerr <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << std::endl;
+		{
+			std::cerr <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << ", target is " << self->getClickTarget() << std::endl;
+			// retrieve the event parameters
+			std::string url = self->getClickURL();
+			std::string target = self->getClickTarget();
+			
+			if(target == "_external")
+			{
+				// this should open in an external browser, but since this is a test app we don't care.
+			}
+			else if(target == "_blank")
+			{
+				// Create a new panel with the specified URL.
+				addMediaPanel(url);
+			}
+			else // other named target
+			{
+				mediaPanel *target_panel = findMediaPanel(target);
+				if(target_panel)
+				{
+					target_panel = replaceMediaPanel(target_panel, url);
+				}
+				else
+				{
+					target_panel = addMediaPanel(url);
+				}
+
+				if(target_panel)
+				{
+					target_panel->mTarget = target;
+				}
+			}
+		}
 		break;
 
 		case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
@@ -2148,6 +2201,25 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 		case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:
 			std::cerr <<  "Media event:  MEDIA_EVENT_PLUGIN_FAILED_LAUNCH" << std::endl;
 		break;
+
+		case MEDIA_EVENT_CLOSE_REQUEST:
+			std::cerr <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << std::endl;
+		break;
+		
+		case MEDIA_EVENT_PICK_FILE_REQUEST:
+			std::cerr <<  "Media event:  MEDIA_EVENT_PICK_FILE_REQUEST" << std::endl;
+			// TODO: display an actual file picker
+			self->sendPickFileResponse("cake");
+		break;
+
+		case MEDIA_EVENT_GEOMETRY_CHANGE:
+			std::cerr <<  "Media event:  MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() 
+				<< ", x = " << self->getGeometryX() 
+				<< ", y = " << self->getGeometryY() 
+				<< ", width = " << self->getGeometryWidth() 
+				<< ", height = " << self->getGeometryHeight() 
+				<< std::endl;
+		break;
 	}
 }
 
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.h b/indra/test_apps/llplugintest/llmediaplugintest.h
index 8fa20b8d72a45e23d5229de68d3928ec4c8e6dc6..1f6f18e43c41aa8ed118b402f943798880d0aa7e 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.h
+++ b/indra/test_apps/llplugintest/llmediaplugintest.h
@@ -51,6 +51,7 @@ struct mediaPanel
 		int mId;
 		std::string mStartUrl;
 		std::string mMimeType;
+		std::string mTarget;
 		LLPluginClassMedia *mMediaSource;
 		int mMediaWidth;
 		int mMediaHeight;
@@ -91,16 +92,17 @@ class LLMediaPluginTest : public LLPluginClassMediaOwner
 		void draw( int draw_type );
 		void windowPosToTexturePos( int window_x, int window_y, int& media_x, int& media_y, int& id );
 
-		void addMediaPanel( std::string url );
+		mediaPanel* addMediaPanel( std::string url );
 		void updateMediaPanel( mediaPanel* panel );
 		void remMediaPanel( mediaPanel* panel );
-		void replaceMediaPanel( mediaPanel* panel, std::string url );
+		mediaPanel* replaceMediaPanel( mediaPanel* panel, std::string url );
 		void getRandomMediaSize( int& width, int& height, std::string mime_type );
 		void navigateToNewURI( std::string uri );
         void initUrlHistory( std::string uri );
 		void selectPanelById( int id );
 		void selectPanel( mediaPanel* panel );
 		mediaPanel* findMediaPanel( LLPluginClassMedia* panel );
+		mediaPanel* findMediaPanel( const std::string &target_name );
 		void makePickTexture( int id, GLuint* texture_handle, unsigned char** texture_pixels );
 		void makeChrome();
 		void resetView();
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)
diff --git a/install.xml b/install.xml
index 9c37b4bc1e8e2df134a2b73f9662338e765823b1..5a9d7041916c54e0c9831fc4684229ef34e14d4c 100644
--- a/install.xml
+++ b/install.xml
@@ -185,7 +185,7 @@
         <key>copyright</key>
         <string>various</string>
         <key>description</key>
-        <string>A set of portable C++ libraries which provide a wide set of functionality. Used primarily for tokenization. </string>
+        <string>A set of portable C++ libraries which provide a wide set of functionality. </string>
         <key>license</key>
         <string>boost</string>
         <key>packages</key>
@@ -981,23 +981,23 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>becffca6bd8dcb239de284ea2a8b485b</string>
+            <string>34d9e4c93678a422cf80521bf0cd7628</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100617.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100914.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
             <key>md5sum</key>
-            <string>414d72dd59e3d83c96f0e1531360792e</string>
+            <string>5d743c93b970abe685b185de83001a6e</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20100618.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20100923.tar.bz2</uri>
           </map>
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>df1bdd683128e060d60e435f65d8f7e8</string>
+            <string>4b8412833c00f8cdaba26808f0ddb404</string>
             <key>url</key>
-            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100617.tar.bz2</uri>
+            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100916.tar.bz2</uri>
           </map>
         </map>
       </map>
diff --git a/scripts/install.py b/scripts/install.py
index 7368af0b37ffc76d419d3a4c4958607fe07aabf0..c2adf4d0a27ce79b9edfb4a28ea594141a13039b 100755
--- a/scripts/install.py
+++ b/scripts/install.py
@@ -84,18 +84,6 @@ def add_indra_lib_path():
 from indra.base import llsd
 from indra.util import helpformatter
 
-# *HACK: Necessary for python 2.3. Consider removing this code wart
-# after etch has deployed everywhere. 2008-12-23 Phoenix
-try:
-    sorted = sorted
-except NameError:
-    def sorted(in_list):
-        "Return a list which is a sorted copy of in_list."
-        # Copy the source to be more functional and side-effect free.
-        out_list = copy.copy(in_list)
-        out_list.sort()
-        return out_list
-
 class InstallFile(object):
     "This is just a handy way to throw around details on a file in memory."
     def __init__(self, pkgname, url, md5sum, cache_dir, platform_path):
diff --git a/viewer-hg-convert.shamap b/viewer-hg-convert.shamap
index 29f98ed8cf8ef719883a113c95e6b732cac188a4..891eb98eef9879223459c0a5819ce1a86e619c18 100644
--- a/viewer-hg-convert.shamap
+++ b/viewer-hg-convert.shamap
@@ -14430,3 +14430,104 @@ ac617ee90acf68794feef501b99ae43ab538a558 09f13edf6aa8c1cef43c8ba7f17289e75096a6a
 f84f5fca57946f838e79a59be20dffe407e9d3a7 edb3d5536c38643633925215404f2f02350f37d4
 426780dc180359b13f72bb6a259f9c4effe88cf9 fe1a7607de6ce5c3dedf96907e114ca0a208076a
 edef0997a11b5e3bc1c82cce0509e0d57bdde64b 6b93a09d0cdf42d7cee85979de6d7b18e34f6dd1
+b140fb0f294a7cae1181edb342294f0c372a052d a6250fa92374d84353e5d80d38bafc0a315a9d71
+6cf3df8ac3c7712f1a8058e0d6f42761ecc63d58 462b1c235a145dec4b89cdb9f3c107f2dcdd048f
+070724e750c4bdd0eedefdb8fd4554e69e0ad33e ffca5f9c5c2ac2c8b201e1dc262371087f3f116d
+5f627e224ba5a0c8a63044ea91d9cb7e55f485e6 70e4af736964c211ea0e66e154255c0fb9fc4a1f
+de1c17c35aa42c6421c60ebd9102da151d78b1c1 5d67b10edea1f8696886d3d0479c784943fd228c
+e2fe42293f8a5a879b4c9a4206dd43c81f385720 c68776612c1f2895629f8712b7b8293d8f0cd833
+cd7e437979644107c314493e41fb39bc126caf97 80af8db446dfec8baf360c709ef7eb990dafaf74
+6247e22de57b7a78eae29758d816dae4c328c8e7 7d2e13e2bd90397984edd7d6b1de1641c546d3a0
+0a5fa7cb1858f4f87a594c740e49c6029cf61439 4f100e626f2d5b0d68c0cd581a1136404466316d
+1f4097b566c0c9395477219fa921ad24fdc7d252 5ab43707d58a1b9681d1935396aba08144ba96b8
+d2430c126b94dc6bc30eb0676ae4d6aa4bf81ab4 c3852476e859ad0bf2db7739185bb52442ca0498
+16040352ffd3f8d126e6fb5233e219b3840e4baf d13df6d264e1a58187545b5cfc2e83d37fcc0aee
+5ba552b6dd1585e2518b69afc7c6cb01d5bfb5bf 1d78d0e00428c1df177699cde1347c86a6e0da3c
+fba2f283e8847b9eaadcb7c78c220442bc61273a 54f5159608a71a8e6a7c6118e94128be35f5b94c
+f9766c168cb00ce2e293377f3587a0b398c10951 2cd0ffda361c57134f3fe87784d308f208f44340
+82b23a0e487bd95c6b6dbfd47f7724b14d4807cd 2ce97abf67d8e47f378adb352733bbe515f68763
+72651623d96deee014411daeb82d50452261e0b3 0d637cf64f9c61aafb938be19e6b77d0d75d2256
+359f03b1285092f52ca9cd8c1b2653d182568fd8 fed92bc4562639d565716008264fe7357e5e5493
+708e00baf7cd7b47dbfcc0dce45e2eb305fe3b72 bb9243c01e89446d08fd62b4ea874dc870a1e871
+f7714ce278de8b0aa577c7160e8770f0ecf432b2 5bff02eeef4689558df52f72a8f8a82d619f092b
+a8ed6873b6dba8eb5b7cd04ca5182d1c8820ca8a 9624351548184433776f16552da60487e663be08
+ffe8d0aa373cb42df6893b707027f66f3cf6694c 1fcfc45f02a5c3da4d5135167ec350fc916efdce
+6fd0d0bcdb5edc3509d5a810cae5e7a22d0eb82c 1fcfc45f02a5c3da4d5135167ec350fc916efdce
+08dfb2e4ed346ca38b3b59f2450c37f69e1ee671 bd299f8f759355320d1fe2ca19b599b77be0bad7
+5f7a90472c8c317a7531f919188daf506873790c 9d8ac18944420fdb0e9c600ac688d15860a289f6
+d1348e4ef737bc13dd223b62a2e41c38ffe30c72 0420007883104eaf3073c8d750edeccd830e1080
+3fad13218df677671f46c16962658f3ab42c975a 3f804a666358e9ae5af5beb69aad4c7b15f02f5b
+9577c104c8201f5fc18d326a6837db7bf1ad6353 380b963a1f0f87a2c3d5290117518da6e83d83ee
+0deb0a34cff7921b00a8e0c9cf366fa766bb9c34 14e17bde662cadb7835fe8bbcdceb5a83ec1c510
+e72b2aa52f48f786aa1a75ce436e62099665dcf6 d39aac8b222feb2955f3b630438a164ed4528c25
+9cb9aa264a2e231369de9ff9ea752d40ad9fcdd2 9b0a9bf5ce2f04ff3fd6caf8dbd30f7539586985
+a9163992e7050cb01bbdcadb78dbddc77d840488 edb69650e477033a04e25dd7b66b35fce24dc836
+0aac191d03179a59d41163be52860c3c26a37849 3a171f9cdbda0ba8cef60c33a11559273227b416
+b3bb873255af4849703bc17c81dbf755f22dbcf7 8582ab0f137b3e3bf85e931c550e4b0c7ba77ca1
+36e8ba1ae0728814a9f6f771b9380c7624c6af75 73a7e5749b0cc59ea73687dd9223d902e9dfcd80
+9cb4d9eb3d2df7dda2bfa3b9e8f623dff03dedc9 ced75bc3ce177acd84e83d79d6ae9c5f3118d3e2
+e0cd410398f70b7fbea7e04248c308f61dbf4b99 6c711bf31d62fb882dd4acbec5f518904b7b0183
+93bed3d76df0ccd9acb15d2e35dca67b2e9b0dc7 25017ca844f16f7251b7a41450deda304e0a6ba0
+5e8110decca97a55ac9fe68c2625dd36d77ec2a7 c075a1ed884ee002f6e18f564890e1fb17081667
+394d4cad28a28edce20eef31fa80a355559c7875 9c595e435fb3f2bac594c4bca503f47973275ca2
+17459d6abeb5289c6cf4e2e948b0687a2ddb0431 0bc0dcfa8873ca252fa22e2232518db481b6cfb6
+33601045919daf0e1dd3275abc3c59f767c09950 94982effd5cc02216ef6a9f43285749acb60ec1a
+565c110b72319fa973446814e551ad16e10a65ad 78b3304e3ff93810feeda98347aa44a97595e61f
+93190a6f49225ea2e3d2ce69626c9a7533300f53 19f58f962a66fef84261b7b8d9ca29242c566c1d
+ed2c851222c480d2d277c65e16cb193302d3a3e9 8f7ce29375da74dab526e8adb7b54870e145aac2
+9834412a934f93b3bf8aeb036bce0c7992042862 9fe3d3ab9dc7d5cd1fd0ee997248d3c445c99c14
+15267760d50c1aadb7f808d987ebfc6657830841 36949020e376f0a6a071cf64f714a4a54f4b6968
+eec90bdee54a588efe8518426a19a52770e1d1cc 57be583d7b844321a3c792a53ca20c3d7bef27e5
+d9125878d02521ec0ab2a4b974b5a1faaed004c5 653a6c7743f3eb23b853ecc54b703d8a0e36eefd
+934cf4e6d1eaf2707e6239ab80d0c566329f9cb3 32a4ec227b638cb0a4e1c238902bfa3fb99b1b2f
+346bf54e88d566da15ad09f7df78f55ac6d6ced7 461feca8921050c640c07c7e00b72b0aecf4acb2
+10dceeb7dbaf22857e6fdf45b7380238a7bbb869 c50a896787b44164995d4121044129780693ff5f
+f26fbc0cf6ad8ebbecdffba20e575834d135ffa0 3e75204640193b1337295ef3d05b416c131956f8
+d4a428559d3b107c0da7e8adf63970069b36cd35 06a41d63494131ac94990030e30b9525be10ece0
+56c391335a4ec4dc6ce45019fe236f0543f4a7a7 e3d8033c70ad10c0a54b291c195f8764869c6541
+7f8780db973eefb93fff212350abc447b8bc3cbc 8651c7b505d4ca24551954334737e3c6885e255d
+c02a766081eda6cc1d80bd6c19b41787e2541993 3816752a14f68c6b41ea6c9ea8180d80cb9eb3e2
+06a9be592bad3bdb0f843a88ade668b98c293016 3ae24f3a621a6efc2a845f88fe56ac0f8b618beb
+6b93e59e4942e2cb27431b20c243f1ebc5639c29 b2309808b156d54f25c21c68130da5fff16f5352
+0066c8b1620ef553c509a27121ef5d22b877064e 70933bb6ec87f8a251165e41db4c58f33e365c84
+e20a25cb260476adef2c108277ad87a9a2a90873 d17aa37a74bfc9ff7f6a3720f1bf23a8dea6c8f4
+d0ee75b942c5e0858f24c3b7aa0c26b919f1b7d8 b9f2438cc54e059cb0fc6a04c933db5028a148f2
+ec6a34eb37a6b5c7f36ea25752ae235346585ccd 3aafb01f4d8b4da78b0ba748df89c222eef03c86
+00e2b47aff44d0b80ae12a13c27450fea551004d 0704c40eb014577dd5843424d25e7bb73f43940c
+b1d92d7b39d6cb05728f27a9678d1fe08cea87c6 07c8441b1b55e4b9a13a89c5105d2913980cb128
+ec71fe47d2c4cdf16f4972fb743c844a0905ab21 6ac0bc6f805f62bcc579057fd0379f99f7a13c25
+6e9644d49652a6e1953d8bd791fad27942af2f2a 484e32d2b9a8721a4fc46d0f4093aa45a835a2b9
+12f41f9809967be695ccb52b33097452c3b37159 178809a07578142bfbe5ebb4e44a6239a39b2b90
+bc716311be35b0586dabcee225ecce302295e8b5 8dccf0ffabf5fbe36e1b29b66e4a747c4fe5a1e1
+b8873253909069c4750a1ecca80735db762ea92e 52031bc79f08c7d1e4ddfbdd580a15344e02a20f
+b520fb6d3d0f7972f106349e00819726b7cac9bc c9359a4f6ceff438c736e589c2ed35d1a889dae3
+82b4da888fc0d3ceed08988d94505385aea9b4f6 1c1bb9d8880c8cbebf0dae6901cc57a7580fe7a3
+8703b77fd914bce4145c8ba318d3605ae6cbbbf5 390d85cb3d6c8f17843680f6022bf3dbbfb62a67
+919a72408d72e55a219a88959986271926c76dd9 4d11122fa058a801d0f57c8898c0867e55a18035
+89be09c64c7f23b5cb6862b713ba9f43baeab6b1 f8cfde7fd7bd189bbeb93b09c7ea9296d9e059a2
+832c18c5075bfaf4e5dbab56592b628ffc2484f4 855c3cb89918ed1ebf4c724811f94bfa8a5d5aeb
+88bc7aea10a76df348ae9bc271aa74fd7c838b69 aec30358ef4786af41af2f3fc6fa787ea5a85682
+2f176370fedbee5e3fe37b2cf27eb94bc199e2ae df08d42aff5264cea1747d9a0937efef58a2ceda
+c00e7b247ccb1bf600c44203af00c94759c23e59 c2a6a7bd29949b6de93260614a63a2b5135e8d0b
+48cc49a039c39ee92c5a90f0ba155b5a92a408a8 696ad5f3d808e1a2d6b0ebffea0d9c337194c74f
+108cb92a2943ae5b274a43b9912fb97ed71fa9ba a042ece75362ff6b83010f3c66c8c3f5fe8c2a36
+5413225c8797e25fb42d314b172d4abd02f64d25 12351e182354413334fa8d0e1c773501c0d93a90
+1121237696041ebc58933ff0ea9cd1ee8566eb11 ef165d65c72aa68c12ba4503925214dc07a92d8a
+ca6a373ba89b7c74132b324f5ae2964160c01833 cc98bba7c26b2d2c9a65b95bd5618e14be8df8d5
+e90f089fae1224b29e1b047e9be2c1b653e224c4 72cceacad6f470c919f5a52fd4007098715af7c1
+81e8feff93c19164d9319d100a848673b7c76730 252779212dc40b64f9291c1287bd6f7c29f48377
+54e904d0062a98e9aa7f4935aa5671a6eeb647cb 741eb25e921cd0f8f274a660a31169284d47cdad
+84318fea200ddc5b502d51f68f92f31eac939556 f0b8e4748ec61c862d084b9eebe8eb37dfc1ef88
+144e4ef8c73291f488b4aeff55dfb2616571c009 a15dac7cf1f9056702c85c134c21b92fbc7a5849
+200575dbef612f1bd91db72242355519534b9fdd a2e46778a30ee390acfacf8009eec0acca441090
+2bfffe15ff3e4ef98dfc84c6e7303cbb33619154 12659fe5f0852cbbc2b3db4757ec25f525632240
+92443bdeff135c9032b618da17f883c35323e2b0 055fe04592f29645af4452b56cedf68209668b17
+524c1736684dc38ff3b381f968fec709f96f70cd 4105a6fd17b55cc83c332561347dae978edc3ebf
+796dd7513d261c7d3479afc32ecc39dd174965b9 849432193dbf5fe86dde65edc25560a1e9909c16
+6361273ae0f4f8fb876d3c1396d52c630a211460 70fc718d68cd079396863bfbc61e5770984adadf
+adddb5d790b8eb43c52992f730f2ec450731ab16 100999bf3348eef87c917b47c269dd450eed9db9
+5bcf7a83d56a6f26721548c2022462d708131116 1d4dc477ab14450a989fddc92e46f305cb5d2970
+f75c3fb19b8dffabe3510c45ead576a0534a569d d999e6b90aa03e1a97f530da74a5b7fc1df1d2b2
+29a591d8188a8cbc555c5ea9def1d397604ddb1f de9a0847cd5b883d96c4e48ae5866b3563f17309
+23a287269bc1e0cdfa4fdb0abb90fb34fce2f2e2 f68fdc49adf2d06c680b95a9c1c864343ca82882
+23a287269bc1e0cdfa4fdb0abb90fb34fce2f2e2 291d3b2d1d3496c7d02419059be50ecf824b7157