diff --git a/indra/develop.py b/indra/develop.py
index 79baa613adb1a2758b2b05117ea7c90fddc59dd0..05ad12f20e2b46a883e0633ced2330f435ff8d3e 100755
--- a/indra/develop.py
+++ b/indra/develop.py
@@ -578,12 +578,16 @@ def get_build_cmd(self):
         # devenv.com is CLI friendly, devenv.exe... not so much.
         return ('"%sdevenv.com" %s.sln /build %s' % 
                 (self.find_visual_studio(), self.project_name, self.build_type))
+        #return ('devenv.com %s.sln /build %s' % 
+        #        (self.project_name, self.build_type))
 
     def run(self, command, name=None, retry_on=None, retries=1):
         '''Run a program.  If the program fails, raise an exception.'''
         while retries:
             retries = retries - 1
+            print "develop.py tries to run:", command
             ret = os.system(command)
+            print "got ret", ret, "from", command
             if ret:
                 if name is None:
                     name = command.split(None, 1)[0]
diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
index ec2290d30e80c77e9b66b56c03cea8ea94a5faf8..c7bbc2e74aa2dec81f7cd8197b0484b879448e30 100644
--- a/indra/llcommon/llassettype.h
+++ b/indra/llcommon/llassettype.h
@@ -78,11 +78,6 @@ class LL_COMMON_API LLAssetType
 			// Holds a collection of inventory items.
 			// It's treated as an item in the inventory and therefore needs a type.
 
-		AT_ROOT_CATEGORY = 9,
-			// A user's root inventory category.
-			// We decided to expose it visually, so it seems logical to fold
-			// it into the asset types.
-
 		AT_LSL_TEXT = 10,
 		AT_LSL_BYTECODE = 11,
 			// The LSL is the scripting language. 
diff --git a/indra/llcommon/lleventapi.h b/indra/llcommon/lleventapi.h
index 2cd3b5bf8975abbe52c0375e91eb27820ae28657..96d1b03be85e259403e61fc24cf41abce2f5cbb9 100644
--- a/indra/llcommon/lleventapi.h
+++ b/indra/llcommon/lleventapi.h
@@ -46,6 +46,19 @@ class LL_COMMON_API LLEventAPI: public LLDispatchListener,
     /// Get the documentation string
     std::string getDesc() const { return mDesc; }
 
+    /**
+     * Publish only selected add() methods from LLEventDispatcher.
+     * Every LLEventAPI add() @em must have a description string.
+     */
+    template <typename CALLABLE>
+    void add(const std::string& name,
+             const std::string& desc,
+             CALLABLE callable,
+             const LLSD& required=LLSD())
+    {
+        LLEventDispatcher::add(name, desc, callable, required);
+    }
+
 private:
     std::string mDesc;
 };
diff --git a/indra/llcommon/lleventdispatcher.cpp b/indra/llcommon/lleventdispatcher.cpp
index 017bf3a52194ae8d1b5878738918aaeffc7d7614..5fa6059718ce2c9d2993c177b35c6e04c20f9af6 100644
--- a/indra/llcommon/lleventdispatcher.cpp
+++ b/indra/llcommon/lleventdispatcher.cpp
@@ -121,6 +121,20 @@ LLEventDispatcher::Callable LLEventDispatcher::get(const std::string& name) cons
     return found->second.mFunc;
 }
 
+LLSD LLEventDispatcher::getMetadata(const std::string& name) const
+{
+    DispatchMap::const_iterator found = mDispatch.find(name);
+    if (found == mDispatch.end())
+    {
+        return LLSD();
+    }
+    LLSD meta;
+    meta["name"] = name;
+    meta["desc"] = found->second.mDesc;
+    meta["required"] = found->second.mRequired;
+    return meta;
+}
+
 LLDispatchListener::LLDispatchListener(const std::string& pumpname, const std::string& key):
     LLEventDispatcher(pumpname, key),
     mPump(pumpname, true),          // allow tweaking for uniqueness
diff --git a/indra/llcommon/lleventdispatcher.h b/indra/llcommon/lleventdispatcher.h
index eba7b607f18eb25b1694aee4db0c2a1ba6677087..c8c4fe0c3ca38935be3e6ebd8ad44889602f420e 100644
--- a/indra/llcommon/lleventdispatcher.h
+++ b/indra/llcommon/lleventdispatcher.h
@@ -19,6 +19,7 @@
 #include <map>
 #include <boost/function.hpp>
 #include <boost/bind.hpp>
+#include <boost/iterator/transform_iterator.hpp>
 #include <typeinfo>
 #include "llevents.h"
 
@@ -73,6 +74,16 @@ class LL_COMMON_API LLEventDispatcher
         addMethod<CLASS>(name, desc, method, required);
     }
 
+    /// Convenience: for LLEventDispatcher, not every callable needs a
+    /// documentation string.
+    template <typename CALLABLE>
+    void add(const std::string& name,
+             CALLABLE callable,
+             const LLSD& required=LLSD())
+    {
+        add(name, "", callable, required);
+    }
+
     /// Unregister a callable
     bool remove(const std::string& name);
 
@@ -87,10 +98,47 @@ class LL_COMMON_API LLEventDispatcher
     /// @a required prototype specified at add() time, die with LL_ERRS.
     void operator()(const LLSD& event) const;
 
+    /// @name Iterate over defined names
+    //@{
+    typedef std::pair<std::string, std::string> NameDesc;
+
+private:
+    struct DispatchEntry
+    {
+        DispatchEntry(const Callable& func, const std::string& desc, const LLSD& required):
+            mFunc(func),
+            mDesc(desc),
+            mRequired(required)
+        {}
+        Callable mFunc;
+        std::string mDesc;
+        LLSD mRequired;
+    };
+    typedef std::map<std::string, DispatchEntry> DispatchMap;
+
+public:
+    /// We want the flexibility to redefine what data we store per name,
+    /// therefore our public interface doesn't expose DispatchMap iterators,
+    /// or DispatchMap itself, or DispatchEntry. Instead we explicitly
+    /// transform each DispatchMap item to NameDesc on dereferencing.
+    typedef boost::transform_iterator<NameDesc(*)(const DispatchMap::value_type&), DispatchMap::const_iterator> const_iterator;
+    const_iterator begin() const
+    {
+        return boost::make_transform_iterator(mDispatch.begin(), makeNameDesc);
+    }
+    const_iterator end() const
+    {
+        return boost::make_transform_iterator(mDispatch.end(), makeNameDesc);
+    }
+    //@}
+
     /// Fetch the Callable for the specified name. If no such name was
     /// registered, return an empty() Callable.
     Callable get(const std::string& name) const;
 
+    /// Get information about a specific Callable
+    LLSD getMetadata(const std::string& name) const;
+
 private:
     template <class CLASS, typename METHOD>
     void addMethod(const std::string& name, const std::string& desc,
@@ -111,19 +159,12 @@ class LL_COMMON_API LLEventDispatcher
     bool attemptCall(const std::string& name, const LLSD& event) const;
 
     std::string mDesc, mKey;
-    struct DispatchEntry
-    {
-        DispatchEntry(const Callable& func, const std::string& desc, const LLSD& required):
-            mFunc(func),
-            mDesc(desc),
-            mRequired(required)
-        {}
-        Callable mFunc;
-        std::string mDesc;
-        LLSD mRequired;
-    };
-    typedef std::map<std::string, DispatchEntry> DispatchMap;
     DispatchMap mDispatch;
+
+    static NameDesc makeNameDesc(const DispatchMap::value_type& item)
+    {
+        return NameDesc(item.first, item.second.mDesc);
+    }
 };
 
 /**
diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp
index 9107b11597e8df4427dc1481a3d86b0ae8d9a8ce..079e670b1ab8d0adcc69cdd19a3d7d576e970f77 100644
--- a/indra/llcommon/llfoldertype.cpp
+++ b/indra/llcommon/llfoldertype.cpp
@@ -72,8 +72,7 @@ LLFolderDictionary::LLFolderDictionary()
 	addEntry(LLFolderType::FT_CLOTHING, 			new FolderEntry("clothing",	TRUE));
 	addEntry(LLFolderType::FT_OBJECT, 				new FolderEntry("object",	TRUE));
 	addEntry(LLFolderType::FT_NOTECARD, 			new FolderEntry("notecard",	TRUE));
-	addEntry(LLFolderType::FT_CATEGORY, 			new FolderEntry("category",	TRUE));
-	addEntry(LLFolderType::FT_ROOT_CATEGORY, 		new FolderEntry("root",		TRUE));
+	addEntry(LLFolderType::FT_ROOT_INVENTORY, 		new FolderEntry("root_inv",	TRUE));
 	addEntry(LLFolderType::FT_LSL_TEXT, 			new FolderEntry("lsltext",	TRUE));
 	addEntry(LLFolderType::FT_BODYPART, 			new FolderEntry("bodypart",	TRUE));
 	addEntry(LLFolderType::FT_TRASH, 				new FolderEntry("trash",	TRUE));
diff --git a/indra/llcommon/llfoldertype.h b/indra/llcommon/llfoldertype.h
index 5374ffd829aae75dbc607b30e2d429d9aa6fc131..7aa77f7f7e43fac7144c045f083ed15772a0737f 100644
--- a/indra/llcommon/llfoldertype.h
+++ b/indra/llcommon/llfoldertype.h
@@ -52,23 +52,18 @@ class LL_COMMON_API LLFolderType
 
 		FT_LANDMARK = 3,
 
-		// FT_SCRIPT = 4,
-
 		FT_CLOTHING = 5,
 
 		FT_OBJECT = 6,
 
 		FT_NOTECARD = 7,
 
-		FT_CATEGORY = 8,
-
-		FT_ROOT_CATEGORY = 9,
+		FT_ROOT_INVENTORY = 8,
+			// We'd really like to change this to 9 since AT_CATEGORY is 8,
+			// but "My Inventory" has been type 8 for a long time.
 
 		FT_LSL_TEXT = 10,
 
-		// FT_LSL_BYTECODE = 11,
-		// FT_TEXTURE_TGA = 12,
-
 		FT_BODYPART = 13,
 
 		FT_TRASH = 14,
@@ -77,16 +72,10 @@ class LL_COMMON_API LLFolderType
 
 		FT_LOST_AND_FOUND = 16,
 
-		// FT_SOUND_WAV = 17,
-		// FT_IMAGE_TGA = 18,
-		// FT_IMAGE_JPEG = 19,
-
 		FT_ANIMATION = 20,
 
 		FT_GESTURE = 21,
 
-		// FT_SIMSTATE = 22,
-
 		FT_FAVORITE = 23,
 
 		FT_ENSEMBLE_START = 26,
diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h
index 48244480b1276e271669fbfb406db8d97d03098f..bb3301df9ff3c6516e6eb44167d05dc34851f69c 100644
--- a/indra/llcommon/llpreprocessor.h
+++ b/indra/llcommon/llpreprocessor.h
@@ -122,6 +122,7 @@
 #pragma warning( 3      :  4264 )	// "'virtual_function' : no override available for virtual member function from base 'class'; function is hidden"
 #pragma warning( 3       : 4265 )	// "class has virtual functions, but destructor is not virtual"
 #pragma warning( 3      :  4266 )	// 'function' : no override available for virtual member function from base 'type'; function is hidden
+#pragma warning (disable : 4180)	// qualifier applied to function type has no meaning; ignored
 #pragma warning( disable : 4284 )	// silly MS warning deep inside their <map> include file
 #pragma warning( disable : 4503 )	// 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation.
 #pragma warning( disable : 4800 )	// 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index e7ad571a905d793031be93686b6b368a5ba06ec5..eacbbb3ee0bd793b5ee6ae993ad13cc02f194e9c 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -96,6 +96,7 @@ void LLQueuedThread::shutdown()
 		if (req->getStatus() == STATUS_QUEUED || req->getStatus() == STATUS_INPROGRESS)
 		{
 			++active_count;
+			req->setStatus(STATUS_ABORTED); // avoid assert in deleteRequest
 		}
 		req->deleteRequest();
 	}
diff --git a/indra/llcommon/tests/lltreeiterators_test.cpp b/indra/llcommon/tests/lltreeiterators_test.cpp
index d6d9f681103d31956f1488e880336657be8a6327..31c70b4daa7c8bb61935ca3f80bacd22b2682fbb 100644
--- a/indra/llcommon/tests/lltreeiterators_test.cpp
+++ b/indra/llcommon/tests/lltreeiterators_test.cpp
@@ -35,9 +35,6 @@
 // Precompiled header
 #include "linden_common.h"
 
-#if LL_WINDOWS
-#pragma warning (disable : 4180) // qualifier applied to function type has no meaning; ignored
-#endif
 
 // STL headers
 // std headers
diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp
index 0e71c0d12d81227e5e2e272eba0e66c2a0ce65b1..4ef5df0b2897fc429ff47d15bddbc6f9b8526a49 100644
--- a/indra/llinventory/llinventorytype.cpp
+++ b/indra/llinventory/llinventorytype.cpp
@@ -106,7 +106,7 @@ DEFAULT_ASSET_FOR_INV_TYPE[LLAssetType::AT_COUNT] =
 	LLInventoryType::IT_OBJECT,			// AT_OBJECT
 	LLInventoryType::IT_NOTECARD,		// AT_NOTECARD
 	LLInventoryType::IT_CATEGORY,		// AT_CATEGORY
-	LLInventoryType::IT_ROOT_CATEGORY,	// AT_ROOT_CATEGORY
+	LLInventoryType::IT_NONE,			// (null entry)
 	LLInventoryType::IT_LSL,			// AT_LSL_TEXT
 	LLInventoryType::IT_LSL,			// AT_LSL_BYTECODE
 	LLInventoryType::IT_TEXTURE,		// AT_TEXTURE_TGA
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 42d5ec49cd302da5bb2c1e226ca9435e6e69d7a5..c3d8a5aa23632c487863b59de1da3ef45b64d325 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -593,10 +593,10 @@ void LLPluginClassMedia::setPriority(EPriority priority)
 				mSleepTime = 1.0f;
 			break;
 			case PRIORITY_LOW:		
-				mSleepTime = 1.0f / 50.0f;
+				mSleepTime = 1.0f / 25.0f;
 			break;
 			case PRIORITY_NORMAL:	
-				mSleepTime = 1.0f / 100.0f;
+				mSleepTime = 1.0f / 50.0f;
 			break;
 			case PRIORITY_HIGH:		
 				mSleepTime = 1.0f / 100.0f;
diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp
index 450dcb3c789d989e648650e2f4e1172f88d78dbb..fc95136d9e39b189ec61c035af1cb9122c590903 100644
--- a/indra/llplugin/llpluginprocesschild.cpp
+++ b/indra/llplugin/llpluginprocesschild.cpp
@@ -37,12 +37,13 @@
 #include "llpluginmessageclasses.h"
 
 static const F32 HEARTBEAT_SECONDS = 1.0f;
+static const F32 PLUGIN_IDLE_SECONDS = 1.0f / 100.0f;  // Each call to idle will give the plugin this much time.
 
 LLPluginProcessChild::LLPluginProcessChild()
 {
 	mInstance = NULL;
 	mSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP);
-	mSleepTime = 1.0f / 100.0f;	// default: send idle messages at 100Hz
+	mSleepTime = PLUGIN_IDLE_SECONDS;	// default: send idle messages at 100Hz
 	mCPUElapsed = 0.0f;
 }
 
@@ -155,7 +156,7 @@ void LLPluginProcessChild::idle(void)
 				{
 					// Provide some time to the plugin
 					LLPluginMessage message("base", "idle");
-					message.setValueReal("time", mSleepTime);
+					message.setValueReal("time", PLUGIN_IDLE_SECONDS);
 					sendMessageToPlugin(message);
 					
 					mInstance->idle();
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 793a526c2602f9c710f99d8e153600baa6d8edae..9ba0cfc6b8a2ad60306d74e13f7e505ab53a455d 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -754,6 +754,13 @@ std::string LLFontGL::nameFromFont(const LLFontGL* fontp)
 	return fontp->mFontDescriptor.getName();
 }
 
+
+// static
+std::string LLFontGL::sizeFromFont(const LLFontGL* fontp)
+{
+	return fontp->mFontDescriptor.getSize();
+}
+
 // static
 std::string LLFontGL::nameFromHAlign(LLFontGL::HAlign align)
 {
diff --git a/indra/llrender/llfontgl.h b/indra/llrender/llfontgl.h
index 5f2c86c6c129ffa887aeaf695822f4c75c6cdec7..bb7d8524e7fd053c3af0c06268c600f9d802a1f2 100644
--- a/indra/llrender/llfontgl.h
+++ b/indra/llrender/llfontgl.h
@@ -146,6 +146,7 @@ class LLFontGL
 	static U8 getStyleFromString(const std::string &style);
 
 	static std::string nameFromFont(const LLFontGL* fontp);
+	static std::string sizeFromFont(const LLFontGL* fontp);
 
 	static std::string nameFromHAlign(LLFontGL::HAlign align);
 	static LLFontGL::HAlign hAlignFromName(const std::string& name);
diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp
index c3dd4ae647d9436b85fbde6d9d8b2927ea24373f..9a2f2ab4d319c5a24fb45e59bc342634ce2c8c04 100644
--- a/indra/llui/lldockablefloater.cpp
+++ b/indra/llui/lldockablefloater.cpp
@@ -136,21 +136,10 @@ void LLDockableFloater::setVisible(BOOL visible)
 
 void LLDockableFloater::setMinimized(BOOL minimize)
 {
-	if(minimize && isDocked())
+	if(minimize)
 	{
 		setVisible(FALSE);
 	}
-
-	if (minimize)
-	{
-		setCanDock(false);
-	}
-	else if (!minimize && mDockControl.get() != NULL && mDockControl.get()->isDockVisible())
-	{
-		setCanDock(true);
-	}
-
-	LLFloater::setMinimized(minimize);
 }
 
 LLView * LLDockableFloater::getDockWidget()
@@ -217,6 +206,16 @@ void LLDockableFloater::draw()
 	LLFloater::draw();
 }
 
+void LLDockableFloater::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+	if (isDocked())
+	{
+		setDocked(false);
+	}
+
+	LLFloater::reshape(width, height, called_from_parent);
+}
+
 void LLDockableFloater::setDockControl(LLDockControl* dockControl)
 {
 	mDockControl.reset(dockControl);
diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h
index 46491d8a29e9743bca40046254a26f217e7c070d..e5f94dca91e9219edaf2e5185aaac3e15a1b9bd0 100644
--- a/indra/llui/lldockablefloater.h
+++ b/indra/llui/lldockablefloater.h
@@ -65,6 +65,7 @@ class LLDockableFloater : public LLFloater
 	/* virtula */BOOL postBuild();
 	/* virtual */void setDocked(bool docked, bool pop_on_undock = true);
 	/* virtual */void draw();
+	/* virtual */void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 
 	/**
 	 *  If descendant class overrides setVisible() then it must still invoke its
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
index 045505af5b66e8f044f0756cbe21c404336f5970..456a2925a3e70314b747ce30be19beedc3a054b5 100644
--- a/indra/llui/lldockcontrol.cpp
+++ b/indra/llui/lldockcontrol.cpp
@@ -266,6 +266,11 @@ void LLDockControl::off()
 	mEnabled = false;
 }
 
+void LLDockControl::forceRecalculatePosition()
+{
+	mRecalculateDocablePosition = true;
+}
+
 void LLDockControl::drawToungue()
 {
 	if (mEnabled)
diff --git a/indra/llui/lldockcontrol.h b/indra/llui/lldockcontrol.h
index eaedb4c30766c05e2246e582cb30ae596961360f..30a45bedc74e43f3225fe9dfb404e6440fadc8a0 100644
--- a/indra/llui/lldockcontrol.h
+++ b/indra/llui/lldockcontrol.h
@@ -63,6 +63,7 @@ class LLDockControl
 public:
 	void on();
 	void off();
+	void forceRecalculatePosition();
 	void setDock(LLView* dockWidget);
 	LLView* getDock()
 	{
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 14a6ddb7e0e8babee240e65250221f3fed77e771..1fb618adeeefcad30bca0b04db1723e6b646003d 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -413,6 +413,19 @@ void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL au
 	}
 }
 
+bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_widthp, S32* min_heightp)
+{
+	LayoutPanel* panel = findEmbeddedPanelByName(panel_name);
+
+	if (panel)
+	{
+		if (min_widthp) *min_widthp = panel->mMinWidth;
+		if (min_heightp) *min_heightp = panel->mMinHeight;
+	}
+
+	return NULL != panel;
+}
+
 static LLFastTimer::DeclareTimer FTM_UPDATE_LAYOUT("Update LayoutStacks");
 void LLLayoutStack::updateLayout(BOOL force_resize)
 {
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 3a073fa1b28b08209346c6f834d3e78ab90cd37e..abd5436018dbd51a6045b29f710cdec3d18740c5 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -81,8 +81,16 @@ class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 	S32 getNumPanels() { return mPanels.size(); }
 
 	void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize);
-
-
+	
+	/**
+	 * Gets minimal width and/or height 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);
+	
+	void updateLayout(BOOL force_resize = FALSE);
 	static void updateClass();
 
 protected:
@@ -92,7 +100,6 @@ class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
 private:
 	struct LayoutPanel;
 
-	void updateLayout(BOOL force_resize = FALSE);
 	void calcMinExtents();
 	S32 getDefaultHeight(S32 cur_height);
 	S32 getDefaultWidth(S32 cur_width);
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 9706878a579476d835950b0f19436caa32fe6b39..a06b7e237bfe2cdd76dc3d8d5a1c81305afcc2d9 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1451,7 +1451,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)
 	}
 }
 
-void LLTextBase::setText(const LLStringExplicit &utf8str)
+void LLTextBase::setText(const LLStringExplicit &utf8str ,const LLStyle::Params& input_params)
 {
 	// clear out the existing text and segments
 	getViewModel()->setDisplay(LLWStringUtil::null);
@@ -1466,7 +1466,7 @@ void LLTextBase::setText(const LLStringExplicit &utf8str)
 	std::string text(utf8str);
 	LLStringUtil::removeCRLF(text);
 
-	appendText(text, false);
+	appendText(text, false, input_params);
 
 	onValueChange(0, getLength());
 }
@@ -1507,8 +1507,11 @@ void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, c
 			link_params.color = match.getColor();
 			// apply font name from requested style_params
 			std::string font_name = LLFontGL::nameFromFont(style_params.font());
-			link_params.font.name.setIfNotProvided(font_name);
-			link_params.font.style = "UNDERLINE";
+			std::string font_size = LLFontGL::sizeFromFont(style_params.font());
+			link_params.font.name(font_name);
+			link_params.font.size(font_name);
+			link_params.font.style("UNDERLINE");
+			
 			link_params.link_href = match.getUrl();
 
 			// output the text before the Url
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index fb01cd1e7cc5c389966b3283464b74bd760cd32f..c376a73615caf4f1cfe5b3f86dd05871446bef84 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -137,8 +137,9 @@ class LLTextBase
 
 	// Text accessors
 	// TODO: add optional style parameter
-	virtual void			setText(const LLStringExplicit &utf8str); // uses default style
+	virtual void			setText(const LLStringExplicit &utf8str , const LLStyle::Params& input_params = LLStyle::Params()); // uses default style
 	virtual std::string		getText() const;
+	void					setMaxTextLength(S32 length) { mMaxTextByteLength = length; }
 
 	// wide-char versions
 	void					setWText(const LLWString& text);
diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp
index 00f1d833a30a4c264ca8f21269214cd3d462b69e..4c4123cf45213f7a805587e23fca5df9c580c12b 100644
--- a/indra/llui/lltextbox.cpp
+++ b/indra/llui/lltextbox.cpp
@@ -112,12 +112,12 @@ BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)
 	return handled;
 }
 
-void LLTextBox::setText(const LLStringExplicit& text)
+void LLTextBox::setText(const LLStringExplicit& text , const LLStyle::Params& input_params )
 {
 	// does string argument insertion
 	mText.assign(text);
 	
-	LLTextBase::setText(mText.getString());
+	LLTextBase::setText(mText.getString(), input_params );
 }
 
 void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* userdata /*= NULL */ )
diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h
index 73f8a7c299ed7cdbb3662923505a2adb79deacd3..01b4bfa5ed68725d1e29e22af7b09ee4293b1277 100644
--- a/indra/llui/lltextbox.h
+++ b/indra/llui/lltextbox.h
@@ -58,7 +58,7 @@ class LLTextBox :
 	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
 	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
 
-	/*virtual*/ void setText( const LLStringExplicit& text );
+	/*virtual*/ void setText( const LLStringExplicit& text, const LLStyle::Params& input_params = LLStyle::Params() );
 	
 	void			setRightAlign()							{ mHAlign = LLFontGL::RIGHT; }
 	void			setHAlign( LLFontGL::HAlign align )		{ mHAlign = align; }
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index d136c6b49d6dd9d1d9879a3330456912da1ee867..224f066968e61e83ade164b98fcb18e8a08fadf7 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -311,12 +311,12 @@ LLTextEditor::~LLTextEditor()
 // LLTextEditor
 // Public methods
 
-void LLTextEditor::setText(const LLStringExplicit &utf8str)
+void LLTextEditor::setText(const LLStringExplicit &utf8str, const LLStyle::Params& input_params)
 {
 	blockUndo();
 	deselect();
 
-	LLTextBase::setText(utf8str);
+	LLTextBase::setText(utf8str, input_params);
 
 	resetDirty();
 }
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index 10fc94dedc1e4810785ec474947932efd72df17a..fb014b86bf873abcca1a88a72963d5bb0265c24a 100644
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -168,7 +168,7 @@ class LLTextEditor :
 
 	void			appendWidget(const LLInlineViewSegment::Params& params, const std::string& text, bool allow_undo);
 	// Non-undoable
-	void			setText(const LLStringExplicit &utf8str);
+	void			setText(const LLStringExplicit &utf8str, const LLStyle::Params& input_params = LLStyle::Params());
 
 
 	// Removes text from the end of document
diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp
index f1e3000547d3be73c37d4240e66cb2a8e8687ba7..9be33483d0b0762d660122963057214d3f54941b 100644
--- a/indra/llui/lluicolortable.cpp
+++ b/indra/llui/lluicolortable.cpp
@@ -192,19 +192,27 @@ void LLUIColorTable::clear()
 LLUIColor LLUIColorTable::getColor(const std::string& name, const LLColor4& default_color) const
 {
 	string_color_map_t::const_iterator iter = mUserSetColors.find(name);
+	
 	if(iter != mUserSetColors.end())
 	{
 		return LLUIColor(&iter->second);
 	}
 
 	iter = mLoadedColors.find(name);
-	return (iter != mLoadedColors.end() ? LLUIColor(&iter->second) : LLUIColor(default_color));
+	
+	if(iter != mLoadedColors.end())
+	{
+		return LLUIColor(&iter->second);
+	}
+	
+	return  LLUIColor(default_color);
 }
 
 // update user color, loaded colors are parsed on initialization
 void LLUIColorTable::setColor(const std::string& name, const LLColor4& color)
 {
 	setColor(name, color, mUserSetColors);
+	setColor(name, color, mLoadedColors);
 }
 
 bool LLUIColorTable::loadFromSettings()
diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp
index aaadc1b58da969858e4a825a532db630ca547366..08fc8fb7849203697e2e183446b80ba4709356bb 100644
--- a/indra/llui/lluictrl.cpp
+++ b/indra/llui/lluictrl.cpp
@@ -38,10 +38,6 @@
 #include "llpanel.h"
 #include "lluictrlfactory.h"
 
-// This breaks the ability to construct dummy LLUICtrls for calls like
-// getChild<LLUICtrl>("not-there")
-//static LLWidgetNameRegistry::StaticRegistrar r(&typeid(LLUICtrl::Params), "ui_ctrl");
-// This doesn't appear to read/apply ui_ctrl.xml
 static LLDefaultChildRegistry::Register<LLUICtrl> r("ui_ctrl");
 
 LLUICtrl::Params::Params()
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index adfbb41feb56d9ab924356c169791a4717668180..1c1450d7e9ff479001f4f9f9ffbf48687d60f855 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -433,8 +433,8 @@ 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);
-	LLWidgetTypeRegistry::instance().defaultRegistrar().add(tag, widget_type);
 	//FIXME: comment this in when working on schema generation
+	//LLWidgetTypeRegistry::instance().defaultRegistrar().add(tag, widget_type);
 	//LLDefaultParamBlockRegistry::instance().defaultRegistrar().add(widget_type, &getEmptyParamBlock<T>);
 }
 
diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
index de927de1cd6ef6c44f1805fa9a02c5bf9967ce65..236f79978de800301c175a15163e841d6203dd8c 100644
--- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
+++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
@@ -528,11 +528,17 @@ class MediaPluginQuickTime : public MediaPluginBase
 		if ( ! mMovieController )
 			return;
 
-		// service QuickTime
-		// Calling it this way doesn't have good behavior on Windows...
-//		MoviesTask( mMovieHandle, milliseconds );
-		// This was the original, but I think using both MoviesTask and MCIdle is redundant.  Trying with only MCIdle.
-//		MoviesTask( mMovieHandle, 0 );
+		// this wasn't required in 1.xx viewer but we have to manually 
+		// work the Windows message pump now
+		#if defined( LL_WINDOWS )
+		MSG msg;
+		while ( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) ) 
+		{
+			GetMessage( &msg, NULL, 0, 0 );
+			TranslateMessage( &msg );
+			DispatchMessage( &msg );
+		};
+		#endif
 
 		MCIdle( mMovieController );
 
@@ -712,18 +718,24 @@ class MediaPluginQuickTime : public MediaPluginBase
 		// find the size of the title
 		ByteCount size;
 		result = QTMetaDataGetItemValue( media_data_ref, item, NULL, 0, &size );
-		if ( noErr != result || size <= 0 ) 
+		if ( noErr != result || size <= 0 /*|| size > 1024  FIXME: arbitrary limit */ ) 
 			return false;
 
 		// allocate some space and grab it
-		UInt8* item_data = new UInt8( size );
-		memset( item_data, 0, size * sizeof( UInt8* ) );
+		UInt8* item_data = new UInt8( size + 1 );
+		memset( item_data, 0, ( size + 1 ) * sizeof( UInt8* ) );
 		result = QTMetaDataGetItemValue( media_data_ref, item, item_data, size, NULL );
 		if ( noErr != result ) 
+		{
+			delete [] item_data;
 			return false;
+		};
 
 		// save it
-		mMovieTitle = std::string( (char* )item_data );
+		if ( strlen( (char*)item_data ) )
+			mMovieTitle = std::string( (char* )item_data );
+		else
+			mMovieTitle = "";
 
 		// clean up
 		delete [] item_data;
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 3ce8ff3deb826ed775d623fc2a187ac058e0725f..09348782a45c6a1a2fde17b4d158dbd02465db90 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -74,8 +74,17 @@ class MediaPluginWebKit :
 
 private:
 
+	enum
+	{
+		INIT_STATE_UNINITIALIZED,		// Browser instance hasn't been set up yet
+		INIT_STATE_NAVIGATING,			// Browser instance has been set up and initial navigate to about:blank has been issued
+		INIT_STATE_NAVIGATE_COMPLETE,	// initial navigate to about:blank has completed
+		INIT_STATE_WAIT_REDRAW,			// First real navigate begin has been received, waiting for page changed event to start handling redraws
+		INIT_STATE_RUNNING				// All initialization gymnastics are complete.
+	};
 	int mBrowserWindowId;
-	bool mBrowserInitialized;
+	int mInitState;
+	std::string mInitialNavigateURL;
 	bool mNeedsUpdate;
 
 	bool	mCanCut;
@@ -93,7 +102,17 @@ class MediaPluginWebKit :
 		
 		checkEditState();
 		
-		if ( mNeedsUpdate )
+		if(mInitState == INIT_STATE_NAVIGATE_COMPLETE)
+		{
+			if(!mInitialNavigateURL.empty())
+			{
+				// We already have the initial navigate URL -- kick off the navigate.
+				LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, mInitialNavigateURL );
+				mInitialNavigateURL.clear();
+			}
+		}
+		
+		if ( (mInitState == INIT_STATE_RUNNING) && mNeedsUpdate )
 		{
 			const unsigned char* browser_pixels = LLQtWebKit::getInstance()->grabBrowserWindow( mBrowserWindowId );
 
@@ -123,7 +142,7 @@ class MediaPluginWebKit :
 	bool initBrowser()
 	{
 		// already initialized
-		if ( mBrowserInitialized )
+		if ( mInitState > INIT_STATE_UNINITIALIZED )
 			return true;
 
 		// not enough information to initialize the browser yet.
@@ -210,20 +229,21 @@ class MediaPluginWebKit :
 			// set background color to be black - mostly for initial login page
 			LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, 0x00, 0x00, 0x00 );
 
+			// Set state _before_ starting the navigate, since onNavigateBegin might get called before this call returns.
+			mInitState = INIT_STATE_NAVIGATING;
+
 			// Don't do this here -- it causes the dreaded "white flash" when loading a browser instance.
 			// FIXME: Re-added this because navigating to a "page" initializes things correctly - especially
 			// for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date.
 			LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" );
 
-			// set flag so we don't do this again
-			mBrowserInitialized = true;
-
 			return true;
 		};
 
 		return false;
 	};
 
+
 	////////////////////////////////////////////////////////////////////////////////
 	// virtual
 	void onCursorChanged(const EventType& event)
@@ -263,6 +283,11 @@ class MediaPluginWebKit :
 	// virtual
 	void onPageChanged( const EventType& event )
 	{
+		if(mInitState == INIT_STATE_WAIT_REDRAW)
+		{
+			mInitState = INIT_STATE_RUNNING;
+		}
+		
 		// flag that an update is required
 		mNeedsUpdate = true;
 	};
@@ -271,62 +296,91 @@ class MediaPluginWebKit :
 	// virtual
 	void onNavigateBegin(const EventType& event)
 	{
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_begin");
-		message.setValue("uri", event.getEventUri());
-		sendMessage(message);
+		if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+		{
+			LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_begin");
+			message.setValue("uri", event.getEventUri());
+			sendMessage(message);
+		
+			setStatus(STATUS_LOADING);
+		}
 
-		setStatus(STATUS_LOADING);
+		if(mInitState == INIT_STATE_NAVIGATE_COMPLETE)
+		{
+			mInitState = INIT_STATE_WAIT_REDRAW;
+		}
+		
 	}
 
 	////////////////////////////////////////////////////////////////////////////////
 	// virtual
 	void onNavigateComplete(const EventType& event)
 	{
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete");
-		message.setValue("uri", event.getEventUri());
-		message.setValueS32("result_code", event.getIntValue());
-		message.setValue("result_string", event.getStringValue());
-		message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK));
-		message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD));
-		sendMessage(message);
-		
-		setStatus(STATUS_LOADED);
+		if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+		{
+			LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete");
+			message.setValue("uri", event.getEventUri());
+			message.setValueS32("result_code", event.getIntValue());
+			message.setValue("result_string", event.getStringValue());
+			message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK));
+			message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD));
+			sendMessage(message);
+			
+			setStatus(STATUS_LOADED);
+		}
+		else if(mInitState == INIT_STATE_NAVIGATING)
+		{
+			mInitState = INIT_STATE_NAVIGATE_COMPLETE;
+		}
+
 	}
 
 	////////////////////////////////////////////////////////////////////////////////
 	// virtual
 	void onUpdateProgress(const EventType& event)
 	{
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "progress");
-		message.setValueS32("percent", event.getIntValue());
-		sendMessage(message);
+		if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+		{
+			LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "progress");
+			message.setValueS32("percent", event.getIntValue());
+			sendMessage(message);
+		}
 	}
 	
 	////////////////////////////////////////////////////////////////////////////////
 	// virtual
 	void onStatusTextChange(const EventType& event)
 	{
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "status_text");
-		message.setValue("status", event.getStringValue());
-		sendMessage(message);
+		if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+		{
+			LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "status_text");
+			message.setValue("status", event.getStringValue());
+			sendMessage(message);
+		}
 	}
 
 	////////////////////////////////////////////////////////////////////////////////
 	// virtual
 	void onTitleChange(const EventType& event)
 	{
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text");
-		message.setValue("name", event.getStringValue());
-		sendMessage(message);
+		if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+		{
+			LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text");
+			message.setValue("name", event.getStringValue());
+			sendMessage(message);
+		}
 	}
 
 	////////////////////////////////////////////////////////////////////////////////
 	// virtual
 	void onLocationChange(const EventType& event)
 	{
-		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "location_changed");
-		message.setValue("uri", event.getEventUri());
-		sendMessage(message);
+		if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+		{
+			LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "location_changed");
+			message.setValue("uri", event.getEventUri());
+			sendMessage(message);
+		}
 	}
 	
 	////////////////////////////////////////////////////////////////////////////////
@@ -488,7 +542,7 @@ MediaPluginWebKit::MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_
 //	std::cerr << "MediaPluginWebKit constructor" << std::endl;
 
 	mBrowserWindowId = 0;
-	mBrowserInitialized = false;
+	mInitState = INIT_STATE_UNINITIALIZED;
 	mNeedsUpdate = true;
 	mCanCut = false;
 	mCanCopy = false;
@@ -674,7 +728,14 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 				
 				if(!uri.empty())
 				{
-					LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, uri );
+					if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+					{
+						LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, uri );
+					}
+					else
+					{
+						mInitialNavigateURL = uri;
+					}
 				}
 			}
 			else if(message_name == "mouse_event")
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 9d44f34ea8b0ff451789db792c9fc3fe30d74f4b..4adef84cd3997d044429eae09c89d619764013a2 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -447,6 +447,7 @@ set(viewer_SOURCE_FILES
     llviewerassettype.cpp
     llvieweraudio.cpp
     llviewercamera.cpp
+	llviewerchat.cpp
     llviewercontrol.cpp
     llviewercontrollistener.cpp
     llviewerdisplay.cpp
@@ -946,6 +947,7 @@ set(viewer_HEADER_FILES
     llvieweraudio.h
     llviewerbuild.h
     llviewercamera.h
+	llviewerchat.h
     llviewercontrol.h
     llviewercontrollistener.h
     llviewerdisplay.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 8ad52784d33bafdc1f987362e9964a49a7180fae..94a2ca16f4300f1025633c08d4e649b2bcdaac83 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1132,7 +1132,7 @@
       <key>Type</key>
       <string>U32</string>
       <key>Value</key>
-      <integer>500</integer>
+      <integer>512</integer>
     </map>
     <key>CacheValidateCounter</key>
     <map>
@@ -4545,6 +4545,17 @@
     <key>Value</key>
     <integer>1</integer>
   </map>
+  <key>MediaPerformanceManagerDebug</key>
+  <map>
+    <key>Comment</key>
+    <string>Whether to show debug data for the media performance manager in the nearby media list.</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
   <key>MemoryLogFrequency</key>
         <map>
         <key>Comment</key>
@@ -5369,7 +5380,7 @@
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <real>0.0</real>
+      <real>1.0</real>
     </map>
     <key>PluginInstancesLow</key>
     <map>
@@ -5385,24 +5396,24 @@
     <key>PluginInstancesNormal</key>
     <map>
       <key>Comment</key>
-      <string>Limit on the number of inworld media plugins that will run at "normal" priority</string>
+      <string>Limit on the number of inworld media plugins that will run at "normal" or higher priority</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>U32</string>
       <key>Value</key>
-      <integer>4</integer>
+      <integer>2</integer>
     </map>
     <key>PluginInstancesTotal</key>
     <map>
       <key>Comment</key>
-      <string>Hard limit on the number of plugins that will be instantiated at once</string>
+      <string>Hard limit on the number of plugins that will be instantiated at once for inworld media</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>U32</string>
       <key>Value</key>
-      <integer>16</integer>
+      <integer>8</integer>
     </map>
     <key>PrecachingDelay</key>
     <map>
@@ -6304,7 +6315,7 @@
     <real>1.0</real>
   </map>
 
-  <key>RenderHighlightEnable</key>
+  <key>RenderHoverGlowEnable</key>
   <map>
     <key>Comment</key>
     <string>Show glow effect when hovering on interactive objects.</string>
@@ -6313,7 +6324,7 @@
     <key>Type</key>
     <string>Boolean</string>
     <key>Value</key>
-    <integer>1</integer>
+    <integer>0</integer>
   </map>
 
   <key>RenderHighlightFadeTime</key>
diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh
index 3209654498c49792d0c8e2ed5454467e4316f510..f84102e1fbe1a3af090a4339e4e65875e771d7e0 100755
--- a/indra/newview/linux_tools/wrapper.sh
+++ b/indra/newview/linux_tools/wrapper.sh
@@ -118,7 +118,7 @@ if [ -n "$LL_TCMALLOC" ]; then
     fi
 fi
 
-export SL_ENV='LD_LIBRARY_PATH="`pwd`"/lib:"`pwd`"/app_settings/mozilla-runtime-linux-i686:"${LD_LIBRARY_PATH}"'
+export SL_ENV='LD_LIBRARY_PATH="`pwd`"/lib:"${LD_LIBRARY_PATH}"'
 export SL_CMD='$LL_WRAPPER bin/do-not-directly-run-secondlife-bin'
 export SL_OPT="`cat etc/gridargs.dat` $@"
 
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index ca1688ad1f7a463bac899dc3ed437ec6ae408d12..1257cf97897a84ed695cd7ae104014b21fa42396 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -107,6 +107,7 @@
 
 #include "llnavigationbar.h" //to show/hide navigation bar when changing mouse look state
 #include "llagentui.h"
+#include "llchannelmanager.h"
 
 using namespace LLVOAvatarDefines;
 
@@ -2166,6 +2167,7 @@ void LLAgent::setBusy()
 	{
 		gBusyMenu->setLabel(LLTrans::getString("AvatarSetNotBusy"));
 	}
+	LLNotificationsUI::LLChannelManager::getInstance()->muteAllChannels(true);
 }
 
 //-----------------------------------------------------------------------------
@@ -2179,6 +2181,7 @@ void LLAgent::clearBusy()
 	{
 		gBusyMenu->setLabel(LLTrans::getString("AvatarSetBusy"));
 	}
+	LLNotificationsUI::LLChannelManager::getInstance()->muteAllChannels(false);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 9b4986247fd37725d7c8972946e8b91fbfb8c1fc..6cb96d13361c4dfade603f81e0928794e2cef1be 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -35,10 +35,11 @@
 #include "llagent.h" 
 #include "llagentwearables.h"
 
+#include "llcallbacklist.h"
 #include "llfloatercustomize.h"
 #include "llfloaterinventory.h"
 #include "llinventorybridge.h"
-#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "llinventorypanel.h"
 #include "llnotify.h"
 #include "llviewerregion.h"
@@ -82,6 +83,28 @@ class LLInitialWearablesFetch : public LLInventoryFetchDescendentsObserver
 
 protected:
 	void processWearablesMessage();
+	void processContents();
+	static void onIdle(void *userdata);
+};
+
+class LLLibraryOutfitsFetch : public LLInventoryFetchDescendentsObserver
+{
+public:
+	enum ELibraryOutfitFetchStep {
+		LOFS_FOLDER = 0,
+		LOFS_OUTFITS,
+		LOFS_CONTENTS
+	};
+	LLLibraryOutfitsFetch() : mCurrFetchStep(LOFS_FOLDER), mOutfitsPopulated(false) {}
+	~LLLibraryOutfitsFetch() {}
+	virtual void done();	
+protected:
+	void folderDone(void);
+	void outfitsDone(void);
+	void contentsDone(void);
+	enum ELibraryOutfitFetchStep mCurrFetchStep;
+	std::vector< std::pair< LLUUID, std::string > > mOutfits;
+	bool mOutfitsPopulated;
 };
 
 LLAgentWearables gAgentWearables;
@@ -903,6 +926,8 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
 			// will call done for us when everything is here.
 			gInventory.addObserver(outfit);
 		}
+		
+		gAgentWearables.populateMyOutfitsFolder();
 	}
 }
 
@@ -1261,7 +1286,7 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name)
 		LLFolderType::FT_OUTFIT,
 		new_folder_name);
 
-	LLAppearanceManager::shallowCopyCategory(LLAppearanceManager::getCOF(),folder_id, NULL);
+	LLAppearanceManager::instance().shallowCopyCategory(LLAppearanceManager::instance().getCOF(),folder_id, NULL);
 	
 #if 0  // BAP - fix to go into rename state automatically after outfit is created.
 	LLViewerInventoryCategory *parent_category = gInventory.getCategory(parent_id);
@@ -1391,7 +1416,7 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem
 			const LLUUID &item_id = getWearableItemID(type,i);
 			popWearable(type,i);
 			gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
-			LLAppearanceManager::removeItemLinks(item_id,false);
+			LLAppearanceManager::instance().removeItemLinks(item_id,false);
 
 			//queryWearableCache(); // moved below
 			if (old_wearable)
@@ -1408,7 +1433,7 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem
 		const LLUUID &item_id = getWearableItemID(type,index);
 		popWearable(type, index);
 		gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
-		LLAppearanceManager::removeItemLinks(item_id,false);
+		LLAppearanceManager::instance().removeItemLinks(item_id,false);
 
 		//queryWearableCache(); // moved below
 
@@ -2002,11 +2027,158 @@ void LLAgentWearables::updateServer()
 	gAgent.sendAgentSetAppearance();
 }
 
+void LLAgentWearables::populateMyOutfitsFolder(void)
+{	
+	LLLibraryOutfitsFetch* outfits = new LLLibraryOutfitsFetch();
+	
+	// What we do here is get the complete information on the items in
+	// the inventory, and set up an observer that will wait for that to
+	// happen.
+	LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+	const LLUUID my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
+
+	folders.push_back(my_outfits_id);
+	outfits->fetchDescendents(folders);
+	if(outfits->isEverythingComplete())
+	{
+		// everything is already here - call done.
+		outfits->done();
+	}
+	else
+	{
+		// it's all on it's way - add an observer, and the inventory
+		// will call done for us when everything is here.
+		gInventory.addObserver(outfits);
+	}
+}
+
+void LLLibraryOutfitsFetch::done()
+{
+	switch (mCurrFetchStep){
+		case LOFS_FOLDER:
+			mCurrFetchStep = LOFS_OUTFITS;
+			folderDone();
+			break;
+		case LOFS_OUTFITS:
+			mCurrFetchStep = LOFS_CONTENTS;
+			outfitsDone();
+			break;
+		case LOFS_CONTENTS:
+			// No longer need this observer hanging around.
+			gInventory.removeObserver(this);
+			contentsDone();
+			break;
+		default:
+			gInventory.removeObserver(this);
+			delete this;
+			return;
+	}
+	if (mOutfitsPopulated)
+	{
+		delete this;
+	}
+}
+
+void LLLibraryOutfitsFetch::folderDone(void)
+{
+	// Early out if we already have items in My Outfits.
+	LLInventoryModel::cat_array_t cat_array;
+	LLInventoryModel::item_array_t wearable_array;
+	gInventory.collectDescendents(mCompleteFolders.front(), cat_array, wearable_array, 
+								  LLInventoryModel::EXCLUDE_TRASH);
+	if (cat_array.count() > 0 || wearable_array.count() > 0)
+	{
+		mOutfitsPopulated = true;
+		gInventory.removeObserver(this);
+		return;
+	}
+	
+	// Get the UUID of the library's clothing folder
+	const LLUUID library_clothing_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING, false, true);
+	
+	mCompleteFolders.clear();
+	
+	// What we do here is get the complete information on the items in
+	// the inventory, and set up an observer that will wait for that to
+	// happen.
+	LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+	folders.push_back(library_clothing_id);
+	fetchDescendents(folders);
+	if(isEverythingComplete())
+	{
+		// everything is already here - call done.
+		outfitsDone();
+	}
+}
+
+void LLLibraryOutfitsFetch::outfitsDone(void)
+{
+	LLInventoryModel::cat_array_t cat_array;
+	LLInventoryModel::item_array_t wearable_array;
+	gInventory.collectDescendents(mCompleteFolders.front(), cat_array, wearable_array, 
+								  LLInventoryModel::EXCLUDE_TRASH);
+	
+	LLInventoryFetchDescendentsObserver::folder_ref_t folders;
+	for(S32 i = 0; i < cat_array.count(); ++i)
+	{
+		if (cat_array.get(i)->getName() != "More Outfits" && cat_array.get(i)->getName() != "Ruth"){
+			folders.push_back(cat_array.get(i)->getUUID());
+			mOutfits.push_back( std::make_pair(cat_array.get(i)->getUUID(), cat_array.get(i)->getName() ));
+		}
+	}
+	mCompleteFolders.clear();
+	fetchDescendents(folders);
+	if(isEverythingComplete())
+	{
+		// everything is already here - call done.
+		contentsDone();
+	}
+}
+
+void LLLibraryOutfitsFetch::contentsDone(void)
+{
+	for(S32 i = 0; i < (S32)mOutfits.size(); ++i)
+	{
+		// First, make a folder in the My Outfits directory.
+		const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
+		LLUUID folder_id = gInventory.createNewCategory(parent_id,
+														LLFolderType::FT_OUTFIT,
+														mOutfits[i].second);
+		
+		LLAppearanceManager::getInstance()->shallowCopyCategory(mOutfits[i].first, folder_id, NULL);
+		gInventory.notifyObservers();
+	}
+	mOutfitsPopulated = true;
+}
+
+//--------------------------------------------------------------------
+// InitialWearablesFetch
+// 
+// This grabs contents from the COF and processes them.
+// The processing is handled in idle(), i.e. outside of done(),
+// to avoid gInventory.notifyObservers recursion.
+//--------------------------------------------------------------------
+
+// virtual
 void LLInitialWearablesFetch::done()
 {
-	// No longer need this observer hanging around.
+	// Delay processing the actual results of this so it's not handled within
+	// gInventory.notifyObservers.  The results will be handled in the next
+	// idle tick instead.
 	gInventory.removeObserver(this);
+	gIdleCallbacks.addFunction(onIdle, this);
+}
+
+// static
+void LLInitialWearablesFetch::onIdle(void *data)
+{
+	gIdleCallbacks.deleteFunction(onIdle, data);
+	LLInitialWearablesFetch *self = reinterpret_cast<LLInitialWearablesFetch*>(data);
+	self->processContents();
+}
 
+void LLInitialWearablesFetch::processContents()
+{
 	// Fetch the wearable items from the Current Outfit Folder
 	LLInventoryModel::cat_array_t cat_array;
 	LLInventoryModel::item_array_t wearable_array;
@@ -2014,7 +2186,7 @@ void LLInitialWearablesFetch::done()
 	gInventory.collectDescendentsIf(mCompleteFolders.front(), cat_array, wearable_array, 
 									LLInventoryModel::EXCLUDE_TRASH, is_wearable);
 
-	LLAppearanceManager::setAttachmentInvLinkEnable(true);
+	LLAppearanceManager::instance().setAttachmentInvLinkEnable(true);
 	if (wearable_array.count() > 0)
 	{
 		LLAppearanceManager::instance().updateAppearanceFromCOF();
@@ -2023,7 +2195,7 @@ void LLInitialWearablesFetch::done()
 	{
 		processWearablesMessage();
 		// Create links for attachments that may have arrived before the COF existed.
-		LLAppearanceManager::linkRegisteredAttachments();
+		LLAppearanceManager::instance().linkRegisteredAttachments();
 	}
 	delete this;
 }
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 9017c25fc64240ab7eb163294274d210915e824a..8f3a16501e12b11e3398e7b54c9c779665041eaa 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -169,9 +169,11 @@ class LLAgentWearables
 								  const LLDynamicArray<S32>& attachments_to_include,
 								  BOOL rename_clothing);
 	
-	// Note:	wearables_to_include should be a list of EWearableType types
-	//			attachments_to_include should be a list of attachment points
 	LLUUID			makeNewOutfitLinks(const std::string& new_folder_name);
+	
+	// Should only be called if we *know* we've never done so before, since users may
+	// not want the Library outfits to stay in their quick outfit selector and can delete them.
+	void			populateMyOutfitsFolder(void);
 
 private:
 	void			makeNewOutfitDone(S32 type, U32 index); 
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 0901289dace7f6e4e85ab676782f0fcfd5599e85..80ac9e4085b02e0b52976f7f3bce5f40af9c7af8 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -32,18 +32,20 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llagent.h"
+#include "llagentwearables.h"
 #include "llappearancemgr.h"
-#include "llinventorymodel.h"
-#include "llnotifications.h"
+#include "llfloatercustomize.h"
 #include "llgesturemgr.h"
 #include "llinventorybridge.h"
-#include "llwearablelist.h"
-#include "llagentwearables.h"
-#include "llagent.h"
+#include "llinventoryobserver.h"
+#include "llnotifications.h"
+#include "llpanelappearance.h"
+#include "llsidetray.h"
 #include "llvoavatar.h"
 #include "llvoavatarself.h"
 #include "llviewerregion.h"
-#include "llfloatercustomize.h"
+#include "llwearablelist.h"
 
 class LLWearInventoryCategoryCallback : public LLInventoryCallback
 {
@@ -72,7 +74,7 @@ class LLWearInventoryCategoryCallback : public LLInventoryCallback
 		// If the inventory callback manager goes away, we're shutting down, no longer want the callback.
 		if( LLInventoryCallbackManager::is_instantiated() )
 		{
-			LLAppearanceManager::wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend);
+			LLAppearanceManager::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend);
 		}
 		else
 		{
@@ -171,7 +173,7 @@ void LLOutfitObserver::done()
 	else
 	{
 		// Wear the inventory category.
-		LLAppearanceManager::wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend);
+		LLAppearanceManager::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend);
 	}
 }
 
@@ -251,7 +253,7 @@ class LLUpdateAppearanceOnDestroy: public LLInventoryCallback
 
 	virtual ~LLUpdateAppearanceOnDestroy()
 	{
-		LLAppearanceManager::updateAppearanceFromCOF();
+		LLAppearanceManager::instance().updateAppearanceFromCOF();
 	}
 
 	/* virtual */ void fire(const LLUUID& inv_item)
@@ -296,7 +298,7 @@ struct LLWearableHoldingPattern
 	bool append;
 };
 
-/* static */ void removeDuplicateItems(LLInventoryModel::item_array_t& items)
+static void removeDuplicateItems(LLInventoryModel::item_array_t& items)
 {
 	LLInventoryModel::item_array_t new_items;
 	std::set<LLUUID> items_seen;
@@ -323,175 +325,44 @@ struct LLWearableHoldingPattern
 	items = new_items;
 }
 
-void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventoryModel::item_array_t& src)
+static void onWearableAssetFetch(LLWearable* wearable, void* data)
 {
-	LLInventoryModel::item_array_t new_dst;
-	std::set<LLUUID> mark_inventory;
-
-	S32 inventory_dups = 0;
+	LLWearableHoldingPattern* holder = (LLWearableHoldingPattern*)data;
+	bool append = holder->append;
 	
-	for (LLInventoryModel::item_array_t::const_iterator src_pos = src.begin();
-		  src_pos != src.end();
-		  ++src_pos)
-	{
-		LLUUID src_item_id = (*src_pos)->getLinkedUUID();
-		mark_inventory.insert(src_item_id);
-	}
-
-	for (LLInventoryModel::item_array_t::const_iterator dst_pos = dst.begin();
-		  dst_pos != dst.end();
-		  ++dst_pos)
+	if(wearable)
 	{
-		LLUUID dst_item_id = (*dst_pos)->getLinkedUUID();
-
-		if (mark_inventory.find(dst_item_id) == mark_inventory.end())
-		{
-			// Item is not already present in COF.
-			new_dst.put(*dst_pos);
-			mark_inventory.insert(dst_item_id);
-		}
-		else
+		for (LLWearableHoldingPattern::found_list_t::iterator iter = holder->mFoundList.begin();
+			 iter != holder->mFoundList.end(); ++iter)
 		{
-			inventory_dups++;
+			LLFoundData* data = *iter;
+			if(wearable->getAssetID() == data->mAssetID)
+			{
+				data->mWearable = wearable;
+				break;
+			}
 		}
 	}
-	llinfos << "removeDups, original " << dst.count() << " final " << new_dst.count()
-			<< " inventory dups " << inventory_dups << llendl;
-	
-	dst = new_dst;
+	holder->mResolved += 1;
+	if(holder->mResolved >= (S32)holder->mFoundList.size())
+	{
+		LLAppearanceManager::instance().updateAgentWearables(holder, append);
+	}
 }
 
-/* static */ 
 LLUUID LLAppearanceManager::getCOF()
 {
 	return gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
 }
 
 // Update appearance from outfit folder.
-/* static */ 
 void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, bool append)
 {
 	if (!proceed)
 		return;
-
-#if 1 
-	updateCOF(category,append);
-#else
-	if (append)
-	{
-		updateCOFFromCategory(category, append); // append is true - add non-duplicates to COF.
-	}
-	else
-	{
-		LLViewerInventoryCategory* catp = gInventory.getCategory(category);
-		if (catp->getPreferredType() == LLFolderType::FT_NONE ||
-			LLFolderType::lookupIsEnsembleType(catp->getPreferredType()))
-		{
-			updateCOFFromCategory(category, append);  // append is false - rebuild COF.
-		}
-		else if (catp->getPreferredType() == LLFolderType::FT_OUTFIT)
-		{
-			rebuildCOFFromOutfit(category);
-		}
-	}
-#endif
-}
-
-// Append to current COF contents by recursively traversing a folder.
-/* static */ 
-void LLAppearanceManager::updateCOFFromCategory(const LLUUID& category, bool append)
-{
-		// BAP consolidate into one "get all 3 types of descendents" function, use both places.
-	LLInventoryModel::item_array_t wear_items;
-	LLInventoryModel::item_array_t obj_items;
-	LLInventoryModel::item_array_t gest_items;
-	bool follow_folder_links = false;
-	getUserDescendents(category, wear_items, obj_items, gest_items, follow_folder_links);
-
-	// Find all the wearables that are in the category's subtree.	
-	lldebugs << "appendCOFFromCategory()" << llendl;
-	if( !wear_items.count() && !obj_items.count() && !gest_items.count())
-	{
-		LLNotifications::instance().add("CouldNotPutOnOutfit");
-		return;
-	}
-		
-	const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
-	// Processes that take time should show the busy cursor
-	//inc_busy_count();
-		
-	LLInventoryModel::cat_array_t cof_cats;
-	LLInventoryModel::item_array_t cof_items;
-	gInventory.collectDescendents(current_outfit_id, cof_cats, cof_items,
-								  LLInventoryModel::EXCLUDE_TRASH);
-	// Remove duplicates
-	if (append)
-	{
-		removeDuplicateItems(wear_items, cof_items);
-		removeDuplicateItems(obj_items, cof_items);
-		removeDuplicateItems(gest_items, cof_items);
-	}
-
-	S32 total_links = gest_items.count() + wear_items.count() + obj_items.count();
-
-	if (!append && total_links > 0)
-	{
-		purgeCOFBeforeRebuild(category);
-	}
-
-	LLPointer<LLUpdateAppearanceOnDestroy> link_waiter = new LLUpdateAppearanceOnDestroy;
-	
-	// Link all gestures in this folder
-	if (gest_items.count() > 0)
-	{
-		llinfos << "Linking " << gest_items.count() << " gestures" << llendl;
-		for (S32 i = 0; i < gest_items.count(); ++i)
-		{
-			const LLInventoryItem* gest_item = gest_items.get(i).get();
-			link_inventory_item(gAgent.getID(), gest_item->getLinkedUUID(), current_outfit_id,
-								gest_item->getName(),
-								LLAssetType::AT_LINK, link_waiter);
-		}
-	}
-
-	// Link all wearables
-	if(wear_items.count() > 0)
-	{
-		llinfos << "Linking " << wear_items.count() << " wearables" << llendl;
-		for(S32 i = 0; i < wear_items.count(); ++i)
-		{
-			// Populate the current outfit folder with links to the newly added wearables
-			const LLInventoryItem* wear_item = wear_items.get(i).get();
-			link_inventory_item(gAgent.getID(), 
-								wear_item->getLinkedUUID(), // If this item is a link, then we'll use the linked item's UUID.
-								current_outfit_id, 
-								wear_item->getName(),
-								LLAssetType::AT_LINK, 
-								link_waiter);
-		}
-	}
-
-	// Link all attachments.
-	if( obj_items.count() > 0 )
-	{
-		llinfos << "Linking " << obj_items.count() << " attachments" << llendl;
-		LLVOAvatar* avatar = gAgent.getAvatarObject();
-		if( avatar )
-		{
-			for(S32 i = 0; i < obj_items.count(); ++i)
-			{
-				const LLInventoryItem* obj_item = obj_items.get(i).get();
-				link_inventory_item(gAgent.getID(), 
-									obj_item->getLinkedUUID(), // If this item is a link, then we'll use the linked item's UUID.
-									current_outfit_id, 
-									obj_item->getName(),
-									LLAssetType::AT_LINK, link_waiter);
-			}
-		}
-	}
+	LLAppearanceManager::instance().updateCOF(category,append);
 }
 
-/* static */ 
 void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
 											  LLPointer<LLInventoryCallback> cb)
 {
@@ -535,7 +406,8 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 		}
 	}
 }
-/* static */ void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit_links)
+
+void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit_links)
 {
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
@@ -552,7 +424,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 
 // Keep the last N wearables of each type.  For viewer 2.0, N is 1 for
 // both body parts and clothing items.
-/* static */ void LLAppearanceManager::filterWearableItems(
+void LLAppearanceManager::filterWearableItems(
 	LLInventoryModel::item_array_t& items, S32 max_per_type)
 {
 	// Divvy items into arrays by wearable type.
@@ -583,8 +455,8 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 }
 
 // Create links to all listed items.
-/* static */ void LLAppearanceManager::linkAll(const LLUUID& category,
-											   LLInventoryModel::item_array_t& items,
+void LLAppearanceManager::linkAll(const LLUUID& category,
+								  LLInventoryModel::item_array_t& items,
 											   LLPointer<LLInventoryCallback> cb)
 {
 	for (S32 i=0; i<items.count(); i++)
@@ -599,7 +471,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 	}
 }
 
-/* static */ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
+void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
 {
 	const LLUUID cof = getCOF();
 
@@ -656,145 +528,17 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
 	{
 		link_inventory_item(gAgent.getID(), category, cof, catp->getName(),
 							LLAssetType::AT_LINK_FOLDER, link_waiter);
-	}
-							  
-}
-
-/* static */ 
-bool LLAppearanceManager::isMandatoryWearableType(EWearableType type)
-{
-	return (type==WT_SHAPE) || (type==WT_SKIN) || (type== WT_HAIR) || (type==WT_EYES);
-}
 
-// For mandatory body parts.
-/* static */ 
-void LLAppearanceManager::checkMandatoryWearableTypes(const LLUUID& category, std::set<EWearableType>& types_found)
-{
-	LLInventoryModel::cat_array_t new_cats;
-	LLInventoryModel::item_array_t new_items;
-	gInventory.collectDescendents(category, new_cats, new_items,
-								  LLInventoryModel::EXCLUDE_TRASH);
-	std::set<EWearableType> wt_types_found;
-	for (S32 i = 0; i < new_items.count(); ++i)
-	{
-		LLViewerInventoryItem *itemp = new_items.get(i);
-		if (itemp->isWearableType())
-		{
-			EWearableType type = itemp->getWearableType();
-			if (isMandatoryWearableType(type))
-			{
-				types_found.insert(type);
-			}
-		}
-	}
-}
-
-// Remove everything from the COF that we safely can before replacing
-// with contents of new category.  This means preserving any mandatory
-// body parts that aren't present in the new category, and getting rid
-// of everything else.
-/* static */ 
-void LLAppearanceManager::purgeCOFBeforeRebuild(const LLUUID& category)
-{
-	// See which mandatory body types are present in the new category.
-	std::set<EWearableType> wt_types_found;
-	checkMandatoryWearableTypes(category,wt_types_found);
-	
-	LLInventoryModel::cat_array_t cof_cats;
-	LLInventoryModel::item_array_t cof_items;
-	gInventory.collectDescendents(getCOF(), cof_cats, cof_items,
-								  LLInventoryModel::EXCLUDE_TRASH);
-	for (S32 i = 0; i < cof_items.count(); ++i)
-	{
-		LLViewerInventoryItem *itemp = cof_items.get(i);
-		if (itemp->isWearableType())
+		// Update the current outfit name of the appearance sidepanel.
+		LLPanelAppearance* panel_appearance = dynamic_cast<LLPanelAppearance *>(LLSideTray::getInstance()->getPanel("panel_appearance"));
+		if (panel_appearance)
 		{
-			EWearableType type = itemp->getWearableType();
-			if (!isMandatoryWearableType(type) || (wt_types_found.find(type) != wt_types_found.end()))
-			{
-				// Not mandatory or supplied by the new category - OK to delete
-				gInventory.purgeObject(cof_items.get(i)->getUUID());
-			}
-		}
-		else
-		{
-			// Not a wearable - always purge
-			gInventory.purgeObject(cof_items.get(i)->getUUID());
+			panel_appearance->refreshCurrentLookName(catp->getName());
 		}
 	}
-	gInventory.notifyObservers();
-}
-
-// Replace COF contents from a given outfit folder.
-/* static */ 
-void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category)
-{
-	lldebugs << "rebuildCOFFromOutfit()" << llendl;
-
-	dumpCat(category,"start, source outfit");
-	dumpCat(getCOF(),"start, COF");
-
-	// Find all the wearables that are in the category's subtree.	
-	LLInventoryModel::item_array_t items;
-	getCOFValidDescendents(category, items);
-
-	if( items.count() == 0)
-	{
-		LLNotifications::instance().add("CouldNotPutOnOutfit");
-		return;
-	}
-
-	// Processes that take time should show the busy cursor
-	//inc_busy_count();
-
-	//dumpCat(current_outfit_id,"COF before remove:");
-
-	//dumpCat(current_outfit_id,"COF after remove:");
-
-	purgeCOFBeforeRebuild(category);
-	
-	LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy;
-	LLUUID current_outfit_id = getCOF();
-	LLAppearanceManager::shallowCopyCategory(category, current_outfit_id, link_waiter);
-
-	//dumpCat(current_outfit_id,"COF after shallow copy:");
-
-	// Create a link to the outfit that we wore.
-	LLViewerInventoryCategory* catp = gInventory.getCategory(category);
-	if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
-	{
-		link_inventory_item(gAgent.getID(), category, current_outfit_id, catp->getName(),
-							LLAssetType::AT_LINK_FOLDER, link_waiter);
-	}
-}
-
-/* static */
-void LLAppearanceManager::onWearableAssetFetch(LLWearable* wearable, void* data)
-{
-	LLWearableHoldingPattern* holder = (LLWearableHoldingPattern*)data;
-	bool append = holder->append;
-	
-	if(wearable)
-	{
-		for (LLWearableHoldingPattern::found_list_t::iterator iter = holder->mFoundList.begin();
-			 iter != holder->mFoundList.end(); ++iter)
-		{
-			LLFoundData* data = *iter;
-			if(wearable->getAssetID() == data->mAssetID)
-			{
-				data->mWearable = wearable;
-				break;
-			}
-		}
-	}
-	holder->mResolved += 1;
-	if(holder->mResolved >= (S32)holder->mFoundList.size())
-	{
-		LLAppearanceManager::updateAgentWearables(holder, append);
-	}
+							  
 }
 
-/* static */
 void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, bool append)
 {
 	lldebugs << "updateAgentWearables()" << llendl;
@@ -835,7 +579,6 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder,
 //	dec_busy_count();
 }
 
-/* static */ 
 void LLAppearanceManager::updateAppearanceFromCOF()
 {
 	dumpCat(getCOF(),"COF, start");
@@ -903,7 +646,7 @@ void LLAppearanceManager::updateAppearanceFromCOF()
 			LLWearableList::instance().getAsset(found->mAssetID,
 												found->mName,
 												found->mAssetType,
-												LLAppearanceManager::onWearableAssetFetch,
+												onWearableAssetFetch,
 												(void*)holder);
 		}
 	}
@@ -916,22 +659,6 @@ void LLAppearanceManager::updateAppearanceFromCOF()
 	}
 }
 
-/* static */ 
-void LLAppearanceManager::getCOFValidDescendents(const LLUUID& category,
-												 LLInventoryModel::item_array_t& items)
-{
-	LLInventoryModel::cat_array_t cats;
-	LLFindCOFValidItems is_cof_valid;
-	bool follow_folder_links = false;
-	gInventory.collectDescendentsIf(category,
-									cats, 
-									items, 
-									LLInventoryModel::EXCLUDE_TRASH,
-									is_cof_valid, 
-									follow_folder_links);
-}
-
-/* static */
 void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category,
 													LLInventoryModel::item_array_t& items,
 													LLAssetType::EType type,
@@ -947,7 +674,6 @@ void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category,
 									follow_folder_links);
 }
 
-/* static */ 
 void LLAppearanceManager::getUserDescendents(const LLUUID& category, 
 											 LLInventoryModel::item_array_t& wear_items,
 											 LLInventoryModel::item_array_t& obj_items,
@@ -1011,7 +737,6 @@ void LLAppearanceManager::wearInventoryCategory(LLInventoryCategory* category, b
 }
 
 // *NOTE: hack to get from avatar inventory to avatar
-/* static */
 void LLAppearanceManager::wearInventoryCategoryOnAvatar( LLInventoryCategory* category, bool append )
 {
 	// Avoid unintentionally overwriting old wearables.  We have to do
@@ -1023,7 +748,9 @@ void LLAppearanceManager::wearInventoryCategoryOnAvatar( LLInventoryCategory* ca
 			 	
 	if( gFloaterCustomize )
 	{
-		gFloaterCustomize->askToSaveIfDirty(boost::bind(LLAppearanceManager::changeOutfit, _1, category->getUUID(), append));
+		gFloaterCustomize->askToSaveIfDirty(boost::bind(&LLAppearanceManager::changeOutfit,
+														&LLAppearanceManager::instance(),
+														_1, category->getUUID(), append));
 	}
 	else
 	{
@@ -1031,7 +758,6 @@ void LLAppearanceManager::wearInventoryCategoryOnAvatar( LLInventoryCategory* ca
 	}
 }
 
-/* static */
 void LLAppearanceManager::wearOutfitByName(const std::string& name)
 {
 	llinfos << "Wearing category " << name << llendl;
@@ -1084,8 +810,8 @@ bool areMatchingWearables(const LLViewerInventoryItem *a, const LLViewerInventor
 	return (a->isWearableType() && b->isWearableType() &&
 			(a->getWearableType() == b->getWearableType()));
 }
-/* static */
-void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update )
+
+void LLAppearanceManager::addItemLink( LLInventoryItem* item, bool do_update )
 {
 	LLViewerInventoryItem *vitem = dynamic_cast<LLViewerInventoryItem*>(item);
 	if (!vitem)
@@ -1138,8 +864,7 @@ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update )
 	return;
 }
 
-/* static */
-void LLAppearanceManager::wearEnsemble( LLInventoryCategory* cat, bool do_update )
+void LLAppearanceManager::addEnsembleLink( LLInventoryCategory* cat, bool do_update )
 {
 #if SUPPORT_ENSEMBLES
 	// BAP add check for already in COF.
@@ -1153,7 +878,6 @@ void LLAppearanceManager::wearEnsemble( LLInventoryCategory* cat, bool do_update
 #endif
 }
 
-/* static */
 void LLAppearanceManager::removeItemLinks(const LLUUID& item_id, bool do_update)
 {
 	LLInventoryModel::cat_array_t cat_array;
@@ -1178,7 +902,6 @@ void LLAppearanceManager::removeItemLinks(const LLUUID& item_id, bool do_update)
 
 //#define DUMP_CAT_VERBOSE
 
-/* static */
 void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg)
 {
 	LLInventoryModel::cat_array_t cats;
@@ -1200,7 +923,6 @@ void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg)
 	llinfos << msg << " count " << items.count() << llendl;
 }
 
-/* static */
 void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& items,
 										const std::string& msg)
 {
@@ -1213,15 +935,19 @@ void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& it
 	llinfos << llendl;
 }
 
+LLAppearanceManager::LLAppearanceManager():
+	mAttachmentInvLinkEnabled(false)
+{
+}
 
-std::set<LLUUID> LLAppearanceManager::sRegisteredAttachments;
-bool LLAppearanceManager::sAttachmentInvLinkEnabled(false);
+LLAppearanceManager::~LLAppearanceManager()
+{
+}
 
-/* static */
 void LLAppearanceManager::setAttachmentInvLinkEnable(bool val)
 {
 	llinfos << "setAttachmentInvLinkEnable => " << (int) val << llendl;
-	sAttachmentInvLinkEnabled = val;
+	mAttachmentInvLinkEnabled = val;
 }
 
 void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
@@ -1241,19 +967,18 @@ void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)
        llinfos << llendl;
 }
 
-/* static */
 void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
 {
-       sRegisteredAttachments.insert(item_id);
-       //dumpAttachmentSet(sRegisteredAttachments,"after register:");
+       mRegisteredAttachments.insert(item_id);
+       //dumpAttachmentSet(mRegisteredAttachments,"after register:");
 
-	   if (sAttachmentInvLinkEnabled)
+	   if (mAttachmentInvLinkEnabled)
 	   {
 		   LLViewerInventoryItem *item = gInventory.getItem(item_id);
 		   if (item)
 		   {
 			   //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:");
-			   LLAppearanceManager::wearItem(item,false);  // Add COF link for item.
+			   LLAppearanceManager::addItemLink(item,false);  // Add COF link for item.
 			   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
 			   gInventory.notifyObservers();
 		   }
@@ -1264,13 +989,12 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id)
 	   }
 }
 
-/* static */
 void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
 {
-       sRegisteredAttachments.erase(item_id);
-       //dumpAttachmentSet(sRegisteredAttachments,"after unregister:");
+       mRegisteredAttachments.erase(item_id);
+       //dumpAttachmentSet(mRegisteredAttachments,"after unregister:");
 
-	   if (sAttachmentInvLinkEnabled)
+	   if (mAttachmentInvLinkEnabled)
 	   {
 		   //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:");
 		   LLAppearanceManager::removeItemLinks(item_id, false);
@@ -1284,21 +1008,20 @@ void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)
 	   }
 }
 
-/* static */
 void LLAppearanceManager::linkRegisteredAttachments()
 {
-	for (std::set<LLUUID>::iterator it = sRegisteredAttachments.begin();
-		 it != sRegisteredAttachments.end();
+	for (std::set<LLUUID>::iterator it = mRegisteredAttachments.begin();
+		 it != mRegisteredAttachments.end();
 		 ++it)
 	{
 		LLUUID item_id = *it;
 		LLViewerInventoryItem *item = gInventory.getItem(item_id);
 		if (item)
 		{
-			wearItem(item, false);
+			addItemLink(item, false);
 			gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
 			gInventory.notifyObservers();
 		}
 	}
-	sRegisteredAttachments.clear();
+	mRegisteredAttachments.clear();
 }
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 7dea16b6cf0da25213b9f08e2cb3db647addbae6..88d3320d1fa3d853f27bd4ffac169f275dee76b6 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -42,66 +42,71 @@ struct LLWearableHoldingPattern;
 
 class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
 {
+	friend class LLSingleton<LLAppearanceManager>;
+	
 public:
-	static void updateAppearanceFromCOF();
-	static bool needToSaveCOF();
-	static void changeOutfit(bool proceed, const LLUUID& category, bool append);
-	static void updateCOF(const LLUUID& category, bool append = false);
-	static void updateCOFFromCategory(const LLUUID& category, bool append);
-	static void rebuildCOFFromOutfit(const LLUUID& category);
-	static void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append);
-	static void wearInventoryCategoryOnAvatar(LLInventoryCategory* category, bool append);
-	static void wearOutfitByName(const std::string& name);
-	static void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
-									LLPointer<LLInventoryCallback> cb);
+	void updateAppearanceFromCOF();
+	bool needToSaveCOF();
+	void updateCOF(const LLUUID& category, bool append = false);
+	void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append);
+	void wearInventoryCategoryOnAvatar(LLInventoryCategory* category, bool append);
+	void wearOutfitByName(const std::string& name);
+	void changeOutfit(bool proceed, const LLUUID& category, bool append);
 
 	// Add COF link to individual item.
-	static void wearItem(LLInventoryItem* item, bool do_update = true);
+	void addItemLink(LLInventoryItem* item, bool do_update = true);
 
 	// Add COF link to ensemble folder.
-	static void wearEnsemble(LLInventoryCategory* item, bool do_update = true);
-	static LLUUID getCOF();
+	void addEnsembleLink(LLInventoryCategory* item, bool do_update = true);
+
+	// Copy all items in a category.
+	void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
+							 LLPointer<LLInventoryCallback> cb);
+
+	// Find the Current Outfit folder.
+	LLUUID getCOF();
 
 	// Remove COF entries
-	static void removeItemLinks(const LLUUID& item_id, bool do_update = true);
+	void removeItemLinks(const LLUUID& item_id, bool do_update = true);
+
+	void updateAgentWearables(LLWearableHoldingPattern* holder, bool append);
 
 	// For debugging - could be moved elsewhere.
-	static void dumpCat(const LLUUID& cat_id, const std::string& msg);
-	static void dumpItemArray(const LLInventoryModel::item_array_t& items, const std::string& msg);
-	static void unregisterAttachment(const LLUUID& item_id);
-	static void registerAttachment(const LLUUID& item_id);
-	static void setAttachmentInvLinkEnable(bool val);
-	static void linkRegisteredAttachments();
+	void dumpCat(const LLUUID& cat_id, const std::string& msg);
+	void dumpItemArray(const LLInventoryModel::item_array_t& items, const std::string& msg);
+
+	// Attachment link management
+	void unregisterAttachment(const LLUUID& item_id);
+	void registerAttachment(const LLUUID& item_id);
+	void setAttachmentInvLinkEnable(bool val);
+	void linkRegisteredAttachments();
+
+protected:
+	LLAppearanceManager();
+	~LLAppearanceManager();
 
 private:
-	static void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type);
-	static void linkAll(const LLUUID& category,
+
+	void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type);
+	void linkAll(const LLUUID& category,
 						LLInventoryModel::item_array_t& items,
 						LLPointer<LLInventoryCallback> cb);
 	
-	static void getDescendentsOfAssetType(const LLUUID& category, 
+	void getDescendentsOfAssetType(const LLUUID& category, 
 										  LLInventoryModel::item_array_t& items,
 										  LLAssetType::EType type,
 										  bool follow_folder_links);
 
-	static void getCOFValidDescendents(const LLUUID& category, 
-									   LLInventoryModel::item_array_t& items);
-									   
-	static void getUserDescendents(const LLUUID& category, 
+	void getUserDescendents(const LLUUID& category, 
 								   LLInventoryModel::item_array_t& wear_items,
 								   LLInventoryModel::item_array_t& obj_items,
 								   LLInventoryModel::item_array_t& gest_items,
 								   bool follow_folder_links);
-	static void onWearableAssetFetch(LLWearable* wearable, void* data);
-	static void updateAgentWearables(LLWearableHoldingPattern* holder, bool append);
-	static bool isMandatoryWearableType(EWearableType type);
-	static void checkMandatoryWearableTypes(const LLUUID& category, std::set<EWearableType>& types_found);
-	static void purgeCOFBeforeRebuild(const LLUUID& category);
-	static void purgeCategory(const LLUUID& category, bool keep_outfit_links);
 
-	static std::set<LLUUID> sRegisteredAttachments;
-	static bool sAttachmentInvLinkEnabled;
+	void purgeCategory(const LLUUID& category, bool keep_outfit_links);
 
+	std::set<LLUUID> mRegisteredAttachments;
+	bool mAttachmentInvLinkEnabled;
 };
 
 #define SUPPORT_ENSEMBLES 0
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 845a264327d8d6f9b1f443808b55e37a7b3b4e31..f82d17808954775dc00ce6752bf012491f3b8923 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -89,6 +89,8 @@
 #include "llvfsthread.h"
 #include "llvolumemgr.h"
 
+#include "llnotificationmanager.h"
+
 // Third party library includes
 #include <boost/bind.hpp>
 
@@ -2340,6 +2342,8 @@ bool LLAppViewer::initWindow()
 		gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"),
 		gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"),
 		FALSE, ignorePixelDepth);
+
+	LLNotificationsUI::LLNotificationManager::getInstance();
 		
 	if (gSavedSettings.getBOOL("WindowFullScreen"))
 	{
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index 4d85ecb97cd522d0893844095d0540713640f0d4..38843c72215f3f96d499c2d25b886b25590b3cab 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -40,7 +40,7 @@
 #include "llfloaterbuycurrency.h"
 #include "llfilepicker.h"
 #include "llnotify.h"
-#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "llpermissionsflags.h"
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index fd711b72b0e9c06883b7f677e589705403f538f8..7985ccc2a1d0a549e3e552dee366e39fc36081e4 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -237,7 +237,7 @@ void LLBottomTray::setVisible(BOOL visible)
 			LLView* viewp = *child_it;
 			std::string name = viewp->getName();
 			
-			if ("chat_bar" == name || "movement_panel" == name || "cam_panel" == name || "snapshot_panel" == name)
+			if ("chat_bar" == name || "movement_panel" == name || "cam_panel" == name || "snapshot_panel" == name || "gesture_panel" == name)
 				continue;
 			else 
 			{
@@ -317,10 +317,9 @@ BOOL LLBottomTray::postBuild()
 	// Registering Chat Bar to receive Voice client status change notifications.
 	gVoiceClient->addObserver(this);
 
-	if (mChicletPanel && mToolbarStack && mNearbyChatBar)
-	{
-		verifyChildControlsSizes();
-	}
+	mObjectDefaultWidthMap[RS_BUTTON_GESTURES] = mGesturePanel->getRect().getWidth();
+	mObjectDefaultWidthMap[RS_BUTTON_MOVEMENT] = mMovementPanel->getRect().getWidth();
+	mObjectDefaultWidthMap[RS_BUTTON_CAMERA]   = mCamPanel->getRect().getWidth();
 
 	return TRUE;
 }
@@ -340,35 +339,6 @@ void LLBottomTray::log(LLView* panel, const std::string& descr)
 		; 
 }
 
-void LLBottomTray::verifyChildControlsSizes()
-{
-	LLRect rect = mChicletPanel->getRect();
-	/*
-	if (rect.getWidth() < mChicletPanel->getMinWidth())
-	{
-		llwarns << "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ: chiclet panel less then min" << llendl;
-		mChicletPanel->reshape(mChicletPanel->getMinWidth(), rect.getHeight());
-	}
-*/
-	rect = mNearbyChatBar->getRect();
-/*
-	if (rect.getWidth() < mNearbyChatBar->getMinWidth())
-	{
-		llwarns << "WWWWWWWWWWWWWWWWWWWWWWWWWWWWW: near chat panel less then min" << llendl;
-		mNearbyChatBar->reshape(mNearbyChatBar->getMinWidth(), rect.getHeight());
-	}
-	else 
-*/
-		if (rect.getWidth() > mNearbyChatBar->getMaxWidth())
-	{
-		llerrs << "WWWWWWWWWWWWWWWWWWWWWWWWWWWWW: near chat panel more then max width" << llendl;
-
-		rect.setLeftTopAndSize(rect.mLeft, rect.mTop, mNearbyChatBar->getMaxWidth(), rect.getHeight());
-		mNearbyChatBar->reshape(mNearbyChatBar->getMaxWidth(), rect.getHeight());
-		mNearbyChatBar->setRect(rect);
-	}
-}
-
 void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 {
 	static S32 debug_calling_number = 0;
@@ -393,7 +363,6 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 	if (mChicletPanel && mToolbarStack && mNearbyChatBar)
 	{
 		mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE);
- 		verifyChildControlsSizes();
 
 		// bottom tray is narrowed
 		if (delta_width < 0)
@@ -437,7 +406,6 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 		}
 	}
 
-	lldebugs << "There is no enough width to reshape all children: " << extra_shrink_width << llendl;
 	if (should_be_reshaped)
 	{
 		lldebugs << "Reshape all children with width: " << width << llendl;
@@ -508,7 +476,12 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 	S32 buttons_freed_width = 0;
 	if (still_should_be_processed)
 	{
-		processHideButton(RS_BUTTON_SNAPSHOT, &delta_width, &buttons_freed_width);
+		processShrinkButtons(&delta_width);
+
+		if (delta_width < 0)
+		{
+			processHideButton(RS_BUTTON_SNAPSHOT, &delta_width, &buttons_freed_width);
+		}
 
 		if (delta_width < 0)
 		{
@@ -528,7 +501,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 		if (delta_width < 0)
 		{
 			extra_shrink_width = -delta_width;
-			lldebugs << "There is no enough room for bottom tray, resizing still should be processed: " 
+			llwarns << "There is no enough width to reshape all children: " 
 				<< extra_shrink_width << llendl;
 		}
 
@@ -586,7 +559,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 		processShowButton(RS_BUTTON_SNAPSHOT, &available_width, &buttons_required_width);
 	}
 
-	// if we have to show some buttons but whidth increasing is not enough...
+	// if we have to show some buttons but width increasing is not enough...
 	if (buttons_required_width > 0 && delta_width < buttons_required_width)
 	{
 		// ... let's shrink nearby chat & chiclet panels
@@ -622,6 +595,8 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 	// shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels
 	delta_width -= buttons_required_width;
 
+	processExtendButtons(&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)
@@ -691,6 +666,119 @@ void LLBottomTray::processHideButton(EResizeState processed_object_type, S32* re
 	}
 }
 
+void LLBottomTray::processShrinkButtons(S32* required_width)
+{
+	processShrinkButton(RS_BUTTON_CAMERA, required_width);
+
+	if (*required_width < 0)
+	{
+		processShrinkButton(RS_BUTTON_MOVEMENT, required_width);
+	}
+	if (*required_width < 0)
+	{
+		processShrinkButton(RS_BUTTON_GESTURES, required_width);
+	}
+}
+
+void LLBottomTray::processShrinkButton(EResizeState processed_object_type, /*const std::string& panel_name, */S32* required_width)
+{
+	LLPanel* panel = mStateProcessedObjectMap[processed_object_type];
+	if (NULL == panel)
+	{
+		lldebugs << "There is no object to process for type: " << processed_object_type << llendl;
+		return;
+	}
+
+	if (panel->getVisible())
+	{
+		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);
+		S32 possible_shrink_width = panel_width - panel_min_width;
+
+		if (!success)
+		{
+			lldebugs << "Panel was not found to get its min width: " << panel_name << llendl;
+		}
+		// we have some space to free by shrinking the button
+		else if (possible_shrink_width > 0)
+		{
+			// let calculate real width to shrink
+
+			// 1. apply all possible width
+			*required_width += possible_shrink_width;
+
+			// 2. it it is too much... 
+			if (*required_width > 0)
+			{
+				// reduce applied shrunk width to the excessive value.
+				possible_shrink_width -= *required_width;
+				*required_width = 0;
+			}
+			panel->reshape(panel_width - possible_shrink_width, panel->getRect().getHeight());
+
+			lldebugs << "Shrunk panel: " << panel_name
+				<< ", shrunk width: " << possible_shrink_width
+				<< ", rest width to process: " << *required_width
+				<< llendl;
+		}
+	}
+}
+
+
+void LLBottomTray::processExtendButtons(S32* available_width)
+{
+	processExtendButton(RS_BUTTON_GESTURES, available_width);
+
+	if (*available_width > 0)
+	{
+		processExtendButton(RS_BUTTON_CAMERA, available_width);
+	}
+	if (*available_width > 0)
+	{
+		processExtendButton(RS_BUTTON_MOVEMENT, available_width);
+	}
+}
+
+void LLBottomTray::processExtendButton(EResizeState processed_object_type, S32* available_width)
+{
+	LLPanel* panel = mStateProcessedObjectMap[processed_object_type];
+	if (NULL == panel)
+	{
+		lldebugs << "There is no object to process for type: " << processed_object_type << llendl;
+		return;
+	}
+
+	if (!panel->getVisible()) return;
+
+	S32 panel_max_width = mObjectDefaultWidthMap[processed_object_type];
+	S32 panel_width = panel->getRect().getWidth();
+	S32 possible_extend_width = panel_max_width - panel_width;
+
+	if (possible_extend_width > 0)
+	{
+		// let calculate real width to extend
+
+		// 1. apply all possible width
+		*available_width -= possible_extend_width;
+
+		// 2. it it is too much... 
+		if (*available_width < 0)
+		{
+			// reduce applied extended width to the excessive value.
+			possible_extend_width += *available_width;
+			*available_width = 0;
+		}
+		panel->reshape(panel_width + possible_extend_width, panel->getRect().getHeight());
+
+		lldebugs << "Extending panel: " << panel->getName()
+			<< ", extended width: " << possible_extend_width
+			<< ", rest width to process: " << *available_width
+			<< llendl;
+	}
+}
+
 bool LLBottomTray::canButtonBeShown(EResizeState processed_object_type) const
 {
 	bool can_be_shown = mResizeState & processed_object_type;
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 974289d5e0f290baf5c7b54667bdabe2a942bfe1..97bcc23403a2493793df2b3a543e326f1dee20c5 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -98,17 +98,32 @@ class LLBottomTray
 		, RS_BUTTON_MOVEMENT	= 0x0010
 		, RS_BUTTON_GESTURES	= 0x0020
 		, RS_BUTTON_SPEAK		= 0x0040
-		, RS_RESIZABLE_BUTTONS			= /*RS_BUTTON_SNAPSHOT | */RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES
 	}EResizeState;
 
-	void updateResizeState(S32 new_width, S32 cur_width);
-	void verifyChildControlsSizes();
 	S32 processWidthDecreased(S32 delta_width);
 	void processWidthIncreased(S32 delta_width);
 	void log(LLView* panel, const std::string& descr);
 	bool processShowButton(EResizeState shown_object_type, S32* available_width, S32* buttons_required_width);
 	void processHideButton(EResizeState processed_object_type, S32* required_width, S32* buttons_freed_width);
 
+	/**
+	 * Shrinks shown buttons to reduce total taken space.
+	 *
+	 * @param - required_width - width which buttons can use to be shrunk. It is a negative value.
+	 * It is increased on the value processed by buttons.
+	 */
+	void processShrinkButtons(S32* required_width);
+	void processShrinkButton(EResizeState processed_object_type, S32* required_width);
+
+	/**
+	 * Extends shown buttons to increase total taken space.
+	 *
+	 * @param - available_width - width which buttons can use to be extended. It is a positive value.
+	 * It is decreased on the value processed by buttons.
+	 */
+	void processExtendButtons(S32* available_width);
+	void processExtendButton(EResizeState processed_object_type, S32* available_width);
+
 	/**
 	 * Determines if specified by type object can be shown. It should be hidden by shrink before.
 	 *
@@ -142,6 +157,9 @@ class LLBottomTray
 	typedef std::map<EResizeState, LLPanel*> state_object_map_t;
 	state_object_map_t mStateProcessedObjectMap;
 
+	typedef std::map<EResizeState, S32> state_object_width_map_t;
+	state_object_width_map_t mObjectDefaultWidthMap;
+
 protected:
 
 	LLBottomTray(const LLSD& key = LLSD());
diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index e8812d87ee0501fe0be05c9fb99a68cbd65ef36a..0b10255c2f2395b8aa224dbe655fde71a90cd272 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -51,7 +51,7 @@
 
 #include "llagent.h"
 #include "llbutton.h"
-//#include "llinventory.h"
+#include "llinventoryobserver.h"
 #include "llinventorymodel.h"
 #include "llnotify.h"
 #include "llresmgr.h"
diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp
index 914435b6409d7d6645d6fdaacbace88775d7d9ac..3443d8b593aa86bad84ef0fdacdce6efa9c9d213 100644
--- a/indra/newview/llchannelmanager.cpp
+++ b/indra/newview/llchannelmanager.cpp
@@ -220,5 +220,12 @@ void LLChannelManager::removeChannelByID(const LLUUID id)
 }
 
 //--------------------------------------------------------------------------
-
+void LLChannelManager::muteAllChannels(bool mute)
+{
+	for (std::vector<ChannelElem>::iterator it = mChannelList.begin();
+			it != mChannelList.end(); it++)
+	{
+		it->channel->setShowToasts(!mute);
+	}
+}
 
diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h
index b927d369cd4b6d17cfd5339d3c1371c53e59ac4f..4b66a1ef8922bed27e92d18dd239d5c1b7b687cc 100644
--- a/indra/newview/llchannelmanager.h
+++ b/indra/newview/llchannelmanager.h
@@ -102,6 +102,13 @@ class LLChannelManager : public LLSingleton<LLChannelManager>
 	// remove channel methods
 	void	removeChannelByID(const LLUUID id);
 
+	/**
+	 * Manages toasts showing for all channels.
+	 *
+	 * @param mute Flag to disable/enable toasts showing.
+	 */
+	void muteAllChannels(bool mute);
+
 private:
 
 	LLScreenChannel* createChannel(LLChannelManager::Params& p);
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index f2283730636b9a446e980a6938778b92af4e9081..cd5c5edac0c351e5c35ea64eb036b92c2f4a9d54 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -46,6 +46,8 @@
 #include "llfloaterreg.h"
 #include "llmutelist.h"
 
+#include "llsidetray.h"//for blocked objects panel
+
 static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history");
 
 std::string formatCurrentTime()
@@ -92,6 +94,8 @@ class LLChatHistoryHeader: public LLPanel
 		else if (level == "block")
 		{
 			LLMuteList::getInstance()->add(LLMute(getAvatarId(), mFrom, LLMute::OBJECT));
+
+			LLSideTray::getInstance()->showPanel("panel_block_list_sidetray", LLSD().insert("blocked_to_select", getAvatarId()));
 		}
 	}
 
@@ -345,18 +349,34 @@ LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style
 	return header;
 }
 
-void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& style_params)
+void LLChatHistory::appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params)
 {
 	LLView* view = NULL;
 	std::string view_text = "\n[" + formatCurrentTime() + "] ";
 	if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
 		view_text += chat.mFromName + ": ";
 
+
 	LLInlineViewSegment::Params p;
 	p.force_newline = true;
 	p.left_pad = mLeftWidgetPad;
 	p.right_pad = mRightWidgetPad;
 
+	
+	LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
+	LLViewerChat::getChatColor(chat,txt_color);
+	LLFontGL* fontp = LLViewerChat::getChatFont();	
+	std::string font_name = LLFontGL::nameFromFont(fontp);
+	std::string font_size = LLFontGL::sizeFromFont(fontp);	
+	LLStyle::Params style_params;
+	style_params.color(txt_color);
+	style_params.readonly_color(txt_color);
+	style_params.font.name(font_name);
+	style_params.font.size(font_size);	
+	style_params.font.style(input_append_params.font.style);
+	
+
+	
 	if (mLastFromName == chat.mFromName)
 	{
 		view = getSeparator();
@@ -371,6 +391,7 @@ void LLChatHistory::appendWidgetMessage(const LLChat& chat, LLStyle::Params& sty
 		else
 			p.top_pad = mTopHeaderPad;
 		p.bottom_pad = mBottomHeaderPad;
+		
 	}
 	p.view = view;
 
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index f0944042afbb3243fd2f14c4746e7291810995e1..c89d4b4ec67a877ca7dc5800ba71ef95985b788c 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -34,7 +34,7 @@
 #define LLCHATHISTORY_H_
 
 #include "lltexteditor.h"
-#include "llchat.h"
+#include "llviewerchat.h"
 
 //Chat log widget allowing addition of a message as a widget 
 class LLChatHistory : public LLTextEditor
@@ -109,7 +109,7 @@ class LLChatHistory : public LLTextEditor
 		 * @param time time of a message.
 		 * @param message message itself.
 		 */
-		void appendWidgetMessage(const LLChat& chat, LLStyle::Params& style_params);
+		void appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params = LLStyle::Params());
 
 	private:
 		std::string mLastFromName;
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 63b9fd8e66c54c70e78ad822b7f9bf5488156869..997aed4277ce2977832223729e64e3da45a43940 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -120,10 +120,10 @@ std::string LLNearbyChatToastPanel::appendTime()
 
 
 
-void	LLNearbyChatToastPanel::addText		(const std::string& message)
+void	LLNearbyChatToastPanel::addText	(const std::string& message , const LLStyle::Params& input_params)
 {
 	LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false);
-	msg_text->addText(message);
+	msg_text->addText(message , input_params);
 	mMessages.push_back(message);
 }
 
@@ -134,24 +134,69 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
 	mText = notification["message"].asString();		// UTF-8 line of text
 	mFromName = notification["from"].asString();	// agent or object name
 	mFromID = notification["from_id"].asUUID();		// agent id or object id
+	
 	int sType = notification["source"].asInteger();
     mSourceType = (EChatSourceType)sType;
+	
+	std::string color_name = notification["text_color"].asString();
+	
+	mTextColor = LLUIColorTable::instance().getColor(color_name);
+	mTextColor.mV[VALPHA] =notification["color_alpha"].asReal();
+	
+	S32 font_size = notification["font_size"].asInteger();
+	switch(font_size)
+	{
+		case 0:
+			mFont = LLFontGL::getFontSansSerifSmall();
+			break;
+		default:
+		case 1:
+			mFont = LLFontGL::getFontSansSerif();
+			break;
+		case 2:
+			mFont = LLFontGL::getFontSansSerifBig();
+			break;
+	}
+	
+	LLStyle::Params style_params;
+	style_params.color(mTextColor);
+//	style_params.font(mFont);
+	std::string font_name = LLFontGL::nameFromFont(mFont);
+	std::string font_style_size = LLFontGL::sizeFromFont(mFont);
+	style_params.font.name(font_name);
+	style_params.font.size(font_style_size);
 
 	std::string str_sender;
-
+	
 	if(gAgentID != mFromID)
 		str_sender = mFromName;
 	else
 		str_sender = LLTrans::getString("You");;
 
-	caption->getChild<LLTextBox>("sender_name", false)->setText(str_sender);
+	caption->getChild<LLTextBox>("sender_name", false)->setText(str_sender , style_params);
 	
-	caption->getChild<LLTextBox>("msg_time", false)->setText(appendTime());
+	LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false);
 
 
-	LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false);
-	msg_text->setText(mText);
+	if(notification["chat_style"].asInteger()== CHAT_STYLE_IRC)
+	{
+		if (mFromName.size() > 0)
+		{
+			style_params.font.style = "ITALIC";
+			
+			msg_text->setText(mFromName, style_params);
+		}
+		mText = mText.substr(3);
+		style_params.font.style = "UNDERLINE";
+		msg_text->addText(mText,style_params);
+	}
+	else 
+	{
+		msg_text->setText(mText, style_params);
+	}
 
+
+	
 	LLUICtrl* msg_inspector = caption->getChild<LLUICtrl>("msg_inspector");
 	if(mSourceType != CHAT_SOURCE_AGENT)
 		msg_inspector->setVisible(false);
@@ -171,7 +216,17 @@ void	LLNearbyChatToastPanel::setMessage	(const LLChat& chat_msg)
 	notification["from_id"] = chat_msg.mFromID;
 	notification["time"] = chat_msg.mTime;
 	notification["source"] = (S32)chat_msg.mSourceType;
-
+	notification["chat_type"] = (S32)chat_msg.mChatType;
+	notification["chat_style"] = (S32)chat_msg.mChatStyle;
+	
+	std::string r_color_name="White";
+	F32 r_color_alpha = 1.0f; 
+	LLViewerChat::getChatColor( chat_msg, r_color_name, r_color_alpha);
+	
+	notification["text_color"] = r_color_name;
+	notification["color_alpha"] = r_color_alpha;
+	
+	notification["font_size"] = (S32)LLViewerChat::getChatFontSize() ;
 	init(notification);
 
 }
@@ -201,11 +256,17 @@ void	LLNearbyChatToastPanel::setWidth(S32 width)
 	text_box->reshape(width - msg_left_offset - msg_right_offset,100/*its not magic number, we just need any number*/);
 
 	LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false);
+	
+	LLStyle::Params style_params;
+	style_params.color(mTextColor);
+	style_params.font(mFont);
+	
+	
 	if(mText.length())
-		msg_text->setText(mText);
+		msg_text->setText(mText, style_params);
 	
 	for(size_t i=0;i<mMessages.size();++i)
-		msg_text->addText(mMessages[i]);
+		msg_text->addText(mMessages[i] , style_params);
 
 	setRect(LLRect(getRect().mLeft, getRect().mTop, getRect().mLeft + width	, getRect().mBottom));
 	snapToMessageHeight	();
diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h
index 8fb045b6d912f7bac2c2eeba3513093219730977..a65bfedd0964f61786e2a2539d4beeaab7e672ee 100644
--- a/indra/newview/llchatitemscontainerctrl.h
+++ b/indra/newview/llchatitemscontainerctrl.h
@@ -36,7 +36,7 @@
 #include "llpanel.h"
 #include "llscrollbar.h"
 #include "string"
-#include "llchat.h"
+#include "llviewerchat.h"
 #include "lltoastpanel.h"
 
 typedef enum e_show_item_header
@@ -59,7 +59,7 @@ class LLNearbyChatToastPanel: public LLToastPanelBase
 
 	const LLUUID& getFromID() const { return mFromID;}
 	
-	void	addText		(const std::string& message);
+	void	addText		(const std::string& message ,  const LLStyle::Params& input_params = LLStyle::Params());
 	void	setMessage	(const LLChat& msg);
 	void	setWidth		(S32 width);
 	void	snapToMessageHeight	();
@@ -89,6 +89,8 @@ class LLNearbyChatToastPanel: public LLToastPanelBase
 	std::string		mFromName;	// agent or object name
 	LLUUID			mFromID;	// agent id or object id
 	EChatSourceType	mSourceType;
+	LLColor4        mTextColor;
+	LLFontGL*       mFont;
 
 
 	std::vector<std::string> mMessages;
diff --git a/indra/newview/llchatmsgbox.cpp b/indra/newview/llchatmsgbox.cpp
index 12626e3b43b60254c0dfacd22bb32819a83c233c..bb0ec2db27ee8c5f9ced894da3fcfe2a9971ed05 100644
--- a/indra/newview/llchatmsgbox.cpp
+++ b/indra/newview/llchatmsgbox.cpp
@@ -84,7 +84,7 @@ LLChatMsgBox::LLChatMsgBox(const Params& p) :
 	mBlockSpacing(p.block_spacing)
 {}
 
-void LLChatMsgBox::addText( const LLStringExplicit& text )
+void LLChatMsgBox::addText( const LLStringExplicit& text , const LLStyle::Params& input_params )
 {
 	S32 length = getLength();
 	// if there is existing text, add a separator
@@ -94,5 +94,5 @@ void LLChatMsgBox::addText( const LLStringExplicit& text )
 		insertSegment(new ChatSeparator(length - 1, length - 1));
 	}
 	// prepend newline only if there is some existing text
-	appendText(text, length > 0);
+	appendText(text, length > 0, input_params);
 }
diff --git a/indra/newview/llchatmsgbox.h b/indra/newview/llchatmsgbox.h
index df29db58c320891f00373cb6b12b8d62661ea05d..9e1661672925d32749f5dcfbef53665902216b02 100644
--- a/indra/newview/llchatmsgbox.h
+++ b/indra/newview/llchatmsgbox.h
@@ -61,7 +61,7 @@ class LLChatMsgBox :
 	friend class LLUICtrlFactory;
 
 public:
-	void				addText(const LLStringExplicit &text);
+	void				addText(const LLStringExplicit &text, const LLStyle::Params& input_params = LLStyle::Params());
 	
 private:
 	S32					mBlockSpacing;
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 9e290c8c046fcd5d0ff4509deee34c27b7b20de6..4078fac4ecbadad10e198e505437ebebd2aecea1 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -797,13 +797,11 @@ LLChicletPanel::Params::Params()
 	chiclet_padding = 3;
 	scrolling_offset = 40;
 
-/*
 	if (!min_width.isProvided())
 	{
 		// min_width = 4 chiclets + 3 paddings
 		min_width = 180 + 3*chiclet_padding;
 	}
-*/
 };
 
 LLChicletPanel::LLChicletPanel(const Params&p)
diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp
index 20dc4440c243833145c02ee3bf459934dd681467..169a963d0d1b7f84944ee5482aabf637d1436548 100644
--- a/indra/newview/lldebugview.cpp
+++ b/indra/newview/lldebugview.cpp
@@ -79,7 +79,7 @@ void LLDebugView::init()
 
 	r.set(150 - 25, rect.getHeight() - 50, rect.getWidth()/2 - 25, rect.getHeight() - 450);
 
-	r.set(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f), 
+	r.setLeftTopAndSize(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f), 
   									 (S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f));
 	mFastTimerView = new LLFastTimerView(r);
 	mFastTimerView->setFollowsTop();
@@ -87,7 +87,7 @@ void LLDebugView::init()
 	mFastTimerView->setVisible(FALSE);			// start invisible
 	addChild(mFastTimerView);
 
-	r.set(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f), 
+	r.setLeftTopAndSize(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f), 
 									 (S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f));
 	LLMemoryView::Params mp;
 	mp.name("memory");
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 424d6353211bfec0ad579835ce488ac20e979bdd..bd6936f05c65542188716f5286f3b405fb3caed0 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -129,12 +129,12 @@ void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL calle
 	}
 }
 
-void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text)
+void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,const LLStyle::Params& input_params)
 {
 	// LLTextBox::setText will obliterate the expander segment, so make sure
 	// we generate it again by clearing mExpanderVisible
 	mExpanderVisible = false;
-	LLTextBox::setText(text);
+	LLTextBox::setText(text, input_params);
 
 	// text contents have changed, segments are cleared out
 	// so hide the expander and determine if we need it
@@ -164,7 +164,7 @@ void LLExpandableTextBox::LLTextBoxEx::showExpandText()
 		S32 last_line = visible_lines.second - 1;
 
 		LLStyle::Params expander_style = getDefaultStyle();
-		expander_style.font.name.setIfNotProvided(LLFontGL::nameFromFont(expander_style.font));
+		expander_style.font.name(LLFontGL::nameFromFont(expander_style.font));
 		expander_style.font.style = "UNDERLINE";
 		expander_style.color = LLUIColorTable::instance().getColor("HTMLLinkColor");
 		LLExpanderSegment* expanderp = new LLExpanderSegment(new LLStyle(expander_style), getLineStart(last_line), getLength() + 1, mExpanderLabel, *this);
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index 3fe646c29c6b7765dfbb875b6a6a939748ed58ee..7c989cfa50ec4fa595fe4660045b2178a1bda398 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -60,7 +60,7 @@ class LLExpandableTextBox : public LLUICtrl
 
 		// adds or removes "More" link as needed
 		/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
-		/*virtual*/ void setText(const LLStringExplicit& text);
+		/*virtual*/ void setText(const LLStringExplicit& text, const LLStyle::Params& input_params = LLStyle::Params());
 
 		/**
 		 * Returns difference between text box height and text height.
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 01603f390def7cef46db24861b61bc4a9414e656..ae5be8cc7c92ce04c0bef6687a9c581cce2f80dc 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -74,6 +74,7 @@ class LLLandmarkInfoGetter
 		mName("(Loading...)"),
 		mPosX(0),
 		mPosY(0),
+		mPosZ(0),
 		mLoaded(false) 
 	{}
 
@@ -101,6 +102,14 @@ class LLLandmarkInfoGetter
 			requestNameAndPos();
 		return mPosY;
 	}
+
+	S32 getPosZ()
+	{
+		if (!mLoaded)
+			requestNameAndPos();
+		return mPosZ;
+	}
+
 private:
 	/**
 	 * Requests landmark data from server.
@@ -114,14 +123,15 @@ class LLLandmarkInfoGetter
 		if(LLLandmarkActions::getLandmarkGlobalPos(mLandmarkID, g_pos))
 		{
 			LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(g_pos,
-				boost::bind(&LLLandmarkInfoGetter::landmarkNameCallback, this, _1, _2, _3));
+				boost::bind(&LLLandmarkInfoGetter::landmarkNameCallback, this, _1, _2, _3, _4));
 		}
 	}
 
-	void landmarkNameCallback(const std::string& name, S32 x, S32 y)
+	void landmarkNameCallback(const std::string& name, S32 x, S32 y, S32 z)
 	{
 		mPosX = x;
 		mPosY = y;
+		mPosZ = z;
 		mName = name;
 		mLoaded = true;
 	}
@@ -130,6 +140,7 @@ class LLLandmarkInfoGetter
 	std::string mName;
 	S32 mPosX;
 	S32 mPosY;
+	S32 mPosZ;
 	bool mLoaded;
 };
 
@@ -151,7 +162,8 @@ class LLFavoriteLandmarkButton : public LLButton
 		if (!region_name.empty())
 		{
 			LLToolTip::Params params;
-			params.message = llformat("%s\n%s (%d, %d)", getLabelSelected().c_str(), region_name.c_str(), mLandmarkInfoGetter.getPosX(), mLandmarkInfoGetter.getPosY());
+			params.message = llformat("%s\n%s (%d, %d, %d)", getLabelSelected().c_str(), region_name.c_str(), 
+				mLandmarkInfoGetter.getPosX(), mLandmarkInfoGetter.getPosY(), mLandmarkInfoGetter.getPosZ());
 			params.sticky_rect = calcScreenRect();
 			LLToolTipMgr::instance().show(params);
 		}
diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h
index e90d13f9d5157c539590574d56d1416f426b4c11..20a324c67c919ea7680256ee46530597054326a5 100644
--- a/indra/newview/llfavoritesbar.h
+++ b/indra/newview/llfavoritesbar.h
@@ -35,6 +35,7 @@
 
 #include "lluictrl.h"
 
+#include "llinventoryobserver.h"
 #include "llinventorymodel.h"
 
 class LLFavoritesBarCtrl : public LLUICtrl, public LLInventoryObserver
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index cefd7a38080814af9de090bdf3cd0a47ee46fd5f..c8df6c6135862256d8f5b0d7689f2cade0193cfc 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -230,10 +230,6 @@ void LLFloaterBuy::inventoryChanged(LLViewerObject* obj,
 		if (obj->getType() == LLAssetType::AT_CATEGORY)
 			continue;
 
-		// Skip root folders, so we know we have inventory items only
-		if (obj->getType() == LLAssetType::AT_ROOT_CATEGORY) 
-			continue;
-
 		// Skip the mysterious blank InventoryObject 
 		if (obj->getType() == LLAssetType::AT_NONE)
 			continue;
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index 32802f6a20055309e97088ffdc246e1ff0f94f16..a99d0c918dd7d2ed59d8c78744982053519afcdc 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -187,10 +187,6 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
 		if (asset_type == LLAssetType::AT_CATEGORY)
 			continue;
 
-		// Skip root folders, so we know we have inventory items only
-		if (asset_type == LLAssetType::AT_ROOT_CATEGORY) 
-			continue;
-
 		LLInventoryItem* inv_item = (LLInventoryItem*)((LLInventoryObject*)(*it));
 		inv_type = inv_item->getInventoryType();
 
@@ -286,7 +282,7 @@ void LLFloaterBuyContents::onClickBuy()
 
 	// Put the items where we put new folders.
 	LLUUID category_id;
-	category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CATEGORY);
+	category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_ROOT_INVENTORY);
 
 	// *NOTE: doesn't work for multiple object buy, which UI does not
 	// currently support sale info is used for verification only, if
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index ca0ba96a08f4721218749fcf62a0e9d02b29c1f6..af86274472a7a3afd511f27016f3452d1c4e8cc9 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -98,7 +98,7 @@ void LLFloaterGesture::done()
 		// we load only gesture folder without childred.
 		LLInventoryModel::cat_array_t* categories;
 		LLInventoryModel::item_array_t* items;
-		folder_ref_t unloaded_folders;
+		LLInventoryFetchDescendentsObserver::folder_ref_t unloaded_folders;
 		LL_DEBUGS("Gesture")<< "Get subdirs of Gesture Folder...." << LL_ENDL;
 		gInventory.getDirectDescendentsOf(mGestureFolderID, categories, items);
 		if (categories->empty())
@@ -161,6 +161,7 @@ BOOL LLFloaterGesture::postBuild()
 
 	getChild<LLUICtrl>("play_btn")->setCommitCallback(boost::bind(&LLFloaterGesture::onClickPlay, this));
 	getChild<LLUICtrl>("stop_btn")->setCommitCallback(boost::bind(&LLFloaterGesture::onClickPlay, this));
+	getChild<LLButton>("activate_btn")->setClickedCallback(boost::bind(&LLFloaterGesture::onActivateBtnClick, this));
 
 	getChild<LLUICtrl>("new_gesture_btn")->setCommitCallback(boost::bind(&LLFloaterGesture::onClickNew, this));
 
@@ -179,7 +180,7 @@ BOOL LLFloaterGesture::postBuild()
 	
 	childSetFocus("gesture_list");
 
-	LLCtrlListInterface *list = childGetListInterface("gesture_list");
+	LLCtrlListInterface *list = getGestureList();
 	if (list)
 	{
 		const BOOL ascending = TRUE;
@@ -198,7 +199,7 @@ void LLFloaterGesture::refreshAll()
 {
 	buildGestureList();
 
-	LLCtrlListInterface *list = childGetListInterface("gesture_list");
+	LLCtrlListInterface *list = getGestureList();
 	if (!list) return;
 
 	if (mSelectedID.isNull())
@@ -219,7 +220,7 @@ void LLFloaterGesture::refreshAll()
 
 void LLFloaterGesture::buildGestureList()
 {
-	LLCtrlListInterface *list = childGetListInterface("gesture_list");
+	LLCtrlListInterface *list = getGestureList();
 	LLCtrlScrollInterface *scroll = childGetScrollInterface("gesture_list");
 
 	if (! (list && scroll)) return;
@@ -347,7 +348,7 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur
 
 void LLFloaterGesture::onClickInventory()
 {
-	LLCtrlListInterface *list = childGetListInterface("gesture_list");
+	LLCtrlListInterface *list = getGestureList();
 	if (!list) return;
 	const LLUUID& item_id = list->getCurrentID();
 
@@ -358,7 +359,7 @@ void LLFloaterGesture::onClickInventory()
 
 void LLFloaterGesture::onClickPlay()
 {
-	LLCtrlListInterface *list = childGetListInterface("gesture_list");
+	LLCtrlListInterface *list = getGestureList();
 	if (!list) return;
 	const LLUUID& item_id = list->getCurrentID();
 	if(item_id.isNull()) return;
@@ -396,10 +397,27 @@ void LLFloaterGesture::onClickNew()
 		LLInventoryType::IT_GESTURE, NOT_WEARABLE, PERM_MOVE | PERM_TRANSFER, cb);
 }
 
+void LLFloaterGesture::onActivateBtnClick()
+{
+	LLCtrlListInterface* list = getGestureList();
+	
+	LLUUID gesture_inv_id = list->getSelectedValue();
+	LLGestureManager* gm = LLGestureManager::getInstance();
+	
+	if(gm->isGestureActive(gesture_inv_id))
+	{
+		gm->deactivateGesture(gesture_inv_id);
+	}
+	else
+	{
+		gm->activateGesture(gesture_inv_id);
+	}
+}
+
 
 void LLFloaterGesture::onClickEdit()
 {
-	LLCtrlListInterface *list = childGetListInterface("gesture_list");
+	LLCtrlListInterface *list = getGestureList();
 	if (!list) return;
 	const LLUUID& item_id = list->getCurrentID();
 
diff --git a/indra/newview/llfloatergesture.h b/indra/newview/llfloatergesture.h
index 9d047bf1cf8a02030a030667e13ea8aa1eb97d45..50bef818daa587fbeda99edf2a9d42c7071239eb 100644
--- a/indra/newview/llfloatergesture.h
+++ b/indra/newview/llfloatergesture.h
@@ -39,6 +39,7 @@
 
 #include "llfloater.h"
 #include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "lldarray.h"
 
 class LLScrollContainer;
@@ -76,7 +77,11 @@ class LLFloaterGesture
 	void onClickNew();
 	void onCommitList();
 	void playGesture(LLUUID item_id);
-
+	LLCtrlListInterface* getGestureList() const 
+	{
+		return childGetListInterface("gesture_list");
+	}
+	void onActivateBtnClick();
 protected:
 	LLUUID mSelectedID;
 	LLUUID mGestureFolderID;
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index 928126bff94626dd183c2639b53441b6f2021b13..e0d4a59d9d6f6050a904d5bf565206225a864696 100644
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -44,6 +44,7 @@
 #include "llbutton.h"
 #include "llcheckboxctrl.h"
 #include "llavataractions.h"
+#include "llinventoryobserver.h"
 #include "llinventorymodel.h"
 #include "lllineeditor.h"
 //#include "llspinctrl.h"
diff --git a/indra/newview/llfloatertestinspectors.cpp b/indra/newview/llfloatertestinspectors.cpp
index 8af011c17a9a582f80d17ee6b16c2c6a49833d83..09996b0b92cd5271fd5d8a84fb29f63bc7899a0f 100644
--- a/indra/newview/llfloatertestinspectors.cpp
+++ b/indra/newview/llfloatertestinspectors.cpp
@@ -53,6 +53,9 @@ LLFloaterTestInspectors::~LLFloaterTestInspectors()
 
 BOOL LLFloaterTestInspectors::postBuild()
 {
+	// Test the dummy widget construction code
+	getChild<LLUICtrl>("intentionally-not-found")->setEnabled(true);
+
 //	getChild<LLUICtrl>("avatar_2d_btn")->setCommitCallback(
 //		boost::bind(&LLFloaterTestInspectors::onClickAvatar2D, this));
 	getChild<LLUICtrl>("avatar_3d_btn")->setCommitCallback(
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 3c3dfb760ee32892ee92154048469fd845c30088..9854d2594b2a30111e7cf3be5a81d80f8f434140 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -422,10 +422,17 @@ void LLFloaterTools::refresh()
 	LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount());
 	childSetTextArg("prim_count", "[COUNT]", prim_count_string);
 
+	// calculate selection rendering cost
+	std::string prim_cost_string;
+	LLResMgr::getInstance()->getIntegerString(prim_cost_string, calcRenderCost());
+	childSetTextArg("RenderingCost", "[COUNT]", prim_cost_string);
+
+
 	// disable the object and prim counts if nothing selected
 	bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty();
 	childSetEnabled("obj_count", have_selection);
 	childSetEnabled("prim_count", have_selection);
+	childSetEnabled("RenderingCost", have_selection);
 
 	// Refresh child tabs
 	mPanelPermissions->refresh();
@@ -556,6 +563,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
 
 	mBtnEdit	->setToggleState( edit_visible );
 	mRadioGroupEdit->setVisible( edit_visible );
+	childSetVisible("RenderingCost", edit_visible || focus_visible || move_visible);
 
 	if (mCheckSelectIndividual)
 	{
@@ -964,6 +972,27 @@ void LLFloaterTools::onClickGridOptions()
 	//floaterp->addDependentFloater(LLFloaterBuildOptions::getInstance(), FALSE);
 }
 
+S32 LLFloaterTools::calcRenderCost()
+{
+	S32 cost = 0;
+	for (LLObjectSelection::iterator selection_iter = LLSelectMgr::getInstance()->getSelection()->begin();
+		  selection_iter != LLSelectMgr::getInstance()->getSelection()->end();
+		  ++selection_iter)
+	{
+		LLSelectNode *select_node = *selection_iter;
+		if (select_node)
+		{
+			LLVOVolume *viewer_volume = (LLVOVolume*)select_node->getObject();
+			if (viewer_volume)
+			{
+				cost += viewer_volume->getRenderCost();
+			}
+		}
+	}
+
+	return cost;
+}
+
 // static
 void LLFloaterTools::setEditTool(void* tool_pointer)
 {
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index a3e0cac034241218c323cf53aae0f2173594aafd..05a88a31d31b4ddffa7dea37ec6796227aaf1f3f 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -121,6 +121,7 @@ class LLFloaterTools
 	static bool multipleFacesSelectedConfirm(const LLSD& notification, const LLSD& response);
 	static void setObjectType( LLPCode pcode );
 	void onClickGridOptions();
+	S32 calcRenderCost();
 
 public:
 	LLButton		*mBtnFocus;
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 7d2eb98111f497a1cc87d1286a13f7b220c734be..85847e5fce87fce9a41892d9c700d92aef6d9615 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -51,6 +51,7 @@
 #include "llfloaterreg.h"		// getTypedInstance()
 #include "llfocusmgr.h"
 #include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "lllandmarklist.h"
 #include "lllineeditor.h"
 #include "llregionhandle.h"
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 21458f83cdbe0757f53783d2b355e9a0970bbe86..4192c6a586202736c6fb222f5ac9d7ad0d8a2e4a 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -909,11 +909,7 @@ void LLFolderView::finishRenamingItem( void )
 		mRenameItem->rename( mRenamer->getText() );
 	}
 
-	mRenamer->setCommitOnFocusLost( FALSE );
-	mRenamer->setFocus( FALSE );
-	mRenamer->setVisible( FALSE );
-	mRenamer->setCommitOnFocusLost( TRUE );
-	gFocusMgr.setTopCtrl( NULL );
+	gFocusMgr.setTopCtrl( NULL );	
 
 	if( mRenameItem )
 	{
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h
index 60ece75ceadd565485ab0f97dbe6263cadc336b6..473d0be912b1140164505d29bdb44e05eb230278 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfoldervieweventlistener.h
@@ -34,6 +34,8 @@
 #include "lldarray.h"	// JAMESDEBUG convert to std::vector
 #include "llfoldertype.h"
 #include "llfontgl.h"	// just for StyleFlags enum
+#include "llinventorytype.h"
+#include "llpermissionsflags.h"
 #include "llpointer.h"
 
 
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 6fdaefd21ab9030eb3c1f3ec8463ec492de9c448..d39a17ca3b2b8ec8162641393aa4ddb52eff4d20 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -38,7 +38,6 @@
 #include "llfoldervieweventlistener.h"
 #include "llinventorybridge.h"	// for LLItemBridge in LLInventorySort::operator()
 #include "llinventoryfilter.h"
-#include "llinventorymodel.h"	// *TODO: make it take a pointer to an inventory-model interface
 #include "llviewercontrol.h"	// gSavedSettings
 #include "llviewerwindow.h"		// Argh, only for setCursor()
 
@@ -388,7 +387,9 @@ BOOL LLFolderViewItem::addToFolder(LLFolderViewFolder* folder, LLFolderView* roo
 // makes sure that this view and it's children are the right size.
 S32 LLFolderViewItem::arrange( S32* width, S32* height, S32 filter_generation)
 {
-	mIndentation = mParentFolder ? mParentFolder->getIndentation() + LEFT_INDENTATION : 0;
+	mIndentation = getParentFolder() && getParentFolder()->getParentFolder() 
+		? mParentFolder->getIndentation() + LEFT_INDENTATION 
+		: 0;
 	if (mLabelWidthDirty)
 	{
 		mLabelWidth = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + getLabelFontForStyle(mLabelStyle)->getWidth(mSearchableLabel); 
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 62a4b9a18756e40aae08e8bf26333d548be6c2cd..7c429fc76ef7cccf2ad3f2ace9b77c9cf7a3dc2c 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -110,7 +110,7 @@ class LLFolderViewItem : public LLView
 
 	// layout constants
 	static const S32 LEFT_PAD = 5;
-	static const S32 LEFT_INDENTATION = 13;
+	static const S32 LEFT_INDENTATION = 8;
 	static const S32 ICON_PAD = 2;
 	static const S32 ICON_WIDTH = 16;
 	static const S32 TEXT_PAD = 1;
diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index 481b75cf73965b7a04b79eec9e24b2d85cd928ba..ac060cef158b0733024a26a6cf0c05845503f882 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -33,6 +33,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llinventory.h"
+#include "llinventoryobserver.h"
 #include "lltrans.h"
 
 #include "llfriendcard.h"
@@ -43,27 +44,24 @@
 
 // Constants;
 
-static const std::string INVENTORY_STRING_FRIENDS_SUBFOLDER = "Friends";
-static const std::string INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER = "All";
+static const std::string INVENTORY_STRING_FRIENDS_SUBFOLDER = "InvFolder Friends";
+static const std::string INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER = "InvFolder All";
 
 // helper functions
 
-/*
-mantipov *NOTE: unable to use 
-LLTrans::getString("InvFolder Friends"); or
-LLTrans::getString("InvFolder FriendsAll");
-in next two functions to set localized folders' names because of there is a hack in the
-LLFolderViewItem::refreshFromListener() method for protected asset types.
-So, localized names will be got from the strings with "InvFolder LABEL_NAME" in the strings.xml
-*/
-inline const std::string& get_friend_folder_name()
+// NOTE: Usage of LLTrans::getString(); in next two functions to set localized
+// folders' names is caused by a hack in the LLFolderViewItem::refreshFromListener()
+// method for protected asset types.
+// So, localized names will be got from the strings with "InvFolder LABEL_NAME"
+// in the strings.xml
+inline const std::string get_friend_folder_name()
 {
-	return INVENTORY_STRING_FRIENDS_SUBFOLDER;
+	return LLTrans::getString(INVENTORY_STRING_FRIENDS_SUBFOLDER);
 }
 
-inline const std::string& get_friend_all_subfolder_name()
+inline const std::string get_friend_all_subfolder_name()
 {
-	return INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER;
+	return LLTrans::getString(INVENTORY_STRING_FRIENDS_ALL_SUBFOLDER);
 }
 
 void move_from_to_arrays(LLInventoryModel::cat_array_t& from, LLInventoryModel::cat_array_t& to)
@@ -80,15 +78,20 @@ const LLUUID& get_folder_uuid(const LLUUID& parentFolderUUID, LLInventoryCollect
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
 
-	gInventory.collectDescendentsIf(parentFolderUUID, cats, items, 
+	gInventory.collectDescendentsIf(parentFolderUUID, cats, items,
 		LLInventoryModel::EXCLUDE_TRASH, matchFunctor);
 
-	if (cats.count() == 1)
+	S32 cats_count = cats.count();
+
+	if (cats_count > 1)
 	{
-		return cats.get(0)->getUUID();
+		LL_WARNS("LLFriendCardsManager")
+			<< "There is more than one Friend card folder."
+			<< "The first folder will be used."
+			<< LL_ENDL;
 	}
 
-	return LLUUID::null;
+	return (cats_count >= 1) ? cats.get(0)->getUUID() : LLUUID::null;
 }
 
 /**
@@ -347,13 +350,8 @@ const LLUUID& LLFriendCardsManager::findFriendAllSubfolderUUIDImpl() const
 	return findChildFolderUUID(friendFolderUUID, friendAllSubfolderName);
 }
 
-const LLUUID& LLFriendCardsManager::findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& folderLabel) const
+const LLUUID& LLFriendCardsManager::findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& localizedName) const
 {
-	// mantipov *HACK: get localaized name in the same way like in the LLFolderViewItem::refreshFromListener() method.
-	// be sure these both methods are synchronized.
-	// see also get_friend_folder_name() and get_friend_all_subfolder_name() functions
-	std::string localizedName = LLTrans::getString("InvFolder " + folderLabel);
-
 	LLNameCategoryCollector matchFolderFunctor(localizedName);
 
 	return get_folder_uuid(parentFolderUUID, matchFolderFunctor);
diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h
index 98dc3153d0de47d2efae46e146a6f46754de1800..b94d5ec2c0058c51c6e4de51798ae5d4e8e3c018 100644
--- a/indra/newview/llfriendcard.h
+++ b/indra/newview/llfriendcard.h
@@ -120,7 +120,7 @@ class LLFriendCardsManager
 		return (mBuddyIDSet.end() != mBuddyIDSet.find(avatarID));
 	}
 
-	const LLUUID& findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& folderLabel) const;
+	const LLUUID& findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& localizedName) const;
 	const LLUUID& findFriendFolderUUIDImpl() const;
 	const LLUUID& findFriendAllSubfolderUUIDImpl() const;
 	const LLUUID& findFriendCardInventoryUUIDImpl(const LLUUID& avatarID);
diff --git a/indra/newview/llgesturemgr.h b/indra/newview/llgesturemgr.h
index 7c3b7427808038ccb3d07f971c10d24a5731977b..094ca1379843e4a9f6e258c5e46860cb5dcd5f8e 100644
--- a/indra/newview/llgesturemgr.h
+++ b/indra/newview/llgesturemgr.h
@@ -38,7 +38,7 @@
 #include <vector>
 
 #include "llassetstorage.h"	// LLAssetType
-#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "llsingleton.h"
 #include "llviewerinventory.h"
 
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 059912d5d4fc4c95e6a8ba5825b8397f0ffe40e9..c2c83191e003d7ace33baacdae891102a3d2111b 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -367,8 +367,6 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
 	LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>
 		(LLNotificationsUI::LLChannelManager::getInstance()->
 											findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
-
-	setCanResize(!docked);
 	
 	LLTransientDockableFloater::setDocked(docked, pop_on_undock);
 
@@ -458,7 +456,7 @@ void LLIMFloater::updateMessages()
 
 	if (messages.size())
 	{
-		LLUIColor chat_color = LLUIColorTable::instance().getColor("IMChatColor");
+//		LLUIColor chat_color = LLUIColorTable::instance().getColor("IMChatColor");
 
 		std::ostringstream message;
 		std::list<LLSD>::const_reverse_iterator iter = messages.rbegin();
@@ -471,31 +469,43 @@ void LLIMFloater::updateMessages()
 			LLUUID from_id = msg["from_id"].asUUID();
 			std::string from = from_id != gAgentID ? msg["from"].asString() : LLTrans::getString("You");
 			std::string message = msg["message"].asString();
-			LLStyle::Params style_params;
-			style_params.color(chat_color);
 
 			LLChat chat;
 			chat.mFromID = from_id;
 			chat.mFromName = from;
-
+			chat.mText = message;
+			
 			//Handle IRC styled /me messages.
 			std::string prefix = message.substr(0, 4);
 			if (prefix == "/me " || prefix == "/me'")
 			{
+				
+				LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
+				LLViewerChat::getChatColor(chat,txt_color);
+				LLFontGL* fontp = LLViewerChat::getChatFont();
+				std::string font_name = LLFontGL::nameFromFont(fontp);
+				std::string font_size = LLFontGL::sizeFromFont(fontp);
+				LLStyle::Params append_style_params;
+				append_style_params.color(txt_color);
+				append_style_params.readonly_color(txt_color);
+				append_style_params.font.name(font_name);
+				append_style_params.font.size(font_size);
+				
 				if (from.size() > 0)
 				{
-					style_params.font.style = "ITALIC";
+					append_style_params.font.style = "ITALIC";
 					chat.mText = from + " ";
-					mChatHistory->appendWidgetMessage(chat, style_params);
+					mChatHistory->appendWidgetMessage(chat, append_style_params);
 				}
+				
 				message = message.substr(3);
-				style_params.font.style = "UNDERLINE";
-				mChatHistory->appendText(message, FALSE, style_params);
+				append_style_params.font.style = "UNDERLINE";
+				mChatHistory->appendText(message, FALSE, append_style_params);
 			}
 			else
 			{
 				chat.mText = message;
-				mChatHistory->appendWidgetMessage(chat, style_params);
+				mChatHistory->appendWidgetMessage(chat);
 			}
 
 			mLastMessageIndex = msg["index"].asInteger();
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index 065441b18895a1a5018b6b8f0952ca90340de0ee..e2d500d821e1d7d68e322543368a05c444b9eb19 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -63,7 +63,6 @@ class LLIMFloater : public LLTransientDockableFloater
 	// LLFloater overrides
 	/*virtual*/ void onClose(bool app_quitting);
 	/*virtual*/ void setDocked(bool docked, bool pop_on_undock = true);
-	// override LLFloater's minimization according to EXT-1216
 
 	// Make IM conversion visible and update the message history
 	static LLIMFloater* show(const LLUUID& session_id);
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index ee785e7ecbb4aa9e288bfc6f33bd65600ff91182..dc32291714bd626372b10fd2b8dd978a295a9183 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1124,13 +1124,9 @@ void LLOutgoingCallDialog::onOpen(const LLSD& key)
 
 	LLSD callee_id = mPayload["other_user_id"];
 	childSetTextArg("calling", "[CALLEE_NAME]", callee_name);
+	childSetTextArg("connecting", "[CALLEE_NAME]", callee_name);
 	LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon");
 	icon->setValue(callee_id);
-
-	// dock the dialog to the sys well, where other sys messages appear
-	setDockControl(new LLDockControl(LLBottomTray::getInstance()->getSysWell(),
-					 this, getDockTongue(), LLDockControl::TOP,
-					 boost::bind(&LLOutgoingCallDialog::getAllowedRect, this, _1)));
 }
 
 
@@ -1155,6 +1151,11 @@ BOOL LLOutgoingCallDialog::postBuild()
 
 	childSetAction("Cancel", onCancel, this);
 
+	// dock the dialog to the sys well, where other sys messages appear
+	setDockControl(new LLDockControl(LLBottomTray::getInstance()->getSysWell(),
+					 this, getDockTongue(), LLDockControl::TOP,
+					 boost::bind(&LLOutgoingCallDialog::getAllowedRect, this, _1)));
+
 	return success;
 }
 
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 8dc7833f6aceb4db012aacec8e4aa91bc4e96781..baddd90d460e00b7d3fce14b7cb9b7ca39a0410e 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -117,6 +117,9 @@ class LLInspectAvatar : public LLInspect
 	bool onVisibleZoomIn();
 	void onClickMuteVolume();
 	void onVolumeChange(const LLSD& data);
+
+	// Is used to determine if "Add friend" option should be enabled in gear menu
+	bool isNotFriend();
 	
 	// Callback for gCacheName to look up avatar name
 	void nameUpdatedCallback(
@@ -208,6 +211,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
 		boost::bind(&LLInspectAvatar::onVisibleFreezeEject, this));	
 	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleZoomIn", 
 		boost::bind(&LLInspectAvatar::onVisibleZoomIn, this));
+	mEnableCallbackRegistrar.add("InspectAvatar.Gear.Enable", boost::bind(&LLInspectAvatar::isNotFriend, this));
 
 	// can't make the properties request until the widgets are constructed
 	// as it might return immediately, so do it in postBuild.
@@ -473,6 +477,11 @@ void LLInspectAvatar::onClickViewProfile()
 	closeFloater();
 }
 
+bool LLInspectAvatar::isNotFriend()
+{
+	return !LLAvatarActions::isFriend(mAvatarID);
+}
+
 bool LLInspectAvatar::onVisibleFindOnMap()
 {
 	return gAgent.isGodlike() || is_agent_mappable(mAvatarID);
diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp
index c78bcd6afe0b1886a30b08ebfe58f5fef97df99f..7fd7b69021c3b66db3e4e2844ee8fba9b27a6d92 100644
--- a/indra/newview/llinspectgroup.cpp
+++ b/indra/newview/llinspectgroup.cpp
@@ -216,7 +216,8 @@ void LLInspectGroup::requestUpdate()
 	getChild<LLUICtrl>("group_details")->setValue("");
 	getChild<LLUICtrl>("group_cost")->setValue("");
 	// Must have a visible button so the inspector can take focus
-	getChild<LLUICtrl>("leave_btn")->setVisible(true);
+	getChild<LLUICtrl>("view_profile_btn")->setVisible(true);
+	getChild<LLUICtrl>("leave_btn")->setVisible(false);
 	getChild<LLUICtrl>("join_btn")->setVisible(false);
 	
 	// Make a new request for properties
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 1bc9297bba3a2e935614ad04a32df9785311d781..d18f9affe3cf437809992bcb53334ff6f8857764 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -892,7 +892,6 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type,
 			new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags);
 			break;
 		case LLAssetType::AT_CATEGORY:
-		case LLAssetType::AT_ROOT_CATEGORY:
 			if (actual_asset_type == LLAssetType::AT_LINK_FOLDER)
 			{
 				// Create a link folder handler instead.
@@ -1687,7 +1686,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
 				// BAP - should skip if dup.
 				if (move_is_into_current_outfit)
 				{
-					LLAppearanceManager::wearEnsemble(inv_cat);
+					LLAppearanceManager::instance().addEnsembleLink(inv_cat);
 				}
 				else
 				{
@@ -2044,7 +2043,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
 				    mContentsCount)
 				{
 					gInventory.removeObserver(this);
-					LLAppearanceManager::wearInventoryCategory(category, FALSE, TRUE);
+					LLAppearanceManager::instance().wearInventoryCategory(category, FALSE, TRUE);
 					delete this;
 				}
 			}
@@ -2089,7 +2088,7 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model
 		if(!model) return;
 		LLViewerInventoryCategory* cat = getCategory();
 		if(!cat) return;
-		LLAppearanceManager::wearEnsemble(cat,true);
+		LLAppearanceManager::instance().addEnsembleLink(cat,true);
 		return;
 	}
 #endif
@@ -2337,7 +2336,7 @@ void LLFolderBridge::pasteLinkFromClipboard()
 			{
 				link_inventory_item(
 					gAgent.getID(),
-					item->getUUID(),
+					item->getLinkedUUID(),
 					parent_id,
 					item->getName(),
 					LLAssetType::AT_LINK,
@@ -2404,7 +2403,7 @@ void LLFolderBridge::folderOptionsMenu()
 		{
 			mItems.push_back(std::string("Wear As Ensemble"));
 		}
-		mItems.push_back(std::string("Take Off Items"));
+		mItems.push_back(std::string("Remove From Outfit"));
 	}
 	hide_context_entries(*mMenu, mItems, disabled_items);
 }
@@ -2730,7 +2729,7 @@ void LLFolderBridge::modifyOutfit(BOOL append)
 
 	// BAP - was:
 	// wear_inventory_category_on_avatar( cat, append );
-	LLAppearanceManager::wearInventoryCategory( cat, FALSE, append );
+	LLAppearanceManager::instance().wearInventoryCategory( cat, FALSE, append );
 }
 
 // helper stuff
@@ -2847,10 +2846,6 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 		BOOL is_movable = TRUE;
 		switch( inv_item->getActualType() )
 		{
-		case LLAssetType::AT_ROOT_CATEGORY:
-			is_movable = FALSE;
-			break;
-
 		case LLAssetType::AT_CATEGORY:
 			is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType());
 			break;
@@ -2953,16 +2948,16 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
 				// BAP - should skip if dup.
 				if (move_is_into_current_outfit)
 				{
-					LLAppearanceManager::wearItem(inv_item);
+					LLAppearanceManager::instance().addItemLink(inv_item);
 				}
 				else
 				{
 					LLPointer<LLInventoryCallback> cb = NULL;
 					link_inventory_item(
 						gAgent.getID(),
-						inv_item->getUUID(),
+						inv_item->getLinkedUUID(),
 						mUUID,
-						std::string(),
+						inv_item->getName(),
 						LLAssetType::AT_LINK,
 						cb);
 				}
@@ -3889,16 +3884,11 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model
 			gMessageSystem->sendReliable( gAgent.getRegion()->getHost());
 		}
 		// this object might have been selected, so let the selection manager know it's gone now
-		LLViewerObject *found_obj =
-			gObjectList.findObject(item->getUUID());
+		LLViewerObject *found_obj = gObjectList.findObject(item->getLinkedUUID());
 		if (found_obj)
 		{
 			LLSelectMgr::getInstance()->remove(found_obj);
 		}
-		else
-		{
-			llwarns << "object not found - ignoring" << llendl;
-		}
 	}
 	else LLItemBridge::performAction(folder, model, action);
 }
@@ -3947,7 +3937,6 @@ std::string LLObjectBridge::getLabelSuffix() const
 	if( avatar && avatar->isWearingAttachment( mUUID ) )
 	{
 		std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
-		LLStringUtil::toLower(attachment_point_name);
 
 		LLStringUtil::format_map_t args;
 		args["[ATTACHMENT_POINT]"] =  attachment_point_name.c_str();
@@ -4053,7 +4042,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		LLInventoryItem* item = getItem();
 		if (item && item->getIsLinkType())
 		{
-			items.push_back(std::string("Goto Link"));
+			items.push_back(std::string("Find Original"));
 		}
 
 		items.push_back(std::string("Properties"));
@@ -4206,7 +4195,7 @@ void wear_inventory_item_on_avatar( LLInventoryItem* item )
 		lldebugs << "wear_inventory_item_on_avatar( " << item->getName()
 				 << " )" << llendl;
 
-		LLAppearanceManager::wearItem(item);
+		LLAppearanceManager::instance().addItemLink(item);
 	}
 }
 
@@ -4325,10 +4314,6 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_
 				{
 					LLSelectMgr::getInstance()->remove(found_obj);
 				}
-				else
-				{
-					llwarns << "object not found, ignoring" << llendl;
-				}
 			}
 		}
 
@@ -4493,7 +4478,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 
 		if (item && item->getIsLinkType())
 		{
-			items.push_back(std::string("Goto Link"));
+			items.push_back(std::string("Find Original"));
 		}
 
 		items.push_back(std::string("Properties"));
@@ -4771,7 +4756,7 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
 	}
 
 	// Find and remove this item from the COF.
-	LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::getCOF());
+	LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::instance().getCOF());
 	llassert(items.size() == 1); // Should always have one and only one item linked to this in the COF.
 	for (LLInventoryModel::item_array_t::const_iterator iter = items.begin();
 		 iter != items.end();
@@ -5157,7 +5142,7 @@ void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	}
 	else
 	{
-		items.push_back(std::string("Goto Link"));
+		items.push_back(std::string("Find Original"));
 		items.push_back(std::string("Delete"));
 		if (!isItemRemovable())
 		{
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 3ffeb55d6cfc7971f1afc90f1eac74f8ca6e92e7..4c7b0a0517c7ed523d095c799ef7c1b3af02aac9 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -33,14 +33,16 @@
 #ifndef LL_LLINVENTORYBRIDGE_H
 #define LL_LLINVENTORYBRIDGE_H
 
-#include "llfloaterproperties.h"
-#include "llwearable.h"
-#include "llviewercontrol.h"
 #include "llcallingcard.h"
-#include "llinventorymodel.h"
+#include "llfloaterproperties.h"
 #include "llfoldervieweventlistener.h"
+#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
+#include "llviewercontrol.h"
+#include "llwearable.h"
 
 class LLInventoryPanel;
+class LLInventoryModel;
 class LLMenuGL;
 
 enum EInventoryIcon
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 4b0d524906c026753bb5d3371da73cd670fabf02..38a417f1a28eda7efdfc63a83f98b5b625136c67 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -31,40 +31,25 @@
  */
 
 #include "llviewerprecompiledheaders.h"
-
 #include "llinventorymodel.h"
 
-#include "llassetstorage.h"
-#include "llcrc.h"
-#include "lldir.h"
-#include "llsys.h"
-#include "llxfermanager.h"
-#include "message.h"
-
 #include "llagent.h"
 #include "llagentwearables.h"
-#include "llfloater.h"
-#include "llfocusmgr.h"
-#include "llinventorybridge.h"
-#include "llinventoryfunctions.h"
 #include "llinventorypanel.h"
 #include "llfloaterinventory.h"
-#include "llviewerfoldertype.h"
-#include "llviewerinventory.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llinventoryobserver.h"
+#include "llwindow.h"
+#include "llviewercontrol.h"
+#include "llpreview.h" 
 #include "llviewermessage.h"
+#include "llviewerfoldertype.h"
 #include "llviewerwindow.h"
-#include "llviewerregion.h"
 #include "llappviewer.h"
-#include "lldbstrings.h"
-#include "llviewerstats.h"
-#include "llmutelist.h"
-#include "llnotifications.h"
+#include "llviewerregion.h"
 #include "llcallbacklist.h"
-#include "llpreview.h"
-#include "llviewercontrol.h"
 #include "llvoavatarself.h"
-#include "llsdutil.h"
-#include <deque>
 
 //#define DIFF_INVENTORY_FILES
 #ifdef DIFF_INVENTORY_FILES
@@ -322,10 +307,10 @@ void LLInventoryModel::unlockDirectDescendentArrays(const LLUUID& cat_id)
 // specifies 'type' as what it defaults to containing. The category is
 // not necessarily only for that type. *NOTE: This will create a new
 // inventory category on the fly if one does not exist.
-const LLUUID LLInventoryModel::findCategoryUUIDForType(LLFolderType::EType t, bool create_folder)
+const LLUUID LLInventoryModel::findCategoryUUIDForType(LLFolderType::EType t, bool create_folder, bool find_in_library)
 {
-	const LLUUID &rv = findCatUUID(t);
-	if(rv.isNull() && isInventoryUsable() && create_folder)
+	const LLUUID &rv = findCatUUID(t, find_in_library);
+	if(rv.isNull() && isInventoryUsable() && (create_folder && !find_in_library))
 	{
 		const LLUUID &root_id = gInventory.getRootFolderID();
 		if(root_id.notNull())
@@ -338,10 +323,10 @@ const LLUUID LLInventoryModel::findCategoryUUIDForType(LLFolderType::EType t, bo
 
 // Internal method which looks for a category with the specified
 // preferred type. Returns LLUUID::null if not found.
-const LLUUID &LLInventoryModel::findCatUUID(LLFolderType::EType preferred_type) const
+const LLUUID &LLInventoryModel::findCatUUID(LLFolderType::EType preferred_type, bool find_in_library) const
 {
-	const LLUUID &root_id = gInventory.getRootFolderID();
-	if(LLFolderType::FT_CATEGORY == preferred_type)
+	const LLUUID &root_id = (find_in_library) ? gInventory.getLibraryRootFolderID() : gInventory.getRootFolderID();
+	if(LLFolderType::FT_ROOT_INVENTORY == preferred_type)
 	{
 		return root_id;
 	}
@@ -886,7 +871,8 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id)
 // Delete a particular inventory object by ID.
 void LLInventoryModel::deleteObject(const LLUUID& id)
 {
-	purgeLinkedObjects(id);
+	// Disabling this; let users manually purge linked objects.
+	// purgeLinkedObjects(id);
 	lldebugs << "LLInventoryModel::deleteObject()" << llendl;
 	LLPointer<LLInventoryObject> obj = getObject(id);
 	if(obj)
@@ -923,13 +909,14 @@ void LLInventoryModel::deleteObject(const LLUUID& id)
 		}
 		addChangedMask(LLInventoryObserver::REMOVE, id);
 		obj = NULL; // delete obj
+		gInventory.notifyObservers();
 	}
 }
 
 // Delete a particular inventory item by ID, and remove it from the server.
 void LLInventoryModel::purgeObject(const LLUUID &id)
 {
-	lldebugs << "LLInventoryModel::purgeObject()" << llendl;
+	lldebugs << "LLInventoryModel::purgeObject() [ id: " << id << " ] " << llendl;
 	LLPointer<LLInventoryObject> obj = getObject(id);
 	if(obj)
 	{
@@ -2463,7 +2450,7 @@ void LLInventoryModel::buildParentChildMap()
 			{
 				cat->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND));
 			}
-			else if(LLFolderType::FT_CATEGORY == pref)
+			else if(LLFolderType::FT_ROOT_INVENTORY == pref)
 			{
 				// it's the root
 				cat->setParent(LLUUID::null);
@@ -3343,7 +3330,7 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
 		// If the item has already been added (e.g. from link prefetch), then it doesn't need to be re-added.
 		if (gInventory.getItem(titem->getUUID()))
 		{
-			llinfos << "Skipping prefetched item [ Name: " << titem->getName() << " | Type: " << titem->getActualType() << " | ItemUUID: " << titem->getUUID() << " ] " << llendl;
+			lldebugs << "Skipping prefetched item [ Name: " << titem->getName() << " | Type: " << titem->getActualType() << " | ItemUUID: " << titem->getUUID() << " ] " << llendl;
 			continue;
 		}
 		gInventory.updateItem(titem);
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index bd64591194cce79d586c6bb5160b8bdb762d2035..aa4ffb392fd79e0ca768b26e264a3b702cb156de 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -46,11 +46,6 @@
 #include <string>
 #include <vector>
 
-// ! REFACTOR ! Remove llinventoryobservers.h and have other files that need it explicitly 
-// include llinventoryobservers.h instead of llinventorymodel.h .  This will reduce dependency on
-// llinventorymodel.h.
-#include "llinventoryobserver.h" 
-
 class LLInventoryObserver;
 class LLInventoryObject;
 class LLInventoryItem;
@@ -252,13 +247,12 @@ class LLInventoryModel
 
 	// findCategoryUUIDForType() returns the uuid of the category that
 	// specifies 'type' as what it defaults to containing. The
-	// category is not necessarily only for that type. *NOTE: This
-	// will create a new inventory category on the fly if one does not
-	// exist.
-
+	// category is not necessarily only for that type. *NOTE: If create_folder is true, this
+	// will create a new inventory category on the fly if one does not exist. *NOTE: if find_in_library is
+	// true it will search in the user's library folder instead of "My Inventory"
 	// SDK: Added flag to specify whether the folder should be created if not found.  This fixes the horrible
 	// multiple trash can bug.
-	const LLUUID findCategoryUUIDForType(LLFolderType::EType preferred_type, bool create_folder = true);
+	const LLUUID findCategoryUUIDForType(LLFolderType::EType preferred_type, bool create_folder = true, bool find_in_library = false);
 
 	// Call this method when it's time to update everyone on a new
 	// state, by default, the inventory model will not update
@@ -409,7 +403,7 @@ class LLInventoryModel
 	// 
 	// Internal method which looks for a category with the specified
 	// preferred type. Returns LLUUID::null if not found
- 	const LLUUID &findCatUUID(LLFolderType::EType preferred_type) const;
+ 	const LLUUID &findCatUUID(LLFolderType::EType preferred_type, bool find_in_library = false) const;
 
 	// Empty the entire contents
 	void empty();
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index dfd4af5c287df000707cfb75dd8ffd569363a626..3a8b8bdf9eaa97bd4538791af1b30bffb466aef8 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -38,55 +38,16 @@
 
 // Seraph TODO: Remove unnecessary headers
 
-// library includes
 #include "llagent.h"
 #include "llagentwearables.h"
-#include "llcallingcard.h"
-#include "llfloaterreg.h"
-#include "llsdserialize.h"
-#include "llfiltereditor.h"
-#include "llspinctrl.h"
-#include "llui.h"
-#include "message.h"
-
-// newview includes
 #include "llappearancemgr.h"
-#include "llappviewer.h"
-#include "llfirstuse.h"
-#include "llfloaterchat.h"
-#include "llfloatercustomize.h"
-#include "llfocusmgr.h"
-#include "llfolderview.h"
-#include "llgesturemgr.h"
-#include "lliconctrl.h"
+#include "llfloaterreg.h"
 #include "llimview.h"
 #include "llinventorybridge.h"
-#include "llinventoryclipboard.h"
-#include "llinventorymodel.h"
-#include "lllineeditor.h"
-#include "llmenugl.h"
-#include "llpreviewanim.h"
-#include "llpreviewgesture.h"
-#include "llpreviewnotecard.h"
-#include "llpreviewscript.h"
-#include "llpreviewsound.h"
-#include "llpreviewtexture.h"
-#include "llresmgr.h"
-#include "llscrollbar.h"
 #include "llscrollcontainer.h"
-#include "llselectmgr.h"
-#include "lltabcontainer.h"
-#include "lltooldraganddrop.h"
-#include "lluictrlfactory.h"
 #include "llviewerfoldertype.h"
-#include "llviewerinventory.h"
-#include "llviewermessage.h"
-#include "llviewerobjectlist.h"
-#include "llviewerregion.h"
-#include "llviewerwindow.h"
-#include "llvoavatarself.h"
-#include "llwearablelist.h"
 #include "llimfloater.h"
+#include "llvoavatarself.h"
 
 static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
 
@@ -139,6 +100,7 @@ BOOL LLInventoryPanel::postBuild()
 		p.name = getName();
 		p.rect = folder_rect;
 		p.parent_panel = this;
+		p.tool_tip = p.name;
 		mFolders = LLUICtrlFactory::create<LLFolderView>(p);
 		mFolders->setAllowMultiSelect(mAllowMultiSelect);
 	}
@@ -302,7 +264,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
 		return;
 	}
 
-	if(mask & LLInventoryObserver::LABEL)
+	if (mask & LLInventoryObserver::LABEL)
 	{
 		handled = true;
 		// label change - empty out the display name for each object
@@ -327,9 +289,15 @@ void LLInventoryPanel::modelChanged(U32 mask)
 			}
 		}
 	}
-	if((mask & (LLInventoryObserver::STRUCTURE
-				| LLInventoryObserver::ADD
-				| LLInventoryObserver::REMOVE)) != 0)
+
+	// We don't really care which of these masks the item is actually flagged with, since the masks
+	// may not be accurate (e.g. in the main inventory panel, I move an item from My Inventory into
+	// Landmarks; this is a STRUCTURE change for that panel but is an ADD change for the Landmarks
+	// panel).  What's relevant is that the item and UI are probably out of sync and thus need to be
+	// resynchronized.
+	if (mask & (LLInventoryObserver::STRUCTURE |
+				LLInventoryObserver::ADD |
+				LLInventoryObserver::REMOVE))
 	{
 		handled = true;
 		// Record which folders are open by uuid.
@@ -346,74 +314,56 @@ void LLInventoryPanel::modelChanged(U32 mask)
 				LLInventoryObject* model_item = model->getObject(*id_it);
 				LLFolderViewItem* view_item = mFolders->getItemByID(*id_it);
 
-				if (model_item)
+				// Item exists in memory but a UI element hasn't been created for it.
+				if (model_item && !view_item)
 				{
-					if (!view_item)
+					// Add the UI element for this item.
+					buildNewViews(*id_it);
+					// Select any newly created object that has the auto rename at top of folder root set.
+					if(mFolders->getRoot()->needsAutoRename())
 					{
-						// this object was just created, need to build a view for it
-						if ((mask & LLInventoryObserver::ADD) != LLInventoryObserver::ADD)
-						{
-							llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl;
-						}
-						buildNewViews(*id_it);
-						
-						// select any newly created object
-						// that has the auto rename at top of folder
-						// root set
-						if(mFolders->getRoot()->needsAutoRename())
-						{
-							setSelection(*id_it, FALSE);
-						}
+						setSelection(*id_it, FALSE);
 					}
-					else
-					{
-						// this object was probably moved, check its parent
-						if ((mask & LLInventoryObserver::STRUCTURE) != LLInventoryObserver::STRUCTURE)
-						{
-							llwarns << *id_it << " is in model and in view, but STRUCTURE flag not set" << " for model (Name :" << model_item->getName() << " )" << llendl;
-						}
+				}
 
-						LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
+				// This item already exists in both memory and UI.  It was probably moved
+				// around in the panel's directory structure (i.e. reparented).
+				if (model_item && view_item)
+				{
+					LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID());
 
-						// added check against NULL for cases when Inventory panel contains startFolder.
-						// in this case parent is LLFolderView (LLInventoryPanel::mFolders) itself.
-						// this check is a fix for bug EXT-1859.
-						if (NULL != new_parent && view_item->getParentFolder() != new_parent)
+					// Item has been moved.
+					if (view_item->getParentFolder() != new_parent)
+					{
+						if (new_parent != NULL)
 						{
+							// Item is to be moved and we found its new parent in the panel's directory, so move the item's UI.
 							view_item->getParentFolder()->extractItem(view_item);
 							view_item->addToFolder(new_parent, mFolders);
 						}
-/*
-						 on the other side in case Inventory Panel has content of the any folder
-						 it is possible that item moved to some folder which is absent in current
-						 Panel. For ex. removing item (via moving to trash).
-						 In this case we need to check if new parent is other then inventory start folder
-						 and simply remove its View from the hierarchy.
-						 See details in EXT-2098.
-*/
-						// So, let check if item was moved into folder out of this Inventory Panel.
-						else if (mStartFolderID.notNull() && NULL == new_parent && model_item->getParentUUID() != mStartFolderID)
-						{
-							view_item->getParentFolder()->extractItem(view_item);
-						}
-					}
-				}
-				else
-				{
-					if (view_item)
-					{
-						if ((mask & LLInventoryObserver::REMOVE) != LLInventoryObserver::REMOVE)
+						else 
 						{
-							llwarns << *id_it << " is not in model but in view, but REMOVE flag not set" << llendl;
+							// Item is to be moved outside the panel's directory (e.g. moved to trash for a panel that 
+							// doesn't include trash).  Just remove the item's UI.
+							view_item->destroyView();
 						}
-						// item in view but not model, need to delete view
-						view_item->destroyView();
 					}
 					else
 					{
-						llwarns << *id_it << "Item does not exist in either view or model, but notification triggered" << llendl;
+						// Hmm, we got an ADD/REMOVE/STRUCTURE notification for this item but there's nothing to be done to it.
+						llwarns << "Notification triggered for item that isn't changing.  "
+								<< "Operation: ( mask: " << mask << " panel name: " << mStartFolderString << " ) "
+								<< "Item: [ Name:" << model_item->getName() << " UUID: " << *id_it << " ]" << llendl;
+						
 					}
 				}
+
+				// This item has been removed from memory, but its associated UI element still exists.
+				if (!model_item && view_item)
+				{
+					// Remove the item's UI.
+					view_item->destroyView();
+				}
 			}
 		}
 	}
@@ -492,6 +442,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
 					p.icon = new_listener->getIcon();
 					p.root = mFolders;
 					p.listener = new_listener;
+					p.tool_tip = p.name;
 					LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
 				
 					folderp->setItemSortOrder(mFolders->getSortOrder());
@@ -518,6 +469,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
 					params.root(mFolders);
 					params.listener(new_listener);
 					params.rect(LLRect (0, 0, 0, 0));
+					params.tool_tip = params.name;
 					itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
 				}
 			}
@@ -694,7 +646,7 @@ void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_foc
 {
 	// Don't select objects in COF (e.g. to prevent refocus when items are worn).
 	const LLInventoryObject *obj = gInventory.getObject(obj_id);
-	if (obj && obj->getParentUUID() == LLAppearanceManager::getCOF())
+	if (obj && obj->getParentUUID() == LLAppearanceManager::instance().getCOF())
 	{
 		return;
 	}
diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
index d7eaad94f017a8524d935b4f49d9e2ea8d0aa8a1..2cc5c8335d3e7b9ac23b153e31b759466d520268 100644
--- a/indra/newview/lljoystickbutton.cpp
+++ b/indra/newview/lljoystickbutton.cpp
@@ -134,15 +134,17 @@ void LLJoystick::updateSlop()
 	return;
 }
 
-BOOL LLJoystick::pointInCircle(S32 x, S32 y) const 
+bool LLJoystick::pointInCircle(S32 x, S32 y) const 
 { 
-	//cnt is x and y coordinates of center of joystick circle, and also its radius,
-	//because area is not just rectangular, it's a square!
-	//Make sure to change method if this changes.
-	int cnt = this->getLocalRect().mTop/2;
-	if((x-cnt)*(x-cnt)+(y-cnt)*(y-cnt)<=cnt*cnt)
-		return TRUE;
-	return FALSE;
+	if(this->getLocalRect().getHeight() != this->getLocalRect().getWidth())
+	{
+		llwarns << "Joystick shape is not square"<<llendl;
+		return true;
+	}
+	//center is x and y coordinates of center of joystick circle, and also its radius
+	int center = this->getLocalRect().getHeight()/2;
+	bool in_circle = (x - center) * (x - center) + (y - center) * (y - center) <= center * center;
+	return in_circle;
 }
 
 BOOL LLJoystick::handleMouseDown(S32 x, S32 y, MASK mask)
@@ -150,7 +152,7 @@ BOOL LLJoystick::handleMouseDown(S32 x, S32 y, MASK mask)
 	//llinfos << "joystick mouse down " << x << ", " << y << llendl;
 	bool handles = false;
 
-	if(handles = pointInCircle(x, y))
+	if(pointInCircle(x, y))
 	{
 		mLastMouse.set(x, y);
 		mFirstMouse.set(x, y);
diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h
index 0465f78031fdd8d6f5c081aef1ffd2788d3ce852..2b071a8999befd61cb7ba6face2f0183b81bc1dc 100644
--- a/indra/newview/lljoystickbutton.h
+++ b/indra/newview/lljoystickbutton.h
@@ -79,7 +79,13 @@ class LLJoystick
 	static void		onBtnHeldDown(void *userdata);		// called by llbutton callback handler
 	void            setInitialQuadrant(EJoystickQuadrant initial) { mInitialQuadrant = initial; };
 
-	BOOL			pointInCircle(S32 x, S32 y) const;
+	/**
+	 * Checks if click location is inside joystick circle.
+	 *
+	 * Image containing circle is square and this square has adherent points with joystick
+	 * circle. Make sure to change method according to shape other than square. 
+	 */
+	bool			pointInCircle(S32 x, S32 y) const;
 	
 	static std::string nameFromQuadrant(const EJoystickQuadrant quadrant);
 	static EJoystickQuadrant quadrantFromName(const std::string& name);
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index e0dc1b6f0fce150a0771e390e9431f2f3a6d5c9b..003afafa87abfa3a43fb218cb13c9611f7e7b98c 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -324,7 +324,7 @@ void LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(const LLVector3d& gl
 	{
 		LLVector3 pos = sim_infop->getLocalPos(global_pos);
 		std::string name = sim_infop->getName() ;
-		cb(name, llround(pos.mV[VX]), llround(pos.mV[VY]));
+		cb(name, llround(pos.mV[VX]), llround(pos.mV[VY]),llround(pos.mV[VZ]));
 	}
 	else
 	{
@@ -368,7 +368,7 @@ void LLLandmarkActions::onRegionResponseNameAndCoords(region_name_and_coords_cal
 	{
 		LLVector3 local_pos = sim_infop->getLocalPos(global_pos);
 		std::string name = sim_infop->getName() ;
-		cb(name, llround(local_pos.mV[VX]), llround(local_pos.mV[VY]));
+		cb(name, llround(local_pos.mV[VX]), llround(local_pos.mV[VY]), llround(local_pos.mV[VZ]));
 	}
 }
 
diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h
index 1c524c820c962b27abda5df1525babc96e64ffa4..c65b831f3e62017c7f4d253d039d2c57ed2364da 100644
--- a/indra/newview/lllandmarkactions.h
+++ b/indra/newview/lllandmarkactions.h
@@ -43,7 +43,7 @@ class LLLandmarkActions
 {
 public:
 	typedef boost::function<void(std::string& slurl)> slurl_callback_t;
-	typedef boost::function<void(std::string& slurl, S32 x, S32 y)> region_name_and_coords_callback_t;
+	typedef boost::function<void(std::string& slurl, S32 x, S32 y, S32 z)> region_name_and_coords_callback_t;
 
 	/**
 	 * @brief Fetches landmark LLViewerInventoryItems for the given landmark name. 
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 8fe317a2921543a740dadb48aec5593526aa8773..7e35cfa04c201aad03cdf4dc007fe74d46ee8eec 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -45,7 +45,7 @@
 #include "lltooltip.h"
 
 // newview includes
-#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "lllandmarkactions.h"
 #include "lllandmarklist.h"
 #include "lllocationhistory.h"
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index a01426ea8794e46d5f6bccd1784a0a1f8718ed4a..955347bce2d27db40322126997fb8cdf11ee5755 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -73,9 +73,9 @@ LLLoginInstance::LLLoginInstance() :
 {
 	mLoginModule->getEventPump().listen("lllogininstance", 
 		boost::bind(&LLLoginInstance::handleLoginEvent, this, _1));
-	mDispatcher.add("fail.login", "", boost::bind(&LLLoginInstance::handleLoginFailure, this, _1));
-	mDispatcher.add("connect",    "", boost::bind(&LLLoginInstance::handleLoginSuccess, this, _1));
-	mDispatcher.add("disconnect", "", boost::bind(&LLLoginInstance::handleDisconnect, this, _1));
+	mDispatcher.add("fail.login", boost::bind(&LLLoginInstance::handleLoginFailure, this, _1));
+	mDispatcher.add("connect",    boost::bind(&LLLoginInstance::handleLoginSuccess, this, _1));
+	mDispatcher.add("disconnect", boost::bind(&LLLoginInstance::handleDisconnect, this, _1));
 }
 
 LLLoginInstance::~LLLoginInstance()
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 8f29f908e5c74c70ed77e4fcd08b98320c301871..90c009887da24975f3293e64bc933b98603ccbe6 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -92,6 +92,7 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	mStretchToFill( true ),
 	mMaintainAspectRatio ( true ),
 	mHideLoading (false),
+	mHidingInitialLoad (false),
 	mDecoupleTextureSize ( false ),
 	mTextureWidth ( 1024 ),
 	mTextureHeight ( 1024 )
@@ -616,6 +617,11 @@ bool LLMediaCtrl::ensureMediaSourceExists()
 			mMediaSource->setHomeURL(mHomePageUrl);
 			mMediaSource->setVisible( getVisible() );
 			mMediaSource->addObserver( this );
+
+			if(mHideLoading)
+			{
+				mHidingInitialLoad = true;
+			}
 		}
 		else
 		{
@@ -685,7 +691,13 @@ void LLMediaCtrl::draw()
 	{
 		setFrequentUpdates( false );
 	};
-
+	
+	if(mHidingInitialLoad)
+	{
+		// If we're hiding loading, don't draw at all.
+		return;
+	}
+	
 	// alpha off for this
 	LLGLSUIDefault gls_ui;
 	LLGLDisable gls_alphaTest( GL_ALPHA_TEST );
@@ -865,19 +877,15 @@ 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;
-			if(mMediaSource && mHideLoading)
-			{
-				mMediaSource->suspendUpdates(true);
-			}
 		};
 		break;
 		
 		case MEDIA_EVENT_NAVIGATE_COMPLETE:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAVIGATE_COMPLETE, result string is: " << self->getNavigateResultString() << LL_ENDL;
-			if(mMediaSource && mHideLoading)
+			if(mHidingInitialLoad)
 			{
-				mMediaSource->suspendUpdates(false);
+				mHidingInitialLoad = false;
 			}
 		};
 		break;
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 76ddc61ebf28ec285f07f32b1f9e0a2d48362702..f07513a3fdbc921ba90d2527ba7fd859f63d3f37 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -188,6 +188,7 @@ class LLMediaCtrl :
 		bool mStretchToFill;
 		bool mMaintainAspectRatio;
 		bool mHideLoading;
+		bool mHidingInitialLoad;
 		bool mDecoupleTextureSize;
 		S32 mTextureWidth;
 		S32 mTextureHeight;
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index e3ba1b8e4adb3b17a3297a9dc64f17ca691e029a..0ee883e221a5fdbd0acda0e25f85dfa63db44909 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -83,6 +83,11 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)
 {
 }
 
+LLFloaterMove::~LLFloaterMove()
+{
+	LLPanelStandStopFlying::getInstance()->reparent(NULL);
+}
+
 // virtual
 BOOL LLFloaterMove::postBuild()
 {
@@ -425,42 +430,15 @@ void LLFloaterMove::showModeButtons(BOOL bShow)
 		return;
 	mModeActionsPanel->setVisible(bShow);
 
-	if (isDocked())
-	{
-		return;
-	}
-
-	updateHeight(bShow);
-}
-
-void LLFloaterMove::updateHeight(bool show_mode_buttons)
-{
-	static bool size_changed = false;
-	static S32 origin_height = getRect().getHeight();
-	LLRect rect = getRect();
-
-	static S32 mode_panel_height = mModeActionsPanel->getRect().getHeight();
-
-	S32 newHeight = getRect().getHeight();
-
-	if (!show_mode_buttons && origin_height == newHeight)
-	{
-		newHeight -= mode_panel_height;
-		size_changed = true;
-	}
-	else if (show_mode_buttons && origin_height > newHeight)
+	if (bShow)
+		LLPanelStandStopFlying::getInstance()->reparent(NULL);
+	else
 	{
-		newHeight += mode_panel_height;
-		size_changed = true;
+		LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance();
+		ssf_panel->reparent(this);
+		const LLRect& mode_actions_rect = mModeActionsPanel->getRect();
+		ssf_panel->setOrigin(mode_actions_rect.mLeft, mode_actions_rect.mBottom);
 	}
-
-	if (!size_changed)
-		return;
-
-	rect.setLeftTopAndSize(rect.mLeft, rect.mTop, rect.getWidth(), newHeight);
-	reshape(rect.getWidth(), rect.getHeight());
-	setRect(rect);
-	size_changed = false;
 }
 
 //static
@@ -504,14 +482,6 @@ void LLFloaterMove::onOpen(const LLSD& key)
 //virtual
 void LLFloaterMove::setDocked(bool docked, bool pop_on_undock/* = true*/)
 {
-	LLDockableFloater::setDocked(docked, pop_on_undock);
-	bool show_mode_buttons = isDocked() || !gAgent.getFlying();
-
-	if (!isMinimized())
-	{
-		updateHeight(show_mode_buttons);
-	}
-
 	LLTransientDockableFloater::setDocked(docked, pop_on_undock);
 }
 
@@ -535,7 +505,8 @@ void LLFloaterMove::setModeButtonToggleState(const EMovementMode mode)
 /************************************************************************/
 LLPanelStandStopFlying::LLPanelStandStopFlying() :
 	mStandButton(NULL),
-	mStopFlyingButton(NULL)
+	mStopFlyingButton(NULL),
+	mAttached(false)
 {
 	// make sure we have the only instance of this class
 	static bool b = true;
@@ -624,6 +595,45 @@ BOOL LLPanelStandStopFlying::handleToolTip(S32 x, S32 y, MASK mask)
 	return TRUE;
 }
 
+void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view)
+{
+	LLPanel* parent = dynamic_cast<LLPanel*>(getParent());
+	if (!parent)
+	{
+		llwarns << "Stand/stop flying panel parent is unset" << llendl;
+		return;
+	}
+
+	if (move_view != NULL)
+	{
+		llassert(move_view != parent); // sanity check
+	
+		// Save our original container.
+		if (!mOriginalParent.get())
+			mOriginalParent = parent->getHandle();
+
+		// Attach to movement controls.
+		parent->removeChild(this);
+		move_view->addChild(this);
+		// Origin must be set by movement controls.
+		mAttached = true;
+	}
+	else
+	{
+		if (!mOriginalParent.get())
+		{
+			llwarns << "Original parent of the stand / stop flying panel not found" << llendl;
+			return;
+		}
+
+		// Detach from movement controls. 
+		parent->removeChild(this);
+		mOriginalParent.get()->addChild(this);
+		mAttached = false;
+		updatePosition(); // don't defer until next draw() to avoid flicker
+	}
+}
+
 //////////////////////////////////////////////////////////////////////////
 // Private Section
 //////////////////////////////////////////////////////////////////////////
@@ -668,27 +678,14 @@ void LLPanelStandStopFlying::onStopFlyingButtonClick()
  */
 void LLPanelStandStopFlying::updatePosition()
 {
-
 	LLBottomTray* tray = LLBottomTray::getInstance();
-	if (!tray) return;
+	if (!tray || mAttached) return;
 
 	LLButton* movement_btn = tray->getChild<LLButton>(BOTTOM_TRAY_BUTTON_NAME);
 
-	//align centers of a button and a floater
+	// Align centers of the button and the panel.
 	S32 x = movement_btn->calcScreenRect().getCenterX() - getRect().getWidth()/2;
-
-	S32 y = 0;
-
-	LLFloater *move_floater = LLFloaterReg::findInstance("moveview");
-	if (move_floater)
-	{
-		if (move_floater->isDocked())
-		{
-			y = move_floater->getRect().mBottom + getRect().getHeight();
-		}
-	}
-
-	setOrigin(x, y);
+	setOrigin(x, 0);
 }
 
 
diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h
index cee6078ee990530f5fb01ca44325adb68224d40a..2664fe6e401a3b116b678d7c01696c32af74aaca 100644
--- a/indra/newview/llmoveview.h
+++ b/indra/newview/llmoveview.h
@@ -46,11 +46,12 @@ class LLJoystickAgentSlide;
 class LLFloaterMove
 :	public LLTransientDockableFloater
 {
+	LOG_CLASS(LLFloaterMove);
 	friend class LLFloaterReg;
 
 private:
 	LLFloaterMove(const LLSD& key);
-	~LLFloaterMove() {}
+	~LLFloaterMove();
 public:
 
 	/*virtual*/	BOOL	postBuild();
@@ -96,7 +97,6 @@ class LLFloaterMove
 	void updateButtonsWithMovementMode(const EMovementMode newMode);
 	void updatePosition();
 	void showModeButtons(BOOL bShow);
-	void updateHeight(bool show_mode_buttons);
 
 public:
 
@@ -126,6 +126,7 @@ class LLFloaterMove
  */
 class LLPanelStandStopFlying : public LLPanel
 {
+	LOG_CLASS(LLPanelStandStopFlying);
 public:
 	typedef enum stand_stop_flying_mode_t
 	{
@@ -133,6 +134,19 @@ class LLPanelStandStopFlying : public LLPanel
 		SSFM_STOP_FLYING
 	} EStandStopFlyingMode;
 
+	/**
+	 * Attach or detach the panel to/from the movement controls floater.
+	 * 
+	 * Called when the floater gets opened/closed, user sits, stands up or starts/stops flying.
+	 * 
+	 * @param move_view The floater to attach to (not always accessible via floater registry).
+	 *        If NULL is passed, the panel gets reparented to its original container.
+	 *
+	 * @see mAttached
+	 * @see mOriginalParent 
+	 */
+	void reparent(LLFloaterMove* move_view);
+
 	static LLPanelStandStopFlying* getInstance();
 	static void setStandStopFlyingMode(EStandStopFlyingMode mode);
 	static void clearStandStopFlyingMode(EStandStopFlyingMode mode);
@@ -157,6 +171,23 @@ class LLPanelStandStopFlying : public LLPanel
 
 	LLButton* mStandButton;
 	LLButton* mStopFlyingButton;
+
+	/**
+	 * The original parent of the panel.
+	 *  
+	 * Makes it possible to move (reparent) the panel to the movement controls floater and back.
+	 * 
+	 * @see reparent()
+	 */
+	LLHandle<LLPanel> mOriginalParent;
+
+	/**
+	 * True if the panel is currently attached to the movement controls floater.
+	 * 
+	 * @see reparent()
+	 * @see updatePosition()
+	 */
+	bool	mAttached;
 };
 
 
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index ac806d7106a7aaa01d4422d0dc16d357d99f8130..16a47890c3ba878facfbba1b3d1e368735f3dab2 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -89,8 +89,6 @@ BOOL LLNearbyChat::postBuild()
 
 	mChatHistory = getChild<LLChatHistory>("chat_history");
 
-	setCanResize(true);
-
 	if(!LLDockableFloater::postBuild())
 		return false;
 
@@ -98,7 +96,7 @@ BOOL LLNearbyChat::postBuild()
 	{
 		setDockControl(new LLDockControl(
 			LLBottomTray::getInstance()->getNearbyChatBar(), this,
-			getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1)));
+			getDockTongue(), LLDockControl::TOP, boost::bind(&LLNearbyChat::getAllowedRect, this, _1)));
 	}
 
 	return true;
@@ -132,120 +130,61 @@ void    LLNearbyChat::applySavedVariables()
 	}
 }
 
-LLColor4 nearbychat_get_text_color(const LLChat& chat)
-{
-	LLColor4 text_color;
-
-	if(chat.mMuted)
-	{
-		text_color.setVec(0.8f, 0.8f, 0.8f, 1.f);
-	}
-	else
-	{
-		switch(chat.mSourceType)
-		{
-		case CHAT_SOURCE_SYSTEM:
-			text_color = LLUIColorTable::instance().getColor("SystemChatColor"); 
-			break;
-		case CHAT_SOURCE_AGENT:
-		    if (chat.mFromID.isNull())
-			{
-				text_color = LLUIColorTable::instance().getColor("SystemChatColor");
-			}
-			else
-			{
-				if(gAgentID == chat.mFromID)
-				{
-					text_color = LLUIColorTable::instance().getColor("UserChatColor");
-				}
-				else
-				{
-					text_color = LLUIColorTable::instance().getColor("AgentChatColor");
-				}
-			}
-			break;
-		case CHAT_SOURCE_OBJECT:
-			if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)
-			{
-				text_color = LLUIColorTable::instance().getColor("ScriptErrorColor");
-			}
-			else if ( chat.mChatType == CHAT_TYPE_OWNER )
-			{
-				text_color = LLUIColorTable::instance().getColor("llOwnerSayChatColor");
-			}
-			else
-			{
-				text_color = LLUIColorTable::instance().getColor("ObjectChatColor");
-			}
-			break;
-		default:
-			text_color.setToWhite();
-		}
-
-		if (!chat.mPosAgent.isExactlyZero())
-		{
-			LLVector3 pos_agent = gAgent.getPositionAgent();
-			F32 distance = dist_vec(pos_agent, chat.mPosAgent);
-			if (distance > gAgent.getNearChatRadius())
-			{
-				// diminish far-off chat
-				text_color.mV[VALPHA] = 0.8f;
-			}
-		}
-	}
-
-	return text_color;
-}
-
-void LLNearbyChat::add_timestamped_line(const LLChat& chat, const LLColor4& color)
-{
-	S32 font_size = gSavedSettings.getS32("ChatFontSize");
-
-	const LLFontGL* fontp = NULL;
-	switch(font_size)
-	{
-	case 0:
-		fontp = LLFontGL::getFontSansSerifSmall();
-		break;
-	default:
-	case 1:
-		fontp = LLFontGL::getFontSansSerif();
-		break;
-	case 2:
-		fontp = LLFontGL::getFontSansSerifBig();
-		break;
-	}
-
-	LLStyle::Params style_params;
-	style_params.color(color);
-	style_params.font(fontp);
-	LLUUID uuid = chat.mFromID;
-	std::string from = chat.mFromName;
-	std::string message = chat.mText;
-	mChatHistory->appendWidgetMessage(chat, style_params);
-}
-
 void	LLNearbyChat::addMessage(const LLChat& chat)
 {
-	LLColor4 color = nearbychat_get_text_color(chat);
-	
 	if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)
 	{
 		if(gSavedSettings.getBOOL("ShowScriptErrors") == FALSE)
 			return;
 		if (gSavedSettings.getS32("ShowScriptErrorsLocation")== 1)// show error in window //("ScriptErrorsAsChat"))
 		{
+
+			LLColor4 txt_color;
+
+			LLViewerChat::getChatColor(chat,txt_color);
+			
 			LLFloaterScriptDebug::addScriptLine(chat.mText,
 												chat.mFromName, 
-												color, 
+												txt_color, 
 												chat.mFromID);
 			return;
 		}
 	}
 	
-	// could flash the chat button in the status bar here. JC
 	if (!chat.mMuted)
-		add_timestamped_line(chat, color);
+	{
+		std::string message = chat.mText;
+		std::string prefix = message.substr(0, 4);
+		
+		if (chat.mChatStyle == CHAT_STYLE_IRC)
+		{
+			LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
+			LLViewerChat::getChatColor(chat,txt_color);
+			LLFontGL* fontp = LLViewerChat::getChatFont();
+			std::string font_name = LLFontGL::nameFromFont(fontp);
+			std::string font_size = LLFontGL::sizeFromFont(fontp);
+			LLStyle::Params append_style_params;
+			append_style_params.color(txt_color);
+			append_style_params.readonly_color(txt_color);
+			append_style_params.font.name(font_name);
+			append_style_params.font.size(font_size);
+			if (chat.mFromName.size() > 0)
+			{
+				append_style_params.font.style = "ITALIC";
+				LLChat add_chat=chat;
+				add_chat.mText = chat.mFromName + " ";
+				mChatHistory->appendWidgetMessage(add_chat, append_style_params);
+			}
+			
+			message = message.substr(3);
+			append_style_params.font.style = "UNDERLINE";
+			mChatHistory->appendText(message, FALSE, append_style_params);
+		}
+		else
+		{
+			mChatHistory->appendWidgetMessage(chat);
+		}
+	}
 }
 
 void LLNearbyChat::onNearbySpeakers()
@@ -276,13 +215,6 @@ void	LLNearbyChat::onOpen(const LLSD& key )
 	}
 }
 
-void	LLNearbyChat::setDocked			(bool docked, bool pop_on_undock)
-{
-	LLDockableFloater::setDocked(docked, pop_on_undock);
-
-	setCanResize(!docked);
-}
-
 void LLNearbyChat::setRect	(const LLRect &rect)
 {
 	LLDockableFloater::setRect(rect);
@@ -292,5 +224,3 @@ void LLNearbyChat::getAllowedRect(LLRect& rect)
 {
 	rect = gViewerWindow->getWorldViewRectRaw();
 }
-
-
diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h
index cb4654654a952562b21b252153de284759ad3516..561c2d3677699f16b2c272d933cc0c1d2cc51b92 100644
--- a/indra/newview/llnearbychat.h
+++ b/indra/newview/llnearbychat.h
@@ -35,7 +35,7 @@
 
 #include "lldockablefloater.h"
 #include "llscrollbar.h"
-#include "llchat.h"
+#include "llviewerchat.h"
 
 class LLResizeBar;
 class LLChatHistory;
@@ -47,13 +47,10 @@ class LLNearbyChat: public LLDockableFloater
 	~LLNearbyChat();
 
 	BOOL	postBuild			();
-	void	addMessage			(const LLChat& message);
-	
+	void	addMessage			(const LLChat& message);	
 	void	onNearbyChatContextMenuItemClicked(const LLSD& userdata);
 	bool	onNearbyChatCheckContextMenuItem(const LLSD& userdata);
 
-	void	setDocked			(bool docked, bool pop_on_undock = true);
-
 	/*virtual*/ void	onOpen	(const LLSD& key);
 
 	virtual void setRect		(const LLRect &rect);
@@ -64,7 +61,6 @@ class LLNearbyChat: public LLDockableFloater
 	void	getAllowedRect		(LLRect& rect);
 
 	void	onNearbySpeakers	();
-	void	add_timestamped_line(const LLChat& chat, const LLColor4& color);
 	
 
 private:
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 333646d2c5e2b2cb45cb28ad179f057f28bdb9a6..8fb4ea42119eb226eb45eb6a4af62dafe0892dda 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -252,19 +252,6 @@ bool LLNearbyChatBar::instanceExists()
 
 void LLNearbyChatBar::draw()
 {
-// TODO: mantipov: remove
-/*
-	LLRect rect = getRect();
-	S32 max_width = getMaxWidth();
-
-	if (rect.getWidth() > max_width)
-	{
-		rect.setLeftTopAndSize(rect.mLeft, rect.mTop, max_width, rect.getHeight());
-		reshape(rect.getWidth(), rect.getHeight(), FALSE);
-		setRect(rect);
-	}
-*/
-
 	displaySpeakingIndicator();
 	LLPanel::draw();
 }
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index f3b63c8616c7390acc81acf5ad3792bd4664c0f1..74a75d036959ec634e353796b94e8b886519bd1b 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -63,8 +63,6 @@ class LLNearbyChatScreenChannel: public LLScreenChannelBase
 public:
 	LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) { mStopProcessing = false;};
 
-	void init				(S32 channel_left, S32 channel_right);
-
 	void addNotification	(LLSD& notification);
 	void arrangeToasts		();
 	void showToastsBottom	();
@@ -120,15 +118,6 @@ class LLNearbyChatScreenChannel: public LLScreenChannelBase
 	bool	mStopProcessing;
 };
 
-void LLNearbyChatScreenChannel::init(S32 channel_left, S32 channel_right)
-{
-	S32 channel_top = gViewerWindow->getWorldViewRectRaw().getHeight();
-	S32 channel_bottom = gViewerWindow->getWorldViewRectRaw().mBottom;
-	setRect(LLRect(channel_left, channel_top, channel_right, channel_bottom));
-	setVisible(TRUE);
-}
-
-
 void	LLNearbyChatScreenChannel::createOverflowToast(S32 bottom, F32 timer)
 {
 	//we don't need overflow toast in nearby chat
@@ -352,7 +341,15 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg)
 		notification["time"] = chat_msg.mTime;
 		notification["source"] = (S32)chat_msg.mSourceType;
 		notification["chat_type"] = (S32)chat_msg.mChatType;
-
+		notification["chat_style"] = (S32)chat_msg.mChatStyle;
+		
+		std::string r_color_name = "White";
+		F32 r_color_alpha = 1.0f; 
+		LLViewerChat::getChatColor( chat_msg, r_color_name, r_color_alpha);
+		
+		notification["text_color"] = r_color_name;
+		notification["color_alpha"] = r_color_alpha;
+		notification["font_size"] = (S32)LLViewerChat::getChatFontSize() ;
 		channel->addNotification(notification);	
 	}
 	
diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp
index fc6fb25644a94a12cf2adf281fdf2cc98e391b15..26730e1f108093fb093a6874779629d8de4ae020 100644
--- a/indra/newview/llnotificationgrouphandler.cpp
+++ b/indra/newview/llnotificationgrouphandler.cpp
@@ -37,6 +37,7 @@
 #include "llgroupactions.h"
 #include "llviewercontrol.h"
 #include "llviewerwindow.h"
+#include "llnotificationmanager.h"
 
 using namespace LLNotificationsUI;
 
@@ -47,6 +48,9 @@ LLGroupHandler::LLGroupHandler(e_notification_type type, const LLSD& id)
 
 	// Getting a Channel for our notifications
 	mChannel = LLChannelManager::getInstance()->createNotificationChannel();
+	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+	if(channel)
+		channel->setOnRejectToastCallback(boost::bind(&LLGroupHandler::onRejectToast, this, _1));
 }
 
 //--------------------------------------------------------------------------
@@ -118,5 +122,15 @@ void LLGroupHandler::onDeleteToast(LLToast* toast)
 }
 
 //--------------------------------------------------------------------------
+void LLGroupHandler::onRejectToast(LLUUID& id)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(id);
+
+	if (notification && LLNotificationManager::getInstance()->getHandlerForNotification(notification->getType()) == this)
+	{
+		LLNotifications::instance().cancel(notification);
+	}
+}
 
+//--------------------------------------------------------------------------
 
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 23998a0e5d1bbef91e4ff232d495c41ac7f1df51..42cc7cacc238e5e38a6c8619e3f2973981e1ca30 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -209,6 +209,9 @@ class LLGroupHandler : public LLSysHandler
 protected:
 	virtual void onDeleteToast(LLToast* toast);
 	virtual void initChannel();
+
+	// own handlers
+	void onRejectToast(LLUUID& id);
 };
 
 /**
diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp
index 823c92a94e377f8813dd28868b8b7f86462d1f29..60a27d51544dff805a151b0d6f29eaf923915f82 100644
--- a/indra/newview/llnotificationtiphandler.cpp
+++ b/indra/newview/llnotificationtiphandler.cpp
@@ -91,6 +91,7 @@ bool LLTipHandler::processNotification(const LLSD& notify)
 		if(nearby_chat)
 		{
 			LLChat chat_msg(notification->getMessage());
+			chat_msg.mSourceType = CHAT_SOURCE_SYSTEM;
 			nearby_chat->addMessage(chat_msg);
 
 			// don't show toast if Nearby Chat is opened
diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h
index 8a9ba66ec0bb47594eff1921c796b31f8f3c5579..c2f8dbd074a12cbc23865988f3d54968073eff09 100644
--- a/indra/newview/llpanelappearancetab.h
+++ b/indra/newview/llpanelappearancetab.h
@@ -53,12 +53,8 @@ class LLPanelAppearanceTab : public LLPanel
 
 	bool isTabVisible(); // Check if parent TabContainer is visible.
 
-	void setPanelAppearanceButtons(LLPanelAppearance* panel);
-
 
 protected:
-	LLButton*				mWearBtn;
-	LLButton*				mEditBtn;
 	LLPanelAppearance*		mParent;
 };
 
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 9cd949c9cc58dbf45b25803f511f8468b36f09f2..00502341fcf8db20bb53df191f2e8bef80957997 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -43,6 +43,7 @@
 #include "llparticipantlist.h"
 #include "llimview.h"
 #include "llvoicechannel.h"
+#include "llsidetray.h"
 
 void LLPanelChatControlPanel::onCallButtonClicked()
 {
@@ -158,7 +159,8 @@ void LLPanelIMControlPanel::onAddFriendButtonClicked()
 
 void LLPanelIMControlPanel::onShareButtonClicked()
 {
-	// *TODO: Implement
+	LLSD key;
+	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
 }
 
 void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 29e9baa6cf2391a655aa29303287ccac625c15da..fbc0f09c50648922b524c6056a44d7bb37b75c4e 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -35,7 +35,8 @@
 #define LL_LLPANELMAININVENTORY_H
 
 #include "llpanel.h"
-#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
+
 #include "llfolderview.h"
 
 class LLFolderViewItem;
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 2cf56d557117d29d95b611d18c79a22d62be6a6c..ad8a379cc1dd66bd5cd88af833196518db2d285c 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -322,13 +322,19 @@ void LLPanelMediaSettingsGeneral::updateMediaPreview()
 {
 	if ( mHomeURL->getValue().asString().length() > 0 )
 	{
-		mPreviewMedia->navigateTo( mHomeURL->getValue().asString() );
+		if(mPreviewMedia->getCurrentNavUrl() != mHomeURL->getValue().asString())
+		{
+			mPreviewMedia->navigateTo( mHomeURL->getValue().asString() );
+		}
 	}
 	else
 	// new home URL will be empty if media is deleted so display a 
 	// "preview goes here" data url page
 	{
-		mPreviewMedia->navigateTo( CHECKERBOARD_DATA_URL );
+		if(mPreviewMedia->getCurrentNavUrl() != CHECKERBOARD_DATA_URL)
+		{
+			mPreviewMedia->navigateTo( CHECKERBOARD_DATA_URL );
+		}
 	};
 }
 
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index a5e9407a41f05b9cfcf81f9820ed5bbdd7811c70..b1fbf789c692cca7e49137231e65baa6de63dffd 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -1570,6 +1570,7 @@ void LLPanelObjectInventory::reset()
 	p.name = "task inventory";
 	p.task_id = getTaskUUID();
 	p.parent_panel = this;
+	p.tool_tip= p.name;
 	mFolders = LLUICtrlFactory::create<LLFolderView>(p);
 	// this ensures that we never say "searching..." or "no items found"
 	mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
@@ -1711,6 +1712,7 @@ void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root
 		p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
 		p.root = mFolders;
 		p.listener = bridge;
+		p.tool_tip = p.name;
 		new_folder = LLUICtrlFactory::create<LLFolderViewFolder>(p);
 		new_folder->addToFolder(mFolders, mFolders);
 		new_folder->toggleOpen();
@@ -1751,6 +1753,7 @@ void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* invento
 				p.icon_open = LLUI::getUIImage("Inv_FolderOpen");
 				p.root = mFolders;
 				p.listener = bridge;
+				p.tool_tip = p.name;
 				view = LLUICtrlFactory::create<LLFolderViewFolder>(p);
 				child_categories.put(new obj_folder_pair(obj,
 														 (LLFolderViewFolder*)view));
@@ -1764,6 +1767,7 @@ void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* invento
 				params.root(mFolders);
 				params.listener(bridge);
 				params.rect(LLRect());
+				params.tool_tip = params.name;
 				view = LLUICtrlFactory::create<LLFolderViewItem> (params);
 			}
 			view->addToFolder(folder, mFolders);
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index ca87ebf5a2b7287be34de9942c2792107a1c2c59..709525d4e268310b8e711ab8d64af5a3e96b0b7b 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -54,6 +54,7 @@
 #include "llfriendcard.h"
 #include "llgroupactions.h"
 #include "llgrouplist.h"
+#include "llinventoryobserver.h"
 #include "llpanelpeoplemenus.h"
 #include "llrecentpeople.h"
 #include "llviewercontrol.h"		// for gSavedSettings
@@ -447,6 +448,7 @@ LLPanelPeople::LLPanelPeople()
 	mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList,	this));
 	mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList,	this));
 	mRecentListUpdater = new LLRecentListUpdater(boost::bind(&LLPanelPeople::updateRecentList,	this));
+	mCommitCallbackRegistrar.add("People.addFriend", boost::bind(&LLPanelPeople::onAddFriendButtonClicked, this));
 }
 
 LLPanelPeople::~LLPanelPeople()
@@ -546,7 +548,6 @@ BOOL LLPanelPeople::postBuild()
 		boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _2, mOnlineFriendList));
 
 	buttonSetAction("view_profile_btn",	boost::bind(&LLPanelPeople::onViewProfileButtonClicked,	this));
-	buttonSetAction("add_friend_btn",	boost::bind(&LLPanelPeople::onAddFriendButtonClicked,	this));
 	buttonSetAction("group_info_btn",	boost::bind(&LLPanelPeople::onGroupInfoButtonClicked,	this));
 	buttonSetAction("chat_btn",			boost::bind(&LLPanelPeople::onChatButtonClicked,		this));
 	buttonSetAction("im_btn",			boost::bind(&LLPanelPeople::onImButtonClicked,			this));
@@ -706,7 +707,7 @@ void LLPanelPeople::updateButtons()
 	bool nearby_tab_active	= (cur_tab == NEARBY_TAB_NAME);
 	bool friends_tab_active = (cur_tab == FRIENDS_TAB_NAME);
 	bool group_tab_active	= (cur_tab == GROUP_TAB_NAME);
-	bool recent_tab_active	= (cur_tab == RECENT_TAB_NAME);
+	//bool recent_tab_active	= (cur_tab == RECENT_TAB_NAME);
 	LLUUID selected_id;
 
 	std::vector<LLUUID> selected_uuids;
@@ -716,7 +717,6 @@ void LLPanelPeople::updateButtons()
 
 	buttonSetVisible("group_info_btn",		group_tab_active);
 	buttonSetVisible("chat_btn",			group_tab_active);
-	buttonSetVisible("add_friend_btn",		nearby_tab_active || recent_tab_active);
 	buttonSetVisible("view_profile_btn",	!group_tab_active);
 	buttonSetVisible("im_btn",				!group_tab_active);
 	buttonSetVisible("call_btn",			!group_tab_active);
@@ -749,7 +749,9 @@ void LLPanelPeople::updateButtons()
 			is_friend = LLAvatarTracker::instance().getBuddyInfo(selected_id) != NULL;
 		}
 
-		childSetEnabled("add_friend_btn",	!is_friend);
+		LLPanel* cur_panel = mTabContainer->getCurrentPanel();
+		if (cur_panel)
+			cur_panel->childSetEnabled("add_friend_btn", !is_friend);
 	}
 
 	buttonSetEnabled("teleport_btn",		friends_tab_active && item_selected && isFriendOnline(selected_uuids.front()));
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 04b4226f82f8dd7bde746d338ae79fd06ff022ec..10b90b08d76b7b4eec62e2d207423ea14e8e7802 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -230,6 +230,8 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)
 			updateButtons();
 		}
 	}
+	if(!mPicksList->size() && !mClassifiedsList->size())
+		childSetVisible("empty_picks_panel_text", true);
 }
 
 LLPickItem* LLPanelPicks::getSelectedPickItem()
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 61501cc1b1bf00450eda7fae88e40c3c870ea2db..0c7cc9af3857370f289fbae71f94280020b227d9 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -542,16 +542,16 @@ void LLPanelPlaceProfile::updateCovenantText(const std::string &text)
 void LLPanelPlaceProfile::onForSaleBannerClick()
 {
 	LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance();
-	LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection();
+	LLParcel* parcel = mgr->getFloatingParcelSelection()->getParcel();
 	LLViewerRegion* selected_region =  mgr->getSelectionRegion();
-	if(!hParcel.isNull() && selected_region)
+	if(parcel && selected_region)
 	{
-		if(hParcel->getParcel()->getLocalID() == mSelectedParcelID &&
+		if(parcel->getLocalID() == mSelectedParcelID &&
 				mLastSelectedRegionID ==selected_region->getRegionID())
 		{
-			if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0)
+			if(parcel->getSalePrice() - gStatusBar->getBalance() > 0)
 			{
-				LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice());
+				LLFloaterBuyCurrency::buyCurrency("Buying selected land ", parcel->getSalePrice());
 			}
 			else
 			{
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index eb10d97b371ef11eaf2d6e56d0cf12e15fccd576..84232f20d1a53c8b744e9ff781a29511f0be74e4 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -80,7 +80,6 @@ static const std::string TELEPORT_HISTORY_INFO_TYPE	= "teleport_history";
 // Helper functions
 static bool is_agent_in_selected_parcel(LLParcel* parcel);
 static void onSLURLBuilt(std::string& slurl);
-static void setAllChildrenVisible(LLView* view, BOOL visible);
 
 //Observer classes
 class LLPlacesParcelObserver : public LLParcelObserver
@@ -700,8 +699,6 @@ void LLPanelPlaces::onBackButtonClicked()
 
 void LLPanelPlaces::togglePickPanel(BOOL visible)
 {
-	setAllChildrenVisible(this, !visible);
-
 	if (mPickPanel)
 		mPickPanel->setVisible(visible);
 }
@@ -911,16 +908,3 @@ static void onSLURLBuilt(std::string& slurl)
 
 	LLNotifications::instance().add("CopySLURL", args);
 }
-
-static void setAllChildrenVisible(LLView* view, BOOL visible)
-{
-	const LLView::child_list_t* children = view->getChildList();
-	for (LLView::child_list_const_iter_t child_it = children->begin(); child_it != children->end(); ++child_it)
-	{
-		LLView* child = *child_it;
-		if (child->getParent() == view)
-		{
-			child->setVisible(visible);
-		}
-	}
-}
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 24de2dcdfc58f763f9cc49b64eb5f9e8bcbef912..12ad070efd54abea3dc0ac4618258fd37d0dedeb 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -44,6 +44,7 @@
 #include "llbutton.h"
 #include "llface.h"
 #include "llcombobox.h"
+#include "lllayoutstack.h"
 #include "llslider.h"
 #include "llhudview.h"
 #include "lliconctrl.h"
@@ -84,8 +85,7 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
 	mUpdateSlider(true),
 	mClearFaceOnFade(false),
 	mCurrentRate(0.0),
-	mMovieDuration(0.0),
-	mUpdatePercent(0)
+	mMovieDuration(0.0)
 {
 	mCommitCallbackRegistrar.add("MediaCtrl.Close",		boost::bind(&LLPanelPrimMediaControls::onClickClose, this));
 	mCommitCallbackRegistrar.add("MediaCtrl.Back",		boost::bind(&LLPanelPrimMediaControls::onClickBack, this));
@@ -117,37 +117,69 @@ LLPanelPrimMediaControls::~LLPanelPrimMediaControls()
 
 BOOL LLPanelPrimMediaControls::postBuild()
 {
-	LLButton* scroll_up_ctrl = getChild<LLButton>("scrollup");
-	if (scroll_up_ctrl)
+	mMediaRegion			= getChild<LLView>("media_region");
+	mBackCtrl				= getChild<LLUICtrl>("back");
+	mFwdCtrl				= getChild<LLUICtrl>("fwd");
+	mReloadCtrl				= getChild<LLUICtrl>("reload");
+	mPlayCtrl				= getChild<LLUICtrl>("play");
+	mPauseCtrl				= getChild<LLUICtrl>("pause");
+	mStopCtrl				= getChild<LLUICtrl>("stop");
+	mMediaStopCtrl			= getChild<LLUICtrl>("media_stop");
+	mHomeCtrl				= getChild<LLUICtrl>("home");
+	mUnzoomCtrl				= getChild<LLUICtrl>("close"); // This is actually "unzoom" 
+	mOpenCtrl				= getChild<LLUICtrl>("new_window");
+	mZoomCtrl				= getChild<LLUICtrl>("zoom_frame");
+	mMediaProgressPanel		= getChild<LLPanel>("media_progress_indicator");
+	mMediaProgressBar		= getChild<LLProgressBar>("media_progress_bar");
+	mMediaAddressCtrl		= getChild<LLUICtrl>("media_address");
+	mMediaAddress			= getChild<LLUICtrl>("media_address_url");
+	mMediaPlaySliderPanel	= getChild<LLUICtrl>("media_play_position");
+	mMediaPlaySliderCtrl	= getChild<LLUICtrl>("media_play_slider");
+	mVolumeCtrl				= getChild<LLUICtrl>("media_volume");
+	mVolumeBtn				= getChild<LLButton>("media_volume_button");
+	mVolumeUpCtrl			= getChild<LLUICtrl>("volume_up");
+	mVolumeDownCtrl			= getChild<LLUICtrl>("volume_down");
+	mWhitelistIcon			= getChild<LLIconCtrl>("media_whitelist_flag");
+	mSecureLockIcon			= getChild<LLIconCtrl>("media_secure_lock_flag");
+	mMediaControlsStack		= getChild<LLLayoutStack>("media_controls");
+	mLeftBookend			= getChild<LLUICtrl>("left_bookend");
+	mRightBookend			= getChild<LLUICtrl>("right_bookend");
+	mBackgroundImage		= LLUI::getUIImage(getString("control_background_image_name"));
+
+	// These are currently removed...but getChild creates a "dummy" widget.
+	// This class handles them missing.
+	mMediaPanelScroll		= findChild<LLUICtrl>("media_panel_scroll");
+	mScrollUpCtrl			= findChild<LLButton>("scrollup");
+	mScrollLeftCtrl			= findChild<LLButton>("scrollleft");
+	mScrollRightCtrl		= findChild<LLButton>("scrollright");
+	mScrollDownCtrl			= findChild<LLButton>("scrolldown");	
+	
+	if (mScrollUpCtrl)
 	{
-		scroll_up_ctrl->setClickedCallback(onScrollUp, this);
-		scroll_up_ctrl->setHeldDownCallback(onScrollUpHeld, this);
-		scroll_up_ctrl->setMouseUpCallback(onScrollStop, this);
+		mScrollUpCtrl->setClickedCallback(onScrollUp, this);
+		mScrollUpCtrl->setHeldDownCallback(onScrollUpHeld, this);
+		mScrollUpCtrl->setMouseUpCallback(onScrollStop, this);
 	}
-	LLButton* scroll_left_ctrl = getChild<LLButton>("scrollleft");
-	if (scroll_left_ctrl)
+	if (mScrollLeftCtrl)
 	{
-		scroll_left_ctrl->setClickedCallback(onScrollLeft, this);
-		scroll_left_ctrl->setHeldDownCallback(onScrollLeftHeld, this);
-		scroll_left_ctrl->setMouseUpCallback(onScrollStop, this);
+		mScrollLeftCtrl->setClickedCallback(onScrollLeft, this);
+		mScrollLeftCtrl->setHeldDownCallback(onScrollLeftHeld, this);
+		mScrollLeftCtrl->setMouseUpCallback(onScrollStop, this);
 	}
-	LLButton* scroll_right_ctrl = getChild<LLButton>("scrollright");
-	if (scroll_right_ctrl)
+	if (mScrollRightCtrl)
 	{
-		scroll_right_ctrl->setClickedCallback(onScrollRight, this);
-		scroll_right_ctrl->setHeldDownCallback(onScrollRightHeld, this);
-		scroll_right_ctrl->setMouseUpCallback(onScrollStop, this);
+		mScrollRightCtrl->setClickedCallback(onScrollRight, this);
+		mScrollRightCtrl->setHeldDownCallback(onScrollRightHeld, this);
+		mScrollRightCtrl->setMouseUpCallback(onScrollStop, this);
 	}
-	LLButton* scroll_down_ctrl = getChild<LLButton>("scrolldown");
-	if (scroll_down_ctrl)
+	if (mScrollDownCtrl)
 	{
-		scroll_down_ctrl->setClickedCallback(onScrollDown, this);
-		scroll_down_ctrl->setHeldDownCallback(onScrollDownHeld, this);
-		scroll_down_ctrl->setMouseUpCallback(onScrollStop, this);
+		mScrollDownCtrl->setClickedCallback(onScrollDown, this);
+		mScrollDownCtrl->setHeldDownCallback(onScrollDownHeld, this);
+		mScrollDownCtrl->setMouseUpCallback(onScrollStop, this);
 	}
 	
-	LLUICtrl* media_address	= getChild<LLUICtrl>("media_address");
-	media_address->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this ));
+	mMediaAddress->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this ));
 	mInactiveTimeout = gSavedSettings.getF32("MediaControlTimeout");
 	mControlFadeTime = gSavedSettings.getF32("MediaControlFadeTime");
 
@@ -261,90 +293,63 @@ void LLPanelPrimMediaControls::updateShape()
 		//
 		// Set the state of the buttons
 		//
-		LLUICtrl* back_ctrl					= getChild<LLUICtrl>("back");
-		LLUICtrl* fwd_ctrl					= getChild<LLUICtrl>("fwd");
-		LLUICtrl* reload_ctrl				= getChild<LLUICtrl>("reload");
-		LLUICtrl* play_ctrl					= getChild<LLUICtrl>("play");
-		LLUICtrl* pause_ctrl				= getChild<LLUICtrl>("pause");
-		LLUICtrl* stop_ctrl					= getChild<LLUICtrl>("stop");
-		LLUICtrl* media_stop_ctrl			= getChild<LLUICtrl>("media_stop");
-		LLUICtrl* home_ctrl					= getChild<LLUICtrl>("home");
-		LLUICtrl* unzoom_ctrl				= getChild<LLUICtrl>("close"); // This is actually "unzoom"
-		LLUICtrl* open_ctrl					= getChild<LLUICtrl>("new_window");
-        LLUICtrl* zoom_ctrl					= getChild<LLUICtrl>("zoom_frame");
-		LLPanel* media_loading_panel		= getChild<LLPanel>("media_progress_indicator");
-		LLUICtrl* media_address_ctrl		= getChild<LLUICtrl>("media_address");
-		LLUICtrl* media_play_slider_panel	= getChild<LLUICtrl>("media_play_position");
-		LLUICtrl* media_play_slider_ctrl	= getChild<LLUICtrl>("media_play_slider");
-		LLUICtrl* volume_ctrl				= getChild<LLUICtrl>("media_volume");
-		LLButton* volume_btn				= getChild<LLButton>("media_volume_button");
-		LLUICtrl* volume_up_ctrl			= getChild<LLUICtrl>("volume_up");
-		LLUICtrl* volume_down_ctrl			= getChild<LLUICtrl>("volume_down");
-		LLIconCtrl* whitelist_icon			= getChild<LLIconCtrl>("media_whitelist_flag");
-		LLIconCtrl* secure_lock_icon		= getChild<LLIconCtrl>("media_secure_lock_flag");
-		
-		LLUICtrl* media_panel_scroll		= getChild<LLUICtrl>("media_panel_scroll");
-		LLUICtrl* scroll_up_ctrl			= getChild<LLUICtrl>("scrollup");
-		LLUICtrl* scroll_left_ctrl			= getChild<LLUICtrl>("scrollleft");
-		LLUICtrl* scroll_right_ctrl			= getChild<LLUICtrl>("scrollright");
-		LLUICtrl* scroll_down_ctrl			= getChild<LLUICtrl>("scrolldown");		
 				
 		// XXX RSP: TODO: FIXME: clean this up so that it is clearer what mode we are in,
 		// and that only the proper controls get made visible/enabled according to that mode. 
-		back_ctrl->setVisible(has_focus);
-		fwd_ctrl->setVisible(has_focus);
-		reload_ctrl->setVisible(has_focus);
-		stop_ctrl->setVisible(false);
-		home_ctrl->setVisible(has_focus);
-		zoom_ctrl->setVisible(!is_zoomed);
-		unzoom_ctrl->setVisible(has_focus && is_zoomed);
-		open_ctrl->setVisible(true);
-		media_address_ctrl->setVisible(has_focus && !mini_controls);
-		media_play_slider_panel->setVisible(has_focus && !mini_controls);
-		volume_ctrl->setVisible(false);
-		volume_up_ctrl->setVisible(false);
-		volume_down_ctrl->setVisible(false);
+		mBackCtrl->setVisible(has_focus);
+		mFwdCtrl->setVisible(has_focus);
+		mReloadCtrl->setVisible(has_focus);
+		mStopCtrl->setVisible(false);
+		mHomeCtrl->setVisible(has_focus);
+		mZoomCtrl->setVisible(!is_zoomed);
+		mUnzoomCtrl->setVisible(has_focus && is_zoomed);
+		mOpenCtrl->setVisible(true);
+		mMediaAddressCtrl->setVisible(has_focus && !mini_controls);
+		mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls);
+		mVolumeCtrl->setVisible(false);
+		mVolumeUpCtrl->setVisible(false);
+		mVolumeDownCtrl->setVisible(false);
 		
-		whitelist_icon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false);
+		mWhitelistIcon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false);
 		// Disable zoom if HUD
-		zoom_ctrl->setEnabled(!objectp->isHUDAttachment());
-		unzoom_ctrl->setEnabled(!objectp->isHUDAttachment());
-		secure_lock_icon->setVisible(false);
+		mZoomCtrl->setEnabled(!objectp->isHUDAttachment());
+		mUnzoomCtrl->setEnabled(!objectp->isHUDAttachment());
+		mSecureLockIcon->setVisible(false);
 		mCurrentURL = media_impl->getCurrentMediaURL();
 		
-		back_ctrl->setEnabled((media_impl != NULL) && media_impl->canNavigateBack() && can_navigate);
-		fwd_ctrl->setEnabled((media_impl != NULL) && media_impl->canNavigateForward() && can_navigate);
-		stop_ctrl->setEnabled(has_focus && can_navigate);
-		home_ctrl->setEnabled(has_focus && can_navigate);
+		mBackCtrl->setEnabled((media_impl != NULL) && media_impl->canNavigateBack() && can_navigate);
+		mFwdCtrl->setEnabled((media_impl != NULL) && media_impl->canNavigateForward() && can_navigate);
+		mStopCtrl->setEnabled(has_focus && can_navigate);
+		mHomeCtrl->setEnabled(has_focus && can_navigate);
 		LLPluginClassMediaOwner::EMediaStatus result = ((media_impl != NULL) && media_impl->hasMedia()) ? media_plugin->getStatus() : LLPluginClassMediaOwner::MEDIA_NONE;
 
 		if(media_plugin && media_plugin->pluginSupportsMediaTime())
 		{
-			reload_ctrl->setEnabled(FALSE);
-			reload_ctrl->setVisible(FALSE);
-			media_stop_ctrl->setVisible(has_focus);
-			home_ctrl->setVisible(FALSE);
-			back_ctrl->setEnabled(has_focus);
-			fwd_ctrl->setEnabled(has_focus);
-			media_address_ctrl->setVisible(false);
-			media_address_ctrl->setEnabled(false);
-			media_play_slider_panel->setVisible(has_focus && !mini_controls);
-			media_play_slider_panel->setEnabled(has_focus && !mini_controls);
+			mReloadCtrl->setEnabled(FALSE);
+			mReloadCtrl->setVisible(FALSE);
+			mMediaStopCtrl->setVisible(has_focus);
+			mHomeCtrl->setVisible(FALSE);
+			mBackCtrl->setEnabled(has_focus);
+			mFwdCtrl->setEnabled(has_focus);
+			mMediaAddressCtrl->setVisible(false);
+			mMediaAddressCtrl->setEnabled(false);
+			mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls);
+			mMediaPlaySliderPanel->setEnabled(has_focus && !mini_controls);
 				
-			volume_ctrl->setVisible(has_focus);
-			volume_up_ctrl->setVisible(has_focus);
-			volume_down_ctrl->setVisible(has_focus);
-			volume_ctrl->setEnabled(has_focus);
-
-			whitelist_icon->setVisible(false);
-			secure_lock_icon->setVisible(false);
-			if (media_panel_scroll)
+			mVolumeCtrl->setVisible(has_focus);
+			mVolumeUpCtrl->setVisible(has_focus);
+			mVolumeDownCtrl->setVisible(has_focus);
+			mVolumeCtrl->setEnabled(has_focus);
+
+			mWhitelistIcon->setVisible(false);
+			mSecureLockIcon->setVisible(false);
+			if (mMediaPanelScroll)
 			{
-				media_panel_scroll->setVisible(false);
-				scroll_up_ctrl->setVisible(false);
-				scroll_left_ctrl->setVisible(false);
-				scroll_right_ctrl->setVisible(false);
-				scroll_down_ctrl->setVisible(false);
+				mMediaPanelScroll->setVisible(false);
+				mScrollUpCtrl->setVisible(false);
+				mScrollDownCtrl->setVisible(false);
+				mScrollRightCtrl->setVisible(false);
+				mScrollDownCtrl->setVisible(false);
 			}
 				
 			F32 volume = media_impl->getVolume();
@@ -358,8 +363,8 @@ void LLPanelPrimMediaControls::updateShape()
 			if(mMovieDuration == 0) 
 			{
 				mMovieDuration = media_plugin->getDuration();
-				media_play_slider_ctrl->setValue(0);
-				media_play_slider_ctrl->setEnabled(false);
+				mMediaPlaySliderCtrl->setValue(0);
+				mMediaPlaySliderCtrl->setEnabled(false);
 			}
 			// TODO: What if it's not fully loaded
 					
@@ -367,48 +372,48 @@ void LLPanelPrimMediaControls::updateShape()
 			{
 				F64 current_time =  media_plugin->getCurrentTime();
 				F32 percent = current_time / mMovieDuration;
-				media_play_slider_ctrl->setValue(percent);
-				media_play_slider_ctrl->setEnabled(true);
+				mMediaPlaySliderCtrl->setValue(percent);
+				mMediaPlaySliderCtrl->setEnabled(true);
 			}
 				
 			// video vloume
 			if(volume <= 0.0)
 			{
-				volume_up_ctrl->setEnabled(TRUE);
-				volume_down_ctrl->setEnabled(FALSE);
+				mVolumeUpCtrl->setEnabled(TRUE);
+				mVolumeDownCtrl->setEnabled(FALSE);
 				media_impl->setVolume(0.0);
-				volume_btn->setToggleState(true);
+				mVolumeBtn->setToggleState(true);
 			}
 			else if (volume >= 1.0)
 			{
-				volume_up_ctrl->setEnabled(FALSE);
-				volume_down_ctrl->setEnabled(TRUE);
+				mVolumeUpCtrl->setEnabled(FALSE);
+				mVolumeDownCtrl->setEnabled(TRUE);
 				media_impl->setVolume(1.0);
-				volume_btn->setToggleState(false);
+				mVolumeBtn->setToggleState(false);
 			}
 			else
 			{
-				volume_up_ctrl->setEnabled(TRUE);
-				volume_down_ctrl->setEnabled(TRUE);
+				mVolumeUpCtrl->setEnabled(TRUE);
+				mVolumeDownCtrl->setEnabled(TRUE);
 			}
 				
 			switch(result)
 			{
 				case LLPluginClassMediaOwner::MEDIA_PLAYING:
-					play_ctrl->setEnabled(FALSE);
-					play_ctrl->setVisible(FALSE);
-					pause_ctrl->setEnabled(TRUE);
-					pause_ctrl->setVisible(has_focus);
-					media_stop_ctrl->setEnabled(TRUE);
+					mPlayCtrl->setEnabled(FALSE);
+					mPlayCtrl->setVisible(FALSE);
+					mPauseCtrl->setEnabled(TRUE);
+					mPauseCtrl->setVisible(has_focus);
+					mMediaStopCtrl->setEnabled(TRUE);
 					
 					break;
 				case LLPluginClassMediaOwner::MEDIA_PAUSED:
 				default:
-					pause_ctrl->setEnabled(FALSE);
-					pause_ctrl->setVisible(FALSE);
-					play_ctrl->setEnabled(TRUE);
-					play_ctrl->setVisible(has_focus);
-					media_stop_ctrl->setEnabled(FALSE);
+					mPauseCtrl->setEnabled(FALSE);
+					mPauseCtrl->setVisible(FALSE);
+					mPlayCtrl->setEnabled(TRUE);
+					mPlayCtrl->setVisible(has_focus);
+					mMediaStopCtrl->setEnabled(FALSE);
 					break;
 			}
 		}
@@ -423,28 +428,28 @@ void LLPanelPrimMediaControls::updateShape()
 				mCurrentURL.clear();
 			}
 				
-			play_ctrl->setVisible(FALSE);
-			pause_ctrl->setVisible(FALSE);
-			media_stop_ctrl->setVisible(FALSE);
-			media_address_ctrl->setVisible(has_focus && !mini_controls);
-			media_address_ctrl->setEnabled(has_focus && !mini_controls);
-			media_play_slider_panel->setVisible(FALSE);
-			media_play_slider_panel->setEnabled(FALSE);
+			mPlayCtrl->setVisible(FALSE);
+			mPauseCtrl->setVisible(FALSE);
+			mMediaStopCtrl->setVisible(FALSE);
+			mMediaAddressCtrl->setVisible(has_focus && !mini_controls);
+			mMediaAddressCtrl->setEnabled(has_focus && !mini_controls);
+			mMediaPlaySliderPanel->setVisible(FALSE);
+			mMediaPlaySliderPanel->setEnabled(FALSE);
 				
-			volume_ctrl->setVisible(FALSE);
-			volume_up_ctrl->setVisible(FALSE);
-			volume_down_ctrl->setVisible(FALSE);
-			volume_ctrl->setEnabled(FALSE);
-			volume_up_ctrl->setEnabled(FALSE);
-			volume_down_ctrl->setEnabled(FALSE);
+			mVolumeCtrl->setVisible(FALSE);
+			mVolumeUpCtrl->setVisible(FALSE);
+			mVolumeDownCtrl->setVisible(FALSE);
+			mVolumeCtrl->setEnabled(FALSE);
+			mVolumeUpCtrl->setEnabled(FALSE);
+			mVolumeDownCtrl->setEnabled(FALSE);
 			
-			if (media_panel_scroll)
+			if (mMediaPanelScroll)
 			{
-				media_panel_scroll->setVisible(has_focus);
-				scroll_up_ctrl->setVisible(has_focus);
-				scroll_left_ctrl->setVisible(has_focus);
-				scroll_right_ctrl->setVisible(has_focus);
-				scroll_down_ctrl->setVisible(has_focus);
+				mMediaPanelScroll->setVisible(has_focus);
+				mScrollUpCtrl->setVisible(has_focus);
+				mScrollDownCtrl->setVisible(has_focus);
+				mScrollRightCtrl->setVisible(has_focus);
+				mScrollDownCtrl->setVisible(has_focus);
 			}
 			// TODO: get the secure lock bool from media plug in
 			std::string prefix =  std::string("https://");
@@ -452,7 +457,7 @@ void LLPanelPrimMediaControls::updateShape()
 			LLStringUtil::toLower(test_prefix);
 			if(test_prefix == prefix)
 			{
-				secure_lock_icon->setVisible(has_focus);
+				mSecureLockIcon->setVisible(has_focus);
 			}
 				
 			if(mCurrentURL!=mPreviousURL)
@@ -463,17 +468,17 @@ void LLPanelPrimMediaControls::updateShape()
 
 			if(result == LLPluginClassMediaOwner::MEDIA_LOADING)
 			{
-				reload_ctrl->setEnabled(FALSE);
-				reload_ctrl->setVisible(FALSE);
-				stop_ctrl->setEnabled(TRUE);
-				stop_ctrl->setVisible(has_focus);
+				mReloadCtrl->setEnabled(FALSE);
+				mReloadCtrl->setVisible(FALSE);
+				mStopCtrl->setEnabled(TRUE);
+				mStopCtrl->setVisible(has_focus);
 			}
 			else
 			{
-				reload_ctrl->setEnabled(TRUE);
-				reload_ctrl->setVisible(has_focus);
-				stop_ctrl->setEnabled(FALSE);
-				stop_ctrl->setVisible(FALSE);
+				mReloadCtrl->setEnabled(TRUE);
+				mReloadCtrl->setVisible(has_focus);
+				mStopCtrl->setEnabled(FALSE);
+				mStopCtrl->setVisible(FALSE);
 			}
 		}
 
@@ -483,16 +488,15 @@ void LLPanelPrimMediaControls::updateShape()
 			//
 			// Handle progress bar
 			//
-			mUpdatePercent = media_plugin->getProgressPercent();
-			if(mUpdatePercent<100.0f)
-			{
-				media_loading_panel->setVisible(true);
-				getChild<LLProgressBar>("media_progress_bar")->setPercent(mUpdatePercent);
-				gFocusMgr.setTopCtrl(media_loading_panel);
+			if(LLPluginClassMediaOwner::MEDIA_LOADING == media_plugin->getStatus())
+			{	
+				mMediaProgressPanel->setVisible(true);
+				mMediaProgressBar->setPercent(media_plugin->getProgressPercent());
+				gFocusMgr.setTopCtrl(mMediaProgressPanel);
 			}
 			else
 			{
-				media_loading_panel->setVisible(false);
+				mMediaProgressPanel->setVisible(false);
 				gFocusMgr.setTopCtrl(NULL);
 			}
 		}
@@ -589,11 +593,10 @@ void LLPanelPrimMediaControls::updateShape()
 		// grow panel so that screenspace bounding box fits inside "media_region" element of HUD
 		LLRect media_controls_rect;
 		getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_controls_rect);
-		LLView* media_region = getChild<LLView>("media_region");
-		media_controls_rect.mLeft -= media_region->getRect().mLeft;
-		media_controls_rect.mBottom -= media_region->getRect().mBottom;
-		media_controls_rect.mTop += getRect().getHeight() - media_region->getRect().mTop;
-		media_controls_rect.mRight += getRect().getWidth() - media_region->getRect().mRight;
+		media_controls_rect.mLeft -= mMediaRegion->getRect().mLeft;
+		media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom;
+		media_controls_rect.mTop += getRect().getHeight() - mMediaRegion->getRect().mTop;
+		media_controls_rect.mRight += getRect().getWidth() - mMediaRegion->getRect().mRight;
 
 		LLRect old_hud_rect = media_controls_rect;
 		// keep all parts of HUD on-screen
@@ -669,6 +672,20 @@ void LLPanelPrimMediaControls::draw()
 		}
 	}
 	
+	// Build rect for icon area in coord system of this panel
+	// Assumes layout_stack is a direct child of this panel
+	mMediaControlsStack->updateLayout();
+	LLRect icon_area = mMediaControlsStack->getRect();
+	
+	// adjust to ignore space from left bookend padding
+	icon_area.mLeft += mLeftBookend->getRect().getWidth();
+	
+	// ignore space from right bookend padding
+	icon_area.mRight -= mRightBookend->getRect().getWidth();
+	
+	// get UI image
+	mBackgroundImage->draw( icon_area, UI_VERTEX_COLOR % alpha);
+	
 	{
 		LLViewDrawContext context(alpha);
 		LLPanel::draw();
@@ -711,16 +728,12 @@ bool LLPanelPrimMediaControls::isMouseOver()
 		S32 x, y;
 		getWindow()->getCursorPosition(&cursor_pos_window);
 		getWindow()->convertCoords(cursor_pos_window, &cursor_pos_gl);
-		
-		LLView* controls_view = NULL;
-		controls_view = getChild<LLView>("media_controls");
-		
-		//FIXME: rewrite as LLViewQuery or get hover set from LLViewerWindow?
-		if(controls_view && controls_view->getVisible())
+				
+		if(mMediaControlsStack->getVisible())
 		{
-			controls_view->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
+			mMediaControlsStack->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);
 
-			LLView *hit_child = controls_view->childFromPoint(x, y);
+			LLView *hit_child = mMediaControlsStack->childFromPoint(x, y);
 			if(hit_child && hit_child->getVisible())
 			{
 				// This was useful for debugging both coordinate translation and view hieararchy problems...
@@ -1002,8 +1015,7 @@ void LLPanelPrimMediaControls::onCommitURL()
 {
 	focusOnTarget();
 
-	LLUICtrl *media_address_ctrl = getChild<LLUICtrl>("media_address_url");
-	std::string url = media_address_ctrl->getValue().asString();
+	std::string url = mMediaAddress->getValue().asString();
 	if(getTargetMediaImpl() && !url.empty())
 	{
 		getTargetMediaImpl()->navigateTo( url, "", true);
@@ -1032,19 +1044,18 @@ void LLPanelPrimMediaControls::onInputURL(LLFocusableElement* caller, void *user
 void LLPanelPrimMediaControls::setCurrentURL()
 {	
 #ifdef USE_COMBO_BOX_FOR_MEDIA_URL
-	LLComboBox* media_address_combo	= getChild<LLComboBox>("media_address_combo");
-	// redirects will navigate momentarily to about:blank, don't add to history
-	if (media_address_combo && mCurrentURL != "about:blank")
-	{
-		media_address_combo->remove(mCurrentURL);
-		media_address_combo->add(mCurrentURL, ADD_SORTED);
-		media_address_combo->selectByValue(mCurrentURL);
-	}
+//	LLComboBox* media_address_combo	= getChild<LLComboBox>("media_address_combo");
+//	// redirects will navigate momentarily to about:blank, don't add to history
+//	if (media_address_combo && mCurrentURL != "about:blank")
+//	{
+//		media_address_combo->remove(mCurrentURL);
+//		media_address_combo->add(mCurrentURL, ADD_SORTED);
+//		media_address_combo->selectByValue(mCurrentURL);
+//	}
 #else   // USE_COMBO_BOX_FOR_MEDIA_URL
-	LLLineEditor* media_address_url = getChild<LLLineEditor>("media_address_url");
-	if (media_address_url && mCurrentURL != "about:blank")
+	if (mMediaAddress && mCurrentURL != "about:blank")
 	{
-		media_address_url->setValue(mCurrentURL);
+		mMediaAddress->setValue(mCurrentURL);
 	}
 #endif	// USE_COMBO_BOX_FOR_MEDIA_URL
 }
@@ -1053,12 +1064,11 @@ void LLPanelPrimMediaControls::onCommitSlider()
 {
 	focusOnTarget();
 
-	LLSlider* media_play_slider_ctrl	= getChild<LLSlider>("media_play_slider");
 	LLViewerMediaImpl* media_impl = getTargetMediaImpl();
 	if (media_impl) 
 	{
 		// get slider value
-		F64 slider_value = media_play_slider_ctrl->getValue().asReal();
+		F64 slider_value = mMediaPlaySliderCtrl->getValue().asReal();
 		if(slider_value <= 0.0)
 		{	
 			media_impl->stop();
@@ -1087,7 +1097,7 @@ void LLPanelPrimMediaControls::onCommitVolumeUp()
 		}
 		
 		media_impl->setVolume(volume);
-		getChild<LLButton>("media_volume")->setToggleState(false);
+		mVolumeBtn->setToggleState(false);
 	}
 }		
 
@@ -1107,7 +1117,7 @@ void LLPanelPrimMediaControls::onCommitVolumeDown()
 		}
 
 		media_impl->setVolume(volume);
-		getChild<LLButton>("media_volume")->setToggleState(false);
+		mVolumeBtn->setToggleState(false);
 	}
 }		
 
diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h
index 3ec7aa2356c14614ce919050ba8b1b9da5970580..124fa9cce487046ab659d989beccfe5e2a119641 100644
--- a/indra/newview/llpanelprimmediacontrols.h
+++ b/indra/newview/llpanelprimmediacontrols.h
@@ -35,7 +35,11 @@
 #include "llpanel.h"
 #include "llviewermedia.h"
 
+class LLButton;
 class LLCoordWindow;
+class LLIconCtrl;
+class LLLayoutStack;
+class LLProgressBar;
 class LLViewerMediaImpl;
 
 class LLPanelPrimMediaControls : public LLPanel
@@ -119,6 +123,44 @@ class LLPanelPrimMediaControls : public LLPanel
 	LLViewerMediaImpl* getTargetMediaImpl();
 	LLViewerObject* getTargetObject();
 	LLPluginClassMedia* getTargetMediaPlugin();
+	
+private:
+	
+	LLView *mMediaRegion;
+	LLUICtrl *mBackCtrl;
+	LLUICtrl *mFwdCtrl;
+	LLUICtrl *mReloadCtrl;
+	LLUICtrl *mPlayCtrl;
+	LLUICtrl *mPauseCtrl;
+	LLUICtrl *mStopCtrl;
+	LLUICtrl *mMediaStopCtrl;
+	LLUICtrl *mHomeCtrl;
+	LLUICtrl *mUnzoomCtrl;
+	LLUICtrl *mOpenCtrl;
+	LLUICtrl *mZoomCtrl;
+	LLPanel  *mMediaProgressPanel;
+	LLProgressBar *mMediaProgressBar;
+	LLUICtrl *mMediaAddressCtrl;
+	LLUICtrl *mMediaAddress;
+	LLUICtrl *mMediaPlaySliderPanel;
+	LLUICtrl *mMediaPlaySliderCtrl;
+	LLUICtrl *mVolumeCtrl;
+	LLButton *mVolumeBtn;
+	LLUICtrl *mVolumeUpCtrl;
+	LLUICtrl *mVolumeDownCtrl;
+	LLIconCtrl *mWhitelistIcon;
+	LLIconCtrl *mSecureLockIcon;
+	LLLayoutStack *mMediaControlsStack;
+	LLUICtrl *mLeftBookend;
+	LLUICtrl *mRightBookend;
+	LLUIImage* mBackgroundImage;
+	
+	LLUICtrl *mMediaPanelScroll;
+	LLButton *mScrollUpCtrl;
+	LLButton *mScrollLeftCtrl;
+	LLButton *mScrollRightCtrl;
+	LLButton *mScrollDownCtrl;
+	
 	bool mPauseFadeout;
 	bool mUpdateSlider;
 	bool mClearFaceOnFade;
@@ -137,8 +179,7 @@ class LLPanelPrimMediaControls : public LLPanel
 	std::string mPreviousURL;
 	F64 mCurrentRate;
 	F64 mMovieDuration;
-	int mUpdatePercent;
-
+	
 	LLUUID mTargetObjectID;
 	S32 mTargetObjectFace;
 	LLUUID mTargetImplID;
diff --git a/indra/newview/llpreview.h b/indra/newview/llpreview.h
index 506c135ca646247e24aa42257b85921b1b05550e..3b9f7f988274a74043eeb17c9606dfc546ef6e5b 100644
--- a/indra/newview/llpreview.h
+++ b/indra/newview/llpreview.h
@@ -37,7 +37,7 @@
 #include "llresizehandle.h"
 #include "llpointer.h"
 #include "lluuid.h"
-#include "llinventorymodel.h"	// LLInventoryObserver
+#include "llinventoryobserver.h"
 #include <map>
 
 class LLInventoryItem;
diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index a00f580e327cd548572d4156417e270d283f58e9..28a409d3ee8063a9ca7cf3401cca628358cc4df3 100644
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -41,7 +41,6 @@
 #include "lliconctrl.h"
 #include "llframetimer.h"
 
-
 class LLMessageSystem;
 class LLTextEditor;
 class LLButton;
@@ -52,6 +51,7 @@ struct 	LLEntryAndEdCore;
 class LLMenuBarGL;
 class LLFloaterScriptSearch;
 class LLKeywordToken;
+class LLViewerInventoryItem;
 
 // Inner, implementation class.  LLPreviewScript and LLLiveLSLEditor each own one of these.
 class LLScriptEdCore : public LLPanel
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 9d2960fbed15ce00021ba7946baa104c6283b66c..a3efea7b7e29588537dffa1eb1801b020b61312d 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -41,6 +41,7 @@
 #include "llfloaterreg.h"
 #include "llgroupactions.h"
 #include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "lllineeditor.h"
 #include "llradiogroup.h"
 #include "llviewercontrol.h"
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 70dc04f575ff3d6526c918a8fcabd7e8548e6d86..7711f3c7330bd09a16c972f7d9c39b9a5b3c537a 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -673,6 +673,24 @@ LLPanel*	LLSideTray::showPanel		(const std::string& panel_name, const LLSD& para
 	return NULL;
 }
 
+LLPanel*	LLSideTray::getPanel		(const std::string& panel_name)
+{
+	child_vector_const_iter_t child_it;
+	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
+	{
+		LLView* view = (*child_it)->findChildView(panel_name,true);
+		if(view)
+		{
+			LLPanel* panel = dynamic_cast<LLPanel*>(view);
+			if(panel)
+			{
+				return panel;
+			}
+		}
+	}
+	return NULL;
+}
+
 // *TODO: Eliminate magic constants.
 static const S32	fake_offset = 132;
 static const S32	fake_top_offset = 18;
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 8b30199c45688ff50f1b8ab4c6786956ec23f674..54652c110852e3ab600a525a681c285fe2d025d6 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -36,8 +36,8 @@
 #include "llpanel.h"
 #include "string"
 
-class LLSideTrayTab;
 class LLAccordionCtrl;
+class LLSideTrayTab;
 
 // added inheritance from LLDestroyClass<LLSideTray> to enable Side Tray perform necessary actions 
 // while disconnecting viewer in LLAppViewer::disconnectViewer().
@@ -97,6 +97,11 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
     LLPanel*	showPanel		(const std::string& panel_name, const LLSD& params);
 
 	/*
+	 * get the panel (don't show it or do anything else with it)
+	 */
+    LLPanel*	getPanel		(const std::string& panel_name);
+
+	/*
      * collapse SideBar, hiding visible tab and moving tab buttons
      * to the right corner of the screen
      */
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 696b0d9af174d5c3fedc87422118152a301a33e9..d36ff1605e98bdde8174ee136c1e1734ee281786 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2633,10 +2633,10 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
 	}
 	else
 	{
-		LLAppearanceManager::wearOutfitByName(outfit_folder_name);
+		LLAppearanceManager::instance().wearOutfitByName(outfit_folder_name);
 	}
-	LLAppearanceManager::wearOutfitByName(gestures);
-	LLAppearanceManager::wearOutfitByName(COMMON_GESTURES_FOLDER);
+	LLAppearanceManager::instance().wearOutfitByName(gestures);
+	LLAppearanceManager::instance().wearOutfitByName(COMMON_GESTURES_FOLDER);
 
 	// This is really misnamed -- it means we have started loading
 	// an outfit/shape that will give the avatar a gender eventually. JC
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 4dccdfd7e6c275ec535a8448e3e16de9f42847e7..b649a0c38ebd45243f9dea3073b3d1f534dfec43 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -109,6 +109,7 @@ const S32 TEXT_HEIGHT = 18;
 static void onClickBuyCurrency(void*);
 static void onClickHealth(void*);
 static void onClickScriptDebug(void*);
+static void onClickVolume(void*);
 
 std::vector<std::string> LLStatusBar::sDays;
 std::vector<std::string> LLStatusBar::sMonths;
@@ -116,6 +117,12 @@ const U32 LLStatusBar::MAX_DATE_STRING_LENGTH = 2000;
 
 LLStatusBar::LLStatusBar(const LLRect& rect)
 :	LLPanel(),
+	mTextHealth(NULL),
+	mTextTime(NULL),
+	mSGBandwidth(NULL),
+	mSGPacketLoss(NULL),
+	mBtnBuyCurrency(NULL),
+	mBtnVolume(NULL),
 	mBalance(0),
 	mHealth(100),
 	mSquareMetersCredit(0),
@@ -148,6 +155,11 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
 	mBtnBuyCurrency = getChild<LLButton>( "buycurrency" );
 	mBtnBuyCurrency->setClickedCallback( onClickBuyCurrency, this );
 
+	mBtnVolume = getChild<LLButton>( "volume_btn" );
+	mBtnVolume->setClickedCallback( onClickVolume, this );
+
+	gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2));
+
 	childSetAction("scriptout", onClickScriptDebug, this);
 	childSetAction("health", onClickHealth, this);
 
@@ -333,6 +345,10 @@ void LLStatusBar::refresh()
 	mSGBandwidth->setVisible(net_stats_visible);
 	mSGPacketLoss->setVisible(net_stats_visible);
 	childSetEnabled("stat_btn", net_stats_visible);
+
+	// update the master volume button state
+	BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio");
+	mBtnVolume->setToggleState(mute_audio);
 }
 
 void LLStatusBar::setVisibleForMouselook(bool visible)
@@ -488,6 +504,13 @@ static void onClickScriptDebug(void*)
 	LLFloaterScriptDebug::show(LLUUID::null);
 }
 
+static void onClickVolume(void* data)
+{
+	// toggle the master mute setting
+	BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio");
+	gSavedSettings.setBOOL("MuteAudio", !mute_audio);
+}
+
 // sets the static variables necessary for the date
 void LLStatusBar::setupDate()
 {
@@ -562,6 +585,10 @@ BOOL can_afford_transaction(S32 cost)
 	return((cost <= 0)||((gStatusBar) && (gStatusBar->getBalance() >=cost)));
 }
 
+void LLStatusBar::onVolumeChanged(const LLSD& newvalue)
+{
+	refresh();
+}
 
 // Implements secondlife:///app/balance/request to request a L$ balance
 // update via UDP message system. JC
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index d5629e6f1ebd7bb35ea4899636fd4ab4a4bef1b4..3ce35499615a99c6ee942ba73ccd93dfea05bf8f 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -91,9 +91,10 @@ class LLStatusBar
 	// simple method to setup the part that holds the date
 	void setupDate();
 
-	static void onCommitSearch(LLUICtrl*, void* data);
-	static void onClickSearch(void* data);
+	void onVolumeChanged(const LLSD& newvalue);
+
 	static void onClickStatGraph(void* data);
+	
 
 private:
 	LLTextBox	*mTextHealth;
@@ -103,6 +104,7 @@ class LLStatusBar
 	LLStatGraph *mSGPacketLoss;
 
 	LLButton	*mBtnBuyCurrency;
+	LLButton	*mBtnVolume;
 
 	S32				mBalance;
 	S32				mHealth;
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index eada3879456eddb085ae715e8e80867ef8b6fa72..04ecf769d5514405252d6cd347b096a51317eaa7 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -332,7 +332,9 @@ void LLSysWellWindow::reshapeWindow()
 		new_window_height = MAX_WINDOW_HEIGHT;
 	}
 	S32 newY = curRect.mTop + new_window_height - curRect.getHeight();
-	curRect.setLeftTopAndSize(curRect.mLeft, newY, MIN_WINDOW_WIDTH, new_window_height);
+	S32 newWidth = curRect.getWidth() < MIN_WINDOW_WIDTH ? MIN_WINDOW_WIDTH
+			: curRect.getWidth();
+	curRect.setLeftTopAndSize(curRect.mLeft, newY, newWidth, new_window_height);
 	reshape(curRect.getWidth(), curRect.getHeight(), TRUE);
 	setRect(curRect);
 
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 9be342c424ca39a7b697cb365068a71d3242bc61..c33c652935afcc2899b2a96abc49a76706cdf606 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -834,9 +834,9 @@ bool LLTextureCache::updateTextureEntryList(const LLUUID& id, S32 bodysize)
 			S32 idx = openAndReadEntry(id, entry, false);
 			if (idx < 0)
 			{
-				// TODO: change to llwarns
-				llerrs << "Failed to open entry: " << id << llendl;
-				removeFromCache(id);
+				llwarns << "Failed to open entry: " << id << llendl;	
+				removeHeaderCacheEntry(id);
+				LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool());
 				return false;
 			}			
 			else if (oldbodysize != entry.mBodySize)
@@ -1002,7 +1002,7 @@ void LLTextureCache::closeHeaderEntriesFile()
 void LLTextureCache::readEntriesHeader()
 {
 	// mHeaderEntriesInfo initializes to default values so safe not to read it
-		llassert_always(mHeaderAPRFile == NULL);
+	llassert_always(mHeaderAPRFile == NULL);
 	if (LLAPRFile::isExist(mHeaderEntriesFileName, getLocalAPRFilePool()))
 	{
 		LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
@@ -1192,7 +1192,7 @@ void LLTextureCache::writeEntriesAndClose(const std::vector<Entry>& entries)
 // Called from either the main thread or the worker thread
 void LLTextureCache::readHeaderCache()
 {
-	LLMutexLock lock(&mHeaderMutex);
+	mHeaderMutex.lock();
 
 	mLRU.clear(); // always clear the LRU
 
@@ -1212,28 +1212,29 @@ void LLTextureCache::readHeaderCache()
 		if (num_entries)
 		{
 			U32 empty_entries = 0;
-			typedef std::pair<U32, LLUUID> lru_data_t;
+			typedef std::pair<U32, S32> lru_data_t;
 			std::set<lru_data_t> lru;
-			std::vector<LLUUID> purge_list;
+			std::set<LLUUID> purge_list;
 			for (U32 i=0; i<num_entries; i++)
 			{
 				Entry& entry = entries[i];
 				const LLUUID& id = entry.mID;
 				if (entry.mImageSize < 0)
 				{
-					// This will be in the Free List, don't put it in the LRY
+					// This will be in the Free List, don't put it in the LRU
 					++empty_entries;
 				}
 				else
 				{
-					lru.insert(std::make_pair(entry.mTime, id));
+					lru.insert(std::make_pair(entry.mTime, i));
 					if (entry.mBodySize > 0)
 					{
 						if (entry.mBodySize > entry.mImageSize)
 						{
 							// Shouldn't happen, failsafe only
 							llwarns << "Bad entry: " << i << ": " << id << ": BodySize: " << entry.mBodySize << llendl;
-							purge_list.push_back(id);
+							purge_list.insert(entry.mID);
+							entry.mImageSize = -1; // empty/available
 						}
 					}
 				}
@@ -1243,22 +1244,31 @@ void LLTextureCache::readHeaderCache()
 				// Special case: cache size was reduced, need to remove entries
 				// Note: After we prune entries, we will call this again and create the LRU
 				U32 entries_to_purge = (num_entries-empty_entries) - sCacheMaxEntries;
+				llinfos << "Texture Cache Entries: " << num_entries << " Max: " << sCacheMaxEntries << " Empty: " << empty_entries << " Purging: " << entries_to_purge << llendl;
 				if (entries_to_purge > 0)
 				{
 					for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter)
 					{
-						purge_list.push_back(iter->second);
-						if (--entries_to_purge <= 0)
-							break;
+						S32 idx = iter->second;
+						if (entries[idx].mImageSize >= 0)
+						{
+							purge_list.insert(entries[idx].mID);
+							entries[idx].mImageSize = -1;
+							if (purge_list.size() >= entries_to_purge)
+								break;
+						}
 					}
 				}
+				llassert_always(purge_list.size() >= entries_to_purge);
 			}
 			else
 			{
 				S32 lru_entries = (S32)((F32)sCacheMaxEntries * TEXTURE_CACHE_LRU_SIZE);
 				for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter)
 				{
-					mLRU.insert(iter->second);
+					S32 idx = iter->second;
+					const LLUUID& id = entries[idx].mID;
+					mLRU.insert(id);
 // 					llinfos << "LRU: " << iter->first << " : " << iter->second << llendl;
 					if (--lru_entries <= 0)
 						break;
@@ -1267,9 +1277,12 @@ void LLTextureCache::readHeaderCache()
 			
 			if (purge_list.size() > 0)
 			{
-				for (std::vector<LLUUID>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter)
+				for (std::set<LLUUID>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter)
 				{
-					removeFromCache(*iter);
+					const LLUUID& id = *iter;
+					bool res = removeHeaderCacheEntry(id); // sets entry size on disk to -1
+					llassert_always(res);
+					LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool());
 				}
 				// If we removed any entries, we need to rebuild the entries list,
 				// write the header, and call this again
@@ -1285,7 +1298,9 @@ void LLTextureCache::readHeaderCache()
 				llassert_always(new_entries.size() <= sCacheMaxEntries);
 				mHeaderEntriesInfo.mEntries = new_entries.size();
 				writeEntriesAndClose(new_entries);
+				mHeaderMutex.unlock(); // unlock the mutex before calling again
 				readHeaderCache(); // repeat with new entries file
+				mHeaderMutex.lock();
 			}
 			else
 			{
@@ -1293,6 +1308,7 @@ void LLTextureCache::readHeaderCache()
 			}
 		}
 	}
+	mHeaderMutex.unlock();
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1307,6 +1323,7 @@ void LLTextureCache::purgeAllTextures(bool purge_directories)
 		for (S32 i=0; i<16; i++)
 		{
 			std::string dirname = mTexturesDirName + delem + subdirs[i];
+			llinfos << "Deleting files in directory: " << dirname << llendl;
 			gDirUtilp->deleteFilesInDir(dirname,mask);
 			if (purge_directories)
 			{
@@ -1337,9 +1354,12 @@ void LLTextureCache::purgeTextures(bool validate)
 		return;
 	}
 
-	// *FIX:Mani - watchdog off.
-	LLAppViewer::instance()->pauseMainloopTimeout();
-
+	if (!mThreaded)
+	{
+		// *FIX:Mani - watchdog off.
+		LLAppViewer::instance()->pauseMainloopTimeout();
+	}
+	
 	LLMutexLock lock(&mHeaderMutex);
 
 	llinfos << "TEXTURE CACHE: Purging." << llendl;
@@ -1486,7 +1506,7 @@ S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, S32& imagesize)
 // Writes imagesize to the header, updates timestamp
 S32 LLTextureCache::setHeaderCacheEntry(const LLUUID& id, S32 imagesize)
 {
-	LLMutexLock lock(&mHeaderMutex);
+	mHeaderMutex.lock();
 	llassert_always(imagesize >= 0);
 	Entry entry;
 	S32 idx = openAndReadEntry(id, entry, true);
@@ -1494,11 +1514,15 @@ S32 LLTextureCache::setHeaderCacheEntry(const LLUUID& id, S32 imagesize)
 	{
 		entry.mImageSize = imagesize;
 		writeEntryAndClose(idx, entry);
+		mHeaderMutex.unlock();
 	}
 	else // retry
 	{
+		mHeaderMutex.unlock();
 		readHeaderCache(); // We couldn't write an entry, so refresh the LRU
+		mHeaderMutex.lock();
 		llassert_always(!mLRU.empty() || mHeaderEntriesInfo.mEntries < sCacheMaxEntries);
+		mHeaderMutex.unlock();
 		idx = setHeaderCacheEntry(id, imagesize); // assert above ensures no inf. recursion
 	}
 	return idx;
@@ -1624,24 +1648,20 @@ void LLTextureCache::addCompleted(Responder* responder, bool success)
 //////////////////////////////////////////////////////////////////////////////
 
 // Called from MAIN thread (endWork())
-
+// Ensure that mHeaderMutex is locked first!
 bool LLTextureCache::removeHeaderCacheEntry(const LLUUID& id)
 {
-	if (!mReadOnly)
+	Entry entry;
+	S32 idx = openAndReadEntry(id, entry, false);
+	if (idx >= 0)
 	{
-		LLMutexLock lock(&mHeaderMutex);
-		Entry entry;
-		S32 idx = openAndReadEntry(id, entry, false);
-		if (idx >= 0)
-		{
-			entry.mImageSize = -1;
-			entry.mBodySize = 0;
-			writeEntryAndClose(idx, entry);
-			mFreeList.insert(idx);
-			mHeaderIDMap.erase(id);
-			mTexturesSizeMap.erase(id);
-			return true;
-		}
+		entry.mImageSize = -1;
+		entry.mBodySize = 0;
+		writeEntryAndClose(idx, entry);
+		mFreeList.insert(idx);
+		mHeaderIDMap.erase(id);
+		mTexturesSizeMap.erase(id);
+		return true;
 	}
 	return false;
 }
@@ -1651,6 +1671,7 @@ void LLTextureCache::removeFromCache(const LLUUID& id)
 	//llwarns << "Removing texture from cache: " << id << llendl;
 	if (!mReadOnly)
 	{
+		LLMutexLock lock(&mHeaderMutex);
 		removeHeaderCacheEntry(id);
 		LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool());
 	}
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index de00ca8420b601f7947eba7f355c35d3c838de11..5f7c2f5080bff0c70963bbeed8d09a77f29ab591 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -48,7 +48,7 @@
 #include "llfoldervieweventlistener.h"
 #include "llinventory.h"
 #include "llinventoryfunctions.h"
-#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "lllineeditor.h"
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index c918f988952ae5cda09819a785abd3036df1bfb7..6f3dabe5a73a1e3656af33838ec7753402d62cfd 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -524,6 +524,7 @@ void LLTextureFetchWorker::setDesiredDiscard(S32 discard, S32 size)
 		mDesiredSize = size;
 		prioritize = true;
 	}
+	mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE);
 	if ((prioritize && mState == INIT) || mState == DONE)
 	{
 		mState = INIT;
@@ -613,6 +614,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
 		mCacheReadHandle = LLTextureCache::nullHandle();
 		mCacheWriteHandle = LLTextureCache::nullHandle();
 		mState = LOAD_FROM_TEXTURE_CACHE;
+		mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE); // min desired size is TEXTURE_CACHE_ENTRY_SIZE
 		LL_DEBUGS("Texture") << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
 							 << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
 		// fall through
@@ -681,7 +683,6 @@ bool LLTextureFetchWorker::doWork(S32 param)
 
 	if (mState == CACHE_POST)
 	{
-		mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE);
 		mCachedSize = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0;
 		// Successfully loaded
 		if ((mCachedSize >= mDesiredSize) || mHaveAllData)
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 513439daeb9850c6126bf3aa392d4356665b2eac..ed2cedbd10d13f6bba0080bb4c119dab2395e5e4 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -225,7 +225,7 @@ void LLToast::setVisible(BOOL show)
 		{
 			mTimer.start();
 		}
-		LLModalDialog::setFrontmost(TRUE);
+		LLModalDialog::setFrontmost(FALSE);
 	}
 	LLPanel::setVisible(show);
 	if(mPanel)
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index f82573f46cd4400af4af66b1acfab7b5a98e0a05..d1bdcb13543da05606a3bd8867331aa842411312 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -40,7 +40,7 @@
 #include "lliconctrl.h"
 #include "llinventoryfunctions.h"
 #include "llnotify.h"
-#include "lltextbox.h"
+#include "llviewertexteditor.h"
 
 #include "lluiconstants.h"
 #include "llui.h"
@@ -54,7 +54,7 @@
 #include "llfloaterinventory.h"
 #include "llinventorytype.h"
 
-const S32 LLToastGroupNotifyPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 4;
+const S32 LLToastGroupNotifyPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 7;
 
 LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification)
 :	LLToastPanel(notification),
@@ -84,11 +84,6 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 	//message body
 	const std::string& message = payload["message"].asString();
 
-
-	LLTextBox* pSubjectText = getChild<LLTextBox>("subject");
-	pSubjectText->setValue(subject);
-
-	LLTextBox* pDateTimeText = getChild<LLTextBox>("datetime");
 	std::string timeStr = "["+LLTrans::getString("UTCTimeWeek")+"],["
 							+LLTrans::getString("UTCTimeDay")+"] ["
 							+LLTrans::getString("UTCTimeMth")+"] ["
@@ -102,20 +97,23 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
 	LLSD substitution;
 	substitution["datetime"] = (S32) notice_date.secondsSinceEpoch();
 	LLStringUtil::format(timeStr, substitution);
-	pDateTimeText->setValue(timeStr);
 
-	LLTextBox* pMessageText = getChild<LLTextBox>("message");
-
-	//If message is empty let it be invisible and not take place at the panel
-	if(message.size() != 0)
-	{
-		pMessageText->setVisible(TRUE);
-		pMessageText->setValue(message);
-	}
-	else
-	{
-		pMessageText->setVisible(FALSE);
-	}
+	LLViewerTextEditor* pMessageText = getChild<LLViewerTextEditor>("message");
+	pMessageText->clear();
+
+	LLStyle::Params style;
+	LLFontGL* subject_font = LLFontGL::getFontByName(getString("subject_font"));
+	if (subject_font) 
+		style.font = subject_font;
+	pMessageText->appendText(subject, FALSE, style);
+
+	LLFontGL* date_font = LLFontGL::getFontByName(getString("date_font"));
+	if (date_font)
+		style.font = date_font;
+	pMessageText->appendText(timeStr + "\n", TRUE, style);
+	
+	style.font = pMessageText->getDefaultFont();
+	pMessageText->appendText(message, TRUE, style);
 
 	//attachment
 	BOOL hasInventory = payload["inventory_offer"].isDefined();
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
index 1ea5f515b76e277e647698c5dbab32ac9cb70d41..d2cc6d07260bbaba566cffbdd44f270c2dd40866 100644
--- a/indra/newview/lltoastimpanel.cpp
+++ b/indra/newview/lltoastimpanel.cpp
@@ -51,14 +51,20 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notif
 	mReplyBtn = getChild<LLButton>("reply");	
 
 	LLStyle::Params style_params;
+	style_params.font.name(LLFontGL::nameFromFont(style_params.font));
+	style_params.font.size(LLFontGL::sizeFromFont(style_params.font));
+	style_params.font.style = "UNDERLINE";
+	
 	//Handle IRC styled /me messages.
 	std::string prefix = p.message.substr(0, 4);
 	if (prefix == "/me " || prefix == "/me'")
 	{
 		mMessage->clear();
-		style_params.font.style= "ITALIC";
+		
+		style_params.font.style ="ITALIC";
 		mMessage->appendText(p.from + " ", FALSE, style_params);
-		style_params.font.style= "UNDERLINE";
+
+		style_params.font.style = "UNDERLINE";
 		mMessage->appendText(p.message.substr(3), FALSE, style_params);
 	}
 	else
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 0c23947a8ce99c62eefe08b8673e5e00e0f08e0e..48b68e4292f52f388ebb12bdc8047a2ae77cb936 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -128,6 +128,7 @@ mAddedDefaultBtn(false)
 	// *TODO: magic numbers(???) - copied from llnotify.cpp(250)
 	const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE; 
 
+	mTextBox->setMaxTextLength(MAX_LENGTH);
 	mTextBox->setVisible(TRUE);
 	mTextBox->setValue(notification->getMessage());
 
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 959cb3f182248fd124a267954f4c058469004b6b..fbd86d0edfc8c2f35773db0345723fc263b7c860 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -2508,7 +2508,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory(
 		if(drop)
 		{
 		    BOOL append = ( (mask & MASK_SHIFT) ? TRUE : FALSE );
-			LLAppearanceManager::wearInventoryCategory(category, false, append);
+			LLAppearanceManager::instance().wearInventoryCategory(category, false, append);
 		}
 		return ACCEPT_YES_MULTI;
 	}
@@ -2516,7 +2516,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory(
 	{
 		if(drop)
 		{
-			LLAppearanceManager::wearInventoryCategory(category, true, false);
+			LLAppearanceManager::instance().wearInventoryCategory(category, true, false);
 		}
 		return ACCEPT_YES_MULTI;
 	}
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index d49ea5109dd645e57ee5dcfde42d3679f273745f..9c8fca355287a1f3fb155186d213f4ebe8c35236 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -526,7 +526,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
 	}
 
 	static LLCachedControl<bool> enable_highlight(
-		gSavedSettings, "RenderHighlightEnable", false);
+		gSavedSettings, "RenderHoverGlowEnable", false);
 	LLDrawable* drawable = NULL;
 	if (enable_highlight && show_highlight && object)
 	{
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 1a6171765880bb5b7e90f34df9b8f7acc80f4837..407cc23d0d70c8c6d87e7dc6450ad0c40f9e88ff 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -55,6 +55,7 @@
 #include "llhudtext.h"
 #include "llhudview.h"
 #include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "lllandmarklist.h"
 #include "llsky.h"
 #include "llui.h"
diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp
index c974171c2c2e7173b758ed39b153649e797d44dd..b382ff630699c4d3107a2a731ffe6cf9af6b3f13 100644
--- a/indra/newview/llviewerassettype.cpp
+++ b/indra/newview/llviewerassettype.cpp
@@ -71,7 +71,6 @@ LLViewerAssetDictionary::LLViewerAssetDictionary()
 	addEntry(LLViewerAssetType::AT_OBJECT, 				new ViewerAssetEntry(DAD_OBJECT));
 	addEntry(LLViewerAssetType::AT_NOTECARD, 			new ViewerAssetEntry(DAD_NOTECARD));
 	addEntry(LLViewerAssetType::AT_CATEGORY, 			new ViewerAssetEntry(DAD_CATEGORY));
-	addEntry(LLViewerAssetType::AT_ROOT_CATEGORY, 		new ViewerAssetEntry(DAD_ROOT_CATEGORY));
 	addEntry(LLViewerAssetType::AT_LSL_TEXT, 			new ViewerAssetEntry(DAD_SCRIPT));
 	addEntry(LLViewerAssetType::AT_LSL_BYTECODE, 		new ViewerAssetEntry(DAD_NONE));
 	addEntry(LLViewerAssetType::AT_TEXTURE_TGA, 		new ViewerAssetEntry(DAD_NONE));
diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..96ecf0d8a75c9ede21569d71eb0ba91285b20158
--- /dev/null
+++ b/indra/newview/llviewerchat.cpp
@@ -0,0 +1,220 @@
+/** 
+ * @file llviewerchat.cpp
+ * @brief Builds menus out of items.
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * 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
+ * 
+ * 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
+ * 
+ * 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.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llviewerchat.h" 
+
+// newview includes
+#include "llagent.h" 	// gAgent		
+#include "lluicolortable.h"
+#include "llviewercontrol.h" // gSavedSettings
+
+// LLViewerChat
+
+//static 
+void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color)
+{
+	if(chat.mMuted)
+	{
+		r_color= LLUIColorTable::instance().getColor("LtGray");
+	}
+	else
+	{
+		switch(chat.mSourceType)
+		{
+			case CHAT_SOURCE_SYSTEM:
+				r_color = LLUIColorTable::instance().getColor("SystemChatColor"); 
+				break;
+			case CHAT_SOURCE_AGENT:
+				if (chat.mFromID.isNull())
+				{
+					r_color = LLUIColorTable::instance().getColor("SystemChatColor");
+				}
+				else
+				{
+					if(gAgentID == chat.mFromID)
+					{
+						r_color = LLUIColorTable::instance().getColor("UserChatColor");
+					}
+					else
+					{
+						r_color = LLUIColorTable::instance().getColor("AgentChatColor");
+					}
+				}
+				break;
+			case CHAT_SOURCE_OBJECT:
+				if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)
+				{
+					r_color = LLUIColorTable::instance().getColor("ScriptErrorColor");
+				}
+				else if ( chat.mChatType == CHAT_TYPE_OWNER )
+				{
+					r_color = LLUIColorTable::instance().getColor("llOwnerSayChatColor");
+				}
+				else
+				{
+					r_color = LLUIColorTable::instance().getColor("ObjectChatColor");
+				}
+				break;
+			default:
+				r_color.setToWhite();
+		}
+		
+		if (!chat.mPosAgent.isExactlyZero())
+		{
+			LLVector3 pos_agent = gAgent.getPositionAgent();
+			F32 distance = dist_vec(pos_agent, chat.mPosAgent);
+			if (distance > gAgent.getNearChatRadius())
+			{
+				// diminish far-off chat
+				r_color.mV[VALPHA] = 0.8f;
+			}
+		}
+	}
+}
+
+
+//static 
+void LLViewerChat::getChatColor(const LLChat& chat, std::string& r_color_name, F32& r_color_alpha)
+{
+	if(chat.mMuted)
+	{
+		r_color_name = "LtGray";
+	}
+	else
+	{
+		switch(chat.mSourceType)
+		{
+			case CHAT_SOURCE_SYSTEM:
+				r_color_name = "SystemChatColor";
+				break;
+				
+			case CHAT_SOURCE_AGENT:
+				if (chat.mFromID.isNull())
+				{
+					r_color_name = "SystemChatColor";
+				}
+				else
+				{
+					if(gAgentID == chat.mFromID)
+					{
+						r_color_name = "UserChatColor";
+					}
+					else
+					{
+						r_color_name = "AgentChatColor";
+					}
+				}
+				break;
+				
+			case CHAT_SOURCE_OBJECT:
+				if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)
+				{
+					r_color_name = "ScriptErrorColor";
+				}
+				else if ( chat.mChatType == CHAT_TYPE_OWNER )
+				{
+					r_color_name = "llOwnerSayChatColor";
+				}
+				else
+				{
+					r_color_name = "ObjectChatColor";
+				}
+				break;
+			default:
+				r_color_name = "White";
+		}
+		
+		if (!chat.mPosAgent.isExactlyZero())
+		{
+			LLVector3 pos_agent = gAgent.getPositionAgent();
+			F32 distance = dist_vec(pos_agent, chat.mPosAgent);
+			if (distance > gAgent.getNearChatRadius())
+			{
+				// diminish far-off chat
+				r_color_alpha = 0.8f; 
+			}
+			else
+			{
+				r_color_alpha = 1.0f;
+			}
+		}
+	}
+	
+}
+
+
+//static 
+LLFontGL* LLViewerChat::getChatFont()
+{
+	S32 font_size = gSavedSettings.getS32("ChatFontSize");
+	LLFontGL* fontp = NULL;
+	switch(font_size)
+	{
+		case 0:
+			fontp = LLFontGL::getFontSansSerifSmall();
+			break;
+		default:
+		case 1:
+			fontp = LLFontGL::getFontSansSerif();
+			break;
+		case 2:
+			fontp = LLFontGL::getFontSansSerifBig();
+			break;
+	}
+	
+	return fontp;
+	
+}
+
+//static
+S32 LLViewerChat::getChatFontSize()
+{
+	return gSavedSettings.getS32("ChatFontSize");
+}
+
+
+//static
+void LLViewerChat::formatChatMsg(const LLChat& chat, std::string& formated_msg)
+{
+	std::string tmpmsg = chat.mText;
+	
+	if(chat.mChatStyle == CHAT_STYLE_IRC)
+	{
+		formated_msg = chat.mFromName + tmpmsg.substr(3);
+	}
+	else 
+	{
+		formated_msg = tmpmsg;
+	}
+
+}
diff --git a/indra/newview/llviewerchat.h b/indra/newview/llviewerchat.h
new file mode 100644
index 0000000000000000000000000000000000000000..502d6ea7e5203c1c7204329e6cdcc02d8672e630
--- /dev/null
+++ b/indra/newview/llviewerchat.h
@@ -0,0 +1,52 @@
+/** 
+ * @file llviewerchat.h
+ * @brief wrapper of LLChat in viewer
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ * 
+ * Copyright (c) 2002-2009, Linden Research, Inc.
+ * 
+ * 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
+ * 
+ * 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
+ * 
+ * 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.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLVIEWERCHAT_H
+#define LL_LLVIEWERCHAT_H
+
+#include "llchat.h"
+#include "llfontgl.h"
+#include "v4color.h"
+
+
+class LLViewerChat 
+{
+public:
+	static void getChatColor(const LLChat& chat, LLColor4& r_color);
+	static void getChatColor(const LLChat& chat, std::string& r_color_name, F32& r_color_alpha);
+	static LLFontGL* getChatFont();
+	static S32 getChatFontSize();
+	static void formatChatMsg(const LLChat& chat, std::string& formated_msg);
+
+};
+
+#endif
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
index 384538364f04707df336d605fb570748855835e2..6aabcb11b82d0c7a6d03d3cf2a02001979661bb6 100644
--- a/indra/newview/llviewerfoldertype.cpp
+++ b/indra/newview/llviewerfoldertype.cpp
@@ -109,8 +109,7 @@ LLViewerFolderDictionary::LLViewerFolderDictionary()
 	addEntry(LLFolderType::FT_CLOTHING, 			new ViewerFolderEntry("Clothing",				"inv_folder_clothing.tga"));
 	addEntry(LLFolderType::FT_OBJECT, 				new ViewerFolderEntry("Objects",				"inv_folder_object.tga"));
 	addEntry(LLFolderType::FT_NOTECARD, 			new ViewerFolderEntry("Notecards",				"inv_folder_notecard.tga"));
-	addEntry(LLFolderType::FT_CATEGORY, 			new ViewerFolderEntry("New Folder",				"inv_folder_plain_closed.tga"));
-	addEntry(LLFolderType::FT_ROOT_CATEGORY, 		new ViewerFolderEntry("Inventory",				""));
+	addEntry(LLFolderType::FT_ROOT_INVENTORY, 		new ViewerFolderEntry("My Inventory",			""));
 	addEntry(LLFolderType::FT_LSL_TEXT, 			new ViewerFolderEntry("Scripts",				"inv_folder_script.tga"));
 	addEntry(LLFolderType::FT_BODYPART, 			new ViewerFolderEntry("Body Parts",				"inv_folder_bodypart.tga"));
 	addEntry(LLFolderType::FT_TRASH, 				new ViewerFolderEntry("Trash",					"inv_folder_trash.tga"));
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 69d4da373e8e6407c764585592a62bd1d85fa1b6..3a7c54479b3d473910c2398354b9cd83c942f571 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -32,6 +32,7 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llagent.h"
 #include "llviewermedia.h"
 #include "llviewermediafocus.h"
 #include "llmimetypes.h"
@@ -54,6 +55,8 @@
 #include <boost/bind.hpp>	// for SkinFolder listener
 #include <boost/signals2.hpp>
 
+/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "AutoPlayMedia";
+
 // Move this to its own file.
 
 LLViewerMediaEventEmitter::~LLViewerMediaEventEmitter()
@@ -159,12 +162,21 @@ LOG_CLASS(LLMimeDiscoveryResponder);
 
 	virtual void error( U32 status, const std::string& reason )
 	{
-		llwarns << "responder failed with status " << status << ", reason " << reason << llendl;
-		if(mMediaImpl)
+		if(status == 401)
+		{
+			// This is the "you need to authenticate" status.  
+			// Treat this like an html page.
+			completeAny(status, "text/html");
+		}
+		else
 		{
-			mMediaImpl->mMediaSourceFailed = true;
+			llwarns << "responder failed with status " << status << ", reason " << reason << llendl;
+		
+			if(mMediaImpl)
+			{
+				mMediaImpl->mMediaSourceFailed = true;
+			}
 		}
-		// completeAny(status, "none/none");
 	}
 
 	void completeAny(U32 status, const std::string& mime_type)
@@ -313,7 +325,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
 			// If (the media was already loaded OR the media was set to autoplay) AND this update didn't come from this agent,
 			// do a navigate.
 			
-			if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia"))) && !update_from_self)
+			if((was_loaded || (media_entry->getAutoPlay() && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING))) && !update_from_self)
 			{
 				needs_navigate = (media_entry->getCurrentURL() != previous_url);
 			}
@@ -330,7 +342,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
 		
 		media_impl->setHomeURL(media_entry->getHomeURL());
 		
-		if(media_entry->getAutoPlay() && gSavedSettings.getBOOL("AutoPlayMedia"))
+		if(media_entry->getAutoPlay() && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING))
 		{
 			needs_navigate = true;
 		}
@@ -530,6 +542,16 @@ bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLView
 		// The item with user focus always comes to the front of the list, period.
 		return false;
 	}
+	else if(i1->isParcelMedia())
+	{
+		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		return true;
+	}
+	else if(i2->isParcelMedia())
+	{
+		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		return false;
+	}
 	else if(i1->getUsedInUI() && !i2->getUsedInUI())
 	{
 		// i1 is a UI element, i2 is not.  This makes i1 "less than" i2, so it sorts earlier in our list.
@@ -540,16 +562,21 @@ bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLView
 		// i2 is a UI element, i1 is not.  This makes i2 "less than" i1, so it sorts earlier in our list.
 		return false;
 	}
-	else if(i1->isParcelMedia())
+	else if(i1->isPlayable() && !i2->isPlayable())
 	{
-		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		// Playable items sort above ones that wouldn't play even if they got high enough priority
 		return true;
 	}
-	else if(i2->isParcelMedia())
+	else if(!i1->isPlayable() && i2->isPlayable())
 	{
-		// The parcel media impl sorts above all other inworld media, unless one has focus.
+		// Playable items sort above ones that wouldn't play even if they got high enough priority
 		return false;
 	}
+	else if(i1->getInterest() == i2->getInterest())
+	{
+		// Generally this will mean both objects have zero interest.  In this case, sort on distance.
+		return (i1->getProximityDistance() < i2->getProximityDistance());
+	}
 	else
 	{
 		// The object with the larger interest value should be earlier in the list, so we reverse the sense of the comparison here.
@@ -557,6 +584,11 @@ bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLView
 	}
 }
 
+static bool proximity_comparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)
+{
+	return (i1->getProximityDistance() < i2->getProximityDistance());
+}
+
 //////////////////////////////////////////////////////////////////////////////////////////
 // static
 void LLViewerMedia::updateMedia()
@@ -582,12 +614,9 @@ void LLViewerMedia::updateMedia()
 	int impl_count_total = 0;
 	int impl_count_interest_low = 0;
 	int impl_count_interest_normal = 0;
-	int i = 0;
-
-#if 0	
-	LL_DEBUGS("PluginPriority") << "Sorted impls:" << llendl;
-#endif
-
+	
+	std::vector<LLViewerMediaImpl*> proximity_order;
+	
 	U32 max_instances = gSavedSettings.getU32("PluginInstancesTotal");
 	U32 max_normal = gSavedSettings.getU32("PluginInstancesNormal");
 	U32 max_low = gSavedSettings.getU32("PluginInstancesLow");
@@ -618,10 +647,12 @@ void LLViewerMedia::updateMedia()
 		else if(pimpl->hasFocus())
 		{
 			new_priority = LLPluginClassMedia::PRIORITY_HIGH;
+			impl_count_interest_normal++;	// count this against the count of "normal" instances for priority purposes
 		}
 		else if(pimpl->getUsedInUI())
 		{
 			new_priority = LLPluginClassMedia::PRIORITY_NORMAL;
+			impl_count_interest_normal++;
 		}
 		else
 		{
@@ -629,7 +660,17 @@ void LLViewerMedia::updateMedia()
 			
 			// Heuristic -- if the media texture's approximate screen area is less than 1/4 of the native area of the texture,
 			// turn it down to low instead of normal.  This may downsample for plugins that support it.
-			bool media_is_small = pimpl->getInterest() < (pimpl->getApproximateTextureInterest() / 4);
+			bool media_is_small = false;
+			F64 approximate_interest = pimpl->getApproximateTextureInterest();
+			if(approximate_interest == 0.0f)
+			{
+				// this media has no current size, which probably means it's not loaded.
+				media_is_small = true;
+			}
+			else if(pimpl->getInterest() < (approximate_interest / 4))
+			{
+				media_is_small = true;
+			}
 			
 			if(pimpl->getInterest() == 0.0f)
 			{
@@ -667,7 +708,7 @@ void LLViewerMedia::updateMedia()
 			}
 		}
 		
-		if(new_priority != LLPluginClassMedia::PRIORITY_UNLOADED)
+		if(!pimpl->getUsedInUI() && (new_priority != LLPluginClassMedia::PRIORITY_UNLOADED))
 		{
 			impl_count_total++;
 		}
@@ -681,23 +722,27 @@ void LLViewerMedia::updateMedia()
 		}
 		else
 		{
-			// Other impls just get the same ordering as the priority list (for now).
-			pimpl->mProximity = i;
+			proximity_order.push_back(pimpl);
 		}
 
-#if 0		
-		LL_DEBUGS("PluginPriority") << "    " << pimpl 
-			<< ", setting priority to " << new_priority
-			<< (pimpl->hasFocus()?", HAS FOCUS":"") 
-			<< (pimpl->getUsedInUI()?", is UI":"") 
-			<< ", cpu " << pimpl->getCPUUsage() 
-			<< ", interest " << pimpl->getInterest() 
-			<< ", media url " << pimpl->getMediaURL() << llendl;
-#endif
-
 		total_cpu += pimpl->getCPUUsage();
-		
-		i++;
+	}
+	
+	if(gSavedSettings.getBOOL("MediaPerformanceManagerDebug"))
+	{
+		// Give impls the same ordering as the priority list
+		// they're already in the right order for this.
+	}
+	else
+	{
+		// Use a distance-based sort for proximity values.  
+		std::stable_sort(proximity_order.begin(), proximity_order.end(), proximity_comparitor);
+	}
+
+	// Transfer the proximity order to the proximity fields in the objects.
+	for(int i = 0; i < (int)proximity_order.size(); i++)
+	{
+		proximity_order[i]->mProximity = i;
 	}
 	
 	LL_DEBUGS("PluginPriority") << "Total reported CPU usage is " << total_cpu << llendl;
@@ -749,6 +794,7 @@ LLViewerMediaImpl::LLViewerMediaImpl(	  const LLUUID& texture_id,
 	mIsDisabled(false),
 	mIsParcelMedia(false),
 	mProximity(-1),
+	mProximityDistance(0.0f),
 	mMimeTypeProbe(NULL),
 	mIsUpdated(false)
 { 
@@ -1577,6 +1623,10 @@ void LLViewerMediaImpl::update()
 		{
 			// This media source should not be loaded.
 		}
+		else if(mPriority <= LLPluginClassMedia::PRIORITY_SLIDESHOW)
+		{
+			// Don't load new instances that are at PRIORITY_SLIDESHOW or below.  They're just kept around to preserve state.
+		}
 		else if(mMimeTypeProbe != NULL)
 		{
 			// this media source is doing a MIME type probe -- don't try loading it again.
@@ -1704,7 +1754,7 @@ LLViewerMediaTexture* LLViewerMediaImpl::updatePlaceholderImage()
 		// MEDIAOPT: seems insane that we actually have to make an imageraw then
 		// immediately discard it
 		LLPointer<LLImageRaw> raw = new LLImageRaw(texture_width, texture_height, texture_depth);
-		raw->clear(0x0f, 0x0f, 0x0f, 0xff);
+		raw->clear(0x00, 0x00, 0x00, 0xff);
 		int discard_level = 0;
 
 		// ask media source for correct GL image format constants
@@ -1805,7 +1855,7 @@ bool LLViewerMediaImpl::isMediaPaused()
 
 //////////////////////////////////////////////////////////////////////////////////////////
 //
-bool LLViewerMediaImpl::hasMedia()
+bool LLViewerMediaImpl::hasMedia() const
 {
 	return mMediaSource != NULL;
 }
@@ -1839,6 +1889,31 @@ bool LLViewerMediaImpl::isForcedUnloaded() const
 	return false;
 }
 
+//////////////////////////////////////////////////////////////////////////////////////////
+//
+bool LLViewerMediaImpl::isPlayable() const
+{
+	if(isForcedUnloaded())
+	{
+		// All of the forced-unloaded criteria also imply not playable.
+		return false;
+	}
+	
+	if(hasMedia())
+	{
+		// Anything that's already playing is, by definition, playable.
+		return true;
+	}
+	
+	if(!mMediaURL.empty())
+	{
+		// If something has navigated the instance, it's ready to be played.
+		return true;
+	}
+	
+	return false;
+}
+
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event)
 {
@@ -2047,6 +2122,15 @@ void LLViewerMediaImpl::calculateInterest()
 		mInterest = 0.0f;
 	}
 	
+	// Calculate distance from the avatar, for use in the proximity calculation.
+	mProximityDistance = 0.0f;
+	if(!mObjectList.empty())
+	{
+		// Just use the first object in the list.  We could go through the list and find the closest object, but this should work well enough.
+		LLVector3d global_delta = gAgent.getPositionGlobal() - (*mObjectList.begin())->getPositionGlobal();
+		mProximityDistance = global_delta.magVecSquared();  // use distance-squared because it's cheaper and sorts the same.
+	}
+	
 	if(mNeedsMuteCheck)
 	{
 		// Check all objects this instance is associated with, and those objects' owners, against the mute list
@@ -2083,7 +2167,13 @@ F64 LLViewerMediaImpl::getApproximateTextureInterest()
 		result = mMediaSource->getFullWidth();
 		result *= mMediaSource->getFullHeight();
 	}
-	
+	else
+	{
+		// No media source is loaded -- all we have to go on is the texture size that has been set on the impl, if any.
+		result = mMediaWidth;
+		result *= mMediaHeight;
+	}
+
 	return result;
 }
 
@@ -2124,7 +2214,7 @@ void LLViewerMediaImpl::setPriority(LLPluginClassMedia::EPriority priority)
 {
 	if(mPriority != priority)
 	{
-		LL_INFOS("PluginPriority")
+		LL_DEBUGS("PluginPriority")
 			<< "changing priority of media id " << mTextureId
 			<< " from " << LLPluginClassMedia::priorityToString(mPriority)
 			<< " to " << LLPluginClassMedia::priorityToString(priority)
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 719deb28bf678ffb82b5c5b35150c29bfeebf8cb..f4afce6c4c910978cb1769cb2dea005e87d371d7 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -74,6 +74,9 @@ class LLViewerMedia
 	LOG_CLASS(LLViewerMedia);
 	public:
 
+		// String to get/set media autoplay in gSavedSettings
+		static const char *AUTO_PLAY_MEDIA_SETTING;
+	
 		typedef std::vector<LLViewerMediaImpl*> impl_list;
 
 		// Special case early init for just web browser component
@@ -191,7 +194,7 @@ class LLViewerMediaImpl
 
 	bool isMediaPlaying();
 	bool isMediaPaused();
-	bool hasMedia();
+	bool hasMedia() const;
 	bool isMediaFailed() const { return mMediaSourceFailed; };
 	void resetPreviousMediaState();
 	
@@ -201,6 +204,9 @@ class LLViewerMediaImpl
 	// returns true if this instance should not be loaded (disabled, muted object, crashed, etc.)
 	bool isForcedUnloaded() const;
 	
+	// returns true if this instance could be playable based on autoplay setting, current load state, etc.
+	bool isPlayable() const;
+	
 	void setIsParcelMedia(bool is_parcel_media) { mIsParcelMedia = is_parcel_media; };
 	bool isParcelMedia() const { return mIsParcelMedia; };
 
@@ -264,6 +270,7 @@ class LLViewerMediaImpl
 	F64 getInterest() const { return mInterest; };
 	F64 getApproximateTextureInterest();
 	S32 getProximity() const { return mProximity; };
+	F64 getProximityDistance() const { return mProximityDistance; };
 	
 	// Mark this object as being used in a UI panel instead of on a prim
 	// This will be used as part of the interest sorting algorithm.
@@ -333,6 +340,7 @@ class LLViewerMediaImpl
 	bool mIsDisabled;
 	bool mIsParcelMedia;
 	S32 mProximity;
+	F64 mProximityDistance;
 	LLMimeDiscoveryResponder *mMimeTypeProbe;
 	
 private:
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 728fb7c61645a45813aa274f58e9f478e7387d0a..68a9aaef7577aebb31e7a7f2e67bf867dee5e3e8 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -3879,8 +3879,7 @@ void god_force_inv_owner_permissive(LLViewerObject* object,
 	InventoryObjectList::const_iterator inv_end = inventory->end();
 	for ( ; inv_it != inv_end; ++inv_it)
 	{
-		if(((*inv_it)->getType() != LLAssetType::AT_CATEGORY)
-		   && ((*inv_it)->getType() != LLAssetType::AT_ROOT_CATEGORY))
+		if(((*inv_it)->getType() != LLAssetType::AT_CATEGORY))
 		{
 			LLInventoryObject* obj = *inv_it;
 			LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem((LLViewerInventoryItem*)obj);
@@ -6424,13 +6423,13 @@ void handle_selected_texture_info(void*)
 
 void handle_test_male(void*)
 {
-	LLAppearanceManager::wearOutfitByName("Male Shape & Outfit");
+	LLAppearanceManager::instance().wearOutfitByName("Male Shape & Outfit");
 	//gGestureList.requestResetFromServer( TRUE );
 }
 
 void handle_test_female(void*)
 {
-	LLAppearanceManager::wearOutfitByName("Female Shape & Outfit");
+	LLAppearanceManager::instance().wearOutfitByName("Female Shape & Outfit");
 	//gGestureList.requestResetFromServer( FALSE );
 }
 
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index b1efec83e60d668501eec0e976b903c39fad29a9..ef6a621323b6c15361ca8644c9db22e003a4336a 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -43,7 +43,7 @@
 #include "llfloaterbump.h"
 #include "llassetstorage.h"
 #include "llcachename.h"
-#include "llchat.h"
+
 #include "lldbstrings.h"
 #include "lleconomy.h"
 #include "llfilepicker.h"
@@ -89,6 +89,7 @@
 #include "llhudeffecttrail.h"
 #include "llhudmanager.h"
 #include "llinventorymodel.h"
+#include "llinventoryobserver.h"
 #include "llinventorypanel.h"
 #include "llfloaterinventory.h"
 #include "llmenugl.h"
@@ -115,6 +116,7 @@
 #include "llui.h"			// for make_ui_sound
 #include "lluploaddialog.h"
 #include "llviewercamera.h"
+#include "llviewerchat.h"
 #include "llviewergenericmessage.h"
 #include "llviewerinventory.h"
 #include "llviewermenu.h"
@@ -2250,7 +2252,7 @@ void process_decline_callingcard(LLMessageSystem* msg, void**)
 
 void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 {
-	LLChat		chat;
+	LLChat	chat;
 	std::string		mesg;
 	std::string		from_name;
 	U8			source_temp;
@@ -2341,14 +2343,14 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 		std::string prefix = mesg.substr(0, 4);
 		if (prefix == "/me " || prefix == "/me'")
 		{
-			chat.mText = from_name;
-			chat.mText += mesg.substr(3);
+//			chat.mText = from_name;
+//			chat.mText += mesg.substr(3);
 			ircstyle = TRUE;
 		}
-		else
-		{
+//		else
+//		{
 			chat.mText = mesg;
-		}
+//		}
 
 		// Look for the start of typing so we can put "..." in the bubbles.
 		if (CHAT_TYPE_START == chat.mChatType)
@@ -2374,19 +2376,6 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 			return;
 		}
 
-		// We have a real utterance now, so can stop showing "..." and proceed.
-		if (chatter && chatter->isAvatar())
-		{
-			LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, FALSE);
-			((LLVOAvatar*)chatter)->stopTyping();
-
-			if (!is_muted && !is_busy)
-			{
-				visible_in_chat_bubble = gSavedSettings.getBOOL("UseChatBubbles");
-				((LLVOAvatar*)chatter)->addChat(chat);
-			}
-		}
-
 		// Look for IRC-style emotes
 		if (ircstyle)
 		{
@@ -2426,6 +2415,23 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
 			chat.mText += mesg;
 		}
 		
+		// We have a real utterance now, so can stop showing "..." and proceed.
+		if (chatter && chatter->isAvatar())
+		{
+			LLLocalSpeakerMgr::getInstance()->setSpeakerTyping(from_id, FALSE);
+			((LLVOAvatar*)chatter)->stopTyping();
+			
+			if (!is_muted && !is_busy)
+			{
+				visible_in_chat_bubble = gSavedSettings.getBOOL("UseChatBubbles");
+				std::string formated_msg = "";
+				LLViewerChat::formatChatMsg(chat, formated_msg);
+				LLChat chat_bubble = chat;
+				chat_bubble.mText = formated_msg;
+				((LLVOAvatar*)chatter)->addChat(chat_bubble);
+			}
+		}
+		
 		if (chatter)
 		{
 			chat.mPosAgent = chatter->getPositionAgent();
@@ -2850,7 +2856,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
 			// Chat the "back" SLURL. (DEV-4907)
 			LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL());
 			chat.mSourceType = CHAT_SOURCE_SYSTEM;
- 			LLFloaterChat::addChatHistory(chat);
+ 		    LLFloaterChat::addChatHistory(chat);
 
 			// Set the new position
 			avatarp->setPositionAgent(agent_pos);
@@ -4622,7 +4628,7 @@ void notify_cautioned_script_question(const LLSD& notification, const LLSD& resp
 		if (caution)
 		{
 			LLChat chat(notice.getString());
-			LLFloaterChat::addChat(chat, FALSE, FALSE);
+	//		LLFloaterChat::addChat(chat, FALSE, FALSE);
 		}
 	}
 }
@@ -4835,8 +4841,7 @@ void container_inventory_arrived(LLViewerObject* object,
 		InventoryObjectList::const_iterator end = inventory->end();
 		for ( ; it != end; ++it)
 		{
-			if ((*it)->getType() != LLAssetType::AT_CATEGORY &&
-				(*it)->getType() != LLAssetType::AT_ROOT_CATEGORY)
+			if ((*it)->getType() != LLAssetType::AT_CATEGORY)
 			{
 				LLInventoryObject* obj = (LLInventoryObject*)(*it);
 				LLInventoryItem* item = (LLInventoryItem*)(obj);
@@ -4871,8 +4876,7 @@ void container_inventory_arrived(LLViewerObject* object,
 		// one actual object
 		InventoryObjectList::iterator it = inventory->begin();
 
-		if ((*it)->getType() == LLAssetType::AT_CATEGORY ||
-			(*it)->getType() == LLAssetType::AT_ROOT_CATEGORY)
+		if ((*it)->getType() == LLAssetType::AT_CATEGORY)
 		{
 			++it;
 		}
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 336d7f684e6f9731a7bf2ad06b7cfbb7738ad24f..7559fd8e72c0bdc4c84c86182d7fcd0d5f385ea2 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -324,10 +324,36 @@ std::string LLViewerParcelMedia::getMimeType()
 {
 	return sMediaImpl.notNull() ? sMediaImpl->getMimeType() : "none/none";
 }
+
+//static 
+std::string LLViewerParcelMedia::getURL()
+{
+	std::string url;
+	if(sMediaImpl.notNull())
+		url = sMediaImpl->getMediaURL();
+	
+	if (url.empty())
+		url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaCurrentURL();
+	
+	if (url.empty())
+		url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaURL();
+	
+	return url;
+}
+
+//static 
+std::string LLViewerParcelMedia::getName()
+{
+	if(sMediaImpl.notNull())
+		return sMediaImpl->getName();
+	return "";
+}
+
 viewer_media_t LLViewerParcelMedia::getParcelMedia()
 {
 	return sMediaImpl;
 }
+
 //////////////////////////////////////////////////////////////////////////////////////////
 // static
 void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg, void ** )
diff --git a/indra/newview/llviewerparcelmedia.h b/indra/newview/llviewerparcelmedia.h
index 3f7f8983569a888b9ba2c4437d7f48cdf229061b..19e1ef78d43c30db888061415c6f7c50dd8bcbf1 100644
--- a/indra/newview/llviewerparcelmedia.h
+++ b/indra/newview/llviewerparcelmedia.h
@@ -71,6 +71,8 @@ class LLViewerParcelMedia : public LLViewerMediaObserver
 
 		static LLPluginClassMediaOwner::EMediaStatus getStatus();
 		static std::string getMimeType();
+		static std::string getURL();
+		static std::string getName();
 		static viewer_media_t getParcelMedia();
 
 		static void processParcelMediaCommandMessage( LLMessageSystem *msg, void ** );
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 85bc26c9c0e69637859e30e5e254a70bdc48a3e9..0d29efaedf5acd27bacb941c43b26723380f3d43 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -2121,10 +2121,11 @@ LLImageRaw* LLViewerFetchedTexture::reloadRawImage(S8 discard_level)
 	llassert_always(mGLTexturep.notNull()) ;
 	llassert_always(discard_level >= 0);
 	llassert_always(mComponents > 0);
+
 	if (mRawImage.notNull())
 	{
-		llerrs << "called with existing mRawImage" << llendl;
-		mRawImage = NULL;
+		//mRawImage is in use by somebody else, do not delete it.
+		return NULL ;
 	}
 
 	if(mSavedRawDiscardLevel >= 0 && mSavedRawDiscardLevel <= discard_level)
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 1054223dcf113a8ef2eb9f0251a96383d599d1a5..48f0f7516fd1718b031355dcc6dbd2486c4fc6e4 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1015,7 +1015,10 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
 		}
 		
 		// SL-53351: Make sure we're not in mouselook when minimised, to prevent control issues
-		gAgent.changeCameraToDefault();
+		if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK)
+		{
+			gAgent.changeCameraToDefault();
+		}
 		
 		send_agent_pause();
 		
@@ -1563,8 +1566,6 @@ void LLViewerWindow::initWorldUI()
 
 	LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container");
 	LLPanelStandStopFlying* panel_stand_stop_flying	= LLPanelStandStopFlying::getInstance();
-	panel_stand_stop_flying->setShape(panel_ssf_container->getLocalRect());
-	panel_stand_stop_flying->setFollowsAll();
 	panel_ssf_container->addChild(panel_stand_stop_flying);
 	panel_ssf_container->setVisible(TRUE);
 
diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp
index 999701ece1656d7d504659e41e03c9f52039b29f..6340189c934daaa32ac1acfb2392fb4e530991da 100644
--- a/indra/newview/llvlcomposition.cpp
+++ b/indra/newview/llvlcomposition.cpp
@@ -287,17 +287,22 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
 				min_dim /= 2;
 			}
 
-			mDetailTextures[i]->reloadRawImage(ddiscard) ;
+			BOOL delete_raw = (mDetailTextures[i]->reloadRawImage(ddiscard) != NULL) ;
 			if(mDetailTextures[i]->getRawImageLevel() != ddiscard)//raw iamge is not ready, will enter here again later.
 			{
-				mDetailTextures[i]->destroyRawImage() ;
+				if(delete_raw)
+				{
+					mDetailTextures[i]->destroyRawImage() ;
+				}
 				lldebugs << "cached raw data for terrain detail texture is not ready yet: " << mDetailTextures[i]->getID() << llendl;
 				return FALSE;
 			}
 
 			mRawImages[i] = mDetailTextures[i]->getRawImage() ;
-			mDetailTextures[i]->destroyRawImage() ;
-
+			if(delete_raw)
+			{
+				mDetailTextures[i]->destroyRawImage() ;
+			}
 			if (mDetailTextures[i]->getWidth(ddiscard) != BASE_SIZE ||
 				mDetailTextures[i]->getHeight(ddiscard) != BASE_SIZE ||
 				mDetailTextures[i]->getComponents() != 3)
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 62ac8adad0bf8d782e929f91910e7dae471d6a50..b6c1ee2f117479678ca30d7219ac6552230f9a87 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -624,7 +624,6 @@ F32 LLVOAvatar::sGreyUpdateTime = 0.f;
 // Helper functions
 //-----------------------------------------------------------------------------
 static F32 calc_bouncy_animation(F32 x);
-static U32 calc_shame(const LLVOVolume* volume, std::set<LLUUID> &textures);
 
 //-----------------------------------------------------------------------------
 // LLVOAvatar()
@@ -7637,9 +7636,17 @@ void LLVOAvatar::idleUpdateRenderCost()
 		return;
 	}
 
-	U32 shame = 1;
+	U32 shame = 0;
 
-	std::set<LLUUID> textures;
+	for (U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++)
+	{
+		const LLVOAvatarDictionary::BakedEntry *baked_dict = LLVOAvatarDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)baked_index);
+		ETextureIndex tex_index = baked_dict->mTextureIndex;
+		if (isTextureVisible(tex_index))
+		{
+			shame +=20;
+		}
+	}
 
 	for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin(); 
 		 iter != mAttachmentPoints.end();
@@ -7660,15 +7667,13 @@ void LLVOAvatar::idleUpdateRenderCost()
 					const LLVOVolume* volume = drawable->getVOVolume();
 					if (volume)
 					{
-						shame += calc_shame(volume, textures);
+						shame += volume->getRenderCost();
 					}
 				}
 			}
 		}
 	}
 
-	shame += textures.size() * 5;
-
 	setDebugText(llformat("%d", shame));
 	F32 green = 1.f-llclamp(((F32) shame-1024.f)/1024.f, 0.f, 1.f);
 	F32 red = llmin((F32) shame/1024.f, 1.f);
@@ -7713,110 +7718,6 @@ const std::string LLVOAvatar::getBakedStatusForPrintout() const
 }
 
 
-U32 calc_shame(const LLVOVolume* volume, std::set<LLUUID> &textures)
-{
-	if (!volume)
-	{
-		return 0;
-	}
-
-	U32 shame = 0;
-
-	U32 invisi = 0;
-	U32 shiny = 0;
-	U32 glow = 0;
-	U32 alpha = 0;
-	U32 flexi = 0;
-	U32 animtex = 0;
-	U32 particles = 0;
-	U32 scale = 0;
-	U32 bump = 0;
-	U32 planar = 0;
-	
-	if (volume->isFlexible())
-	{
-		flexi = 1;
-	}
-	if (volume->isParticleSource())
-	{
-		particles = 1;
-	}
-
-	const LLVector3& sc = volume->getScale();
-	scale += (U32) sc.mV[0] + (U32) sc.mV[1] + (U32) sc.mV[2];
-
-	const LLDrawable* drawablep = volume->mDrawable;
-
-	if (volume->isSculpted())
-	{
-		const LLSculptParams *sculpt_params = (LLSculptParams *) volume->getParameterEntry(LLNetworkData::PARAMS_SCULPT);
-		LLUUID sculpt_id = sculpt_params->getSculptTexture();
-		textures.insert(sculpt_id);
-	}
-
-	for (S32 i = 0; i < drawablep->getNumFaces(); ++i)
-	{
-		const LLFace* face = drawablep->getFace(i);
-		const LLTextureEntry* te = face->getTextureEntry();
-		const LLViewerTexture* img = face->getTexture();
-
-		textures.insert(img->getID());
-
-		if (face->getPoolType() == LLDrawPool::POOL_ALPHA)
-		{
-			alpha++;
-		}
-		else if (img->getPrimaryFormat() == GL_ALPHA)
-		{
-			invisi = 1;
-		}
-
-		if (te)
-		{
-			if (te->getBumpmap())
-			{
-				bump = 1;
-			}
-			if (te->getShiny())
-			{
-				shiny = 1;
-			}
-			if (te->getGlow() > 0.f)
-			{
-				glow = 1;
-			}
-			if (face->mTextureMatrix != NULL)
-			{
-				animtex++;
-			}
-			if (te->getTexGen())
-			{
-				planar++;
-			}
-		}
-	}
-
-	shame += invisi + shiny + glow + alpha*4 + flexi*8 + animtex*4 + particles*16+bump*4+scale+planar;
-
-	LLViewerObject::const_child_list_t& child_list = volume->getChildren();
-	for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
-		 iter != child_list.end(); 
-		 ++iter)
-	{
-		const LLViewerObject* child_objectp = *iter;
-		const LLDrawable* child_drawablep = child_objectp->mDrawable;
-		if (child_drawablep)
-		{
-			const LLVOVolume* child_volumep = child_drawablep->getVOVolume();
-			if (child_volumep)
-			{
-				shame += calc_shame(child_volumep, textures);
-			}
-		}
-	}
-
-	return shame;
-}
 
 //virtual
 S32 LLVOAvatar::getTexImageSize() const
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 185274d40d2b13c1e8a8731831d2e319362c0094..711e9f90fcc42db38a3db3bc54e9ea2f564ba306 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -487,18 +487,10 @@ BOOL LLVOAvatarSelf::buildMenus()
 		}
 
 		// add in requested order to pie menu, inserting separators as necessary
-		S32 cur_pie_slice = 0;
 		for (std::multimap<S32, S32>::iterator attach_it = attachment_pie_menu_map.begin();
 			 attach_it != attachment_pie_menu_map.end(); ++attach_it)
 		{
-			S32 requested_pie_slice = attach_it->first;
 			S32 attach_index = attach_it->second;
-			while (cur_pie_slice < requested_pie_slice)
-			{
-				gAttachBodyPartPieMenus[group]->addSeparator();
-				gDetachBodyPartPieMenus[group]->addSeparator();
-				cur_pie_slice++;
-			}
 
 			LLViewerJointAttachment* attachment = get_if_there(mAttachmentPoints, attach_index, (LLViewerJointAttachment*)NULL);
 			if (attachment)
@@ -520,7 +512,6 @@ BOOL LLVOAvatarSelf::buildMenus()
 				item_params.on_enable.parameter = attach_index;
 				item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params);
 				gDetachBodyPartPieMenus[group]->addChild(item);
-				cur_pie_slice++;
 			}
 		}
 	}
@@ -1039,7 +1030,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view
 	if (attachment->isObjectAttached(viewer_object))
 	{
 		const LLUUID& attachment_id = viewer_object->getItemID();
-		LLAppearanceManager::registerAttachment(attachment_id);
+		LLAppearanceManager::instance().registerAttachment(attachment_id);
 	}
 
 	return attachment;
@@ -1078,7 +1069,7 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
 		}
 		else
 		{
-			LLAppearanceManager::unregisterAttachment(attachment_id);
+			LLAppearanceManager::instance().unregisterAttachment(attachment_id);
 		}
 		
 		return TRUE;
@@ -1587,7 +1578,7 @@ void LLVOAvatarSelf::dumpLocalTextures() const
 			llinfos << "LocTex " << name << ": Baked " << getTEImage(baked_equiv)->getID() << llendl;
 #endif
 		}
-		else if (local_tex_obj->getImage() != NULL)
+		else if (local_tex_obj && local_tex_obj->getImage() != NULL)
 		{
 			if (local_tex_obj->getImage()->getID() == IMG_DEFAULT_AVATAR)
 			{
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index d93913b9443849d73a2d47f86c33b6897f19958c..21054dacd0b7a76a0828b55a9a2360e30f40ab9e 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -33,6 +33,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llagent.h"
+#include "llfloatercall.h"
 #include "llfloaterreg.h"
 #include "llimview.h"
 #include "llnotifications.h"
@@ -408,9 +409,14 @@ void LLVoiceChannel::doSetState(const EState& new_state)
 
 void LLVoiceChannel::toggleCallWindowIfNeeded(EState state)
 {
+	LLFloaterCall* floater = dynamic_cast<LLFloaterCall*>(LLFloaterReg::getInstance("voice_call", mSessionID));
+	if (!floater)
+		return;
+
 	if (state == STATE_CONNECTED)
 	{
-		LLFloaterReg::showInstance("voice_call", mSessionID);
+		floater->init(mSessionID);
+		floater->openFloater(mSessionID);
 	}
 	// By checking that current state is CONNECTED we make sure that the call window
 	// has been shown, hence there's something to hide. This helps when user presses
@@ -418,7 +424,8 @@ void LLVoiceChannel::toggleCallWindowIfNeeded(EState state)
 	// *TODO: move this check to LLFloaterCall?
 	else if (state == STATE_HUNG_UP && mState == STATE_CONNECTED)
 	{
-		LLFloaterReg::hideInstance("voice_call", mSessionID);
+		floater->reset();
+		floater->closeFloater();
 	}
 }
 
@@ -870,29 +877,60 @@ void LLVoiceChannelP2P::setSessionHandle(const std::string& handle, const std::s
 
 void LLVoiceChannelP2P::setState(EState state)
 {
-	// HACK: Open/close the call window if needed.
+	// *HACK: Open/close the call window if needed.
 	toggleCallWindowIfNeeded(state);
 	
-	// *HACK: open outgoing call floater if needed, might be better done elsewhere.
-	mCallDialogPayload["session_id"] = mSessionID;
-	mCallDialogPayload["session_name"] = mSessionName;
-	mCallDialogPayload["other_user_id"] = mOtherUserID;
-	if (!mReceivedCall && state == STATE_RINGING)
-	{
-		llinfos << "RINGINGGGGGGGG " << mSessionName << llendl;
-		if (!mSessionName.empty())
+	if (mReceivedCall) // incoming call
+	{
+		// you only "answer" voice invites in p2p mode
+		// so provide a special purpose message here
+		if (mReceivedCall && state == STATE_RINGING)
 		{
-			LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE);
+			gIMMgr->addSystemMessage(mSessionID, "answering", mNotifyArgs);
+			doSetState(state);
+			return;
 		}
 	}
-
-	// you only "answer" voice invites in p2p mode
-	// so provide a special purpose message here
-	if (mReceivedCall && state == STATE_RINGING)
+	else // outgoing call
 	{
-		gIMMgr->addSystemMessage(mSessionID, "answering", mNotifyArgs);
-		doSetState(state);
-		return;
+		mCallDialogPayload["session_id"] = mSessionID;
+		mCallDialogPayload["session_name"] = mSessionName;
+		mCallDialogPayload["other_user_id"] = mOtherUserID;
+		if (state == STATE_RINGING)
+		{
+			// *HACK: open outgoing call floater if needed, might be better done elsewhere.
+			// *TODO: should move this squirrelly ui-fudging crap into LLOutgoingCallDialog itself
+			if (!mSessionName.empty())
+			{
+				LLOutgoingCallDialog *ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE));
+				if (ocd)
+				{
+					ocd->getChild<LLTextBox>("calling")->setVisible(true);
+					ocd->getChild<LLTextBox>("leaving")->setVisible(true);
+					ocd->getChild<LLTextBox>("connecting")->setVisible(false);
+				}
+			}
+		}
+		/*else if (state == STATE_CONNECTED)
+		{
+				LLOutgoingCallDialog *ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE));
+				if (ocd)
+				{
+					ocd->getChild<LLTextBox>("calling")->setVisible(false);
+					ocd->getChild<LLTextBox>("leaving")->setVisible(false);
+					ocd->getChild<LLTextBox>("connecting")->setVisible(true);
+				}			
+				}*/
+		else if (state == STATE_HUNG_UP ||
+			 state == STATE_CONNECTED)
+		{
+				LLOutgoingCallDialog *ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE));
+				if (ocd)
+				{
+					ocd->closeFloater();
+				}			
+		}
 	}
+
 	LLVoiceChannel::setState(state);
 }
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 2def905bbba05bd11f29e8adcd8000c685912023..e5531a14977512f2660b75f650fb5fba3d2ab202 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -2541,6 +2541,107 @@ const LLMatrix4 LLVOVolume::getRenderMatrix() const
 	return mDrawable->getWorldMatrix();
 }
 
+U32 LLVOVolume::getRenderCost() const
+{
+	U32 shame = 0;
+
+	U32 invisi = 0;
+	U32 shiny = 0;
+	U32 glow = 0;
+	U32 alpha = 0;
+	U32 flexi = 0;
+	U32 animtex = 0;
+	U32 particles = 0;
+	U32 scale = 0;
+	U32 bump = 0;
+	U32 planar = 0;
+
+	if (isFlexible())
+	{
+		flexi = 1;
+	}
+	if (isParticleSource())
+	{
+		particles = 1;
+	}
+
+	const LLVector3& sc = getScale();
+	scale += (U32) sc.mV[0] + (U32) sc.mV[1] + (U32) sc.mV[2];
+
+	const LLDrawable* drawablep = mDrawable;
+
+	if (isSculpted())
+	{
+		const LLSculptParams *sculpt_params = (LLSculptParams *) getParameterEntry(LLNetworkData::PARAMS_SCULPT);
+		LLUUID sculpt_id = sculpt_params->getSculptTexture();
+		shame += 5;
+	}
+
+	for (S32 i = 0; i < drawablep->getNumFaces(); ++i)
+	{
+		const LLFace* face = drawablep->getFace(i);
+		const LLTextureEntry* te = face->getTextureEntry();
+		const LLViewerTexture* img = face->getTexture();
+
+		shame += 5;
+
+		if (face->getPoolType() == LLDrawPool::POOL_ALPHA)
+		{
+			alpha++;
+		}
+		else if (img->getPrimaryFormat() == GL_ALPHA)
+		{
+			invisi = 1;
+		}
+
+		if (te)
+		{
+			if (te->getBumpmap())
+			{
+				bump = 1;
+			}
+			if (te->getShiny())
+			{
+				shiny = 1;
+			}
+			if (te->getGlow() > 0.f)
+			{
+				glow = 1;
+			}
+			if (face->mTextureMatrix != NULL)
+			{
+				animtex++;
+			}
+			if (te->getTexGen())
+			{
+				planar++;
+			}
+		}
+	}
+
+	shame += invisi + shiny + glow + alpha*4 + flexi*8 + animtex*4 + particles*16+bump*4+scale+planar;
+
+	LLViewerObject::const_child_list_t& child_list = getChildren();
+	for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
+		 iter != child_list.end(); 
+		 ++iter)
+	{
+		const LLViewerObject* child_objectp = *iter;
+		const LLDrawable* child_drawablep = child_objectp->mDrawable;
+		if (child_drawablep)
+		{
+			const LLVOVolume* child_volumep = child_drawablep->getVOVolume();
+			if (child_volumep)
+			{
+				shame += child_volumep->getRenderCost();
+			}
+		}
+	}
+
+	return shame;
+
+}
+
 //static
 void LLVOVolume::preUpdateGeom()
 {
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 10fc8865fc5ba06c6bd4855410c5cd964c721a91..fb543efc048c6f6765228ee35ee5d7086c126cfe 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -120,7 +120,7 @@ class LLVOVolume : public LLViewerObject
 	const LLMatrix4&	getRelativeXform() const				{ return mRelativeXform; }
 	const LLMatrix3&	getRelativeXformInvTrans() const		{ return mRelativeXformInvTrans; }
 	/*virtual*/	const LLMatrix4	getRenderMatrix() const;
-
+				U32 	getRenderCost() const;
 
 	/*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, 
 										  S32 face = -1,                        // which face to check, -1 = ALL_SIDES
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index c5c97e7649c69d40cc47a3cc0a81e7361ef7564d..e37dffd52698cd8611b6f59923068ccc9eff4b44 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -831,6 +831,7 @@ void LLWearable::addVisualParam(LLVisualParam *param)
 	}
 	param->setIsDummy(FALSE);
 	mVisualParamIndexMap[param->getID()] = param;
+	mSavedVisualParamMap[param->getID()] = param->getDefaultWeight();
 }
 
 void LLWearable::setVisualParams()
@@ -933,11 +934,39 @@ void LLWearable::setClothesColor( S32 te, const LLColor4& new_color, BOOL upload
 void LLWearable::revertValues()
 {
 	//update saved settings so wearable is no longer dirty
+	// non-driver params first
 	for (param_map_t::const_iterator iter = mSavedVisualParamMap.begin(); iter != mSavedVisualParamMap.end(); iter++)
 	{
 		S32 id = iter->first;
 		F32 value = iter->second;
-		setVisualParamWeight(id, value, TRUE);
+		LLVisualParam *param = getVisualParam(id);
+		if(param &&  !dynamic_cast<LLDriverParam*>(param) )
+		{
+			setVisualParamWeight(id, value, TRUE);
+		}
+	}
+
+	//then driver params
+	for (param_map_t::const_iterator iter = mSavedVisualParamMap.begin(); iter != mSavedVisualParamMap.end(); iter++)
+	{
+		S32 id = iter->first;
+		F32 value = iter->second;
+		LLVisualParam *param = getVisualParam(id);
+		if(param &&  dynamic_cast<LLDriverParam*>(param) )
+		{
+			setVisualParamWeight(id, value, TRUE);
+		}
+	}
+
+	// make sure that saved values are sane
+	for (param_map_t::const_iterator iter = mSavedVisualParamMap.begin(); iter != mSavedVisualParamMap.end(); iter++)
+	{
+		S32 id = iter->first;
+		LLVisualParam *param = getVisualParam(id);
+		if( param )
+		{
+			mSavedVisualParamMap[id] = param->getWeight();
+		}
 	}
 
 	syncImages(mSavedTEMap, mTEMap);
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 525452e4d4fb7b14bf7dbb2dfca3d379c1dce4bf..49c71a5bc1e56d53d2de8841cd4ac7def49ebdf8 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -23,13 +23,13 @@
   <texture name="Arrow_Up" file_name="widgets/Arrow_Up.png" preload="true" />
   <texture name="Arrow_Down" file_name="widgets/Arrow_Down.png" preload="true" />
 
-  <texture name="AudioMute_Off.png" file_name="icons/AudioMute_Off.png" preload="false" />
-  <texture name="AudioMute_Over.png" file_name="icons/AudioMute_Over.png" preload="false" />
-  <texture name="AudioMute_Press.png" file_name="icons/AudioMute_Press.png" preload="false" />
+  <texture name="AudioMute_Off" file_name="icons/AudioMute_Off.png" preload="false" />
+  <texture name="AudioMute_Over" file_name="icons/AudioMute_Over.png" preload="false" />
+  <texture name="AudioMute_Press" file_name="icons/AudioMute_Press.png" preload="false" />
 
-  <texture name="Audio_Off.png" file_name="icons/Audio_Off.png" preload="false" />
-  <texture name="Audio_Over.png" file_name="icons/Audio_Over.png" preload="false" />
-  <texture name="Audio_Press.png" file_name="icons/Audio_Press.png" preload="false" />
+  <texture name="Audio_Off" file_name="icons/Audio_Off.png" preload="false" />
+  <texture name="Audio_Over" file_name="icons/Audio_Over.png" preload="false" />
+  <texture name="Audio_Press" file_name="icons/Audio_Press.png" preload="false" />
 
   <texture name="BackArrow_Disabled" file_name="icons/BackArrow_Disabled.png" preload="false" />
   <texture name="BackArrow_Off" file_name="icons/BackArrow_Off.png" preload="false" />
@@ -109,9 +109,9 @@
 
   <texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" />
 
-  <texture name="ExternalBrowser_Off.png" file_name="icons/ExternalBrowser_Off.png" preload="false" />
-  <texture name="ExternalBrowser_Over.png" file_name="icons/ExternalBrowser_Over.png" preload="false" />
-  <texture name="ExternalBrowser_Press.png" file_name="icons/ExternalBrowser_Press.png" preload="false" />
+  <texture name="ExternalBrowser_Off" file_name="icons/ExternalBrowser_Off.png" preload="false" />
+  <texture name="ExternalBrowser_Over" file_name="icons/ExternalBrowser_Over.png" preload="false" />
+  <texture name="ExternalBrowser_Press" file_name="icons/ExternalBrowser_Press.png" preload="false" />
 
   <texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" />
   <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
@@ -338,12 +338,12 @@
  <texture name="parcel_lght_Voice" file_name="icons/parcel_lght_Voice.png" preload="false" />
  <texture name="parcel_lght_VoiceNo" file_name="icons/parcel_lght_VoiceNo.png" preload="false" />
 
-  <texture name="Pause_Off.png" file_name="icons/Pause_Off.png" preload="false" />
-  <texture name="Pause_Over.png" file_name="icons/Pause_Over.png" preload="false" />
-  <texture name="Pause_Press.png" file_name="icons/Pause_Press.png" preload="false" />
-  <texture name="Play_Off.png" file_name="icons/Play_Off.png" preload="false" />
-  <texture name="Play_Over.png" file_name="icons/Play_Over.png" preload="false" />
-  <texture name="Play_Press.png" file_name="icons/Play_Press.png" preload="false" />
+  <texture name="Pause_Off" file_name="icons/Pause_Off.png" preload="false" />
+  <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="Play_Off" file_name="icons/Play_Off.png" preload="false" />
+  <texture name="Play_Over" file_name="icons/Play_Over.png" preload="false" />
+  <texture name="Play_Press" file_name="icons/Play_Press.png" preload="false" />
 
   <texture name="Progress_1" file_name="icons/Progress_1.png" preload="false" />
   <texture name="Progress_2" file_name="icons/Progress_2.png" preload="false" />
@@ -425,12 +425,12 @@
   <texture name="SegmentedBtn_Right_Selected_Press" file_name="widgets/SegmentedBtn_Right_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
   <texture name="SegmentedBtn_Right_Selected_Disabled" file_name="widgets/SegmentedBtn_Right_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />
 
-  <texture name="SkipBackward_Off.png" file_name="icons/SkipBackward_Off.png" preload="false" />
-  <texture name="SkipBackward_Over.png" file_name="icons/SkipBackward_Over.png" preload="false" />
-  <texture name="SkipBackward_Press.png" file_name="icons/SkipBackward_Press.png" preload="false" />
-  <texture name="SkipForward_Off.png" file_name="icons/SkipForward_Off.png" preload="false" />
-  <texture name="SkipForward_Over.png" file_name="icons/SkipForward_Over.png" preload="false" />
-  <texture name="SkipForward_Press.png" file_name="icons/SkipForward_Press.png" preload="false" />
+  <texture name="SkipBackward_Off" file_name="icons/SkipBackward_Off.png" preload="false" />
+  <texture name="SkipBackward_Over" file_name="icons/SkipBackward_Over.png" preload="false" />
+  <texture name="SkipBackward_Press" file_name="icons/SkipBackward_Press.png" preload="false" />
+  <texture name="SkipForward_Off" file_name="icons/SkipForward_Off.png" preload="false" />
+  <texture name="SkipForward_Over" file_name="icons/SkipForward_Over.png" preload="false" />
+  <texture name="SkipForward_Press" file_name="icons/SkipForward_Press.png" preload="false" />
 
   <texture name="SliderTrack_Horiz" file_name="widgets/SliderTrack_Horiz.png" scale.left="4" scale.top="4" scale.right="100" scale.bottom="2" />
   <texture name="SliderTrack_Vert" file_name="widgets/SliderTrack_Vert.png" scale.left="2" scale.top="100" scale.right="4" scale.bottom="4" />
@@ -449,9 +449,9 @@
   <texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="true" />
   <texture name="Stepper_Up_Press" file_name="widgets/Stepper_Up_Press.png" preload="true" />
 
-  <texture name="StopReload_Off.png" file_name="icons/StopReload_Off.png" preload="false" />
-  <texture name="StopReload_Over.png" file_name="icons/StopReload_Over.png" preload="false" />
-  <texture name="StopReload_Press.png" file_name="icons/StopReload_Press.png" preload="false" />
+  <texture name="StopReload_Off" file_name="icons/StopReload_Off.png" preload="false" />
+  <texture name="StopReload_Over" file_name="icons/StopReload_Over.png" preload="false" />
+  <texture name="StopReload_Press" file_name="icons/StopReload_Press.png" preload="false" />
 
   <texture name="TabIcon_Appearance_Large" file_name="taskpanel/TabIcon_Appearance_Large.png" preload="false" />
   <texture name="TabIcon_Appearance_Off" file_name="taskpanel/TabIcon_Appearance_Off.png" preload="false" />
@@ -531,8 +531,8 @@
   <texture name="Toolbar_Right_Off" file_name="containers/Toolbar_Right_Off.png" preload="false" />
   <texture name="Toolbar_Right_Press" file_name="containers/Toolbar_Right_Press.png" preload="false" />
   <texture name="Toolbar_Right_Selected" file_name="containers/Toolbar_Right_Selected.png" preload="false" />
-  
-  <texture name="Tooltip" file_name="widgets/Tooltip.png" preload="true" scale.left="2" scale.top="1" scale.right="99" scale.bottom="14" />
+
+  <texture name="Tooltip" file_name="widgets/Tooltip.png" preload="true" scale.left="2" scale.top="16" scale.right="100" scale.bottom="3" />
 
   <texture name="TrashItem_Disabled" file_name="icons/TrashItem_Disabled.png" preload="false" />
   <texture name="TrashItem_Off" file_name="icons/TrashItem_Off.png" preload="false" />
@@ -563,9 +563,9 @@
 
   <texture name="YouAreHere_Badge" file_name="icons/YouAreHere_Badge.png" preload="false" />
 
-  <texture name="Zoom_Off.png" file_name="icons/Zoom_Off.png" preload="false" />
-  <texture name="Zoom_Over.png" file_name="icons/Zoom_Over.png" preload="false" />
-  <texture name="Zoom_Press.png" file_name="icons/Zoom_Press.png" preload="false" />
+  <texture name="Zoom_Off" file_name="icons/Zoom_Off.png" preload="false" />
+  <texture name="Zoom_Over" file_name="icons/Zoom_Over.png" preload="false" />
+  <texture name="Zoom_Press" file_name="icons/Zoom_Press.png" preload="false" />
 
   <!--WARNING OLD ART *do not use*-->
 
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index 6c4f10e61e17e923b19e0fde220054a95a4aaa05..9d2a811d9fc8feee4943048d9a314d5352c048c5 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -3379,6 +3379,16 @@ scratch and wear it.
          layout="topleft"
          name="panel_list" />
     </scroll_container>
+    <button
+     bottom="536"
+     follows="right|bottom"
+     height="20"
+     label="Make Outfit"
+     label_selected="Make Outfit"
+     layout="topleft"
+     name="make_outfit_btn"
+     right="-216"
+     width="100" />
     <button
      bottom="536"
      follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml
index a3ac87820280ff57f6d81090b227d5bfd62f7291..21d292847ab7dfe75b08da53838484ee27efd5ff 100644
--- a/indra/newview/skins/default/xui/en/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_gesture.xml
@@ -83,7 +83,20 @@
                  tool_tip="Make new gesture"
                  top_delta="0"
                  width="18" />
-                <button
+              <button
+                 follows="bottom|left"
+                 font="SansSerifBigBold"
+                 height="10"
+                 image_hover_selected="Activate_Checkmark"
+                 image_selected="Activate_Checkmark"
+                 image_unselected="Activate_Checkmark"
+                 layout="topleft"
+                 left_pad="5"
+                 name="activate_btn"
+                 tool_tip="Activate/Deactivate selected gesture"
+                 top="10"
+                 width="10" />
+              <button
                  follows="bottom|right"
                  font="SansSerifBigBold"
                  height="18"
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 452d28d4eab6004fc0fa66918cfe3676dbf56fa3..70d708f0e73658ac00c8ee541495f302abe2706c 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -9,6 +9,7 @@
  name="panel_im"
  help_topic="panel_im"
  top="0"
+ can_close="false"
  can_dock="true"
  can_minimize="true"
  visible="true" 
diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml
index 9c2898945ba7b150fd703a130899d45df4e850b5..526fda90d1d2333945bd82640ff0488ccbc57411 100644
--- a/indra/newview/skins/default/xui/en/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/en/floater_incoming_call.xml
@@ -12,7 +12,7 @@
  width="410">
     <floater.string
      name="localchat">
-        Local Voice Chat
+        Nearby Voice Chat
     </floater.string>
     <floater.string
      name="anonymous">
diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
index 7f58ea132ea907935c75c33d0d641582287bd03f..84e549f7738c3874d5fe8fc454a24eb4923da39a 100644
--- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml
@@ -3,7 +3,7 @@
  legacy_header_height="18"
  can_minimize="true"
  can_tear_off="false"
- can_resize="false"
+ can_resize="true"
  can_drag_on_left="false"
  can_close="false"
  can_dock="true"
diff --git a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml
index 44956f7e52f1b32a621cfa4df21426596e5c3498..82417de8a7dcfdb1dd490ad0abc428fa2fb79218 100644
--- a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml
+++ b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml
@@ -12,7 +12,7 @@
  width="410">
     <floater.string
      name="localchat">
-        Local Voice Chat
+        Nearby Voice Chat
     </floater.string>
     <floater.string
      name="anonymous">
@@ -35,6 +35,18 @@
      left_delta="19"
      top="35"
      width="36" />
+    <text
+     font="SansSerifLarge"
+     height="20"
+     layout="topleft"
+     left="77"
+     name="connecting"
+     top="27"
+     visible="false"
+     width="315"
+     word_wrap="true">
+Connecting to [CALLEE_NAME]
+    </text>
     <text
      font="SansSerifLarge"
      height="20"
diff --git a/indra/newview/skins/default/xui/en/floater_sys_well.xml b/indra/newview/skins/default/xui/en/floater_sys_well.xml
index e1f07a49e78604691e765280b13e720a995145be..be6d63716c521f9dad6025576fc996b15bb5c197 100644
--- a/indra/newview/skins/default/xui/en/floater_sys_well.xml
+++ b/indra/newview/skins/default/xui/en/floater_sys_well.xml
@@ -15,7 +15,7 @@
  height="23"
  can_minimize="true"
  can_tear_off="false"
- can_resize="false"
+ can_resize="true"
  can_drag_on_left="false"
  can_close="false"
  can_dock="true"
diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml
index e5e5007c5651af7cf5d4d0848b80b5d1d464537c..f48af2f97eb3e43be9c548dc9cb760ac2fe2adf3 100644
--- a/indra/newview/skins/default/xui/en/inspect_group.xml
+++ b/indra/newview/skins/default/xui/en/inspect_group.xml
@@ -31,7 +31,7 @@
      use_ellipses="true"
      width="240"
      word_wrap="false">
-    Grumpity's Grumpy Group of Moose
+    Grumpity&apos;s Grumpy Group of Moose
   </text>
   <text
    follows="all"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 08f7ee456e4361b269bf0cb965bd6e3ef82ba9b4..14a4949df7ff08d4cd3912250e0ebfe90dcec437 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -10,7 +10,7 @@
   <layout_stack border_size="0"
                 follows="all"
                 mouse_opaque="false"
-                height="772"
+                height="768"
                 name="menu_stack"
                 orientation="vertical"
                 top="0">
@@ -51,6 +51,13 @@
                name="main_view"
                user_resize="true"
                width="500">
+          <view bottom="500"
+                follows="all"
+                height="500"
+                left="0"
+                mouse_opaque="false"
+                name="world_view_rect"
+                width="500"/>
           <layout_stack border_size="0"
                         bottom="500"
                         follows="all"
@@ -66,13 +73,6 @@
                    mouse_opaque="false"
                    name="hud container"
                    width="500">
-              <view bottom="500"
-                    follows="all"
-                    height="500"
-                    left="0"
-                    mouse_opaque="false"
-                    name="world_view_rect"
-                    width="500"/>
               <panel follows="right|top|bottom"
                      height="500"
                      mouse_opaque="false"
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index 590621062c2bb79654994092e3b2e7fc5e9c7e7f..a731996a1a26713544d06d6d9de6c5c23a3ab156 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -17,6 +17,8 @@
    name="add_friend">
     <menu_item_call.on_click
      function="InspectAvatar.AddFriend"/>
+    <menu_item_call.on_enable
+     function="InspectAvatar.Gear.Enable"/>
   </menu_item_call>
   <menu_item_call
    label="IM"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index 8b6ab4e4d81533b8c18ff9a4309c84446ffe81c8..b65a49eaed97b1a4360f06ea50fb6194bce8a236 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -356,9 +356,9 @@
          parameter="restore" />
     </menu_item_call>
     <menu_item_call
-     label="Goto Link"
+     label="Find Original"
      layout="topleft"
-     name="Goto Link">
+     name="Find Original">
         <menu_item_call.on_click
          function="Inventory.DoToSelected"
          parameter="goto" />
@@ -434,9 +434,9 @@
     <menu_item_separator
      layout="topleft" />
     <menu_item_call
-     label="Take Off Items"
+     label="Remove From Outfit"
      layout="topleft"
-     name="Take Off Items">
+     name="Remove From Outfit">
         <menu_item_call.on_click
          function="Inventory.DoToSelected"
          parameter="removefromoutfit" />
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index bd60574a9558e44ac23e58ba7b3ed2fb48d3c37a..07940e18b628a1fcdd750736b4215619b018ef79 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -193,6 +193,13 @@
              function="ShowFloater"
              parameter="test_widgets" />
         </menu_item_call>
+        <menu_item_call
+         label="Inspectors Test"
+         name="Inspectors Test">
+            <menu_item_call.on_click
+             function="ShowFloater"
+             parameter="test_inspectors" />
+        </menu_item_call>
       <menu_item_check
          label="Reg In Client Test (restart)"
          name="Reg In Client Test (restart)">
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index e98a6d57bbbc508ff3298d8f3c4c988cf4e99cb1..181994a1bdcd2ac43a31e8053bd21c552b2ca28b 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2572,10 +2572,10 @@
              name="Hover Glow Objects">
                 <menu_item_check.on_check
                  function="CheckControl"
-                 parameter="RenderHighlightEnable" />
+                 parameter="RenderHoverGlowEnable" />
                 <menu_item_check.on_click
                  function="ToggleControl"
-                 parameter="RenderHighlightEnable" />
+                 parameter="RenderHoverGlowEnable" />
             </menu_item_check>
         </menu>
 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 70b21d14bec5f204dff128667b60341e31f48aca..9fe03859bb590329021f8e8cfad74ff69f38f30f 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5587,7 +5587,7 @@ We&apos;re sorry.  This area has reached maximum capacity for voice conversation
    icon="notifytip.tga"
    name="VoiceChannelDisconnected"
    type="notifytip">
-You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnected to spatial voice chat.
+You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnected to Nearby Voice Chat.
     <unique>
       <context key="VOICE_CHANNEL_NAME"/>
     </unique>
@@ -5597,7 +5597,7 @@ You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnect
    icon="notifytip.tga"
    name="VoiceChannelDisconnectedP2P"
    type="notifytip">
-[VOICE_CHANNEL_NAME] has ended the call.  You will now be reconnected to spatial voice chat.
+[VOICE_CHANNEL_NAME] has ended the call.  You will now be reconnected to Nearby Voice Chat.
     <unique>
       <context key="VOICE_CHANNEL_NAME"/>
     </unique>
@@ -5607,7 +5607,7 @@ You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnect
    icon="notifytip.tga"
    name="P2PCallDeclined"
    type="notifytip">
-[VOICE_CHANNEL_NAME] has declined your call.  You will now be reconnected to spatial voice chat.
+[VOICE_CHANNEL_NAME] has declined your call.  You will now be reconnected to Nearby Voice Chat.
     <unique>
       <context key="VOICE_CHANNEL_NAME"/>
     </unique>
@@ -5617,7 +5617,7 @@ You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnect
    icon="notifytip.tga"
    name="P2PCallNoAnswer"
    type="notifytip">
-[VOICE_CHANNEL_NAME] is not available to take your call.  You will now be reconnected to spatial voice chat.
+[VOICE_CHANNEL_NAME] is not available to take your call.  You will now be reconnected to Nearby Voice Chat.
     <unique>
       <context key="VOICE_CHANNEL_NAME"/>
     </unique>
@@ -5627,7 +5627,7 @@ You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnect
    icon="notifytip.tga"
    name="VoiceChannelJoinFailed"
    type="notifytip">
-Failed to connect to [VOICE_CHANNEL_NAME], please try again later.  You will now be reconnected to spatial voice chat.
+Failed to connect to [VOICE_CHANNEL_NAME], please try again later.  You will now be reconnected to Nearby Voice Chat.
     <unique>
       <context key="VOICE_CHANNEL_NAME"/>
     </unique>
diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
index 5c8a8ee2081ad20d78d6066edc58d5e8d3492240..3842c2a8db833e48184703e5ae7ba5965e67ddcf 100644
--- a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
@@ -61,6 +61,7 @@
      layout="topleft"
      left_delta="0"
      name="Block object by name..."
+     tool_tip="Pick an object to block by name"
      top_pad="4"
      width="210" >
         <button.commit_callback
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index a902f50582431ce571deb58fa79fdc83fb3bcd3b..d2933c0c0eac0925b9fd1cc43ca1faa498963ec8 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -94,7 +94,7 @@
          min_height="28"
          width="82"
          top_delta="0"
-         min_width="82"
+         min_width="52"
          name="gesture_panel"
          user_resize="false">
          <gesture_combo_box
@@ -105,9 +105,13 @@
           name="Gesture"
           left="0"
           top="3"
-         use_ellipses="true"
           width="82"
-          tool_tip="Shows/hides gestures"/>
+          tool_tip="Shows/hides gestures">
+             <gesture_combo_box.drop_down_button
+              font="SansSerifSmall"
+              pad_right="10" 
+              use_ellipses="true" />
+         </gesture_combo_box>
         </layout_panel>
 		 <icon
          auto_resize="false"
@@ -131,7 +135,7 @@
          name="movement_panel"
          user_resize="false"
          width="80"
-         min_width="80">
+         min_width="49">
             <button
              follows="left|right"
              height="23"
@@ -167,7 +171,7 @@
          height="28"
          layout="topleft"
          min_height="28"
-         min_width="80"
+         min_width="49"
          name="cam_panel"
          user_resize="false"
          width="80">
diff --git a/indra/newview/skins/default/xui/en/panel_chat_item.xml b/indra/newview/skins/default/xui/en/panel_chat_item.xml
index 05b04bbf8eac97e57d39549695672ddf81cce3db..d8a0c877fdff1d88ffca97dea12f1ec3ca01ed8d 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_item.xml
@@ -15,19 +15,13 @@
       		color="1 1 1 1" enabled="true" name="avatar_icon"
 		  />
     	<text
-        	width="130" top="25" left="40" height="20" follows="left|right|top"
+        	width="150" top="25" left="40" height="20" follows="left|right|top"
         	font="SansSerifBigBold" text_color="white" word_wrap="false" use_ellipses="true"
         	mouse_opaque="true" name="sender_name" >
 	      Jerry Knight
     	</text>
-    	<icon top="22" left="170" width="15" height="15" follows="top|right"
+    	<icon top="22" left="215" width="15" height="15" follows="top|right"
       		image_name="icn_voice-pvtfocus.tga" visible="false" name="msg_inspector"/>
-    	<icon top="22" left="190" width="10" height="10" follows="top|right"
-      		image_name="speaking_indicator.tga"	name="msg_icon"/>
-    	<text width="35" top="22" left="205" height="20" follows="right|top"
-        		text_color="white" word_wrap="true" mouse_opaque="true" name="msg_time" >
-      		10:32
-		</text>
 	</panel>
 	<text_chat
       top="-35" left="10" right="-10" height="120" follows="left|right|bottom"
diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml
index 984a799b41a8ac8991fc18ef477dd355c820040d..d22d58329c476e22bb4d7c4a716e3e5036920639 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml
@@ -3,7 +3,7 @@
  background_visible="true"
  bevel_style="in"
  bg_alpha_color="0 0 0 0"
- height="135"
+ height="90"
  label="instant_message"
  layout="topleft"
  left="0"
@@ -12,7 +12,13 @@
  width="305">
     <string
      name="message_max_lines_count"
-     value="4" />
+     value="7" />
+    <string
+     name="subject_font"
+     value="SANSSERIF_BIG" />
+    <string
+     name="date_font"
+     value="SANSSERIF" />
     <panel
      background_visible="true"
      bevel_style="in"
@@ -47,46 +53,27 @@
          value="Sender Name / Group Name"
          width="230" />
     </panel>
-    <text
-     follows="top"
-     font="SansSerifBig"
-     height="20"
-     layout="topleft"
-     left="25"
-     name="subject"
-     text_color="GroupNotifyTextColor"
-     top="40"
-     use_ellipses="true"
-     value="subject"
-     width="270"
-     wrap="true" />
-    <text
-     follows="top"
-     font="SansSerif"
-     height="20"
-     layout="topleft"
-     left="25"
-     name="datetime"
-     text_color="GroupNotifyTextColor"
-     top="80"
-     use_ellipses="true"
-     value="datetime"
-     width="270"
-     wrap="true" />
-    <text
+    <text_editor
+     allow_html="true"
+     enabled="true"
      follows="left|top|bottom|right"
      height="0"
      layout="topleft"
      left="25"
+     max_length="2147483647"
      name="message"
+     parse_highlights="true"
+     read_only="true"
      text_color="GroupNotifyTextColor"
-     top="100"
+     top="40"
+     type="string"
      use_ellipses="true"
      value="message"
-     width="270"
-     wrap="true" />
+     width="270" 
+	 word_wrap="true" >
+    </text_editor>
     <icon
-     bottom="122"
+     bottom="60"
      follows="left|bottom|right"
      height="15"
      layout="topleft"
@@ -95,7 +82,7 @@
      name="attachment_icon"
      width="15" />
     <text
-     bottom="122"
+     bottom="60"
      follows="left|bottom|right"
      font="SansSerif"
      height="15"
@@ -104,9 +91,10 @@
      name="attachment"
      text_color="GroupNotifyTextColor"
      value="Attachment"
-     width="280" />
+     use_ellipses="true"
+     width="250" />
     <button
-     bottom="130"
+     bottom="85"
      follows="bottom"
      height="20"
      label="OK"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index cb5ec153875c28f18e5b9eae6c1934a57283ebbc..a9a02e8fc710c68e0caf2ddd478e42332aaa9f33 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -27,6 +27,7 @@
      border_visible="false"
      bottom="600"
      follows="all"
+	 hide_loading="true"
      left="0"
      name="login_html"
      start_url=""
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 9fac7d34f75f6b2ca260ccef711f9b0039cc9239..a370b450e9adf582c7cd54c3975755c1ad672df3 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -107,7 +107,10 @@ background_visible="true"
                  name="add_friend_btn"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
-                 width="18" />
+                 width="18">
+               <commit_callback
+                  function="People.addFriend" />
+             </button>
             </panel>
         </panel>
         <panel
@@ -325,7 +328,10 @@ background_visible="true"
                  name="add_friend_btn"
                  top_delta="0"
                  tool_tip="Add selected resident to your friends List"
-                 width="18" />
+                 width="18">
+                <commit_callback
+                   function="People.addFriend" />
+              </button>
             </panel>
         </panel>
     </tab_container>
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 9cfbed432ae38d52ea7fad7797dbabf9053ace91..962dad33633750ae2b42756385b78a3df4177a58 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -14,7 +14,18 @@
  <string
   name="no_classifieds"
   value="No Classifieds" />
-     
+ <text
+  type="string"
+  follows="all"
+  height="535"
+  layout="topleft"
+  left="6"
+  name="empty_picks_panel_text"
+  top="10"
+  visible="false" 
+  width="313">
+   There are no any picks/classifieds here
+ </text>
  <accordion
   follows="all"
   height="465"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index a6ca73d4b7f48735e494dfd8df3332ac3fccbd84..6bb937e3c646d2614e651ea73051b8531a0c592b 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -66,11 +66,7 @@
          label="Italiano (Italian) - Beta"
          name="Italian"
          value="it" />
-        <combo_box.item
-         enabled="true"
-         label="Magyar (Hungarian) - Beta"
-         name="Hungarian"
-         value="hu" />
+
         <combo_box.item
          enabled="true"
          label="Nederlands (Dutch) - Beta"
@@ -86,36 +82,16 @@
          label="Portugués (Portuguese) - Beta"
          name="Portugese"
          value="pt" />
-        <combo_box.item
-         enabled="true"
-         label="Русский (Russian) - Beta"
-         name="Russian"
-         value="ru" />
-        <combo_box.item
-         enabled="true"
-         label="Türkçe (Turkish) - Beta"
-         name="Turkish"
-         value="tr" />
-        <combo_box.item
-         enabled="true"
-         label="Українська (Ukrainian) - Beta"
-         name="Ukrainian"
-         value="uk" />
-        <combo_box.item
-         enabled="true"
-         label="中文 (简体) (Chinese) - Beta"
-         name="Chinese"
-         value="zh" />
+
+
+
+
         <combo_box.item
          enabled="true"
          label="日本語 (Japanese) - Beta"
          name="(Japanese)"
          value="ja" />
-        <combo_box.item
-         enabled="true"
-         label="한국어 (Korean) - Beta"
-         name="(Korean)"
-         value="ko" />
+
         <combo_box.item
          enabled="true"
          label="Test Language"
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 9cf0bd26d882897d56ef147c4d791b47f56903cf..5cabae5fa0111691c609627757a0fbff624ac5a5 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -169,12 +169,12 @@
      decimal_digits="0"
      follows="left|top"
      height="15"
-     increment="10"
-     initial_value="50"
+     increment="16"
+     initial_value="512"
      layout="topleft"
      left_delta="150"
-     max_val="1000"
-     min_val="10"
+     max_val="1024"
+     min_val="32"
      name="cache_size"
      top_delta="-1"
      width="180" />
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 3bdd7114eedaba636a4f5c019979aee0ea0e2554..98025e28db84736afab3f161352cb2ce4e66f223 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
@@ -2,19 +2,18 @@
 <panel
 	follows="left|right|top|bottom"
 	name="MediaControls"
-	bg_alpha_color="1 1 1 0"
+	background_visible="false"
 	height="160"
 	layout="topleft"
 	mouse_opaque="false"
 	width="800">
+  <string name="control_background_image_name">Inspector_Background</string>
   <panel
 	  name="media_region"
 	  bottom="125"
 	  follows="left|right|top|bottom"
 	  layout="topleft"
-	  left="20"
 	  mouse_opaque="false"
-	  right="-20"
 	  top="20" />
   <layout_stack
 	  follows="left|right|bottom"
@@ -33,6 +32,7 @@
 		name="media_progress_indicator"
 		height="22"
 		layout="topleft"
+		visible="false"
 		left="0"
 		top="0"
 		auto_resize="false"
@@ -64,6 +64,7 @@
 	  top="128">
 	<!-- outer layout_panels center the inner one -->
 	<layout_panel
+		name="left_bookend"
 		width="0"
 		layout="topleft"
 		user_resize="false" />
@@ -76,13 +77,18 @@
 		width="22"
 		top="4">
 	  <button
+		  image_overlay="Arrow_Left_Off"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  auto_resize="false"
 		  height="22"
-		  image_selected="media_btn_back.png"
-		  image_unselected="media_btn_back.png"
 		  layout="topleft"
 		  tool_tip="Step back"
 		  width="22"
+		  left="0"
 		  top_delta="4">
 		<button.commit_callback
 			function="MediaCtrl.Back" />
@@ -94,37 +100,25 @@
 		user_resize="false"
 		layout="topleft"
 		top="10"
-		min_width="17"
-		width="17">
+		min_width="22"
+		width="22">
 	  <button
+		  image_overlay="Arrow_Right_Off"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  height="22"
-		  image_selected="media_btn_forward.png"
-		  image_unselected="media_btn_forward.png"
 		  layout="topleft"
 		  tool_tip="Step forward"
 		  top_delta="0"
-		  min_width="17"
-		  width="17">
+		  min_width="22"
+		  width="22">
 		<button.commit_callback
 			function="MediaCtrl.Forward" />
 	  </button>
 	</layout_panel>
-<!--
-	<panel
-		height="22"
-		layout="topleft"
-		auto_resize="false"
-		min_width="3"
-		width="3">
-	  <icon
-		  height="22"
-		  image_name="media_panel_divider.png"
-		  layout="topleft"
-		  top="0"
-		  min_width="3"
-		  width="3" />
-	</panel>
--->
 	<layout_panel
 		name="home"
 		auto_resize="false"
@@ -134,11 +128,15 @@
 		min_width="22"
 		width="22">
 	  <button
-		  height="22"
-		  image_selected="media_btn_home.png"
-		  image_unselected="media_btn_home.png"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_overlay="Home_Off"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  layout="topleft"
 		  tool_tip="Home page"
+		  height="22"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -153,10 +151,15 @@
 		top="2"
 		min_width="22"
 		width="22">
+	  <!-- The stop button here is temporary artwork -->
 	  <button
+		  image_overlay="media_btn_stoploading.png"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  height="22"
-		  image_selected="button_anim_stop.tga"
-		  image_unselected="button_anim_stop.tga"
 		  layout="topleft"
 		  tool_tip="Stop media"
 		  min_width="22"
@@ -165,22 +168,6 @@
 			function="MediaCtrl.Stop" />
 	  </button>
 	</layout_panel>
-<!--
-	<panel
-		height="22"
-		layout="topleft"
-		auto_resize="false"
-		min_width="3"
-		width="3">
-	  <icon
-		  height="22"
-		  image_name="media_panel_divider.png"
-		  layout="topleft"
-		  top="0"
-		  min_width="3"
-		  width="3" />
-	</panel>
--->
 	<layout_panel
 		name="reload"
 		auto_resize="false"
@@ -191,8 +178,12 @@
 		width="22">
 	  <button
 		  height="22"
-		  image_selected="media_btn_reload.png"
-		  image_unselected="media_btn_reload.png"
+		  image_overlay="Refresh_Off"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  layout="topleft"
 		  tool_tip="Reload"
 		  min_width="22"
@@ -211,8 +202,12 @@
 		width="22">
 	  <button
 		  height="22"
-		  image_selected="media_btn_stoploading.png"
-		  image_unselected="media_btn_stoploading.png"
+		  image_overlay="StopReload_Off"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  layout="topleft"
 		  tool_tip = "Stop loading"
 		  min_width="22"
@@ -230,11 +225,15 @@
 		min_width="22"
 		width="22">
 	  <button
-		  height="22"
-		  image_selected="button_anim_play.tga"
-		  image_unselected="button_anim_play.tga"
+		  image_overlay="Play_Off"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  layout="topleft"
 		  tool_tip = "Play media"
+		  height="22"
 		  min_width="22"
 		  width="22">
 		<button.commit_callback
@@ -250,10 +249,14 @@
 		min_width="22"
 		width="22">
 	  <button
-		  height="22"
-		  image_selected="button_anim_pause.tga"
-		  image_unselected="button_anim_pause.tga"
+		  image_overlay="Pause_Off"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  layout="topleft"
+		  height="22"
 		  tool_tip = "Pause media">
 		<button.commit_callback
 			function="MediaCtrl.Pause" />
@@ -264,7 +267,7 @@
 		name="media_address"
 		auto_resize="true"
 		user_resize="false"
-		height="22"
+		height="24"
 		follows="left|right|bottom"
 		layout="topleft"
 		width="190"
@@ -294,31 +297,43 @@ function="MediaCtrl.CommitURL" />
 			function="MediaCtrl.CommitURL"/>
 	  </line_editor>
 	  <layout_stack
+		  name="media_address_url_icons"
 		  animate="false"
 		  follows="right"
-		  width="32"
-		  min_width="32"
-		  height="16"
-		  top="3"
-		  orientation="horizontal"
-		  left_pad="-38">
-		<icon
-			name="media_whitelist_flag"
-			follows="top|right"
-			height="16"
-			image_name="smicon_warn.tga"
+		  height="20"
+		  width="38"
+		  right="-2"
+		  top="-1"
+		  orientation="horizontal">
+		<layout_panel
 			layout="topleft"
-			tool_tip="White List enabled"
-			min_width="16"
-			width="16" />
-		<icon
-			name="media_secure_lock_flag"
-			height="16"
-			image_name="inv_item_eyes.tga"
+			width="16"
+			auto_resize="false"
+			user_resize="false">
+		  <icon
+			  name="media_whitelist_flag"
+			  follows="top|right"
+			  height="16"
+			  image_name="Flag"
+			  layout="topleft"
+			  tool_tip="White List enabled"
+			  min_width="16"
+			  width="16" />
+		</layout_panel>
+		<layout_panel
 			layout="topleft"
-			tool_tip="Secured Browsing"
-			min_width="16"
-			width="16" />
+			width="16"
+			auto_resize="false"
+			user_resize="false">
+		  <icon
+			  name="media_secure_lock_flag"
+			  height="16"
+			  image_name="Lock2"
+			  layout="topleft"
+			  tool_tip="Secured Browsing"
+			  min_width="16"
+			  width="16" />
+		</layout_panel>
 	  </layout_stack>
 	</layout_panel>
 	<layout_panel
@@ -337,6 +352,7 @@ function="MediaCtrl.CommitURL" />
 		  initial_value="0.5"
 		  layout="topleft"
 		  tool_tip="Movie play progress"
+		  top="8"
 		  min_width="100"
 		  width="200">
 		<slider_bar.commit_callback
@@ -348,43 +364,55 @@ function="MediaCtrl.CommitURL" />
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
-		height="24"
-		min_width="24"
-		width="24">
+		height="22"
+		min_width="22"
+		width="22">
+	  <!-- Note: this isn't quite right either...the mute button is not the -->
+	  <!-- same as the others because it can't have the "image_overlay" be  -->
+	  <!-- two different images.  -->
 	  <button
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="AudioMute_Off"
+		  image_unselected="Audio_Off"
+		  hover_glow_amount="0.15"
 		  name="media_volume_button"
 		  height="22"
-		  image_selected="icn_speaker-muted_dark.tga"
-		  image_unselected="icn_speaker_dark.tga"
 		  is_toggle="true"
 		  layout="topleft"
 		  scale_image="false" 
 		  tool_tip="Mute This Media"
-		  top_delta="22"
-		  min_width="24"
-		  width="24" >
+		  top_delta="18"
+		  min_width="22"
+		  width="22" >
 		<button.commit_callback
 			function="MediaCtrl.ToggleMute" />
 	  </button>
 	</layout_panel>
+	<!-- We don't have a design yet for "volume", so this is a temporary -->
+	<!-- solution.  See DEV-42827. -->
 	<layout_panel
 		name="volume_up"
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
-		min_width="20"
+		min_width="14"
 		height="14"
-		width="20">
+		width="14">
 	  <button
-		  top="-3"
+		  image_overlay="media_btn_scrollup.png"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
+		  top="-5"
 		  height="14"
-		  image_selected="media_btn_scrollup.png"
-		  image_unselected="media_btn_scrollup.png"
 		  layout="topleft"
 		  tool_tip="Volume up"
 		  scale_image="true"
-		  min_width="20"
-		  width="20" >
+		  min_width="14"
+		  width="14" >
 		<button.commit_callback
 			function="MediaCtrl.CommitVolumeUp" />
 	  </button>
@@ -394,26 +422,32 @@ function="MediaCtrl.CommitURL" />
 		auto_resize="false"
 		user_resize="false"
 		layout="topleft"
-		min_width="20"
+		min_width="14"
 		height="14"
-		width="20">
+		width="14">
 	  <button
-		  top="-5"
-		  height="14"
-		  image_selected="media_btn_scrolldown.png"
-		  image_unselected="media_btn_scrolldown.png"
+		  image_overlay="media_btn_scrolldown.png"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  layout="topleft"
 		  tool_tip="Volume down"
 		  scale_image="true"
-		  min_width="20"
-		  width="20">
+		  top="-5"
+		  height="14"
+		  min_width="14"
+		  width="14">
 		<button.commit_callback
 			function="MediaCtrl.CommitVolumeDown" />
 	  </button>
 	</layout_panel>
 	<!-- Scroll pad -->
-<!--
-disabled
+	<!-- This was removed from the design, but is still here because it is --> 
+	<!-- complex, and recreating it would be hard.  In case the design -->
+	<!-- changes, here it lies: --> 
+	<!--
 	<layout_panel
 		name="media_panel_scroll"
 		auto_resize="false"
@@ -479,8 +513,21 @@ disabled
 		  min_width="8"
 		  width="8" />
 	</layout_panel>
-disabled
--->
+	-->
+	<panel
+		height="28"
+		layout="topleft"
+		auto_resize="false"
+		min_width="3"
+		width="3">
+	  <icon
+		  height="26"
+		  image_name="media_panel_divider.png"
+		  layout="topleft"
+		  top="0"
+		  min_width="3"
+		  width="3" />
+	</panel>
 	<layout_panel
 		name="zoom_frame"
 		auto_resize="false"
@@ -490,9 +537,13 @@ disabled
 		min_width="22"
 		width="22">
 	  <button
+		  image_overlay="Zoom_Off"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  height="22"
-		  image_selected="media_btn_optimalzoom.png"
-		  image_unselected="media_btn_optimalzoom.png"
 		  layout="topleft"
 		  tool_tip="Zoom into media"
 		  min_width="22"
@@ -508,10 +559,15 @@ disabled
 		layout="topleft"
 		min_width="21"
 		width="21" >
+	  <!-- There is no "Zoom out" icon, so we use this temporarily -->
 	  <button
+		  image_overlay="ForwardArrow_Off"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  height="22"
-		  image_selected="media_btn_done.png"
-		  image_unselected="media_btn_done.png"
 		  layout="topleft"
 		  tool_tip ="Zoom Back"
 		  top_delta="-4"
@@ -520,22 +576,6 @@ disabled
 			function="MediaCtrl.Close" />
 	  </button>
 	</layout_panel>
-<!--
-	<panel
-		height="22"
-		layout="topleft"
-		auto_resize="false"
-		min_width="3"
-		width="3">
-	  <icon
-		  height="22"
-		  image_name="media_panel_divider.png"
-		  layout="topleft"
-		  top="0"
-		  min_width="3"
-		  width="3" />
-	</panel>
--->
 	<layout_panel
 		name="new_window"
 		auto_resize="false"
@@ -544,35 +584,25 @@ disabled
 		min_width="22"
 		width="22">
 	  <button
+		  image_overlay="ExternalBrowser_Off"
+		  image_disabled="PushButton_Disabled"
+		  image_disabled_selected="PushButton_Disabled"
+		  image_selected="PushButton_Selected"
+		  image_unselected="PushButton_Off"
+		  hover_glow_amount="0.15"
 		  height="22"
-		  image_selected="media_btn_newwindow.png"
-		  image_unselected="media_btn_newwindow.png"
 		  layout="topleft"
 		  tool_tip = "Open URL in browser"
-		  top_delta="-3"
+		  top_delta="-4"
 		  min_width="24"
 		  width="24" >
 		<button.commit_callback
 			function="MediaCtrl.Open" />
 	  </button>
 	</layout_panel>
-<!--
-	<panel
-		height="22"
-		layout="topleft"
-		auto_resize="false"
-		min_width="3"
-		width="3">
-	  <icon
-		  height="22"
-		  image_name="media_panel_divider.png"
-		  layout="topleft"
-		  top="0"
-		  min_width="3"
-		  width="3" />
-	</panel>
--->
+	<!-- bookend panel -->
 	<layout_panel
+		name="right_bookend"
 		width="0"
 		layout="topleft"
 		user_resize="false" />
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 566fc95230b3a7cbd52aa00df9b1e64f00f793e8..98390758629ebed7bd10c2265463b0640bae72bf 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
@@ -7,6 +7,24 @@
  layout="topleft"
  name="home_tab"
  width="333">
+  <scroll_container
+   color="DkGray"
+   follows="all"
+   layout="topleft"
+   left="0"
+   name="profile_scroll"
+   opaque="true"
+   height="560"
+   width="333"
+   top="0">
+  <panel
+   background_visible="true"
+   height="560"
+   layout="topleft"
+   name="profile_scroll_panel"
+   top="0"
+   left="0"
+   width="311">
     <panel
      background_visible="true"
      bg_alpha_color="DkGray2"
@@ -242,4 +260,6 @@
             Browse your inventory.
         </text>
     </panel>
+  </panel>
+  </scroll_container>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 1171a8f0b5d8a20ae6630a11778e873c3d706d83..8fc78c670195d4b858b56db1d46c4c15b54a1852 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -46,14 +46,24 @@
      font="SansSerifSmall"
      image_selected="BuyArrow_Over"
      image_unselected="BuyArrow_Off"
-	image_pressed="BuyArrow_Press"
+     image_pressed="BuyArrow_Press"
      height="16"
-     left="-220"
+     left="-245"
      name="buycurrency"
      pad_right="22px"
      tool_tip="My Balance: Click to buy more L$"
      top="1"
      width="117" />
+    <button
+     follows="right|bottom"
+     height="16"
+     image_selected="parcel_drk_VoiceNo"
+     image_unselected="parcel_drk_Voice"
+     is_toggle="true"
+     left_pad="15"
+     top="1"
+     name="volume_btn"
+     width="16" />
     <text
      type="string"
      length="1"
@@ -61,9 +71,9 @@
      follows="right|bottom"
      halign="right"
      height="16"
-     top="3"
+     top="5"
      layout="topleft"
-     left_pad="15"
+     left_pad="7"
      name="TimeText"
      text_color="TimeTextColor"
      tool_tip="Current time (Pacific)"
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
index 1f67a0a7328bbf6eeda16fd0bc0dffad078f9377..4ab6175805adcf3194eba88d1a8a43197848051f 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
@@ -26,7 +26,7 @@
      name="selected_icon"
      top="0"
      visible="false"
-     width="320" />
+     width="380" />
     <icon
      height="16"
      follows="top|left"
@@ -46,7 +46,7 @@
      text_color="white"
      top="4"
      value="..."
-     width="242" />
+     width="330" />
     <button
      follows="right"
      height="20"
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 7e5c30a97897b115b84a6ba3b15ea4ef7c39642d..64cfdf27042e41538d0376c4ca8c8785abbc4066 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -221,10 +221,12 @@ def disable_manifest_check(self):
 
     def construct(self):
         super(WindowsManifest, self).construct()
+
+        self.enable_crt_manifest_check()
+
         # Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.
         self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())
 
-        self.enable_crt_manifest_check()
 
         # Plugin host application
         self.path(os.path.join(os.pardir,
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index d987915bb8b0a7772a83591f6aeaa0ecd2e4fc49..27cb52a507fecef9d60a4a242f72381936a56547 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -197,7 +197,7 @@ LLMediaPluginTest::LLMediaPluginTest( int app_window, int window_width, int wind
 	{
 		LLError::initForApplication(".");
 		LLError::setDefaultLevel(LLError::LEVEL_INFO);
-//		LLError::setTagLevel("Plugin", LLError::LEVEL_DEBUG);
+		//LLError::setTagLevel("Plugin", LLError::LEVEL_DEBUG);
 	}
 
 	// lots of randomness in this app
@@ -223,7 +223,6 @@ LLMediaPluginTest::LLMediaPluginTest( int app_window, int window_width, int wind
 	resetView();
 
 	// initial media panel
-
 	const int num_initial_panels = 1;
 	for( int i = 0; i < num_initial_panels; ++i )
 	{
@@ -1460,6 +1459,9 @@ std::string LLMediaPluginTest::mimeTypeFromUrl( std::string& url )
 	if ( url.find( ".txt" ) != std::string::npos )	// Apple Text descriptors
 		mime_type = "video/quicktime";
 	else
+	if ( url.find( ".mp3" ) != std::string::npos )	// Apple Text descriptors
+		mime_type = "video/quicktime";
+	else
 	if ( url.find( "example://" ) != std::string::npos )	// Example plugin
 		mime_type = "example/example";
 
diff --git a/install.xml b/install.xml
index ff9fa805003a2b597b430cce38a8f3fcb6e730da..de5bdc4b377d3a3815a377952e62ce12d79edb83 100644
--- a/install.xml
+++ b/install.xml
@@ -132,9 +132,9 @@
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>70b51d0cc93c305026e4e2778cde6d19</string>
+            <string>f5cf8d121b26f2e7944f7e63cdbff04d</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.6.0-windows-20090722.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.6.0-windows-20091105.tar.bz2</uri>
           </map>
         </map>
       </map>
@@ -254,9 +254,9 @@
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>8dc4e818c2d6fbde76e9a5e34f4ffa72</string>
+            <string>53e5ab7affff7121a5af2f82b4d58b54</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.19.6-windows-20090917b.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.19.6-windows-20091016.tar.bz2</uri>
           </map>
         </map>
       </map>