diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index af3c6eff1169323a9dfe93d24aee41849024d6e4..43a733f918725afe2d2f9634f43d517adbc40ed3 100755
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -898,20 +898,10 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 				LLStyle::Params link_params(body_message_params);
 				link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
 
-				if (from_me)
-				{	std::string localized_name;
-					bool is_localized = LLTrans::findString(localized_name, "AgentNameSubst");
-					mEditor->appendText((is_localized? localized_name:"(You)") + delimiter,
-							prependNewLineState, link_params);
-					prependNewLineState = false;
-				}
-				else
-				{
 				// Add link to avatar's inspector and delimiter to message.
-					mEditor->appendText(std::string(link_params.link_href) + delimiter,
-							prependNewLineState, link_params);
-					prependNewLineState = false;
-				}
+				mEditor->appendText(std::string(link_params.link_href) + delimiter,
+					prependNewLineState, link_params);
+				prependNewLineState = false;
 			}
 			else
 			{
diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp
index 7cb313af33344b10cfdb936848318dc5f3b35a4e..4a85160f95df2c4c37cbc8dabe8c72d3563dc37a 100755
--- a/indra/newview/llfloaterconversationpreview.cpp
+++ b/indra/newview/llfloaterconversationpreview.cpp
@@ -43,14 +43,15 @@ LLFloaterConversationPreview::LLFloaterConversationPreview(const LLSD& session_i
 	mCurrentPage(0),
 	mPageSize(gSavedSettings.getS32("ConversationHistoryPageSize")),
 	mAccountName(session_id[LL_FCP_ACCOUNT_NAME]),
-	mCompleteName(session_id[LL_FCP_COMPLETE_NAME])
+	mCompleteName(session_id[LL_FCP_COMPLETE_NAME]),
+	mMutex(NULL)
 {
 }
 
 BOOL LLFloaterConversationPreview::postBuild()
 {
 	mChatHistory = getChild<LLChatHistory>("chat_history");
-	LLLoadHistoryThread::setLoadEndSignal(boost::bind(&LLFloaterConversationPreview::SetPages, this, _1, _2));
+	LLLoadHistoryThread::setLoadEndSignal(boost::bind(&LLFloaterConversationPreview::setPages, this, _1, _2));
 
 	const LLConversation* conv = LLConversationLog::instance().getConversation(mSessionID);
 	std::string name;
@@ -95,14 +96,15 @@ BOOL LLFloaterConversationPreview::postBuild()
 	return LLFloater::postBuild();
 }
 
-void LLFloaterConversationPreview::SetPages(std::list<LLSD>& messages, const std::string& file_name)
+void LLFloaterConversationPreview::setPages(std::list<LLSD>& messages,const std::string& file_name)
 {
 	if(file_name == mChatHistoryFileName)
 	{
+		// additional protection to avoid changes of mMessages in setPages()
+		LLMutexLock lock(&mMutex);
 		mMessages = messages;
+		mCurrentPage = (mMessages.size() ? (mMessages.size() - 1) / mPageSize : 0);
 
-
-		mCurrentPage = mMessages.size() / mPageSize;
 		mPageSpinner->setEnabled(true);
 		mPageSpinner->setMaxValue(mCurrentPage+1);
 		mPageSpinner->set(mCurrentPage+1);
@@ -110,10 +112,9 @@ void LLFloaterConversationPreview::SetPages(std::list<LLSD>& messages, const std
 		std::string total_page_num = llformat("/ %d", mCurrentPage+1);
 		getChild<LLTextBox>("page_num_label")->setValue(total_page_num);
 		mChatHistoryLoaded = true;
-
 	}
-
 }
+
 void LLFloaterConversationPreview::draw()
 {
 	if(mChatHistoryLoaded)
@@ -134,32 +135,21 @@ void LLFloaterConversationPreview::onOpen(const LLSD& key)
 
 void LLFloaterConversationPreview::showHistory()
 {
-	if (!mMessages.size())
+	// additional protection to avoid changes of mMessages in setPages()
+	LLMutexLock lock(&mMutex);
+
+	if (!mMessages.size() || mCurrentPage * mPageSize >= mMessages.size())
 	{
 		return;
 	}
 
 	mChatHistory->clear();
-
 	std::ostringstream message;
 	std::list<LLSD>::const_iterator iter = mMessages.begin();
+	std::advance(iter, mCurrentPage * mPageSize);
 
-	int delta = 0;
-	if (mCurrentPage)
-	{
-		int remainder = mMessages.size() % mPageSize;
-		delta = (remainder == 0) ? 0 : (mPageSize - remainder);
-	}
-
-	std::advance(iter, (mCurrentPage * mPageSize) - delta);
-
-	for (int msg_num = 0; (iter != mMessages.end() && msg_num < mPageSize); ++iter, ++msg_num)
+	for (int msg_num = 0; iter != mMessages.end() && msg_num < mPageSize; ++iter, ++msg_num)
 	{
-		if (iter->size() == 0)
-		{
-			continue;
-		}
-
 		LLSD msg = *iter;
 
 		LLUUID from_id 		= LLUUID::null;
@@ -203,7 +193,6 @@ void LLFloaterConversationPreview::showHistory()
 
 		mChatHistory->appendMessage(chat,chat_args);
 	}
-
 }
 
 void LLFloaterConversationPreview::onMoreHistoryBtnClick()
diff --git a/indra/newview/llfloaterconversationpreview.h b/indra/newview/llfloaterconversationpreview.h
index 389f3dfd09b43d16e8572421130a89c205db737b..f8796127baafaca6f2e5db8c655722a1f2f1369a 100755
--- a/indra/newview/llfloaterconversationpreview.h
+++ b/indra/newview/llfloaterconversationpreview.h
@@ -42,7 +42,7 @@ class LLFloaterConversationPreview : public LLFloater
 	virtual ~LLFloaterConversationPreview(){};
 
 	virtual BOOL postBuild();
-	void SetPages(std::list<LLSD>& messages,const std::string& file_name);
+	void setPages(std::list<LLSD>& messages,const std::string& file_name);
 
 	virtual void draw();
 	virtual void onOpen(const LLSD& key);
@@ -51,6 +51,7 @@ class LLFloaterConversationPreview : public LLFloater
 	void onMoreHistoryBtnClick();
 	void showHistory();
 
+	LLMutex			mMutex;
 	LLSpinCtrl*		mPageSpinner;
 	LLChatHistory*	mChatHistory;
 	LLUUID			mSessionID;
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index 4591b80ac4610705f6f2b9a57df9db7a4750a564..836a455a676df788a90e0628803e6837b5dad57b 100755
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -674,13 +674,18 @@ void LLFloaterIMContainer::setVisible(BOOL visible)
 void LLFloaterIMContainer::getDetachedConversationFloaters(floater_list_t& floaters)
 {
 	typedef conversations_widgets_map::value_type conv_pair;
+	LLFloaterIMNearbyChat *nearby_chat = LLFloaterReg::findTypedInstance<LLFloaterIMNearbyChat>("nearby_chat");
+
 	BOOST_FOREACH(conv_pair item, mConversationsWidgets)
 	{
 		LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(item.second);
 		if (widget)
 		{
 			LLFloater* session_floater = widget->getSessionFloater();
-			if (session_floater && session_floater->isDetachedAndNotMinimized())
+
+			// Exclude nearby chat from output, as it should be handled separately 
+			if (session_floater && session_floater->isDetachedAndNotMinimized() 
+				&& session_floater != nearby_chat)
 			{
 				floaters.push_back(session_floater);
 			}
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 9e23755d731a00ff38b6e0640cb90a2f5f9883eb..2e53effcac0a6b620376d1f6795c5d5518258dd6 100755
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -2670,7 +2670,8 @@ void LLIMMgr::addMessage(
 		name_is_setted = true;
 	}
 	bool skip_message = false;
-	if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly"))
+	bool from_linden = LLMuteList::getInstance()->isLinden(from);
+	if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && !from_linden)
 	{
 		// Evaluate if we need to skip this message when that setting is true (default is false)
 		skip_message = (LLAvatarTracker::instance().getBuddyInfo(other_participant_id) == NULL);	// Skip non friends...
@@ -2716,7 +2717,7 @@ void LLIMMgr::addMessage(
 
 		// Logically it would make more sense to reject the session sooner, in another area of the
 		// code, but the session has to be established inside the server before it can be left.
-		if (LLMuteList::getInstance()->isMuted(other_participant_id) && !LLMuteList::getInstance()->isLinden(from))
+		if (LLMuteList::getInstance()->isMuted(other_participant_id) && !from_linden)
 		{
 			llwarns << "Leaving IM session from initiating muted resident " << from << llendl;
 			if(!gIMMgr->leaveSession(new_session_id))