diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index af3fac91bc07d17da393ad3010a7c9431c37f3ca..396b69ae3a22bd10ba7a473934e3594eeb5a37a9 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -119,6 +119,7 @@ BOOL  LLAvatarListItem::postBuild()
 	mIconPermissionEditTheirs->setVisible(false);
 
 	mSpeakingIndicator = getChild<LLOutputMonitorCtrl>("speaking_indicator");
+	mSpeakingIndicator->setChannelState(LLOutputMonitorCtrl::UNDEFINED_CHANNEL);
 	mInfoBtn = getChild<LLButton>("info_btn");
 	mProfileBtn = getChild<LLButton>("profile_btn");
 
diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp
index a873ccf98b8143c8aa768ef0f53f445202cd427e..7f6c065bb9f8b3ba62d16d8e9a21b2d9e4e7fd0c 100644
--- a/indra/newview/lloutputmonitorctrl.cpp
+++ b/indra/newview/lloutputmonitorctrl.cpp
@@ -74,9 +74,9 @@ LLOutputMonitorCtrl::LLOutputMonitorCtrl(const LLOutputMonitorCtrl::Params& p)
 	mSpeakerId(p.speaker_id),
 	mIsModeratorMuted(false),
 	mIsAgentControl(false),
-	mIsActiveChannel(false),
 	mIndicatorToggled(false),
-	mShowParticipantsSpeaking(false)
+	mShowParticipantsSpeaking(false),
+	mChannelState(INACTIVE_CHANNEL)
 {
 	//static LLUIColor output_monitor_muted_color = LLUIColorTable::instance().getColor("OutputMonitorMutedColor", LLColor4::orange);
 	//static LLUIColor output_monitor_overdriven_color = LLUIColorTable::instance().getColor("OutputMonitorOverdrivenColor", LLColor4::red);
@@ -259,8 +259,13 @@ BOOL LLOutputMonitorCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
 
 void LLOutputMonitorCtrl::setIsActiveChannel(bool val)
 {
-    mIsActiveChannel = val;
-    if (!val)
+    setChannelState(val ? ACTIVE_CHANNEL : INACTIVE_CHANNEL);
+}
+
+void LLOutputMonitorCtrl::setChannelState(EChannelState state)
+{
+    mChannelState = state;
+    if (state == INACTIVE_CHANNEL)
     {
         // switchIndicator will set it to TRUE when channel becomes active
         setVisible(FALSE);
@@ -316,7 +321,7 @@ void LLOutputMonitorCtrl::onChange()
 // virtual
 void LLOutputMonitorCtrl::switchIndicator(bool switch_on)
 {
-    if (mIsActiveChannel && getVisible() != (BOOL)switch_on)
+    if ((mChannelState != INACTIVE_CHANNEL) && (getVisible() != (BOOL)switch_on))
     {
         setVisible(switch_on);
         
diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h
index 307cd30ab34bc3ff947eb68df973aa425853b39d..98966d39ee00fba411b5d8e666981fb0d4d79edc 100644
--- a/indra/newview/lloutputmonitorctrl.h
+++ b/indra/newview/lloutputmonitorctrl.h
@@ -81,8 +81,16 @@ class LLOutputMonitorCtrl
 	void			setIsAgentControl(bool val) { mIsAgentControl = val; }
 	void			setIsTalking(bool val) { mIsTalking = val; }
 
+	enum EChannelState
+	{
+		ACTIVE_CHANNEL,
+		INACTIVE_CHANNEL,
+		UNDEFINED_CHANNEL
+	};
+
 	// switchIndicator controls visibility, 'active channel' governs if we are allowed to show indicator
 	void			setIsActiveChannel(bool val);
+	void			setChannelState(EChannelState state);
 
 	void			setShowParticipantsSpeaking(bool show) { mShowParticipantsSpeaking = show; }
 
@@ -139,7 +147,6 @@ class LLOutputMonitorCtrl
 	bool			mIsModeratorMuted;
 	bool			mIsMuted;
 	bool			mIsTalking;
-	bool			mIsActiveChannel;
 	bool			mShowParticipantsSpeaking;
 	LLPointer<LLUIImage> mImageMute;
 	LLPointer<LLUIImage> mImageOff;
@@ -155,6 +162,8 @@ class LLOutputMonitorCtrl
 	LLUUID			mSpeakerId;
 
     bool mIndicatorToggled;
+
+    EChannelState	mChannelState;
 };
 
 #endif