diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index d6e457887bca46fef656bb39dccd8f06fd6ba6aa..ce063a9887a777d58d0671f010226cc79da6b250 100755
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -44,6 +44,7 @@
 #include "llcallingcard.h"		// for LLAvatarTracker
 #include "llconversationlog.h"
 #include "llfloateravatarpicker.h"	// for LLFloaterAvatarPicker
+#include "llfloaterconversationpreview.h"
 #include "llfloatergroupinvite.h"
 #include "llfloatergroups.h"
 #include "llfloaterreg.h"
@@ -926,9 +927,20 @@ void LLAvatarActions::viewChatHistory(const LLUUID& id)
 		if (iter->getParticipantID() == id)
 		{
 			LLFloaterReg::showInstance("preview_conversation", iter->getSessionID(), true);
-			break;
+			return;
 		}
 	}
+
+	if (LLLogChat::isTranscriptExist(id))
+	{
+		LLAvatarName avatar_name;
+		LLSD extended_id(id);
+
+		LLAvatarNameCache::get(id, &avatar_name);
+		extended_id[LL_FCP_COMPLETE_NAME] = avatar_name.getCompleteName();
+		extended_id[LL_FCP_ACCOUNT_NAME] = avatar_name.getAccountName();
+		LLFloaterReg::showInstance("preview_conversation", extended_id, true);
+	}
 }
 
 //== private methods ========================================================================================
diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp
index 441de2e1a56037c9358c9cdb27a8232088357755..73b2c6f88c529980b512507a076c5a6614e5d6c4 100755
--- a/indra/newview/llconversationview.cpp
+++ b/indra/newview/llconversationview.cpp
@@ -39,6 +39,7 @@
 #include "llfloaterreg.h"
 #include "llgroupiconctrl.h"
 #include "lluictrlfactory.h"
+#include "lltoolbarview.h"
 
 //
 // Implementation of conversations list session widgets
@@ -114,6 +115,12 @@ void LLConversationViewSession::startFlashing()
 	{
 		mFlashStarted = true;
 		mFlashTimer->startFlashing();
+		
+		// flash chat toolbar button if scrolled out of sight (because flashing will not be visible)
+		if (mContainer->isScrolledOutOfSight(this))
+		{
+			gToolBarView->flashCommand(LLCommandId("chat"), true);
+		}
 	}
 }
 
diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp
index 48e0caa0ce59af1dea119e45acdc121f9a68bf36..a3d715530d0a8dd48576b21d4248c69f888ac90e 100644
--- a/indra/newview/llfloaterconversationpreview.cpp
+++ b/indra/newview/llfloaterconversationpreview.cpp
@@ -33,13 +33,19 @@
 #include "llspinctrl.h"
 #include "lltrans.h"
 
+const std::string LL_FCP_COMPLETE_NAME("complete_name");
+const std::string LL_FCP_ACCOUNT_NAME("user_name");
+
 LLFloaterConversationPreview::LLFloaterConversationPreview(const LLSD& session_id)
 :	LLFloater(session_id),
 	mChatHistory(NULL),
 	mSessionID(session_id.asUUID()),
 	mCurrentPage(0),
-	mPageSize(gSavedSettings.getS32("ConversationHistoryPageSize"))
-{}
+	mPageSize(gSavedSettings.getS32("ConversationHistoryPageSize")),
+	mAccountName(session_id[LL_FCP_ACCOUNT_NAME]),
+	mCompleteName(session_id[LL_FCP_COMPLETE_NAME])
+{
+}
 
 BOOL LLFloaterConversationPreview::postBuild()
 {
@@ -49,7 +55,12 @@ BOOL LLFloaterConversationPreview::postBuild()
 	std::string name;
 	std::string file;
 
-	if (mSessionID != LLUUID::null && conv)
+	if (mAccountName != "")
+	{
+		name = mCompleteName;
+		file = mAccountName;
+	}
+	else if (mSessionID != LLUUID::null && conv)
 	{
 		name = conv->getConversationName();
 		file = conv->getHistoryFileName();
diff --git a/indra/newview/llfloaterconversationpreview.h b/indra/newview/llfloaterconversationpreview.h
index 0341e5d2a0719521ecf96a59b945d1cb7c2713a4..b17ae84b632e9fecc21a7ce5360afc2335fc484d 100644
--- a/indra/newview/llfloaterconversationpreview.h
+++ b/indra/newview/llfloaterconversationpreview.h
@@ -29,6 +29,9 @@
 #include "llchathistory.h"
 #include "llfloater.h"
 
+extern const std::string LL_FCP_COMPLETE_NAME;	//"complete_name"
+extern const std::string LL_FCP_ACCOUNT_NAME;		//"user_name"
+
 class LLSpinCtrl;
 
 class LLFloaterConversationPreview : public LLFloater
@@ -54,6 +57,8 @@ private:
 	int				mPageSize;
 
 	std::list<LLSD> mMessages;
+	std::string		mAccountName;
+	std::string		mCompleteName;
 };
 
 #endif /* LLFLOATERCONVERSATIONPREVIEW_H_ */
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index 73fcfa244e6874f6002961b439b4acb6116414e2..c5edd11c123583e9ce67ed6fd4b65dd49b9e0a4f 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -1877,6 +1877,16 @@ void LLFloaterIMContainer::flashConversationItemWidget(const LLUUID& session_id,
 	}
 }
 
+bool LLFloaterIMContainer::isScrolledOutOfSight(LLConversationViewSession* conversation_item_widget)
+{
+	llassert(conversation_item_widget != NULL);
+
+	// check whether the widget is in the visible portion of the scroll container
+	LLRect widget_rect;
+	conversation_item_widget->localRectToOtherView(conversation_item_widget->getLocalRect(), &widget_rect, mConversationsRoot);
+	return !mConversationsRoot->getVisibleRect().overlaps(widget_rect);
+}
+
 void LLFloaterIMContainer::closeFloater(bool app_quitting/* = false*/)
 {
 	// Always unminimize before trying to close.
diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h
index 33d63a391c9ccd447464860217837af61654b92e..419239f90bb381396cdb5aa7c63d9cdb06662f9a 100644
--- a/indra/newview/llfloaterimcontainer.h
+++ b/indra/newview/llfloaterimcontainer.h
@@ -186,6 +186,7 @@ public:
 	void updateSpeakBtnState();
 	static bool isConversationLoggingAllowed();
 	void flashConversationItemWidget(const LLUUID& session_id, bool is_flashes);
+	bool isScrolledOutOfSight(LLConversationViewSession* conversation_item_widget);
 	boost::signals2::connection mMicroChangedSignal;
 	S32 getConversationListItemSize() { return mConversationsWidgets.size(); }
 
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 17b72c50234091181b7bcccbe8ca4aad250338c7..09f816a4e6ea127bc1d78a10ab31ecb2825d7661 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -28,6 +28,7 @@
 
 #include "llagent.h"
 #include "llagentui.h"
+#include "llavatarnamecache.h"
 #include "lllogchat.h"
 #include "lltrans.h"
 #include "llviewercontrol.h"
@@ -540,6 +541,31 @@ void LLLogChat::deleteTranscripts()
 	LLFloaterIMSessionTab::processChatHistoryStyleUpdate(true);
 }
 
+// static
+bool LLLogChat::isTranscriptExist(const LLUUID& avatar_id)
+{
+	std::vector<std::string> list_of_transcriptions;
+	LLLogChat::getListOfTranscriptFiles(list_of_transcriptions);
+
+	if (list_of_transcriptions.size() > 0)
+	{
+		LLAvatarName avatar_name;
+		LLAvatarNameCache::get(avatar_id, &avatar_name);
+		std::string avatar_user_name = avatar_name.getAccountName();
+		std::replace(avatar_user_name.begin(), avatar_user_name.end(), '.', '_');
+
+		BOOST_FOREACH(std::string& transcript_file_name, list_of_transcriptions)
+		{
+			if (std::string::npos != transcript_file_name.find(avatar_user_name))
+			{
+				return true;
+			}
+		}
+	}
+
+	return false;
+}
+
 //*TODO mark object's names in a special way so that they will be distinguishable form avatar name 
 //which are more strict by its nature (only firstname and secondname)
 //Example, an object's name can be written like "Object <actual_object's_name>"
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
index 5fbb4ade96a567afb0cb742c2f4df4720d507523..b981d9ce0410494785426e9a825283ed5515de7a 100644
--- a/indra/newview/lllogchat.h
+++ b/indra/newview/lllogchat.h
@@ -57,6 +57,7 @@ public:
 	static boost::signals2::connection setSaveHistorySignal(const save_history_signal_t::slot_type& cb);
 
 	static void deleteTranscripts();
+	static bool isTranscriptExist(const LLUUID& avatar_id);
 
 private:
 	static std::string cleanFileName(std::string filename);
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index 61e9468ce5a928a068a2980b6566d3e7bb12defb..47d6b49a50606cc6558118d7999f72dc51eba4b1 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -37,6 +37,7 @@
 #include "llagentdata.h"			// for gAgentID
 #include "llavataractions.h"
 #include "llcallingcard.h"			// for LLAvatarTracker
+#include "lllogchat.h"
 #include "llviewermenu.h"			// for gMenuHolder
 
 namespace LLPanelPeopleMenus
@@ -180,7 +181,11 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata)
 	{
 		return LLAvatarActions::canOfferTeleport(mUUIDs);
 	}
-	else if (item == std::string("can_im") || item == std::string("can_callog") || item == std::string("can_invite") ||
+	else if (item == std::string("can_callog"))
+	{
+		return LLLogChat::isTranscriptExist(mUUIDs.front());
+	}
+	else if (item == std::string("can_im") || item == std::string("can_invite") ||
 	         item == std::string("can_share") || item == std::string("can_pay"))
 	{
 		return true;