diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 17b43901a9f8f32fdd54bf1862f39e675ec9e242..31890ca2050e0cc062cd862252e887a81d51e215 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -9911,17 +9911,6 @@
     <key>Value</key>
     <integer>0</integer>
   </map>
-  <key>RenderAutoMuteFunctions</key>
-  <map>
-    <key>Comment</key>
-    <string>Developing feature to render some avatars using simple impostors or colored silhouettes.  (Set to 7 for all functionality)</string>
-    <key>Persist</key>
-    <integer>1</integer>
-    <key>Type</key>
-    <string>U32</string>
-    <key>Value</key>
-    <real>0</real>
-  </map>
   <key>RenderAutoMuteLogging</key>
   <map>
     <key>Comment</key>
diff --git a/indra/newview/llavatarrenderinfoaccountant.cpp b/indra/newview/llavatarrenderinfoaccountant.cpp
index 38e153137c99c9fe27a64482021d597619e5f2ac..ca2674bf94b9df431211583621044be9c20eab6f 100644
--- a/indra/newview/llavatarrenderinfoaccountant.cpp
+++ b/indra/newview/llavatarrenderinfoaccountant.cpp
@@ -335,35 +335,6 @@ void LLAvatarRenderInfoAccountant::idle()
 		// We scanned all the regions, reset the request timer.
 		sRenderInfoReportTimer.resetWithExpiry(SECS_BETWEEN_REGION_SCANS);
 	}
-
-	static LLCachedControl<U32> render_auto_mute_functions(gSavedSettings, "RenderAutoMuteFunctions", 0);
-	static U32 prev_render_auto_mute_functions = (U32) -1;
-	if (prev_render_auto_mute_functions != render_auto_mute_functions)
-	{
-		prev_render_auto_mute_functions = render_auto_mute_functions;
-
-		// Adjust menus
-		BOOL show_items = (BOOL)(render_auto_mute_functions & 0x04);
-		gMenuAvatarOther->setItemVisible( std::string("Normal"), show_items);
-		gMenuAvatarOther->setItemVisible( std::string("Always use impostor"), show_items);
-		gMenuAvatarOther->setItemVisible( std::string("Never use impostor"), show_items);
-		gMenuAvatarOther->setItemVisible( std::string("Impostor seperator"), show_items);
-		
-		gMenuAttachmentOther->setItemVisible( std::string("Normal"), show_items);
-		gMenuAttachmentOther->setItemVisible( std::string("Always use impostor"), show_items);
-		gMenuAttachmentOther->setItemVisible( std::string("Never use impostor"), show_items);
-		gMenuAttachmentOther->setItemVisible( std::string("Impostor seperator"), show_items);
-
-		if (!show_items)
-		{	// Turning off visual muting
-			for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
-					iter != LLCharacter::sInstances.end(); ++iter)
-			{	// Make sure all AVs have the setting cleared
-				LLVOAvatar* inst = (LLVOAvatar*) *iter;
-				inst->setCachedVisualMute(false);
-			}
-		}
-	}
 }
 
 
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 4f992fc18491cb4976d1b01c6cbbbaefe04867e7..2f6283c8d087d9595b5b7bca41aee4695945d6d8 100755
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -4926,12 +4926,7 @@ void LLViewerObject::setDebugText(const std::string &utf8text)
 
 	if (!mText)
 	{
-		mText = (LLHUDText *)LLHUDObject::addHUDObject(LLHUDObject::LL_HUD_TEXT);
-		mText->setFont(LLFontGL::getFontSansSerif());
-		mText->setVertAlignment(LLHUDText::ALIGN_VERT_TOP);
-		mText->setMaxLines(-1);
-		mText->setSourceObject(this);
-		mText->setOnHUDAttachment(isHUDAttachment());
+		initDebugTextHud();
 	}
 	mText->setColor(LLColor4::white);
 	mText->setString(utf8text);
@@ -4940,6 +4935,16 @@ void LLViewerObject::setDebugText(const std::string &utf8text)
 	updateText();
 }
 
+void LLViewerObject::initDebugTextHud()
+{
+	mText = (LLHUDText *)LLHUDObject::addHUDObject(LLHUDObject::LL_HUD_TEXT);
+	mText->setFont(LLFontGL::getFontSansSerif());
+	mText->setVertAlignment(LLHUDText::ALIGN_VERT_TOP);
+	mText->setMaxLines(-1);
+	mText->setSourceObject(this);
+	mText->setOnHUDAttachment(isHUDAttachment());
+}
+
 void LLViewerObject::setIcon(LLViewerTexture* icon_image)
 {
 	if (!mIcon)
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index bab107cc5709b67b62d9233b829d6adec0074833..e7ae0af32a7164f5203327201aceabf0b9a40bd6 100755
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -398,6 +398,7 @@ class LLViewerObject
 
 	void setCanSelect(BOOL canSelect);
 
+	void initDebugTextHud();
 	void setDebugText(const std::string &utf8text);
 	void setIcon(LLViewerTexture* icon_image);
 	void clearIcon();
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index e0128463f39a4859e07d6305d728d8a424fc4e7d..3a83943209f8a96df2a43223c2655c5e23c77445 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -7953,57 +7953,82 @@ void LLVOAvatar::idleUpdateRenderCost()
 {
 	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_AVATAR_DRAW_INFO))
 	{
-		std::string render_info_text;
-		F32 worst_ratio = 0.f;
-		F32 red_level = 0.f;
-		F32 green_level = 0.f;
+		std::string info_line;
+		F32 red_level;
+		F32 green_level;
+		LLColor4 info_color;
+		LLFontGL::StyleFlags info_style;
+		
+		if ( !mText )
+		{
+			initDebugTextHud();
+		}
+		else
+		{
+			mText->clearString(); // clear debug text
+		}
 		
 		static LLCachedControl<U32> max_attachment_bytes(gSavedSettings, "RenderAutoMuteByteLimit", 0);
-		render_info_text.append(llformat("%.1f KB%s", mAttachmentGeometryBytes/1024.f,
-										 (max_attachment_bytes > 0 && mAttachmentGeometryBytes > max_attachment_bytes) ? "!" : ""));
-
+		info_line = llformat("%.1f KB", mAttachmentGeometryBytes/1024.f);
 		if (max_attachment_bytes != 0) // zero means don't care, so don't bother coloring based on this
 		{
-			if ((mAttachmentGeometryBytes/(F32)max_attachment_bytes) > worst_ratio)
-			{
-				worst_ratio = mAttachmentGeometryBytes/(F32)max_attachment_bytes;
-				green_level = 1.f-llclamp(((F32) mAttachmentGeometryBytes-(F32)max_attachment_bytes)/(F32)max_attachment_bytes, 0.f, 1.f);
-				red_level   = llmin((F32) mAttachmentGeometryBytes/(F32)max_attachment_bytes, 1.f);
-			}
+			green_level = 1.f-llclamp(((F32) mAttachmentGeometryBytes-(F32)max_attachment_bytes)/(F32)max_attachment_bytes, 0.f, 1.f);
+			red_level   = llmin((F32) mAttachmentGeometryBytes/(F32)max_attachment_bytes, 1.f);
+			info_color.set(red_level, green_level, 0.0, 1.0);
+			info_style = (  mAttachmentGeometryBytes > max_attachment_bytes
+						  ? LLFontGL::BOLD : LLFontGL::NORMAL );
+		}
+		else
+		{
+			info_color.setToWhite();
+			info_style = LLFontGL::NORMAL;
 		}
+		LL_DEBUGS() << "adding max bytes " << info_line << LL_ENDL;
+		mText->addLine(info_line, info_color);
 		
 		static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit", 0);
-		render_info_text.append(llformat(" %.2f m^2%s", mAttachmentSurfaceArea,
-										 (max_attachment_area > 0 && mAttachmentSurfaceArea > max_attachment_area) ? "!" : ""));
+		info_line = llformat("%.2f m^2", mAttachmentSurfaceArea);
 
 		if (max_attachment_area != 0) // zero means don't care, so don't bother coloring based on this
 		{
-			if ((mAttachmentSurfaceArea/max_attachment_area) > worst_ratio)
-			{
-				worst_ratio = mAttachmentSurfaceArea/max_attachment_area;
-				green_level = 1.f-llclamp((mAttachmentSurfaceArea-max_attachment_area)/max_attachment_area, 0.f, 1.f);
-				red_level   = llmin(mAttachmentSurfaceArea/max_attachment_area, 1.f);
-			}
+			green_level = 1.f-llclamp((mAttachmentSurfaceArea-max_attachment_area)/max_attachment_area, 0.f, 1.f);
+			red_level   = llmin(mAttachmentSurfaceArea/max_attachment_area, 1.f);
+			info_color.set(red_level, green_level, 0.0, 1.0);
+			info_style = (  max_attachment_area > mAttachmentSurfaceArea
+						  ? LLFontGL::BOLD : LLFontGL::NORMAL );
+
+		}
+		else
+		{
+			info_color.setToWhite();
+			info_style = LLFontGL::NORMAL;
 		}
+		LL_DEBUGS() << "adding max area " << info_line << LL_ENDL;
+		mText->addLine(info_line, info_color, info_style);
 
 		calculateUpdateRenderCost();				// Update mVisualComplexity if needed	
 
 		static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAutoMuteRenderWeightLimit", 0);
-		render_info_text.append(llformat(" %d%s", mVisualComplexity,
-										 (max_render_cost > 0 && mVisualComplexity > max_render_cost) ? "!" : ""));
+		info_line = llformat("%d arc", mVisualComplexity);
 
 		if (max_render_cost != 0) // zero means don't care, so don't bother coloring based on this
 		{
-			if (((F32)mVisualComplexity/(F32)max_render_cost) > worst_ratio)
-			{
-				worst_ratio = (F32)mVisualComplexity/(F32)max_render_cost;
-				green_level = 1.f-llclamp(((F32) mVisualComplexity-(F32)max_render_cost)/(F32)max_render_cost, 0.f, 1.f);
-				red_level   = llmin((F32) mVisualComplexity/(F32)max_render_cost, 1.f);
-			}
+			green_level = 1.f-llclamp(((F32) mVisualComplexity-(F32)max_render_cost)/(F32)max_render_cost, 0.f, 1.f);
+			red_level   = llmin((F32) mVisualComplexity/(F32)max_render_cost, 1.f);
+			info_color.set(red_level, green_level, 0.0, 1.0);
+			info_style = (  mVisualComplexity > max_render_cost
+						  ? LLFontGL::BOLD : LLFontGL::NORMAL );
+
+		}
+		else
+		{
+			info_color.setToWhite();
+			info_style = LLFontGL::NORMAL;
 		}
+		LL_DEBUGS() << "adding max cost " << info_line << LL_ENDL;
+		mText->addLine(info_line, info_color, info_style);
 
-		setDebugText(render_info_text);
-		mText->setColor(worst_ratio != 0.f ? LLColor4(red_level,green_level,0,1) : LLColor4::green);
+		updateText(); // corrects position
 	}
 }