diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 44fbceed14aedf85929808e6499f777d6d161dd7..cfe83cb0b6b187d51cb0d99f571f0b1c674d6942 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3080,7 +3080,7 @@ void LLVOAvatar::slamPosition()
 	mRoot->updateWorldMatrixChildren();
 }
 
-bool LLVOAvatar::isVisuallyMuted()
+bool LLVOAvatar::isVisuallyMuted() const
 {
 	bool muted = false;
 
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 2921a3a3f9d4807ed6b41458b185e7ea45432b4a..f0f8bbe21b9d688183c9ceb6ef3260d10ef72cb1 100755
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -385,7 +385,7 @@ class LLVOAvatar :
 
 public:
 	U32 		renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0);
-	bool		isVisuallyMuted();
+	bool		isVisuallyMuted() const;
 	void		setCachedVisualMute(bool muted)						{ mCachedVisualMute = muted;	};
 	void		forceUpdateVisualMuteSettings();
 
@@ -422,8 +422,9 @@ class LLVOAvatar :
 	S32	 		mUpdatePeriod;
 	S32  		mNumInitFaces; //number of faces generated when creating the avatar drawable, does not inculde splitted faces due to long vertex buffer.
 
-	bool		mCachedVisualMute;				// cached return value for isVisuallyMuted()
-	F64			mCachedVisualMuteUpdateTime;	// Time to update mCachedVisualMute
+	// the isVisuallyMuted method uses these mutable values to avoid recalculating too frequently
+	mutable bool mCachedVisualMute;	// cached return value for isVisuallyMuted()
+	mutable F64 mCachedVisualMuteUpdateTime; // Time to update mCachedVisualMute
 
 	VisualMuteSettings		mVisuallyMuteSetting;			// Always or never visually mute this AV