diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 3ecab90756417f50610f230d8ebdc9d4bf42dbb4..88a1652671b213c7690efe8232b12fcea9be6b7d 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -101,6 +101,7 @@ set(llui_SOURCE_FILES
     lluictrlfactory.cpp
     lluiimage.cpp
     lluistring.cpp
+    lluitextutil.cpp
     llundo.cpp
     llurlaction.cpp
     llurlentry.cpp
@@ -197,6 +198,7 @@ set(llui_HEADER_FILES
     llui.h
     lluiimage.h
     lluistring.h
+    lluitextutil.h
     llundo.h
     llurlaction.h
     llurlentry.h
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index 596da782ce8852efee16eac65f7759ef80ccb6b0..0db2dca6155cabca4628c1b1128b0dd06487e245 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -32,12 +32,13 @@
 
 #include "linden_common.h"
 
-#include "lluictrl.h"
-#include "llscrollbar.h"
 #include "llaccordionctrltab.h"
-#include "lllocalcliprect.h"
 
+#include "lllocalcliprect.h"
+#include "llscrollbar.h"
 #include "lltextbox.h"
+#include "lluictrl.h"
+#include "lluitextutil.h"
 
 static const std::string DD_BUTTON_NAME = "dd_button";
 static const std::string DD_TEXTBOX_NAME = "dd_textbox";
@@ -72,7 +73,8 @@ class LLAccordionCtrlTab::LLAccordionCtrlTabHeader : public LLUICtrl
 
 	virtual BOOL postBuild();
 
-	void	setTitle(const std::string& title);
+	std::string getTitle();
+	void	setTitle(const std::string& title, const std::string& hl);
 
 	virtual void onMouseEnter(S32 x, S32 y, MASK mask);
 	virtual void onMouseLeave(S32 x, S32 y, MASK mask);
@@ -146,10 +148,28 @@ BOOL LLAccordionCtrlTab::LLAccordionCtrlTabHeader::postBuild()
 	return TRUE;
 }
 
-void	LLAccordionCtrlTab::LLAccordionCtrlTabHeader::setTitle(const std::string& title)
+std::string LLAccordionCtrlTab::LLAccordionCtrlTabHeader::getTitle()
 {
 	if(mHeaderTextbox)
-		mHeaderTextbox->setText(title);
+	{
+		return mHeaderTextbox->getText();
+	}
+	else
+	{
+		return LLStringUtil::null;
+	}
+}
+
+void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::setTitle(const std::string& title, const std::string& hl)
+{
+	if(mHeaderTextbox)
+	{
+		LLTextUtil::textboxSetHighlightedVal(
+			mHeaderTextbox,
+			LLStyle::Params(),
+			title,
+			hl);
+	}
 }
 
 void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::draw()
@@ -436,12 +456,25 @@ void LLAccordionCtrlTab::setAccordionView(LLView* panel)
 	addChild(panel,0);
 }
 
-void LLAccordionCtrlTab::setTitle(const std::string& title)
+std::string LLAccordionCtrlTab::getTitle()
+{
+	LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
+	if (header)
+	{
+		return header->getTitle();
+	}
+	else
+	{
+		return LLStringUtil::null;
+	}
+}
+
+void LLAccordionCtrlTab::setTitle(const std::string& title, const std::string& hl)
 {
 	LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
 	if (header)
 	{
-		header->setTitle(title);
+		header->setTitle(title, hl);
 	}
 }
 
@@ -903,5 +936,3 @@ BOOL LLAccordionCtrlTab::handleToolTip(S32 x, S32 y, MASK mask)
 	}
 	return LLUICtrl::handleToolTip(x, y, mask);
 }
-
-
diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h
index de254ed3ebb2a7ec2096f81acbb15fcf17fc97f2..f5b7fd0af6ee2c451fbf89d3908c99632e753620 100644
--- a/indra/llui/llaccordionctrltab.h
+++ b/indra/llui/llaccordionctrltab.h
@@ -113,8 +113,10 @@ class LLAccordionCtrlTab : public LLUICtrl
 	void		setAccordionView(LLView* panel);
 	LLView*		getAccordionView() { return mContainerPanel; };
 
-	// Set text in LLAccordionCtrlTabHeader
-	void setTitle(const std::string& title);
+	std::string getTitle();
+
+	// Set text and highlight substring in LLAccordionCtrlTabHeader
+	void setTitle(const std::string& title, const std::string& hl = LLStringUtil::null);
 
 	boost::signals2::connection setFocusReceivedCallback(const focus_signal_t::slot_type& cb);
 	boost::signals2::connection setFocusLostCallback(const focus_signal_t::slot_type& cb);
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 80e8b94cccd21294740c2526bb8b70efcfaa10f8..bcaba3492139539f23935a11e18dbe7094bef39d 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -179,7 +179,7 @@ struct LLFoundData
 {
 	LLFoundData() :
 		mAssetType(LLAssetType::AT_NONE),
-		mWearableType(LLWearableType::WT_NONE),
+		mWearableType(LLWearableType::WT_INVALID),
 		mWearable(NULL) {}
 
 	LLFoundData(const LLUUID& item_id,
@@ -392,7 +392,7 @@ class RecoveredItemLinkCB: public LLInventoryCallback
 						  linked_item->getAssetUUID(),
 						  linked_item->getName(),
 						  linked_item->getType(),
-						  linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_NONE
+						  linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_INVALID
 						  );
 				found.mWearable = mWearable;
 				mHolder->mFoundList.push_front(found);
@@ -1115,7 +1115,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF()
 							  linked_item->getAssetUUID(),
 							  linked_item->getName(),
 							  linked_item->getType(),
-							  linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_NONE
+							  linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_INVALID
 				);
 
 #if 0
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index dfb213716c336eef38aff01abab46108fc32a6c5..47ec5270c3ed33c3cff2cd1ed6ac0947f7b7f112 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -316,9 +316,7 @@ void LLAvatarList::refresh()
 		}
 
 		// Send refresh_complete signal.
-		std::vector<LLSD> cur_values;
-		getValues(cur_values);
-		mRefreshCompleteSignal(this, LLSD((S32)cur_values.size()));
+		mRefreshCompleteSignal(this, LLSD((S32)size(false)));
 	}
 
 	// Commit if we've added/removed items.
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 2a51eeacfcd415934c3d2fb5e1bfce098cc85948..656274cb7aaa9eb1aae2373da7f167af657ee048 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -36,12 +36,13 @@
 #include "llavataractions.h"
 #include "llavatarlistitem.h"
 
+#include "llbutton.h"
 #include "llfloaterreg.h"
+#include "lluitextutil.h"
+
 #include "llagent.h"
-#include "lloutputmonitorctrl.h"
 #include "llavatariconctrl.h"
-#include "lltextutil.h"
-#include "llbutton.h"
+#include "lloutputmonitorctrl.h"
 
 bool LLAvatarListItem::sStaticInitialized = false;
 S32 LLAvatarListItem::sLeftPadding = 0;
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 9c4aa7b9643858ce14e5aff65dbe6f191dab0b06..6897f4ee8e849ddc63455c3310bf88b1f91c03be 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -183,20 +183,6 @@ void LLSysWellChiclet::setCounter(S32 counter)
 
 	mButton->setLabel(s_count);
 
-	setNewMessagesState(counter > mCounter);
-
-	// we have to flash to 'Lit' state each time new unread message is coming.
-	if (counter > mCounter)
-	{
-		mFlashToLitTimer->flash();
-	}
-	else if (counter == 0)
-	{
-		// if notification is resolved while well is flashing it can leave in the 'Lit' state
-		// when flashing finishes itself. Let break flashing here.
-		mFlashToLitTimer->stopFlashing();
-	}
-
 	mCounter = counter;
 }
 
@@ -316,7 +302,26 @@ void LLIMWellChiclet::createMenu()
 
 void LLIMWellChiclet::messageCountChanged(const LLSD& session_data)
 {
-	setCounter(LLBottomTray::getInstance()->getTotalUnreadIMCount());
+	const LLUUID& session_id = session_data["session_id"];
+	const S32 counter = LLBottomTray::getInstance()->getTotalUnreadIMCount();
+	const bool im_not_visible = !LLFloaterReg::instanceVisible("im_container")
+		&& !LLFloaterReg::instanceVisible("impanel", session_id);
+
+	setNewMessagesState(counter > mCounter	&& im_not_visible);
+
+	// we have to flash to 'Lit' state each time new unread message is coming.
+	if (counter > mCounter && im_not_visible)
+	{
+		mFlashToLitTimer->flash();
+	}
+	else if (counter == 0)
+	{
+		// if notification is resolved while well is flashing it can leave in the 'Lit' state
+		// when flashing finishes itself. Let break flashing here.
+		mFlashToLitTimer->stopFlashing();
+	}
+
+	setCounter(counter);
 }
 
 /************************************************************************/
diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
index 498aeec682ec8121f8552d150e9ec9ba13efe16b..8d4430a9ea718c1e31ab7f37024b4145e4a8ab6d 100644
--- a/indra/newview/llcofwearables.cpp
+++ b/indra/newview/llcofwearables.cpp
@@ -46,6 +46,20 @@ static LLRegisterPanelClassWrapper<LLCOFWearables> t_cof_wearables("cof_wearable
 
 const LLSD REARRANGE = LLSD().with("rearrange", LLSD());
 
+static const LLWearableItemNameComparator WEARABLE_NAME_COMPARATOR;
+
+
+bool LLWearableItemNameComparator::doCompare(const LLPanelWearableListItem* wearable_item1, const LLPanelWearableListItem* wearable_item2) const
+{
+	std::string name1 = wearable_item1->getItemName();
+	std::string name2 = wearable_item2->getItemName();
+
+	LLStringUtil::toUpper(name1);
+	LLStringUtil::toUpper(name2);
+
+	return name1 < name2;
+}
+
 
 LLCOFWearables::LLCOFWearables() : LLPanel(),
 	mAttachments(NULL),
@@ -73,6 +87,10 @@ BOOL LLCOFWearables::postBuild()
 	mClothing->setCommitOnSelectionChange(true);
 	mBodyParts->setCommitOnSelectionChange(true);
 
+	//clothing is sorted according to its position relatively to the body
+	mAttachments->setComparator(&WEARABLE_NAME_COMPARATOR);
+	mBodyParts->setComparator(&WEARABLE_NAME_COMPARATOR);
+
 	return LLPanel::postBuild();
 }
 
@@ -164,16 +182,15 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel
 
 	if (mAttachments->size())
 	{
-		mAttachments->sort(); //*TODO by Name
+		mAttachments->sort();
 		mAttachments->notify(REARRANGE); //notifying the parent about the list's size change (cause items were added with rearrange=false)
 	}
 
 	if (mBodyParts->size())
 	{
-		mBodyParts->sort(); //*TODO by name
+		mBodyParts->sort();
+		mBodyParts->notify(REARRANGE);
 	}
-
-	mBodyParts->notify(REARRANGE);
 }
 
 //create a clothing list item, update verbs and show/hide line separator
diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h
index 32acba5a3eb6b490cedc5e8466d2ca18e6efbf0c..612bb103d210eb3b723adcb29fb9327223805f46 100644
--- a/indra/newview/llcofwearables.h
+++ b/indra/newview/llcofwearables.h
@@ -40,6 +40,53 @@
 
 class LLFlatListView;
 
+
+/** Abstract comparator of wearable list items */
+class LLWearableListItemComparator : public LLFlatListView::ItemComparator
+{
+	LOG_CLASS(LLWearableListItemComparator);
+
+public:
+	LLWearableListItemComparator() {};
+	virtual ~LLWearableListItemComparator() {};
+
+	virtual bool compare(const LLPanel* item1, const LLPanel* item2) const
+	{
+		const LLPanelWearableListItem* wearable_item1 = dynamic_cast<const LLPanelWearableListItem*>(item1);
+		const LLPanelWearableListItem* wearable_item2 = dynamic_cast<const LLPanelWearableListItem*>(item2);
+
+		if (!wearable_item1 || !wearable_item2)
+		{
+			llwarning("item1 and item2 cannot be null", 0);
+			return true;
+		}
+
+		return doCompare(wearable_item1, wearable_item2);
+	}
+
+protected:
+
+	/** 
+	 * Returns true if wearable_item1 < wearable_item2, false otherwise 
+	 * Implement this method in your particular comparator.
+	 */
+	virtual bool doCompare(const LLPanelWearableListItem* wearable_item1, const LLPanelWearableListItem* wearable_item2) const = 0;
+};
+
+
+class LLWearableItemNameComparator : public LLWearableListItemComparator
+{
+	LOG_CLASS(LLWearableItemNameComparator);
+
+public:
+	LLWearableItemNameComparator() {};
+	virtual ~LLWearableItemNameComparator() {};
+
+protected:
+	virtual bool doCompare(const LLPanelWearableListItem* wearable_item1, const LLPanelWearableListItem* wearable_item2) const;
+};
+
+
 /**
  * Adaptor between LLAccordionCtrlTab and LLFlatListView to facilitate communication between them 
  * (notify, notifyParent) regarding size changes of a list and selection changes across accordion tabs.
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index eba4cdfa310f443539acaa7b53ffe9def956ac2a..2ae11aa2b54fe04bc8afde597bcd60cda93541b0 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -846,16 +846,16 @@ void LLFolderView::clearSelection()
 	mSelectThisID.setNull();
 }
 
-BOOL LLFolderView::getSelectionList(std::set<LLUUID> &selection) const
+std::set<LLUUID> LLFolderView::getSelectionList() const
 {
+	std::set<LLUUID> selection;
 	for (selected_items_t::const_iterator item_it = mSelectedItems.begin(); 
 		 item_it != mSelectedItems.end(); 
 		 ++item_it)
 	{
 		selection.insert((*item_it)->getListener()->getUUID());
 	}
-
-	return (selection.size() != 0);
+	return selection;
 }
 
 BOOL LLFolderView::startDrag(LLToolDragAndDrop::ESource source)
@@ -2070,8 +2070,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)
 	}
 
 
-	std::set<LLUUID> selected_items;
-	getSelectionList(selected_items);
+	std::set<LLUUID> selected_items = getSelectionList();
 
 	LLMultiPreview* multi_previewp = NULL;
 	LLMultiProperties* multi_propertiesp = NULL;
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 38d7a47eba7fff3157d4c79fea619dab70a4e0be..0dfdbd364bda7eb0e5e5d001f85038e047134cec 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -164,7 +164,7 @@ class LLFolderView : public LLFolderViewFolder, public LLEditMenuHandler
 
 	virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items);
 
-	virtual BOOL getSelectionList(std::set<LLUUID> &selection) const;
+	virtual std::set<LLUUID> getSelectionList() const;
 
 	// make sure if ancestor is selected, descendents are not
 	void sanitizeSelection();
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index fd5fafdfe51e4d4712a7afcc2936bf836645f0b2..54e9bd5383351b089c35fa12ee819cac4f6dc2d2 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -387,6 +387,12 @@ void LLFolderViewItem::extendSelectionFromRoot(LLFolderViewItem* selection)
 	getRoot()->extendSelection(selection, NULL, selected_items);
 }
 
+std::set<LLUUID> LLFolderViewItem::getSelectionList() const
+{
+	std::set<LLUUID> selection;
+	return selection;
+}
+
 EInventorySortGroup LLFolderViewItem::getSortGroup()  const
 { 
 	return SG_ITEM; 
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 655ad89e99000bd503892d4921b3ec6da28b6fdc..57c722afa485d90b8b4bb2de5eaf2e60713eeb66 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -231,7 +231,7 @@ class LLFolderViewItem : public LLView
 	virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items){ return FALSE; }
 
 	// gets multiple-element selection
-	virtual BOOL getSelectionList(std::set<LLUUID> &selection) const {return TRUE;}
+	virtual std::set<LLUUID> getSelectionList() const;
 
 	// Returns true is this object and all of its children can be removed (deleted by user)
 	virtual BOOL isRemovable();
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 5efd99b939f7169047840de4e6a8745f91b8ed6d..3224ac6d9b8f2e1f5212c9f20438e1cddb10dae3 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -40,12 +40,12 @@
 #include "llmenugl.h"
 #include "lltextbox.h"
 #include "lltrans.h"
+#include "lluitextutil.h"
 
 // newview
 #include "llagent.h"
 #include "llgroupactions.h"
 #include "llfloaterreg.h"
-#include "lltextutil.h"
 #include "llviewercontrol.h"	// for gSavedSettings
 #include "llviewermenu.h"		// for gMenuHolder
 #include "llvoiceclient.h"
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index d25aa37e167b98d428731b0abaffd69541f70f09..3aa9d75bc0faf15d6939bf2fbb2ca6e91966f8cf 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -1104,6 +1104,21 @@ void LLIMFloater::closeHiddenIMToasts()
 		channel->closeHiddenToasts(IMToastMatcher());
 	}
 }
+// static
+void LLIMFloater::confirmLeaveCallCallback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	const LLSD& payload = notification["payload"];
+	LLUUID session_id = payload["session_id"];
+
+	LLFloater* im_floater = LLFloaterReg::findInstance("impanel", session_id);
+	if (option == 0 && im_floater != NULL)
+	{
+		im_floater->closeFloater();
+	}
+
+	return;
+}
 
 // static
 bool LLIMFloater::isChatMultiTab()
@@ -1176,7 +1191,7 @@ void	LLIMFloater::onClickCloseBtn()
 	{
 		LLSD payload;
 		payload["session_id"] = mSessionID;
-		LLNotificationsUtil::add("ConfirmLeaveCall", LLSD(), payload);
+		LLNotificationsUtil::add("ConfirmLeaveCall", LLSD(), payload, confirmLeaveCallCallback);
 		return;
 	}
 
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index d63246a5cd02b09a048b3fa73b88be1387d61972..fef178e3a248924fe69a54b4247afa5966f0b37c 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -155,6 +155,8 @@ class LLIMFloater : public LLTransientDockableFloater
 
 	static void closeHiddenIMToasts();
 
+	static void confirmLeaveCallCallback(const LLSD& notification, const LLSD& response);
+
 	LLPanelChatControlPanel* mControlPanel;
 	LLUUID mSessionID;
 	S32 mLastMessageIndex;
diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp
index 82c4d7778f47607678b43956d47a0723ecb41b4d..2fb55f4c1f08a23c52ae4c024ffefab5d63e93af 100644
--- a/indra/newview/llinventoryicon.cpp
+++ b/indra/newview/llinventoryicon.cpp
@@ -60,8 +60,8 @@ LLIconDictionary::LLIconDictionary()
 {
 	addEntry(LLInventoryIcon::ICONNAME_TEXTURE, 				new IconEntry("Inv_Texture", 		"Inv_Texture_Link"));
 	addEntry(LLInventoryIcon::ICONNAME_SOUND, 					new IconEntry("Inv_Texture", 		"Inv_Texture_Link"));
-	addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_ONLINE, 		new IconEntry("Inv_Callingcard", 	"Inv_Callingcard_Link"));
-	addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_OFFLINE, 	new IconEntry("Inv_Callingcard", 	"Inv_Callingcard_Link"));
+	addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_ONLINE, 		new IconEntry("Inv_CallingCard", 	"Inv_CallingCard_Link"));
+	addEntry(LLInventoryIcon::ICONNAME_CALLINGCARD_OFFLINE, 	new IconEntry("Inv_CallingCard", 	"Inv_CallingCard_Link"));
 	addEntry(LLInventoryIcon::ICONNAME_LANDMARK, 				new IconEntry("Inv_Landmark", 		"Inv_Landmark_Link"));
 	addEntry(LLInventoryIcon::ICONNAME_LANDMARK_VISITED, 		new IconEntry("Inv_Landmark", 		"Inv_Landmark_Link"));
 	addEntry(LLInventoryIcon::ICONNAME_SCRIPT, 					new IconEntry("Inv_Script", 		"Inv_Script_Link"));
diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp
index f48e7b39660a9027eba1dfc69a9433bddb16a56a..2d1d401cd403b0b709ef794eb29f79b48902f4d7 100644
--- a/indra/newview/llinventoryitemslist.cpp
+++ b/indra/newview/llinventoryitemslist.cpp
@@ -40,11 +40,13 @@
 // llcommon
 #include "llcommonutils.h"
 
+// llui
 #include "lliconctrl.h"
+#include "lluitextutil.h"
 
+#include "llcallbacklist.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodel.h"
-#include "lltextutil.h"
 #include "lltrans.h"
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -320,6 +322,7 @@ LLInventoryItemsList::Params::Params()
 LLInventoryItemsList::LLInventoryItemsList(const LLInventoryItemsList::Params& p)
 :	LLFlatListViewEx(p)
 ,	mNeedsRefresh(false)
+,	mPrevVisibility(false)
 {
 	// TODO: mCommitOnSelectionChange is set to "false" in LLFlatListView
 	// but reset to true in all derived classes. This settings might need to
@@ -327,6 +330,8 @@ LLInventoryItemsList::LLInventoryItemsList(const LLInventoryItemsList::Params& p
 	setCommitOnSelectionChange(true);
 
 	setNoFilteredItemsMsg(LLTrans::getString("InventoryNoMatchingItems"));
+
+	gIdleCallbacks.addFunction(idle, this);
 }
 
 // virtual
@@ -344,12 +349,31 @@ void LLInventoryItemsList::refreshList(const LLInventoryModel::item_array_t item
 	mNeedsRefresh = true;
 }
 
-void LLInventoryItemsList::draw()
+boost::signals2::connection LLInventoryItemsList::setRefreshCompleteCallback(const commit_signal_t::slot_type& cb)
 {
-	LLFlatListViewEx::draw();
-	if(mNeedsRefresh)
+	return mRefreshCompleteSignal.connect(cb);
+}
+
+void LLInventoryItemsList::doIdle()
+{
+	bool cur_visibility = getVisible();
+	if(cur_visibility != mPrevVisibility || mNeedsRefresh)
 	{
 		refresh();
+
+		mRefreshCompleteSignal(this, LLSD());
+
+		mPrevVisibility = getVisible();
+	}
+}
+
+//static
+void LLInventoryItemsList::idle(void* user_data)
+{
+	LLInventoryItemsList* self = static_cast<LLInventoryItemsList*>(user_data);
+	if ( self )
+	{	// Do the real idle
+		self->doIdle();
 	}
 }
 
diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h
index bc04eb6f5b3a4273b42418e07651a323bbb08f09..60cccc0f4f4f02f562763ebd7adc29d45615ecfc 100644
--- a/indra/newview/llinventoryitemslist.h
+++ b/indra/newview/llinventoryitemslist.h
@@ -42,6 +42,7 @@
 
 // newview
 #include "llflatlistview.h"
+#include "llviewerinventory.h"
 
 class LLIconCtrl;
 class LLTextBox;
@@ -120,6 +121,9 @@ class LLPanelInventoryListItemBase : public LLPanel
 	/* Removes item highlight */
 	/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
 
+	/** Get the name of a corresponding inventory item */
+	const std::string& getItemName() const { return mItem->getName(); }
+
 	virtual ~LLPanelInventoryListItemBase(){}
 
 protected:
@@ -208,14 +212,23 @@ class LLInventoryItemsList : public LLFlatListViewEx
 
 	void refreshList(const LLDynamicArray<LLPointer<LLViewerInventoryItem> > item_array);
 
+	boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb);
+
 	/**
-	 * Let list know items need to be refreshed in next draw()
+	 * Let list know items need to be refreshed in next doIdle()
 	 */
 	void setNeedsRefresh(bool needs_refresh){ mNeedsRefresh = needs_refresh; }
 
 	bool getNeedsRefresh(){ return mNeedsRefresh; }
 
-	/*virtual*/ void draw();
+	/**
+	 * Idle routine used to refresh the list regardless of the current list
+	 * visibility, unlike draw() which is called only for the visible list.
+	 * This is needed for example to filter items of the list hidden by closed
+	 * accordion tab.
+	 */
+	void	doIdle();						// Real idle routine
+	static void idle(void* user_data);		// static glue to doIdle()
 
 protected:
 	friend class LLUICtrlFactory;
@@ -225,7 +238,7 @@ class LLInventoryItemsList : public LLFlatListViewEx
 
 	/**
 	 * Refreshes list items, adds new items and removes deleted items. 
-	 * Called from draw() until all new items are added, ,
+	 * Called from doIdle() until all new items are added,
 	 * maximum 50 items can be added during single call.
 	 */
 	void refresh();
@@ -245,6 +258,10 @@ class LLInventoryItemsList : public LLFlatListViewEx
 	uuid_vec_t mIDs; // IDs of items that were added in refreshList().
 					 // Will be used in refresh() to determine added and removed ids
 	bool mNeedsRefresh;
+
+	bool mPrevVisibility;
+
+	commit_signal_t mRefreshCompleteSignal;
 };
 
 #endif //LL_LLINVENTORYITEMSLIST_H
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index dd1e039cb14a30a9295957bf3b9fad44a3b62e83..000bcdd265da2f9c25feb65eb062e0c616dac7d1 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -775,8 +775,7 @@ void LLInventoryPanel::doCreate(const LLSD& userdata)
 
 bool LLInventoryPanel::beginIMSession()
 {
-	std::set<LLUUID> selected_items;
-	mFolderRoot->getSelectionList(selected_items);
+	std::set<LLUUID> selected_items = mFolderRoot->getSelectionList();
 
 	std::string name;
 	static int session_num = 1;
@@ -873,8 +872,7 @@ bool LLInventoryPanel::beginIMSession()
 
 bool LLInventoryPanel::attachObject(const LLSD& userdata)
 {
-	std::set<LLUUID> selected_items;
-	mFolderRoot->getSelectionList(selected_items);
+	std::set<LLUUID> selected_items = mFolderRoot->getSelectionList();
 
 	std::string joint_name = userdata.asString();
 	LLViewerJointAttachment* attachmentp = NULL;
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 18bd610dd9dde17c73089f2f950f199c786d5ad3..12d520342996f081fe56f2ff716b9ca09a2d4f31 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -169,6 +169,9 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 		// Setting list commit callback to monitor currently selected wearable item.
 		list->setCommitCallback(boost::bind(&LLOutfitsList::onSelectionChange, this, _1));
 
+		// Setting list refresh callback to apply filter on list change.
+		list->setRefreshCompleteCallback(boost::bind(&LLOutfitsList::onWearableItemsListRefresh, this, _1));
+
 		// Fetch the new outfit contents.
 		cat->fetch();
 
@@ -244,35 +247,9 @@ void LLOutfitsList::performAction(std::string action)
 
 void LLOutfitsList::setFilterSubString(const std::string& string)
 {
-	mFilterSubString = string;
+	applyFilter(string);
 
-	for (outfits_map_t::iterator
-			 iter = mOutfitsMap.begin(),
-			 iter_end = mOutfitsMap.end();
-		 iter != iter_end; ++iter)
-	{
-		LLAccordionCtrlTab* tab = iter->second;
-		if (tab)
-		{
-			LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*> (tab->getAccordionView());
-			if (list)
-			{
-				list->setFilterSubString(mFilterSubString);
-			}
-
-			if(!mFilterSubString.empty())
-			{
-				//store accordion tab state when filter is not empty
-				tab->notifyChildren(LLSD().with("action","store_state"));
-				tab->setDisplayChildren(true);
-			}
-			else
-			{
-				//restore accordion state after all those accodrion tab manipulations
-				tab->notifyChildren(LLSD().with("action","restore_state"));
-			}
-		}
-	}
+	mFilterSubString = string;
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -350,4 +327,102 @@ void LLOutfitsList::changeOutfitSelection(LLWearableItemsList* list, const LLUUI
 	mSelectedOutfitUUID = category_id;
 }
 
+void LLOutfitsList::onWearableItemsListRefresh(LLUICtrl* ctrl)
+{
+	if (!ctrl || mFilterSubString.empty())
+		return;
+
+	for (outfits_map_t::iterator
+			 iter = mOutfitsMap.begin(),
+			 iter_end = mOutfitsMap.end();
+		 iter != iter_end; ++iter)
+	{
+		LLAccordionCtrlTab* tab = iter->second;
+		if (tab) continue;
+
+		LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
+		if (list != ctrl) continue;
+
+		std::string title = tab->getTitle();
+		LLStringUtil::toUpper(title);
+
+		std::string cur_filter = mFilterSubString;
+		LLStringUtil::toUpper(cur_filter);
+
+		if (std::string::npos == title.find(cur_filter))
+		{
+			// hide tab if its title doesn't pass filter
+			// and it has no visible items
+			tab->setVisible(list->size() != 0);
+		}
+		else
+		{
+			tab->setTitle(tab->getTitle(), cur_filter);
+		}
+	}
+}
+
+void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
+{
+	for (outfits_map_t::iterator
+			 iter = mOutfitsMap.begin(),
+			 iter_end = mOutfitsMap.end();
+		 iter != iter_end; ++iter)
+	{
+		LLAccordionCtrlTab* tab = iter->second;
+		if (!tab) continue;
+
+		bool more_restrictive = mFilterSubString.size() < new_filter_substring.size() && !new_filter_substring.substr(0, mFilterSubString.size()).compare(mFilterSubString);
+
+		// Restore tab visibility in case of less restrictive filter
+		// to compare it with updated string if it was previously hidden.
+		if (!more_restrictive)
+		{
+			tab->setVisible(TRUE);
+		}
+
+		LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
+		if (list)
+		{
+			list->setFilterSubString(new_filter_substring);
+		}
+
+		if(mFilterSubString.empty() && !new_filter_substring.empty())
+		{
+			//store accordion tab state when filter is not empty
+			tab->notifyChildren(LLSD().with("action","store_state"));
+		}
+
+		if (!new_filter_substring.empty())
+		{
+			tab->setDisplayChildren(true);
+
+			std::string title = tab->getTitle();
+			LLStringUtil::toUpper(title);
+
+			std::string cur_filter = new_filter_substring;
+			LLStringUtil::toUpper(cur_filter);
+
+			if (std::string::npos == title.find(cur_filter))
+			{
+				// hide tab if its title doesn't pass filter
+				// and it has no visible items
+				tab->setVisible(list->size() != 0);
+			}
+			else
+			{
+				tab->setTitle(tab->getTitle(), cur_filter);
+			}
+		}
+		else
+		{
+			// restore tab title when filter is empty
+			tab->setTitle(tab->getTitle());
+
+			//restore accordion state after all those accodrion tab manipulations
+			tab->notifyChildren(LLSD().with("action","restore_state"));
+		}
+	}
+}
+
 // EOF
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index d86cf5a70330e01a6cd93f0507b4d8b4679c4785..bcb393b12a0ca4d08826c3327077968ac0ad1d50 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -94,6 +94,17 @@ class LLOutfitsList : public LLPanel, public LLInventoryObserver
 	 */
 	void changeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id);
 
+	/**
+	 * Called upon list refresh event to update tab visibility depending on
+	 * the results of applying filter to the title and list items of the tab.
+	 */
+	void onWearableItemsListRefresh(LLUICtrl* ctrl);
+
+	/**
+	 * Highlights filtered items and hides tabs which haven't passed filter.
+	 */
+	void applyFilter(const std::string& new_filter_substring);
+
 	LLInventoryCategoriesObserver* 	mCategoriesObserver;
 
 	LLAccordionCtrl*				mAccordion;
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index bcc852cf4c5832b2bc51ff2959e834ac528b4e6e..4bf4f9eac121d33c8ff8a0d11f440b382f9325af 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -993,10 +993,13 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
 	}
 	else if("create_pick" == command_name)
 	{
-		std::set<LLUUID> selection;
-		if ( mCurrentSelectedList && mCurrentSelectedList->getRootFolder()->getSelectionList(selection) )
+		if (mCurrentSelectedList)
 		{
-			return ( 1 == selection.size() && !LLAgentPicksInfo::getInstance()->isPickLimitReached() );
+			std::set<LLUUID> selection = mCurrentSelectedList->getRootFolder()->getSelectionList();
+			if (!selection.empty())
+			{
+				return ( 1 == selection.size() && !LLAgentPicksInfo::getInstance()->isPickLimitReached() );
+			}
 		}
 		return false;
 	}
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index a84280c21315969c271d9a1b81961f75c353d291..327196d9ba933efc6c9ce01cdc4757eea3ea76c8 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -1099,8 +1099,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
 		if (root)
 		{
 			can_delete = TRUE;
-			std::set<LLUUID> selection_set;
-			root->getSelectionList(selection_set);
+			std::set<LLUUID> selection_set = root->getSelectionList();
 			if (selection_set.empty()) return FALSE;
 			for (std::set<LLUUID>::iterator iter = selection_set.begin();
 				 iter != selection_set.end();
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 6a112f35ddd64f57b2cf21877aa81a958d94d8b1..de16f9d343d063abbd5d8c685e46f1f7203bf289 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -1489,7 +1489,7 @@ void LLPanelObjectInventory::updateInventory()
 	BOOL inventory_has_focus = FALSE;
 	if (mHaveInventory)
 	{
-		mFolders->getSelectionList(selected_items);
+		selected_items = mFolders->getSelectionList();
 		inventory_has_focus = gFocusMgr.childHasKeyboardFocus(mFolders);
 	}
 
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 111894b31cbfbf507e026a9ffa378eed27b8cf02..660615df5a78a5b8bc05550cdbf0d2e351b6d086 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -493,8 +493,7 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
 			LLFolderView* root = getActivePanel()->getRootFolder();
 			if (root)
 			{
-				std::set<LLUUID> selection_set;
-				root->getSelectionList(selection_set);
+				std::set<LLUUID> selection_set = root->getSelectionList();
 				can_delete = (selection_set.size() > 0);
 				for (std::set<LLUUID>::iterator iter = selection_set.begin();
 					 iter != selection_set.end();
@@ -515,8 +514,7 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
 		LLFolderView* root = getActivePanel()->getRootFolder();
 		if (root)
 		{
-			std::set<LLUUID> selection_set;
-			root->getSelectionList(selection_set);
+			std::set<LLUUID> selection_set = root->getSelectionList();
 			can_delete = (selection_set.size() > 0);
 			for (std::set<LLUUID>::iterator iter = selection_set.begin();
 				 iter != selection_set.end();
@@ -568,8 +566,7 @@ bool LLPanelOutfitsInventory::hasItemsSelected()
 		LLFolderView* root = getActivePanel()->getRootFolder();
 		if (root)
 		{
-			std::set<LLUUID> selection_set;
-			root->getSelectionList(selection_set);
+			std::set<LLUUID> selection_set = root->getSelectionList();
 			has_items_selected = (selection_set.size() > 0);
 		}
 	}
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index e8b6c6bfe5a33fe40ed3516a93d8fcd59319f78e..4dd03e04a9a5439f1105ef45658da20273936752 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -38,7 +38,7 @@
 #include "llsidetray.h"
 #include "llworldmap.h"
 #include "llteleporthistorystorage.h"
-#include "lltextutil.h"
+#include "lluitextutil.h"
 
 #include "llaccordionctrl.h"
 #include "llaccordionctrltab.h"
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index feaf7335c04085a9e6acb46fc119cee9baa57f69..daf116d2558939da700a00d87e650c5b5bbb9102 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -37,6 +37,8 @@
 #include "llavataractions.h"
 #include "llagent.h"
 
+#include "llimview.h"
+#include "llnotificationsutil.h"
 #include "llparticipantlist.h"
 #include "llspeakers.h"
 #include "llviewercontrol.h"
@@ -809,10 +811,43 @@ void LLParticipantList::LLParticipantListMenu::moderateVoiceOtherParticipants(co
 	LLIMSpeakerMgr* mgr = dynamic_cast<LLIMSpeakerMgr*>(mParent.mSpeakerMgr);
 	if (mgr)
 	{
+		if (!unmute)
+		{
+			LLSD payload;
+			payload["session_id"] = mgr->getSessionID();
+			payload["excluded_avatar_id"] = excluded_avatar_id;
+			LLNotificationsUtil::add("ConfirmMuteAll", LLSD(), payload, confirmMuteAllCallback);
+			return;
+		}
+
 		mgr->moderateVoiceOtherParticipants(excluded_avatar_id, unmute);
 	}
 }
 
+// static
+void LLParticipantList::LLParticipantListMenu::confirmMuteAllCallback(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	if (option != 1)
+	{
+		return;
+	}
+
+	const LLSD& payload = notification["payload"];
+	const LLUUID& session_id = payload["session_id"];
+	const LLUUID& excluded_avatar_id = payload["excluded_avatar_id"];
+
+	LLIMSpeakerMgr * speaker_manager = dynamic_cast<LLIMSpeakerMgr*> (
+			LLIMModel::getInstance()->getSpeakerManager(session_id));
+	if (speaker_manager)
+	{
+		speaker_manager->moderateVoiceOtherParticipants(excluded_avatar_id, false);
+	}
+
+	return;
+}
+
+
 bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD& userdata)
 {
 	std::string item = userdata.asString();
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index bbef8baaac25e70214f7be59fb64c70704ca7029..abaf50386831eb7ffd4104fac27be50edad28af5 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -216,6 +216,8 @@ class LLParticipantList
 			 * @see moderateVoiceParticipant()
 			 */
 			void moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute);
+
+			static void confirmMuteAllCallback(const LLSD& notification, const LLSD& response);
 		};
 
 		/**
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index fa543f137110b520a5167ce27f5315d0b1f07218..65b9184fe58bcb2a9669991d77579e38b34cf00a 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -323,8 +323,7 @@ LLInventoryItem *LLSidepanelInventory::getSelectedItem()
 U32 LLSidepanelInventory::getSelectedCount()
 {
 	LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
-	std::set<LLUUID> selection_list;
-	panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList(selection_list);
+	std::set<LLUUID> selection_list = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
 	return selection_list.size();
 }
 
diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp
index 3c87f2386e91aedc094093d9f0e19ad0ecb1b725..35acf883c7f6198c59cff62e1c5b6e33223b411d 100644
--- a/indra/newview/lltexlayerparams.cpp
+++ b/indra/newview/lltexlayerparams.cpp
@@ -235,7 +235,7 @@ BOOL LLTexLayerParamAlpha::getSkip() const
 	}
 
 	LLWearableType::EType type = (LLWearableType::EType)getWearableType();
-	if ((type != LLWearableType::WT_NONE) && !avatar->isWearingWearableType(type))
+	if ((type != LLWearableType::WT_INVALID) && !avatar->isWearingWearableType(type))
 	{
 		return TRUE;
 	}
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index f0800e82e7d66ab243f03fc95c457d5319d38912..3482ac508ed9940035f47734e1e0317d78477bb4 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -731,6 +731,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		{
 			LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
 			LLMemType mt_ss(LLMemType::MTYPE_DISPLAY_STATE_SORT);
+			gPipeline.sAllowRebuildPriorityGroup = TRUE ;
 			gPipeline.stateSort(*LLViewerCamera::getInstance(), result);
 			stop_glerror();
 				
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 1e7780bb26ebcd0e3ce47cb05e09029c7648f05a..49748c59e8dc6c98890f1a8faece010f4122b947 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -1545,7 +1545,7 @@ LLWearableType::EType LLViewerInventoryItem::getWearableType() const
 	if (!isWearableType())
 	{
 		llwarns << "item is not a wearable" << llendl;
-		return LLWearableType::WT_NONE;
+		return LLWearableType::WT_INVALID;
 	}
 	return LLWearableType::EType(getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK);
 }
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 28c1a1ad3a179080cf52621ff9745ab6d323dc77..86e040692ccf5156a4b6471c79fcac5b87dc9172 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -796,7 +796,7 @@ class LLViewerInventoryMoveFromWorldObserver : public LLInventoryMoveFromWorldOb
 		mSelectedItems.clear();
 		if (mActivePanel)
 		{
-			mActivePanel->getRootFolder()->getSelectionList(mSelectedItems);
+			mSelectedItems = mActivePanel->getRootFolder()->getSelectionList();
 		}
 		mSelectedItems.erase(mMoveIntoFolderID);
 	}
@@ -829,8 +829,7 @@ class LLViewerInventoryMoveFromWorldObserver : public LLInventoryMoveFromWorldOb
 		}
 
 		// get selected items (without destination folder)
-		selected_items_t selected_items;
-		mActivePanel->getRootFolder()->getSelectionList(selected_items);
+		selected_items_t selected_items = mActivePanel->getRootFolder()->getSelectionList();
 		selected_items.erase(mMoveIntoFolderID);
 
 		// compare stored & current sets of selected items
@@ -6475,18 +6474,3 @@ void LLOfferInfo::forceResponse(InventoryOfferResponse response)
 	LLNotifications::instance().forceResponse(params, response);
 }
 
-static bool confirm_leave_call_callback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	const LLSD& payload = notification["payload"];
-	LLUUID session_id = payload["session_id"];
-
-	LLFloater* im_floater = LLFloaterReg::findInstance("impanel", session_id);
-	if (option == 0 && im_floater != NULL)
-	{
-		im_floater->closeFloater();
-	}
-
-	return false;
-}
-static LLNotificationFunctorRegistration confirm_leave_call_cb("ConfirmLeaveCall", confirm_leave_call_callback);
diff --git a/indra/newview/llviewervisualparam.cpp b/indra/newview/llviewervisualparam.cpp
index 61cf3b9b7a083a53d7d235378421748b3f920ca2..422e530dc6a09b1f758ae23146d002756ae88e8e 100644
--- a/indra/newview/llviewervisualparam.cpp
+++ b/indra/newview/llviewervisualparam.cpp
@@ -45,7 +45,7 @@
 //-----------------------------------------------------------------------------
 LLViewerVisualParamInfo::LLViewerVisualParamInfo()
 	:
-	mWearableType( LLWearableType::WT_NONE ),
+	mWearableType( LLWearableType::WT_INVALID ),
 	mCrossWearable(FALSE),
 	mCamDist( 0.5f ),
 	mCamAngle( 0.f ),
diff --git a/indra/newview/llvoavatardefines.h b/indra/newview/llvoavatardefines.h
index cdf24dfdd9e87ffcf936abdf1200cf8746b387f1..9c4ee7e716c7b2688891b8cc23de0e4606eabbb6 100644
--- a/indra/newview/llvoavatardefines.h
+++ b/indra/newview/llvoavatardefines.h
@@ -145,7 +145,7 @@ class LLVOAvatarDictionary : public LLSingleton<LLVOAvatarDictionary>
 					 bool is_local_texture, 
 					 EBakedTextureIndex baked_texture_index = BAKED_NUM_INDICES,
 					 const std::string& default_image_name = "",
-					 LLWearableType::EType wearable_type = LLWearableType::WT_NONE);
+					 LLWearableType::EType wearable_type = LLWearableType::WT_INVALID);
 		const std::string 	mDefaultImageName;
 		const LLWearableType::EType mWearableType;
 		// It's either a local texture xor baked
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 322350d2d9cb89614755b676de57fc3a4902254b..dec2e7efdf94bc6d37c310ee99961b28bd4e95e0 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -183,7 +183,7 @@ void LLVOAvatarSelf::markDead()
 		 param;
 		 param = (LLViewerVisualParam*) getNextVisualParam())
 	{
-		if (param->getWearableType() != LLWearableType::WT_NONE)
+		if (param->getWearableType() != LLWearableType::WT_INVALID)
 		{
 			param->setIsDummy(TRUE);
 		}
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 594435475f4e02d75171d583cd488dffa8317659..d6453111d7a47d5fed0ca95c331447a5c5781855 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1856,6 +1856,11 @@ void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool m
 	}
 	
 	LLTextureEntry *te = getTE(texture_index);
+	if(!te)
+	{
+		return ;
+	}
+
 	LL_DEBUGS("MediaOnAPrim") << "BEFORE: texture_index = " << texture_index
 		<< " hasMedia = " << te->hasMedia() << " : " 
 		<< ((NULL == te->getMediaData()) ? "NULL MEDIA DATA" : ll_pretty_print_sd(te->getMediaData()->asLLSD())) << llendl;
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 25ddf2c4bba762c0413dcc0252e5aa3e463815a8..3ecd1296bd2f6831fdf52701e98b2d341a36aaf1 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -88,7 +88,7 @@ static std::string asset_id_to_filename(const LLUUID &asset_id);
 
 LLWearable::LLWearable(const LLTransactionID& transaction_id) :
 	mDefinitionVersion(LLWearable::sCurrentDefinitionVersion),
-	mType(LLWearableType::WT_NONE)
+	mType(LLWearableType::WT_INVALID)
 {
 	mTransactionID = transaction_id;
 	mAssetID = mTransactionID.makeAssetID(gAgent.getSecureSessionID());
@@ -96,7 +96,7 @@ LLWearable::LLWearable(const LLTransactionID& transaction_id) :
 
 LLWearable::LLWearable(const LLAssetID& asset_id) :
 	mDefinitionVersion( LLWearable::sCurrentDefinitionVersion ),
-	mType(LLWearableType::WT_NONE)
+	mType(LLWearableType::WT_INVALID)
 {
 	mAssetID = asset_id;
 	mTransactionID.setNull();
diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp
index ee17d7ddea8a52e67f8356cb05d8a9dfc8a3bf48..c692df06adeb2a386e3cb3fc9b9dc27ab515a25d 100644
--- a/indra/newview/llwearabletype.cpp
+++ b/indra/newview/llwearabletype.cpp
@@ -76,14 +76,15 @@ LLWearableDictionary::LLWearableDictionary()
 	addEntry(LLWearableType::WT_PANTS,        new WearableEntry("pants",       "New Pants",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_PANTS));
 	addEntry(LLWearableType::WT_SHOES,        new WearableEntry("shoes",       "New Shoes",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SHOES));
 	addEntry(LLWearableType::WT_SOCKS,        new WearableEntry("socks",       "New Socks",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SOCKS));
-	addEntry(LLWearableType::WT_JACKET,       new WearableEntry("jacket",      "New Jacket",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_JACKET));
-	addEntry(LLWearableType::WT_GLOVES,       new WearableEntry("gloves",      "New Gloves",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_GLOVES));
-	addEntry(LLWearableType::WT_UNDERSHIRT,   new WearableEntry("undershirt",  "New Undershirt",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_UNDERSHIRT));
-	addEntry(LLWearableType::WT_UNDERPANTS,   new WearableEntry("underpants",  "New Underpants",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_UNDERPANTS));
+	addEntry(LLWearableType::WT_JACKET,       new WearableEntry("jacket",      "New Jacket",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_JACKET));
+	addEntry(LLWearableType::WT_GLOVES,       new WearableEntry("gloves",      "New Gloves",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_GLOVES));
+	addEntry(LLWearableType::WT_UNDERSHIRT,   new WearableEntry("undershirt",  "New Undershirt",	LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_UNDERSHIRT));
+	addEntry(LLWearableType::WT_UNDERPANTS,   new WearableEntry("underpants",  "New Underpants",	LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_UNDERPANTS));
 	addEntry(LLWearableType::WT_SKIRT,        new WearableEntry("skirt",       "New Skirt",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SKIRT));
 	addEntry(LLWearableType::WT_ALPHA,        new WearableEntry("alpha",       "New Alpha",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_ALPHA));
-	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry("tattoo",      "New Tattoo",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_TATTOO));
-	addEntry(LLWearableType::WT_NONE,      	 new WearableEntry("invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));
+	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry("tattoo",      "New Tattoo",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_TATTOO));
+	addEntry(LLWearableType::WT_INVALID,      new WearableEntry("invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));
+	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry("none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));
 	addEntry(LLWearableType::WT_COUNT,        NULL);
 }
 
diff --git a/indra/newview/llwearabletype.h b/indra/newview/llwearabletype.h
index b0326ce0d882b43c727317728db790fc4dab6ba5..8090fd8df7d28b5007605507f9e2a2d6b33ee9e8 100644
--- a/indra/newview/llwearabletype.h
+++ b/indra/newview/llwearabletype.h
@@ -59,7 +59,8 @@ class LLWearableType
 		WT_TATTOO	  = 14,
 		WT_COUNT	  = 15,
 
-		WT_NONE	  	  = -1,
+		WT_INVALID	  = 255,
+		WT_NONE		  = -1,
 	};
 
 	static const std::string& 			getTypeName(EType type);
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 2d2fc385738189a1ff7f1683704e825b300c6411..cc65b34a612e3eb6d4b7ed1312634457b54e2f7c 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -284,6 +284,7 @@ BOOL	LLPipeline::sRenderFrameTest = FALSE;
 BOOL	LLPipeline::sRenderAttachedLights = TRUE;
 BOOL	LLPipeline::sRenderAttachedParticles = TRUE;
 BOOL	LLPipeline::sRenderDeferred = FALSE;
+BOOL    LLPipeline::sAllowRebuildPriorityGroup = FALSE ;
 S32		LLPipeline::sVisibleLightCount = 0;
 F32		LLPipeline::sMinRenderSize = 0.f;
 
@@ -1780,6 +1781,12 @@ void LLPipeline::updateGL()
 
 void LLPipeline::rebuildPriorityGroups()
 {
+	if(!sAllowRebuildPriorityGroup)
+	{
+		return ;
+	}
+	sAllowRebuildPriorityGroup = FALSE ;
+
 	LLTimer update_timer;
 	LLMemType mt(LLMemType::MTYPE_PIPELINE);
 	
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 60e0b0ae8c07bf53960c18dffae8faf72eba0096..89649a0682440914e07b5d3f8cfd7bad1fd9d129 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -462,6 +462,7 @@ class LLPipeline
 	static BOOL				sRenderAttachedLights;
 	static BOOL				sRenderAttachedParticles;
 	static BOOL				sRenderDeferred;
+	static BOOL             sAllowRebuildPriorityGroup;
 	static S32				sVisibleLightCount;
 	static F32				sMinRenderSize;
 
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 54cb734b7e127ff42f32f7885083138468f3f7e6..a2acb8100fa11088b20653c8217162078482de3d 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6139,6 +6139,23 @@ Are you sure you want to leave this call?
      <unique/>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="ConfirmMuteAll"
+   type="alert">
+You have selected to mute all participants in a group call.
+This will also cause all residents that later join the call to be
+muted, even after you have left the call.
+
+Mute everyone?
+    <usetemplate
+     ignoretext="Confirm before I mute all participants in a group call"
+     name="okcancelignore"
+     notext="Ok"
+     yestext="Cancel"/>
+     <unique/>
+  </notification>
+
   <global name="UnsupportedCPU">
 - Your CPU speed does not meet the minimum requirements.
   </global>