diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp
index d8ef5b39adecf94e203f94f22fec83de2c83a54e..f3a2ed94085baa3d6aa31a5ce03052eeb5d81c04 100644
--- a/indra/newview/llpanelnearbymedia.cpp
+++ b/indra/newview/llpanelnearbymedia.cpp
@@ -1168,12 +1168,12 @@ void LLPanelNearByMedia::onClickSelectedMediaMute()
 			F32 volume = impl->getVolume();
 			if(volume > 0.0)
 			{
-				impl->setVolume(0.0);
+				impl->setMute(true);
 			}
 			else if (mVolumeSlider->getValueF32() == 0.0)
 			{
-				impl->setVolume(1.0);
-				mVolumeSlider->setValue(1.0);
+				impl->setMute(false);
+				mVolumeSlider->setValue(impl->getVolume());
 			}
 			else 
 			{
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 4334cbfda33f2f12cc5b9c5b4f59f715d91d79b5..22a21c9ca3c60e3d0144804c93c3cf15bdc31daa 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -1555,6 +1555,7 @@ LLViewerMediaImpl::LLViewerMediaImpl(	  const LLUUID& texture_id,
 	mNavigateServerRequest(false),
 	mMediaSourceFailed(false),
 	mRequestedVolume(1.0f),
+	mPreviousVolume(1.0f),
 	mIsMuted(false),
 	mNeedsMuteCheck(false),
 	mPreviousMediaState(MEDIA_NONE),
@@ -2081,6 +2082,20 @@ void LLViewerMediaImpl::setVolume(F32 volume)
 	updateVolume();
 }
 
+//////////////////////////////////////////////////////////////////////////////////////////
+void LLViewerMediaImpl::setMute(bool mute)
+{
+	if (mute)
+	{
+		mPreviousVolume = mRequestedVolume;
+		setVolume(0.0);
+	}
+	else
+	{
+		setVolume(mPreviousVolume);
+	}
+}
+
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::updateVolume()
 {
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index c52960dfcfe85e8e58625f6e905d7c52e61ff572..e2e758befb6df2a59946f55cae1671100075c6b3 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -216,6 +216,7 @@ class LLViewerMediaImpl
 	void skipBack(F32 step_scale);
 	void skipForward(F32 step_scale);
 	void setVolume(F32 volume);
+	void setMute(bool mute);
 	void updateVolume();
 	F32 getVolume();
 	void focus(bool focus);
@@ -448,6 +449,7 @@ class LLViewerMediaImpl
 	bool mNavigateServerRequest;
 	bool mMediaSourceFailed;
 	F32 mRequestedVolume;
+	F32 mPreviousVolume;
 	bool mIsMuted;
 	bool mNeedsMuteCheck;
 	int mPreviousMediaState;