diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp
index b7165f68b7524725a3dad5dc419978d89f43c349..ad18adddd5b26cdda7a3aa9b06d25b6a62aade17 100755
--- a/indra/llui/llfolderviewitem.cpp
+++ b/indra/llui/llfolderviewitem.cpp
@@ -506,13 +506,10 @@ BOOL LLFolderViewItem::handleMouseDown( S32 x, S32 y, MASK mask )
 		}
 		make_ui_sound("UISndClick");
 	}
-    //Just re-select the item since it is clicked without ctrl or shift
-    else if(!(mask & (MASK_CONTROL | MASK_SHIFT)))
-    {
-        getRoot()->setSelection(this, FALSE);
-    }
 	else
 	{
+		// If selected, we reserve the decision of deselecting/reselecting to the mouse up moment.
+		// This is necessary so we maintain selection consistent when starting a drag.
 		mSelectPending = TRUE;
 	}
 
@@ -739,7 +736,7 @@ void LLFolderViewItem::drawHighlight(const BOOL showContent, const BOOL hasKeybo
                 getRect().getWidth() - 2,
                 0,
                 focusOutlineColor, FALSE);
-            if (showContent)
+            if (showContent && !isFlashing())
             {
                 gl_rect_2d(FOCUS_LEFT,
                     focus_bottom + 1,
diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp
index 0243fb1c97e6efeff5d10cf29ca9465682e25e7f..a8da4908ced660dafd194f546e8d1ed3ae844adf 100644
--- a/indra/newview/llconversationmodel.cpp
+++ b/indra/newview/llconversationmodel.cpp
@@ -47,7 +47,8 @@ LLConversationItem::LLConversationItem(std::string display_name, const LLUUID& u
 	mNeedsRefresh(true),
 	mConvType(CONV_UNKNOWN),
 	mLastActiveTime(0.0),
-	mDisplayModeratorOptions(false)
+	mDisplayModeratorOptions(false),
+	mAvatarNameCacheConnection()
 {
 }
 
@@ -58,7 +59,8 @@ LLConversationItem::LLConversationItem(const LLUUID& uuid, LLFolderViewModelInte
 	mNeedsRefresh(true),
 	mConvType(CONV_UNKNOWN),
 	mLastActiveTime(0.0),
-	mDisplayModeratorOptions(false)
+	mDisplayModeratorOptions(false),
+	mAvatarNameCacheConnection()
 {
 }
 
@@ -69,10 +71,21 @@ LLConversationItem::LLConversationItem(LLFolderViewModelInterface& root_view_mod
 	mNeedsRefresh(true),
 	mConvType(CONV_UNKNOWN),
 	mLastActiveTime(0.0),
-	mDisplayModeratorOptions(false)
+	mDisplayModeratorOptions(false),
+	mAvatarNameCacheConnection()
 {
 }
 
+LLConversationItem::~LLConversationItem()
+{
+	// Disconnect any previous avatar name cache connection to ensure
+	// that the callback method is not called after destruction
+	if (mAvatarNameCacheConnection.connected())
+	{
+		mAvatarNameCacheConnection.disconnect();
+	}
+}
+
 void LLConversationItem::postEvent(const std::string& event_type, LLConversationItemSession* session, LLConversationItemParticipant* participant)
 {
 	LLUUID session_id = (session ? session->getUUID() : LLUUID());
@@ -142,6 +155,37 @@ void LLConversationItem::buildParticipantMenuOptions(menuentry_vec_t& items, U32
 	}
 }
 
+// method does subscription to changes in avatar name cache for current session/participant conversation item.
+void LLConversationItem::fetchAvatarName(bool isParticipant /*= true*/)
+{
+	LLUUID item_id = getUUID();
+
+	// item should not be null for participants
+	if (isParticipant)
+	{
+		llassert(item_id.notNull());
+	}
+
+	// disconnect any previous avatar name cache connection
+	if (mAvatarNameCacheConnection.connected())
+	{
+		mAvatarNameCacheConnection.disconnect();
+	}
+
+	// exclude nearby chat item
+	if (item_id.notNull())
+	{
+		// for P2P session item, override it as item of called agent
+		if (CONV_SESSION_1_ON_1 == getType())
+		{
+			item_id = LLIMModel::getInstance()->getOtherParticipantID(item_id);
+		}
+
+		// subscribe on avatar name cache changes for participant and session items
+		mAvatarNameCacheConnection = LLAvatarNameCache::get(item_id, boost::bind(&LLConversationItem::onAvatarNameCache, this, _2));
+	}
+}
+
 //
 // LLConversationItemSession
 // 
@@ -169,11 +213,11 @@ void LLConversationItemSession::addParticipant(LLConversationItemParticipant* pa
 	addChild(participant);
 	mIsLoaded = true;
 	mNeedsRefresh = true;
-	updateParticipantName(participant);
+	updateName(participant);
 	postEvent("add_participant", this, participant);
 }
 
-void LLConversationItemSession::updateParticipantName(LLConversationItemParticipant* participant)
+void LLConversationItemSession::updateName(LLConversationItemParticipant* participant)
 {
 	EConversationType conversation_type = getType();
 	// We modify the session name only in the case of an ad-hoc session or P2P session, exit otherwise (nothing to do)
@@ -181,11 +225,13 @@ void LLConversationItemSession::updateParticipantName(LLConversationItemParticip
 	{
 		return;
 	}
+
 	// Avoid changing the default name if no participant present yet
 	if (mChildren.size() == 0)
 	{
 		return;
 	}
+
 	uuid_vec_t temp_uuids; // uuids vector for building the added participants' names string
 	if (conversation_type == CONV_SESSION_AD_HOC)
 	{
@@ -210,12 +256,14 @@ void LLConversationItemSession::updateParticipantName(LLConversationItemParticip
 	}
 	else if (conversation_type == CONV_SESSION_1_ON_1)
 	{
-		// In the case of a P2P conversersation, we need to grab the name of the other participant in the session instance itself
+		// In the case of a P2P conversation, we need to grab the name of the other participant in the session instance itself
 		// as we do not create participants for such a session.
-        LLFloaterIMSession *conversationFloater = LLFloaterIMSession::findInstance(mUUID);
-        LLUUID participantID = conversationFloater->getOtherParticipantUUID();
-        temp_uuids.push_back(participantID);
+		if (gAgentID != participant->getUUID())
+		{
+			temp_uuids.push_back(participant->getUUID());
+		}
 	}
+
 	if (temp_uuids.size() != 0)
 	{
 		std::string new_session_name;
@@ -229,7 +277,7 @@ void LLConversationItemSession::removeParticipant(LLConversationItemParticipant*
 {
 	removeChild(participant);
 	mNeedsRefresh = true;
-	updateParticipantName(participant);
+	updateName(participant);
 	postEvent("remove_participant", this, participant);
 }
 
@@ -393,6 +441,18 @@ void LLConversationItemSession::dumpDebugData(bool dump_children)
 	}
 }
 
+// should be invoked only for P2P sessions
+void LLConversationItemSession::onAvatarNameCache(const LLAvatarName& av_name)
+{
+	if (mAvatarNameCacheConnection.connected())
+	{
+		mAvatarNameCacheConnection.disconnect();
+	}
+
+	renameItem(av_name.getDisplayName());
+	postEvent("update_session", this, NULL);
+}
+
 //
 // LLConversationItemParticipant
 // 
@@ -401,8 +461,7 @@ LLConversationItemParticipant::LLConversationItemParticipant(std::string display
 	LLConversationItem(display_name,uuid,root_view_model),
 	mIsMuted(false),
 	mIsModerator(false),
-	mDistToAgent(-1.0),
-	mAvatarNameCacheConnection()
+	mDistToAgent(-1.0)
 {
 	mDisplayName = display_name;
 	mConvType = CONV_PARTICIPANT;
@@ -412,38 +471,12 @@ LLConversationItemParticipant::LLConversationItemParticipant(const LLUUID& uuid,
 	LLConversationItem(uuid,root_view_model),
 	mIsMuted(false),
 	mIsModerator(false),
-	mDistToAgent(-1.0),
-	mAvatarNameCacheConnection()
+	mDistToAgent(-1.0)
 {
 	mConvType = CONV_PARTICIPANT;
 }
 
-LLConversationItemParticipant::~LLConversationItemParticipant()
-{
-	// Disconnect any previous avatar name cache connection to ensure
-	// that the callback method is not called after destruction
-	if (mAvatarNameCacheConnection.connected())
-	{
-		mAvatarNameCacheConnection.disconnect();
-	}
-}
-
-void LLConversationItemParticipant::fetchAvatarName()
-{
-	// Request the avatar name from the cache
-	llassert(getUUID().notNull());
-	if (getUUID().notNull())
-	{
-		// Disconnect any previous avatar name cache connection
-		if (mAvatarNameCacheConnection.connected())
-		{
-			mAvatarNameCacheConnection.disconnect();
-		}
-		mAvatarNameCacheConnection = LLAvatarNameCache::get(getUUID(), boost::bind(&LLConversationItemParticipant::onAvatarNameCache, this, _2));
-	}
-}
-
-void LLConversationItemParticipant::updateAvatarName()
+void LLConversationItemParticipant::updateName()
 {
 	llassert(getUUID().notNull());
 	if (getUUID().notNull())
@@ -451,29 +484,33 @@ void LLConversationItemParticipant::updateAvatarName()
 		LLAvatarName av_name;
 		if (LLAvatarNameCache::get(getUUID(),&av_name))
 		{
-			updateAvatarName(av_name);
+			updateName(av_name);
 		}
 	}
 }
 
 void LLConversationItemParticipant::onAvatarNameCache(const LLAvatarName& av_name)
 {
-	mAvatarNameCacheConnection.disconnect();
-	updateAvatarName(av_name);
+	if (mAvatarNameCacheConnection.connected())
+	{
+		mAvatarNameCacheConnection.disconnect();
+	}
+
+	updateName(av_name);
 }
 
-void LLConversationItemParticipant::updateAvatarName(const LLAvatarName& av_name)
+void LLConversationItemParticipant::updateName(const LLAvatarName& av_name)
 {
 	mName = av_name.getUserName();
 	mDisplayName = av_name.getDisplayName();
-	mNeedsRefresh = true;
+	renameItem(mDisplayName);
 	if (mParent != NULL)
 	{
 		LLConversationItemSession* parent_session = dynamic_cast<LLConversationItemSession*>(mParent);
 		if (parent_session != NULL)
 		{
 			parent_session->requestSort();
-			parent_session->updateParticipantName(this);
+			parent_session->updateName(this);
 			postEvent("update_participant", parent_session, this);
 		}
 	}
diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h
index 01b3850f5e2c7e5becd85e17ab17d7327c3b4f52..6aaea041e4f1a600d11c8cb6ab1374c4ed2058ed 100755
--- a/indra/newview/llconversationmodel.h
+++ b/indra/newview/llconversationmodel.h
@@ -64,7 +64,7 @@ class LLConversationItem : public LLFolderViewModelItemCommon
 	LLConversationItem(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model);
 	LLConversationItem(const LLUUID& uuid, LLFolderViewModelInterface& root_view_model);
 	LLConversationItem(LLFolderViewModelInterface& root_view_model);
-	virtual ~LLConversationItem() {}
+	virtual ~LLConversationItem();
 
 	// Stub those things we won't really be using in this conversation context
 	virtual const std::string& getName() const { return mName; }
@@ -132,27 +132,31 @@ class LLConversationItem : public LLFolderViewModelItemCommon
 	
     void buildParticipantMenuOptions(menuentry_vec_t& items, U32 flags);
 
+	void fetchAvatarName(bool isParticipant = true);		// fetch and update the avatar name
+
 protected:
+	virtual void onAvatarNameCache(const LLAvatarName& av_name) {}
+
 	std::string mName;	// Name of the session or the participant
 	LLUUID mUUID;		// UUID of the session or the participant
 	EConversationType mConvType;	// Type of conversation item
 	bool mNeedsRefresh;	// Flag signaling to the view that something changed for this item
 	F64  mLastActiveTime;
 	bool mDisplayModeratorOptions;
-};
+	boost::signals2::connection mAvatarNameCacheConnection;
+};	
 
 class LLConversationItemSession : public LLConversationItem
 {
 public:
 	LLConversationItemSession(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model);
 	LLConversationItemSession(const LLUUID& uuid, LLFolderViewModelInterface& root_view_model);
-	virtual ~LLConversationItemSession() {}
 	
 	/*virtual*/ bool hasChildren() const;
     LLPointer<LLUIImage> getIcon() const { return NULL; }
 	void setSessionID(const LLUUID& session_id) { mUUID = session_id; mNeedsRefresh = true; }
 	void addParticipant(LLConversationItemParticipant* participant);
-	void updateParticipantName(LLConversationItemParticipant* participant);
+	void updateName(LLConversationItemParticipant* participant);
 	void removeParticipant(LLConversationItemParticipant* participant);
 	void removeParticipant(const LLUUID& participant_id);
 	void clearParticipants();
@@ -172,6 +176,8 @@ class LLConversationItemSession : public LLConversationItem
 	void dumpDebugData(bool dump_children = false);
 
 private:
+	/*virtual*/ void onAvatarNameCache(const LLAvatarName& av_name);
+
 	bool mIsLoaded;		// true if at least one participant has been added to the session, false otherwise
 };
 
@@ -180,7 +186,6 @@ class LLConversationItemParticipant : public LLConversationItem
 public:
 	LLConversationItemParticipant(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model);
 	LLConversationItemParticipant(const LLUUID& uuid, LLFolderViewModelInterface& root_view_model);
-	virtual ~LLConversationItemParticipant();
 	
 	virtual const std::string& getDisplayName() const { return mDisplayName; }
 
@@ -195,8 +200,7 @@ class LLConversationItemParticipant : public LLConversationItem
 
 	virtual const bool getDistanceToAgent(F64& dist) const { dist = mDistToAgent; return (dist >= 0.0); }
 
-	void fetchAvatarName();		// fetch and update the avatar name
-	void updateAvatarName();	// get from the cache (do *not* fetch) and update the avatar name
+	void updateName();	// get from the cache (do *not* fetch) and update the avatar name
 	LLConversationItemSession* getParentSession();
 
 	void dumpDebugData();
@@ -204,7 +208,7 @@ class LLConversationItemParticipant : public LLConversationItem
 
 private:
 	void onAvatarNameCache(const LLAvatarName& av_name);	// callback used by fetchAvatarName
-	void updateAvatarName(const LLAvatarName& av_name);
+	void updateName(const LLAvatarName& av_name);
 
 	bool mIsMuted;		// default is false
 	bool mIsModerator;	// default is false
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index a21cbf2bb2f7dcc13628c5bfdfdea43f8a63728e..a17b89af0dec3d712a60d19f5241c34a7035446c 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -162,7 +162,7 @@ BOOL LLFloaterIMContainer::postBuild()
 	
 	setTabContainer(getChild<LLTabContainer>("im_box_tab_container"));
 	mStubPanel = getChild<LLPanel>("stub_panel");
-    mStubTextBox = getChild<LLTextBox>("stub_textbox_2");
+    mStubTextBox = getChild<LLTextBox>("stub_textbox");
     mStubTextBox->setURLClickedCallback(boost::bind(&LLFloaterIMContainer::returnFloaterToHost, this));
 
 	mConversationsStack = getChild<LLLayoutStack>("conversations_stack");
@@ -380,7 +380,7 @@ void LLFloaterIMContainer::processParticipantsStyleUpdate()
 		{
 			LLConversationItemParticipant* participant_model = dynamic_cast<LLConversationItemParticipant*>(*current_participant_model);
 			// Get the avatar name for this participant id from the cache and update the model
-			participant_model->updateAvatarName();
+			participant_model->updateName();
 			// Next participant
 			current_participant_model++;
 		}
@@ -1390,7 +1390,7 @@ LLConversationItem* LLFloaterIMContainer::addConversationListItem(const LLUUID&
 		return NULL;
 	}
 	item->renameItem(display_name);
-	item->updateParticipantName(NULL);
+	item->updateName(NULL);
 	
 	mConversationsItems[uuid] = item;
 
@@ -1419,6 +1419,11 @@ LLConversationItem* LLFloaterIMContainer::addConversationListItem(const LLUUID&
 		}
 	}
 
+	if (uuid.notNull() && im_sessionp->isP2PSessionType())
+	{
+		item->fetchAvatarName(false);
+	}
+
 	// Do that too for the conversation dialog
     LLFloaterIMSessionTab *conversation_floater = (uuid.isNull() ? (LLFloaterIMSessionTab*)(LLFloaterReg::findTypedInstance<LLFloaterIMNearbyChat>("nearby_chat")) : (LLFloaterIMSessionTab*)(LLFloaterIMSession::findInstance(uuid)));
 	if (conversation_floater)
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 0011f5417575e2a7fb131b346f2cb95df0571489..067f0d199301d6d403f49a6878eb75801fe69406 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -129,11 +129,7 @@ void process_dnd_im(const LLSD& notification)
             false); //will need slight refactor to retrieve whether offline message or not (assume online for now)
     }
 
-    //For now always flash conversation line item
-    LLFloaterIMContainer* im_box = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container");
-    im_box->flashConversationItemWidget(sessionID, true);
-
-    //And flash toolbar button
+    //Flash toolbar button for now, eventually the user's preference will be taken into account
     gToolBarView->flashCommand(LLCommandId("chat"), true);
 }
 
@@ -225,12 +221,18 @@ void on_new_message(const LLSD& msg)
         //User is not focused on conversation containing the message
         if(session_floater_not_focused)
         {
-            im_box->flashConversationItemWidget(session_id, true);
-
+        	if(!LLMuteList::getInstance()->isMuted(participant_id))
+        	{
+        		im_box->flashConversationItemWidget(session_id, true);
+        	}
             //The conversation floater isn't focused/open
             if(conversation_floater_not_focused)
             {
-                gToolBarView->flashCommand(LLCommandId("chat"), true);
+            	if(!LLMuteList::getInstance()->isMuted(participant_id) 
+                    && !gAgent.isDoNotDisturb())
+            	{
+            		gToolBarView->flashCommand(LLCommandId("chat"), true);
+            	}
 
                 //Show IM toasts (upper right toasts)
                 // Skip toasting for system messages and for nearby chat
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 2fe6cd578be4333af50d89f243c5b7965fad1cc7..52f73d6c43cf08d1d60cf9a5f7b45de4c39fd603 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2869,23 +2869,6 @@ void LLViewerObject::updateInventory(
 	U8 key,
 	bool is_new)
 {
-	LLMemType mt(LLMemType::MTYPE_OBJECT);
-
-	std::list<LLUUID>::iterator begin = mPendingInventoryItemsIDs.begin();
-	std::list<LLUUID>::iterator end = mPendingInventoryItemsIDs.end();
-
-	bool is_fetching = std::find(begin, end, item->getAssetUUID()) != end;
-	bool is_fetched = getInventoryItemByAsset(item->getAssetUUID()) != NULL;
-
-	if (is_fetched || is_fetching)
-	{
-		return;
-	}
-	else
-	{
-		mPendingInventoryItemsIDs.push_back(item->getAssetUUID());
-	}
-
 	// This slices the object into what we're concerned about on the
 	// viewer. The simulator will take the permissions and transfer
 	// ownership.
diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml
index 951665552f62a0e0c0c727f4ee7bf30912f59182..12c16761275d617427102a82f81f77a418f448b4 100644
--- a/indra/newview/skins/default/xui/en/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_container.xml
@@ -161,32 +161,18 @@
                  <text
                    type="string"
                    clip_partial="false"
-                   follows="left|top"
+                   follows="left|top|right"
                    layout="topleft"
-                   left="20"
-                   right="-20"
-                   name="stub_textbox_1"
-                   top="30"
-                   height="20"
-                   valign="center"
-                   wrap="true">
-                   This conversation is in a separate window.
-                 </text>
-                 <text
-                   type="string"
-                   clip_partial="false"
-                   follows="left|top"
-                   layout="topleft"
-                   left="20"
-                   right="-20"
-                   name="stub_textbox_2"
-                   top="60"
-                   height="20"
+                   left="15"
+                   right="-15"
+                   name="stub_textbox"
+                   top="25"
+                   height="40"
                    valign="center"
                    parse_urls="true"
                    wrap="true">
-                     [secondlife:/// Bring it back.]
-                </text>
+                   This conversation is in a separate window.   [secondlife:/// Bring it back.]
+                 </text>
              </panel>
             </panel_container>
         </layout_panel>