diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 80cec6c9f30a4dc8d86efbdc91f78693686ff9da..ccc7aa8cec918b463fbf9745543ccfa4479af3f0 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -47,6 +47,7 @@ set(llui_SOURCE_FILES
     lleditmenuhandler.cpp
     llf32uictrl.cpp
     llfiltereditor.cpp
+    llflashtimer.cpp
     llflatlistview.cpp
     llfloater.cpp
     llfloaterreg.cpp
@@ -153,6 +154,7 @@ set(llui_HEADER_FILES
     lleditmenuhandler.h
     llf32uictrl.h
     llfiltereditor.h 
+    llflashtimer.h
     llflatlistview.h
     llfloater.h
     llfloaterreg.h
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 705fe165593111289a16243100e002db8c138b2c..8ac55b2eb42b572c38e897e4850db5e6753852c6 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -170,10 +170,16 @@ LLButton::LLButton(const LLButton::Params& p)
 	mMouseUpSignal(NULL),
 	mHeldDownSignal(NULL),
 	mUseDrawContextAlpha(p.use_draw_context_alpha),
-	mHandleRightMouse(p.handle_right_mouse),
-	mButtonFlashCount(p.button_flash_count),
-	mButtonFlashRate(p.button_flash_rate)
+	mHandleRightMouse(p.handle_right_mouse)
 {
+	// If optional parameter "p.button_flash_count" is not provided, LLFlashTimer will be
+	// used instead it a "default" value from gSavedSettings.getS32("FlashCount")).
+	// Likewise, missing "p.button_flash_rate" is replaced by gSavedSettings.getF32("FlashPeriod").
+	// Note: flashing should be allowed in settings.xml (boolean key "EnableButtonFlashing").
+	S32 flash_count = p.button_flash_count.isProvided()? p.button_flash_count : 0;
+	F32 flash_rate = p.button_flash_rate.isProvided()? p.button_flash_rate : 0.0;
+	mFlashingTimer = new LLFlashTimer ((LLFlashTimer::callback_t)NULL, flash_count, flash_rate);
+
 	static LLUICachedControl<S32> llbutton_orig_h_pad ("UIButtonOrigHPad", 0);
 	static Params default_params(LLUICtrlFactory::getDefaultParams<LLButton>());
 
@@ -267,6 +273,7 @@ LLButton::~LLButton()
 	delete mMouseDownSignal;
 	delete mMouseUpSignal;
 	delete mHeldDownSignal;
+	delete mFlashingTimer;
 }
 
 // HACK: Committing a button is the same as instantly clicking it.
@@ -591,22 +598,11 @@ void LLButton::draw()
 {
 	static LLCachedControl<bool> sEnableButtonFlashing(*LLUI::sSettingGroups["config"], "EnableButtonFlashing", true);
 	F32 alpha = mUseDrawContextAlpha ? getDrawContext().mAlpha : getCurrentTransparency();
-	bool flash = FALSE;
 
-	if( mFlashing)
-	{
-		if ( sEnableButtonFlashing)
-		{
-			F32 elapsed = mFlashingTimer.getElapsedTimeF32();
-			S32 flash_count = S32(elapsed * mButtonFlashRate * 2.f);
-			// flash on or off?
-			flash = (flash_count % 2 == 0) || flash_count > S32((F32)mButtonFlashCount * 2.f);
-		}
-		else
-		{ // otherwise just highlight button in flash color
-			flash = true;
-		}
-	}
+	mFlashing = mFlashingTimer->isFlashing();
+
+	bool flash = mFlashing &&
+	                 (!sEnableButtonFlashing || mFlashingTimer->isHighlight());
 
 	bool pressed_by_keyboard = FALSE;
 	if (hasFocus())
@@ -951,10 +947,13 @@ void LLButton::setToggleState(BOOL b)
 
 void LLButton::setFlashing( BOOL b )	
 { 
-	if ((bool)b != mFlashing)
+	if (b)
+	{
+		mFlashingTimer->startFlashing();
+	}
+	else
 	{
-		mFlashing = b; 
-		mFlashingTimer.reset();
+		mFlashingTimer->stopFlashing();
 	}
 }
 
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index deaa0823c610a16be0fa85f770e31bbc59529dee..92548298f5046be6383aacdf07f866a5075d3859 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -30,6 +30,7 @@
 #include "lluuid.h"
 #include "llbadgeowner.h"
 #include "llcontrol.h"
+#include "llflashtimer.h"
 #include "lluictrl.h"
 #include "v4color.h"
 #include "llframetimer.h"
@@ -201,6 +202,7 @@ class LLButton
 	void			setHighlight(bool b);
 	void			setFlashing( BOOL b );
 	BOOL			getFlashing() const		{ return mFlashing; }
+    LLFlashTimer*   getFlashTimer() {return mFlashingTimer;}
 
 	void			setHAlign( LLFontGL::HAlign align )		{ mHAlign = align; }
 	LLFontGL::HAlign getHAlign() const						{ return mHAlign; }
@@ -285,8 +287,6 @@ class LLButton
 
 	LLFrameTimer	mMouseDownTimer;
 	bool			mNeedsHighlight;
-	S32				mButtonFlashCount;
-	F32				mButtonFlashRate;
 
 	void			drawBorder(LLUIImage* imagep, const LLColor4& color, S32 size);
 	void			resetMouseDownTimer();
@@ -373,7 +373,7 @@ class LLButton
 	bool						mForcePressedState;
 	bool						mDisplayPressedState;
 
-	LLFrameTimer				mFlashingTimer;
+	LLFlashTimer*				mFlashingTimer;
 
 	bool						mHandleRightMouse;
 };
diff --git a/indra/llui/llflashtimer.cpp b/indra/llui/llflashtimer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c572a83ff5f3d1bc2e3cc5fbb8fd071af1f6096e
--- /dev/null
+++ b/indra/llui/llflashtimer.cpp
@@ -0,0 +1,80 @@
+/**
+ * @file llflashtimer.cpp
+ * @brief LLFlashTimer class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+#include "../newview/llviewerprecompiledheaders.h"
+
+#include "llflashtimer.h"
+#include "../newview/llviewercontrol.h"
+#include "lleventtimer.h"
+
+LLFlashTimer::LLFlashTimer(callback_t cb, S32 count, F32 period)
+		: LLEventTimer(period)
+		, mCallback(cb)
+		, mCurrentTickCount(0)
+        , mIsFlashing(false)
+{
+	mEventTimer.stop();
+
+	// By default use settings from settings.xml to be able change them via Debug settings. See EXT-5973.
+	// Due to Timer is implemented as derived class from EventTimer it is impossible to change period
+	// in runtime. So, both settings are made as required restart.
+	mFlashCount = 2 * ((count>0)? count : gSavedSettings.getS32("FlashCount"));
+	if (mPeriod<=0)
+	{
+		mPeriod = gSavedSettings.getF32("FlashPeriod");
+	}
+}
+
+BOOL LLFlashTimer::tick()
+{
+	mIsHighlight = !(mCurrentTickCount % 2);
+	if (mCallback)
+	{
+		mCallback(mIsHighlight);
+	}
+
+	if (++mCurrentTickCount >= mFlashCount)
+	{
+		mEventTimer.stop();
+	}
+
+	return FALSE;
+}
+
+void LLFlashTimer::startFlashing()
+{
+	mCurrentTickCount = 0;
+	mIsFlashing = true;
+	mEventTimer.start();
+}
+
+void LLFlashTimer::stopFlashing()
+{
+	mIsFlashing = false;
+	mIsHighlight = false;
+	mEventTimer.stop();
+}
+
+
diff --git a/indra/llui/llflashtimer.h b/indra/llui/llflashtimer.h
new file mode 100644
index 0000000000000000000000000000000000000000..2ef6ebcc8ac6eff65cacd58cbefec6ff7f24ba37
--- /dev/null
+++ b/indra/llui/llflashtimer.h
@@ -0,0 +1,67 @@
+/**
+ * @file llflashtimer.h
+ * @brief LLFlashTimer class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_FLASHTIMER_H
+#define LL_FLASHTIMER_H
+
+#include "lleventtimer.h"
+
+class LLFlashTimer : public LLEventTimer
+{
+public:
+
+	typedef boost::function<void (bool)> callback_t;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param count - how many times callback should be called (twice to not change original state)
+	 * @param period - how frequently callback should be called
+	 * @param cb - callback to be called each tick
+	 */
+	LLFlashTimer(callback_t cb = NULL, S32 count = 0, F32 period = 0.0);
+	~LLFlashTimer() {};
+
+	/*virtual*/ BOOL tick();
+
+	void startFlashing();
+	void stopFlashing();
+
+	bool isFlashing() {return mIsFlashing;}
+	bool isHighlight() {return mIsHighlight;}
+
+private:
+	callback_t		mCallback;
+	/**
+	 * How many times parent will blink.
+	 */
+	S32 mFlashCount;
+	S32 mCurrentTickCount;
+	bool mIsHighlight;
+	bool mIsFlashing;
+};
+
+#endif /* LL_FLASHTIMER_H */
diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp
index 822534ffcfdc9d7e90476d965a8e65a05123b571..d65f53cd4daab121d7c93261a89b5abb0bd79d9e 100755
--- a/indra/llui/llfolderviewitem.cpp
+++ b/indra/llui/llfolderviewitem.cpp
@@ -23,9 +23,12 @@
 * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 * $/LicenseInfo$
 */
+#include "../newview/llviewerprecompiledheaders.h"
+
+#include "llflashtimer.h"
+
 #include "linden_common.h"
 #include "llfolderviewitem.h"
-
 #include "llfolderview.h"
 #include "llfolderviewmodel.h"
 #include "llpanel.h"
@@ -142,6 +145,8 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
     mArrowSize(p.arrow_size),
     mMaxFolderItemOverlap(p.max_folder_item_overlap)
 {
+	mFlashTimer = new LLFlashTimer();
+
 	sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);
 	sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE);
 	sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE);
@@ -160,17 +165,19 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
 	}
 }
 
+// Destroys the object
+LLFolderViewItem::~LLFolderViewItem()
+{
+	delete mFlashTimer;
+	mViewModelItem = NULL;
+}
+
 BOOL LLFolderViewItem::postBuild()
 {
 	refresh();
 	return TRUE;
 }
 
-// Destroys the object
-LLFolderViewItem::~LLFolderViewItem( void )
-{
-	mViewModelItem = NULL;
-}
 
 LLFolderView* LLFolderViewItem::getRoot()
 {
@@ -676,12 +683,16 @@ void LLFolderViewItem::drawHighlight(const BOOL showContent, const BOOL hasKeybo
     const S32 focus_bottom = getRect().getHeight() - mItemHeight;
     const bool folder_open = (getRect().getHeight() > mItemHeight + 4);
     const S32 FOCUS_LEFT = 1;
+    bool flashing = mFlashTimer->isFlashing();
+
+    if (flashing? mFlashTimer->isHighlight() : mIsSelected) // always render "current" item (only render other selected items if
+    	             // mShowSingleSelection is FALSE) or flashing item
 
-    if (mIsSelected) // always render "current" item.  Only render other selected items if mShowSingleSelection is FALSE
     {
         gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
         LLColor4 bg_color = bgColor;
-        if (!mIsCurSelection)
+        bool selection = flashing? mFlashTimer->isHighlight() : mIsCurSelection;
+        if (!selection)
         {
             // do time-based fade of extra objects
             F32 fade_time = (getRoot() ? getRoot()->getSelectionFadeElapsedTime() : 0.0f);
@@ -701,7 +712,7 @@ void LLFolderViewItem::drawHighlight(const BOOL showContent, const BOOL hasKeybo
             getRect().getWidth() - 2,
             focus_bottom,
             bg_color, hasKeyboardFocus);
-        if (mIsCurSelection)
+        if (selection)
         {
             gl_rect_2d(FOCUS_LEFT, 
                 focus_top, 
diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h
index 152ca242e16b602afa07a205a6dcd6a3ee0f62cd..c8d6c37b0403365bb36d0c0a327605a0e4f2540d 100755
--- a/indra/llui/llfolderviewitem.h
+++ b/indra/llui/llfolderviewitem.h
@@ -26,6 +26,7 @@
 #ifndef LLFOLDERVIEWITEM_H
 #define LLFOLDERVIEWITEM_H
 
+#include "llflashtimer.h"
 #include "llview.h"
 #include "lluiimage.h"
 
@@ -162,6 +163,7 @@ class LLFolderViewItem : public LLView
     S32 getIconPad();
     S32 getTextPad();
 
+    LLFlashTimer* getFlashTimer() {return mFlashTimer;}
 	// If 'selection' is 'this' then note that otherwise ignore.
 	// Returns TRUE if this item ends up being selected.
 	virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus);
@@ -272,6 +274,7 @@ class LLFolderViewItem : public LLView
 
 private:
 	static std::map<U8, LLFontGL*> sFonts; // map of styles to fonts
+	LLFlashTimer* mFlashTimer;
 
 };
 
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index c24eb2ee90a603813e62f7d067808fa7b2757985..d1f77830a64bf0a3f7136835c5ac98aaec19f897 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -506,8 +506,8 @@ void LLTabContainer::draw()
 		}
 	}
 
-	mPrevArrowBtn->setFlashing(FALSE);
-	mNextArrowBtn->setFlashing(FALSE);
+	mPrevArrowBtn->getFlashTimer()->stopFlashing();
+	mNextArrowBtn->getFlashTimer()->stopFlashing();
 }
 
 
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index b703b9cc8e2f3ca870d05e1a7c7fb2ecae6a7285..be793a344c197d06c15c3cf9d6673ebf2df84708 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -13142,10 +13142,10 @@
       <key>Value</key>
       <real>50.0</real>
     </map>
-    <key>WellIconFlashCount</key>
+    <key>FlashCount</key>
     <map>
       <key>Comment</key>
-      <string>Number of flashes of IM Well and Notification Well icons after which flashing buttons stay lit up. Requires restart.</string>
+      <string>Number of flashes of item. Requires restart.</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -13153,10 +13153,10 @@
       <key>Value</key>
       <integer>3</integer>
     </map>
-    <key>WellIconFlashPeriod</key>
+    <key>FlashPeriod</key>
     <map>
       <key>Comment</key>
-      <string>Period at which IM Well and Notification Well icons flash (seconds). Requires restart.</string>
+      <string>Period at which item flash (seconds). Requires restart.</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 64d8a68a996831f5d44c2b26ae9e4d9ed435f74e..d6860640b717a1382741063a0d7e4faaaafdbae8 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -67,60 +67,6 @@ boost::signals2::signal<LLChiclet* (const LLUUID&),
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 
-/**
- * Updates the Well's 'Lit' state to flash it when "new messages" are come.
- *
- * It gets callback which will be called 2*N times with passed period. See EXT-3147
- */
-class LLSysWellChiclet::FlashToLitTimer : public LLEventTimer
-{
-public:
-	typedef boost::function<void()> callback_t;
-
-	/**
-	 * Constructor.
-	 *
-	 * @param count - how many times callback should be called (twice to not change original state)
-	 * @param period - how frequently callback should be called
-	 * @param cb - callback to be called each tick
-	 */
-	FlashToLitTimer(S32 count, F32 period, callback_t cb)
-		: LLEventTimer(period)
-		, mCallback(cb)
-		, mFlashCount(2 * count)
-		, mCurrentFlashCount(0)
-	{
-		mEventTimer.stop();
-	}
-
-	BOOL tick()
-	{
-		mCallback();
-
-		if (++mCurrentFlashCount == mFlashCount) mEventTimer.stop();
-		return FALSE;
-	}
-
-	void flash()
-	{
-		mCurrentFlashCount = 0;
-		mEventTimer.start();
-	}
-
-	void stopFlashing()
-	{
-		mEventTimer.stop();
-	}
-
-private:
-	callback_t		mCallback;
-
-	/**
-	 * How many times Well will blink.
-	 */
-	S32 mFlashCount;
-	S32 mCurrentFlashCount;
-};
 
 LLSysWellChiclet::Params::Params()
 : button("button")
@@ -145,13 +91,8 @@ LLSysWellChiclet::LLSysWellChiclet(const Params& p)
 	mButton = LLUICtrlFactory::create<LLButton>(button_params);
 	addChild(mButton);
 
-	// use settings from settings.xml to be able change them via Debug settings. See EXT-5973.
-	// Due to Timer is implemented as derived class from EventTimer it is impossible to change period
-	// in runtime. So, both settings are made as required restart.
-	static S32 flash_to_lit_count = gSavedSettings.getS32("WellIconFlashCount");
-	static F32 flash_period = gSavedSettings.getF32("WellIconFlashPeriod");
 
-	mFlashToLitTimer = new FlashToLitTimer(flash_to_lit_count, flash_period, boost::bind(&LLSysWellChiclet::changeLitState, this));
+	mFlashToLitTimer = new LLFlashTimer(boost::bind(&LLSysWellChiclet::changeLitState, this, _1));
 }
 
 LLSysWellChiclet::~LLSysWellChiclet()
@@ -191,7 +132,7 @@ void LLSysWellChiclet::setToggleState(BOOL toggled) {
 	mButton->setToggleState(toggled);
 }
 
-void LLSysWellChiclet::changeLitState()
+void LLSysWellChiclet::changeLitState(bool blink)
 {
 	setNewMessagesState(!mIsNewMessagesState);
 }
@@ -320,7 +261,7 @@ void LLIMWellChiclet::messageCountChanged(const LLSD& session_data)
 	// we have to flash to 'Lit' state each time new unread message is coming.
 	if (counter > mCounter && im_not_visible)
 	{
-		mFlashToLitTimer->flash();
+		mFlashToLitTimer->startFlashing();
 	}
 	else if (counter == 0)
 	{
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index d6be2df1035596956fc121427e71e05d0fe5d322..79ffad92ef5a68f1a6911258de1f2b7770f82d6a 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -29,6 +29,7 @@
 
 #include "llavatariconctrl.h"
 #include "llbutton.h"
+#include "llflashtimer.h"
 #include "llpanel.h"
 #include "lltextbox.h"
 #include "lloutputmonitorctrl.h"
@@ -844,7 +845,7 @@ class LLSysWellChiclet : public LLChiclet
 	 * There is an assumption that it will be called 2*N times to do not change its start state.
 	 * @see FlashToLitTimer
 	 */
-	void changeLitState();
+	void changeLitState(bool blink);
 
 	/**
 	 * Displays menu.
@@ -860,7 +861,7 @@ class LLSysWellChiclet : public LLChiclet
 	S32 mMaxDisplayedCount;
 	bool mIsNewMessagesState;
 
-	FlashToLitTimer* mFlashToLitTimer;
+	LLFlashTimer* mFlashToLitTimer;
 	LLContextMenu* mContextMenu;
 };
 
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index aebfdb5bce20a8684cee8af81bf6c74d1e1adfa8..90ddeef5bbb2e12b26da969b0361ffa9138cfc91 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -41,6 +41,7 @@
 #include "llcallbacklist.h"
 #include "llgroupactions.h"
 #include "llgroupiconctrl.h"
+#include "llflashtimer.h"
 #include "llfloateravatarpicker.h"
 #include "llfloaterpreference.h"
 #include "llimview.h"
@@ -1154,6 +1155,7 @@ void LLFloaterIMContainer::selectConversation(const LLUUID& session_id)
 	}
 }
 
+
 // Synchronous select the conversation item and the conversation floater
 BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool select_widget)
 {
@@ -1593,7 +1595,22 @@ void LLFloaterIMContainer::reSelectConversation()
 	{
 		selectFloater(session_floater);
 	}
+}
 
+void LLFloaterIMContainer::flashConversationItemWidget(const LLUUID& session_id, bool is_flashes)
+{
+	LLFolderViewItem* widget = get_ptr_in_map(mConversationsWidgets,session_id);
+	if (widget)
+	{
+		if (is_flashes)
+		{
+			widget->getFlashTimer()->startFlashing();
+		}
+		else
+		{
+			widget->getFlashTimer()->stopFlashing();
+		}
+	}
 }
 
 // EOF
diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h
index afc8d00174ea572014de03d19adf332a17f57d06..9112b540187cbe79d0fe205d7ce598e7c1e1d17a 100644
--- a/indra/newview/llfloaterimcontainer.h
+++ b/indra/newview/llfloaterimcontainer.h
@@ -164,6 +164,7 @@ class LLFloaterIMContainer
 	void setTimeNow(const LLUUID& session_id, const LLUUID& participant_id);
 	void setNearbyDistances();
 	void reSelectConversation();
+	void flashConversationItemWidget(const LLUUID& session_id, bool is_flashes);
 
 private:
 	LLConversationViewSession* createConversationItemWidget(LLConversationItem* item);
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index 69b42cdd6d9e1d3275e8037d451ed650a5c6f3c9..42e7e6cb553044834c472d4dd3435845ea43f4ae 100644
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -40,6 +40,7 @@
 #include "llfloaterimsession.h"
 #include "llfloaterimcontainer.h" // to replace separate IM Floaters with multifloater container
 #include "lllayoutstack.h"
+#include "lltoolbarview.h"
 #include "llfloaterimnearbychat.h"
 
 const F32 REFRESH_INTERVAL = 0.2f;
@@ -328,11 +329,20 @@ std::string LLFloaterIMSessionTab::appendTime()
 
 void LLFloaterIMSessionTab::appendMessage(const LLChat& chat, const LLSD &args)
 {
+
 	// Update the participant activity time
 	LLFloaterIMContainer* im_box = LLFloaterIMContainer::findInstance();
 	if (im_box)
 	{
 		im_box->setTimeNow(mSessionID,chat.mFromID);
+
+		// TODO: Warning! The next two lines of code are included below only temporarily
+		// to demonstrate the correct format call the appropriate functions.
+		// They should be moved to the right places when working on CHUI-486. ~Alex ProductEngine.
+		// ---- start demo ----
+            im_box->flashConversationItemWidget(mSessionID, true); // flashing of the conversation's item
+            gToolBarView->flashCommand(LLCommandId("chat"), true); // flashing of the FUI button "Chat"
+        // ---- end demo -----
 	}
 	
 
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index e2b678626b14693f33630b0a74ccc6a205396976..b5dc4a7967f7e52ee1b492d1d63bc5fe61f82d78 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -2808,7 +2808,7 @@ void LLIMMgr::inviteToSession(
 	{
 		bool isRejectGroupCall = (gSavedSettings.getBOOL("VoiceCallsRejectGroup") && (notify_box_type == "VoiceInviteGroup"));
 		bool isRejectNonFriendCall = (gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && (LLAvatarTracker::instance().getBuddyInfo(caller_id) == NULL));
-		bool isRejectDoNotDisturb = gAgent.isDoNotDisturb();
+		bool isRejectDoNotDisturb = (gAgent.isDoNotDisturb() && !hasSession(session_id));
 		if	(isRejectGroupCall || isRejectNonFriendCall || isRejectDoNotDisturb)
 		{
 			if (isRejectDoNotDisturb && !isRejectGroupCall && !isRejectNonFriendCall)
diff --git a/indra/newview/skins/default/xui/en/widgets/toolbar.xml b/indra/newview/skins/default/xui/en/widgets/toolbar.xml
index 0aa478ace9fc66945f817d827bad357f255d1f0b..55ae158c00984a82cd87c154806ff62cb1f6070b 100644
--- a/indra/newview/skins/default/xui/en/widgets/toolbar.xml
+++ b/indra/newview/skins/default/xui/en/widgets/toolbar.xml
@@ -30,8 +30,8 @@
                         image_overlay_alignment="left"
                         use_ellipses="true"
                         auto_resize="true"
-                        button_flash_count="99999"
-                        button_flash_rate="1.0"
+                        button_flash_count="3"
+                        button_flash_rate="0.25"
                         flash_color="EmphasisColor"/>
   <button_icon pad_left="10"
                pad_right="10"