diff --git a/indra/newview/app_settings/high_graphics.xml b/indra/newview/app_settings/high_graphics.xml
index 37def19aaa0be0cafbb314d94740cd0419da21e1..4e7c0fa914e6383a3201a1e735b20ac99db395e0 100755
--- a/indra/newview/app_settings/high_graphics.xml
+++ b/indra/newview/app_settings/high_graphics.xml
@@ -27,9 +27,8 @@
 	<!--Default for now-->
 	<RenderTreeLODFactor value="0.5"/>
 	<!--Avater Impostors and Visual Muting Limits-->
-	<RenderUseImpostors value="TRUE"/>
-    <RenderAvatarMaxVisible          value="20"/>
-    <RenderAutoMuteRenderWeightLimit value="350000"/>
+    <RenderAvatarMaxNonImpostors     value="20"/>
+    <RenderAvatarMaxComplexity              value="350000"/>
     <RenderAutoMuteSurfaceAreaLimit  value="300"/>
 	<!--Default for now-->
 	<RenderVolumeLODFactor value="1.125"/>
diff --git a/indra/newview/app_settings/low_graphics.xml b/indra/newview/app_settings/low_graphics.xml
index 683c2bd996f4c39fe6959d50267118a9459a0e2b..b98d681018e43218cc5087c6f5e455990e5d73c0 100755
--- a/indra/newview/app_settings/low_graphics.xml
+++ b/indra/newview/app_settings/low_graphics.xml
@@ -7,7 +7,7 @@
 	<!--Default for now-->
 	<RenderAvatarPhysicsLODFactor value="0.0"/>
 	<!--Default for now-->
-	<RenderAvatarMaxVisible value="3"/>
+	<RenderAvatarMaxNonImpostors value="10"/>
 	<!--NO SHADERS-->
 	<RenderAvatarVP value="FALSE"/>
 	<!--Short Range-->
@@ -29,9 +29,8 @@
 	<!--Default for now-->
 	<RenderTreeLODFactor value="0.5"/>
 	<!--Avater Impostors and Visual Muting Limits-->
-	<RenderUseImpostors value="TRUE"/>
-    <RenderAvatarMaxVisible          value="12"/>
-    <RenderAutoMuteRenderWeightLimit value="75000"/>
+    <RenderAvatarMaxNonImpostors     value="12"/>
+    <RenderAvatarMaxComplexity              value="75000"/>
     <RenderAutoMuteSurfaceAreaLimit  value="150"/>
 	<!--Default for now-->
 	<RenderVolumeLODFactor value="1.125"/>
diff --git a/indra/newview/app_settings/mid_graphics.xml b/indra/newview/app_settings/mid_graphics.xml
index f9b199c7287ef47ba27344a23f1de46fc281012b..fad48f9683c21604d2e5e3509861eb4a707fd22d 100755
--- a/indra/newview/app_settings/mid_graphics.xml
+++ b/indra/newview/app_settings/mid_graphics.xml
@@ -27,9 +27,8 @@
 	<!--Default for now-->
 	<RenderTreeLODFactor value="0.5"/>
 	<!--Avater Impostors and Visual Muting Limits-->
-	<RenderUseImpostors value="TRUE"/>
-    <RenderAvatarMaxVisible          value="18"/>
-    <RenderAutoMuteRenderWeightLimit value="100000"/>
+    <RenderAvatarMaxNonImpostors     value="18"/>
+    <RenderAvatarMaxComplexity              value="100000"/>
     <RenderAutoMuteSurfaceAreaLimit  value="200"/>
 	<!--Default for now-->
 	<RenderVolumeLODFactor value="1.125"/>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 0c5126574fbf3b19cb40f34f22331f7933529bb6..de81f8f0ee94f3f57e6cb1f05385e0b425f044ef 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8287,15 +8287,13 @@
     <key>RenderAvatarMaxVisible</key>
     <map>
       <key>Comment</key>
-      <string>Maximum number of avatars to fully render at one time;
-      over this limit uses impostor rendering (simplified rendering
-      with less frequent updates)</string>
+      <string>OBSOLETE and UNUSED. See RenderAvatarMaxNonImpostors</string>
       <key>Persist</key>
-      <integer>1</integer>
+      <integer>0</integer>
       <key>Type</key>
       <string>S32</string>
       <key>Value</key>
-      <integer>12</integer>
+      <integer>0</integer>
     </map>
     <key>RenderAvatarPhysicsLODFactor</key>
     <map>
@@ -9846,29 +9844,28 @@
     <key>Value</key>
     <integer>0</integer>
   </map>
-    <key>RenderUseFarClip</key>
-    <map>
-      <key>Comment</key>
-      <string>If false, frustum culling will ignore far clip plane.</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-    <key>RenderUseImpostors</key>
-    <map>
-      <key>Comment</key>
-      <string>Whether we want to use impostors for far away avatars.</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>1</integer>
-    </map>
-  
+  <key>RenderUseFarClip</key>
+  <map>
+    <key>Comment</key>
+    <string>If false, frustum culling will ignore far clip plane.</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>RenderUseImpostors</key>
+  <map>
+    <key>Comment</key>
+    <string>OBSOLETE and UNUSED. See RenderAvatarMaxNonImpostors and RenderAvatarMaxComplexity.</string>
+    <key>Persist</key>
+    <integer>0</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
   <key>RenderAutoMuteByteLimit</key>
   <map>
     <key>Comment</key>
@@ -9880,10 +9877,35 @@
     <key>Value</key>
     <integer>10000000</integer>
   </map>
+  <key>RenderAvatarMaxNonImpostors</key>
+  <map>
+    <key>Comment</key>
+    <string>Maximum number of avatars to fully render at one time;
+    over this limit uses impostor rendering (simplified rendering
+    with less frequent updates), reducing client lag.</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>U32</string>
+    <key>Value</key>
+    <integer>12</integer>
+  </map>
   <key>RenderAutoMuteRenderWeightLimit</key>
   <map>
     <key>Comment</key>
-    <string>Maximum render weight before an avatar is rendered as a simple impostor (0 to not use this limit).</string>
+    <string>OBSOLETE. This setting has been renamed RenderAvatarMaxNonImpostors.</string>
+    <key>Persist</key>
+    <integer>0</integer>
+    <key>Type</key>
+    <string>U32</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
+  <key>RenderAvatarMaxComplexity</key>
+  <map>
+    <key>Comment</key>
+    <string>Maximum Avatar Complexity; above this value, the avatar is
+    rendered as a solid color outline (0 to disable this limit).</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -15575,12 +15597,25 @@
       <key>Value</key>
       <string />
     </map>
-    <key>MaximumARC</key>
+    <key>IndirectMaxComplexity</key>
     <map>
       <key>Comment</key>
-      <string>Controls RenderAutoMuteRenderWeightLimit in a non-linear fashion</string>
+      <string>Controls RenderAvatarMaxComplexity in a non-linear fashion (do
+      not set this value)</string>
       <key>Persist</key>
-      <integer>1</integer>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>U32</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>IndirectMaxNonImpostors</key>
+    <map>
+      <key>Comment</key>
+      <string>Controls RenderAvatarMaxNonImpostors in a non-linear fashion (do
+      not set this value)</string>
+      <key>Persist</key>
+      <integer>0</integer>
       <key>Type</key>
       <string>U32</string>
       <key>Value</key>
diff --git a/indra/newview/app_settings/ultra_graphics.xml b/indra/newview/app_settings/ultra_graphics.xml
index dcf63eced5f40f5890bd1a5ba8c4a03fd74a1cc6..270f91aeeb7f6572a3e96283ffdc8566dcb64a5f 100755
--- a/indra/newview/app_settings/ultra_graphics.xml
+++ b/indra/newview/app_settings/ultra_graphics.xml
@@ -26,10 +26,10 @@
 	<RenderTerrainLODFactor value="2.0"/>
 	<!--Default for now-->
 	<RenderTreeLODFactor value="1.0"/>
-	<!--Avater Impostors and Visual Muting Limits-->
-	<RenderUseImpostors value="TRUE"/>
-    <RenderAvatarMaxVisible          value="0"/>
-    <RenderAutoMuteRenderWeightLimit value="0"/>
+	<!--Avater Impostors and Visual Muting Limits (real defaults set
+        based on default graphics setting -->
+    <RenderAvatarMaxNonImpostors     value="0"/>
+    <RenderAvatarMaxComplexity              value="0"/>
     <RenderAutoMuteSurfaceAreaLimit  value="10000"/>
 	<!--Default for now-->
 	<RenderVolumeLODFactor value="2.0"/>
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index 4030324ecbd414526db0f37d2ad3175116110488..4b4892f03bba3656a3553550009b755de96969ae 100755
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -31,7 +31,8 @@ RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
 RenderAvatarPhysicsLODFactor 1	1.0
-RenderAvatarMaxVisible      1   12
+RenderAvatarMaxNonImpostors 1   12
+RenderAvatarMaxComplexity          1	60000
 RenderAvatarVP				1	1
 RenderCubeMap				1	1
 RenderDelayVBUpdate			1	0
@@ -49,7 +50,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
-RenderUseImpostors			1	1
 RenderVBOEnable				1	1
 RenderVBOMappingDisable		1	1
 RenderVolumeLODFactor		1	2.0
@@ -66,12 +66,10 @@ RenderShaderLightingMaxLevel	1	3
 RenderDeferred				1	1
 RenderDeferredSSAO			1	1
 RenderShadowDetail			1	2
-WatchdogDisabled				1	1
 RenderUseStreamVBO			1	1
 RenderFSAASamples			1	16
 RenderMaxTextureIndex		1	16
 
-
 //
 // Low Graphics Settings (fixed function)
 //
@@ -80,20 +78,20 @@ RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
 RenderAvatarPhysicsLODFactor 1	0
-RenderAvatarMaxVisible      1   3
+RenderAvatarMaxNonImpostors 1   12
+RenderAvatarMaxComplexity          1	30000
 RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
 RenderGlowResolutionPow		1	8
+RenderLocalLights			1	0
 RenderMaxPartCount			1	0
 RenderObjectBump			1	0
-RenderLocalLights			1	0
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
 RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	0
 WindLightUseAtmosShaders	1	0
@@ -103,7 +101,6 @@ RenderShadowDetail			1	0
 WLSkyDetail					1	48
 RenderFSAASamples			1	0
 
-
 //
 // Low Graphics Settings
 //
@@ -112,20 +109,20 @@ RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
 RenderAvatarPhysicsLODFactor 1	0
-RenderAvatarMaxVisible      1   3
+RenderAvatarMaxNonImpostors 1   12
+RenderAvatarMaxComplexity          1	30000
 RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
 RenderGlowResolutionPow		1	8
+RenderLocalLights			1	0
 RenderMaxPartCount			1	0
 RenderObjectBump			1	0
-RenderLocalLights			1	0
 RenderReflectionDetail		1	0
 RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
 RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
@@ -155,7 +152,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	1.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
@@ -185,7 +181,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -215,7 +210,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -245,7 +239,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -275,7 +268,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -293,19 +285,19 @@ list Ultra
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarVP				1	1
 RenderFarClip				1	256
 RenderFlexTimeFactor		1	1.0
 RenderGlowResolutionPow		1	9
+RenderLocalLights			1	1
 RenderMaxPartCount			1	8192
 RenderObjectBump			1	1
-RenderLocalLights			1	1
 RenderReflectionDetail		1	4
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -315,7 +307,6 @@ RenderDeferredSSAO			1	1
 RenderShadowDetail			1	2
 RenderFSAASamples			1	2
 
-
 //
 // Class Unknown Hardware (unknown)
 //
@@ -407,18 +398,18 @@ list safe
 RenderAnisotropic			1	0
 RenderAvatarCloth			0	0
 RenderAvatarVP				0	0
+RenderAvatarMaxNonImpostors 1	16
+RenderAvatarMaxComplexity          1	60000
 RenderObjectBump			0	0
 RenderLocalLights			1	0
 RenderMaxPartCount			1	1024
 RenderTerrainDetail 		1	0
-RenderUseImpostors			0	0
 RenderVBOEnable				1	0
 RenderReflectionDetail		0	0
 WindLightUseAtmosShaders	0	0
 RenderDeferred				0	0
 RenderDeferredSSAO			0	0
 RenderShadowDetail			0	0
-		
 
 //
 // CPU based feature masks
@@ -462,37 +453,30 @@ UseOcclusion				0	0
 list Intel_830M
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_845G					
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_855GM				
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_865G			
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_900		
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_915GM	
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_915G					
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_945GM			
 RenderTerrainDetail			1	0
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index 6d5284c6020c8015e5995ca26d5d3abd295bc100..121559bb7adeb7558dd94424aa790a1f4e62b381 100755
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -31,7 +31,7 @@ RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
 RenderAvatarPhysicsLODFactor 1	1.0
-RenderAvatarMaxVisible      1   12
+RenderAvatarMaxNonImpostors 1   12
 RenderAvatarVP				1	1
 RenderCubeMap				1	1
 RenderDelayVBUpdate			1	0
@@ -49,7 +49,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
-RenderUseImpostors			1	1
 RenderVBOEnable				1	1
 RenderVBOMappingDisable		1	1
 RenderVolumeLODFactor		1	2.0
@@ -77,7 +76,7 @@ RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
 RenderAvatarPhysicsLODFactor 1	0
-RenderAvatarMaxVisible      1   3
+RenderAvatarMaxNonImpostors 1   3
 RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
@@ -90,7 +89,6 @@ RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
 RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
@@ -108,7 +106,7 @@ RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
 RenderAvatarPhysicsLODFactor 1	0
-RenderAvatarMaxVisible      1   3
+RenderAvatarMaxNonImpostors 1   3
 RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
@@ -121,7 +119,6 @@ RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
 RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
 VertexShaderEnable			1	0
 WindLightUseAtmosShaders	1	0
@@ -151,7 +148,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	1.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
@@ -181,7 +177,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -211,7 +206,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -241,7 +235,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -271,7 +264,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -301,7 +293,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -405,7 +396,6 @@ RenderAvatarVP				0	0
 RenderObjectBump			0	0
 RenderMaxPartCount			1	1024
 RenderTerrainDetail 		1	0
-RenderUseImpostors			0	0
 RenderVBOEnable				1	0
 RenderReflectionDetail		0	0
 WindLightUseAtmosShaders	0	0
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index 628a96e988bca6c9aecf7e0b24d94ce2f246c462..c975678cea9a2706345b8ecc6bbf68666759b34c 100755
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -4,7 +4,7 @@ version 37
 // resetting the graphics preferences of all users to the recommended
 // defaults.  This should be as rare an event as we can manage.
 
-// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
+// NOTE: This is mostly identical to featuretable.txt with a few differences
 // Should be combined into one table
 
 //
@@ -31,7 +31,8 @@ RenderAnisotropic				1	0
 RenderAvatarCloth				1	1
 RenderAvatarLODFactor			1	1.0
 RenderAvatarPhysicsLODFactor 1	1.0
-RenderAvatarMaxVisible          1   12
+RenderAvatarMaxNonImpostors     1   12
+RenderAvatarMaxComplexity              1	60000
 RenderAvatarVP					1	1
 RenderCubeMap					1	1
 RenderDelayVBUpdate				1	0
@@ -49,7 +50,6 @@ RenderTerrainDetail				1	1
 RenderTerrainLODFactor			1	2.0
 RenderTransparentWater			1	1
 RenderTreeLODFactor				1	1.0
-RenderUseImpostors				1	1
 RenderVBOEnable					1	1
 RenderVBOMappingDisable			1	1
 RenderVolumeLODFactor			1	2.0
@@ -66,7 +66,6 @@ RenderShaderLightingMaxLevel	1	3
 RenderDeferred				1	1
 RenderDeferredSSAO			1	1
 RenderShadowDetail			1	2
-WatchdogDisabled				1	1
 RenderUseStreamVBO			1	1
 RenderFSAASamples			1	16
 RenderMaxTextureIndex		1	16
@@ -79,7 +78,8 @@ RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
 RenderAvatarPhysicsLODFactor 1	0
-RenderAvatarMaxVisible      1   3
+RenderAvatarMaxNonImpostors 1   12
+RenderAvatarMaxComplexity          1	30000
 RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
@@ -92,7 +92,6 @@ RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
 RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
 VertexShaderEnable			1	0
 WindLightUseAtmosShaders	1	0
@@ -110,7 +109,8 @@ RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
 RenderAvatarPhysicsLODFactor 1	0
-RenderAvatarMaxVisible      1   3
+RenderAvatarMaxNonImpostors 1   12
+RenderAvatarMaxComplexity          1	30000
 RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
@@ -123,7 +123,6 @@ RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
 RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
@@ -153,7 +152,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	1.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
@@ -183,7 +181,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -213,7 +210,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -243,7 +239,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -273,7 +268,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -304,7 +298,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -319,6 +312,9 @@ RenderFSAASamples			1	2
 //
 list Unknown
 RenderVBOEnable				1	0
+RenderShadowDetail			1	0
+RenderDeferred				1	0
+RenderDeferredSSAO			1	0
 
 //
 // Class 0 Hardware (just old)
@@ -343,6 +339,7 @@ RenderVBOEnable				1	1
 //
 list Class3
 RenderVBOEnable				1	1
+
 //
 // Class 4 Hardware
 //
@@ -394,11 +391,12 @@ list safe
 RenderAnisotropic			1	0
 RenderAvatarCloth			0	0
 RenderAvatarVP				0	0
-RenderLocalLights			1	0
+RenderAvatarMaxNonImpostors 1	16
+RenderAvatarMaxComplexity          1	60000
 RenderObjectBump			0	0
+RenderLocalLights			1	0
 RenderMaxPartCount			1	1024
 RenderTerrainDetail 		1	0
-RenderUseImpostors			0	0
 RenderVBOEnable				1	0
 RenderReflectionDetail		0	0
 WindLightUseAtmosShaders	0	0
@@ -523,7 +521,6 @@ Disregard96DefaultDrawDistance	1	0
 
 list NVIDIA_GeForce_8600
 RenderTextureMemoryMultiple			1	1	
-RenderUseImpostors				0	0
 UseOcclusion				0	0
 
 /// tweaked ATI to 96 Draw distance
diff --git a/indra/newview/featuretable_solaris.txt b/indra/newview/featuretable_solaris.txt
index e7cae1abdcede63791a93515bbd9ea753fd9477c..f6f0a9cb1784fa9550c6fbe83147fa6fb0335410 100755
--- a/indra/newview/featuretable_solaris.txt
+++ b/indra/newview/featuretable_solaris.txt
@@ -129,7 +129,7 @@ RenderUseFBO		1	0
 list low
 RenderVBO			1	0
 RenderAniso			1	0
-RenderAvatarMaxVisible      1   3
+RenderAvatarMaxNonImpostors 1   3
 RenderLighting		1	0
 
 list medium
diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt
index 68e09d010e5557840220b13329d78e0051dbb5fa..053dfb64d4f0b3669a79878edbd7b0695e87b370 100755
--- a/indra/newview/featuretable_xp.txt
+++ b/indra/newview/featuretable_xp.txt
@@ -31,7 +31,7 @@ RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
 RenderAvatarPhysicsLODFactor 1	1.0
-RenderAvatarMaxVisible      1   12
+RenderAvatarMaxNonImpostors 1   12
 RenderAvatarVP				1	1
 RenderCubeMap				1	1
 RenderDelayVBUpdate			1	0
@@ -49,7 +49,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
-RenderUseImpostors			1	1
 RenderVBOEnable				1	1
 RenderVBOMappingDisable		1	1
 RenderVolumeLODFactor		1	2.0
@@ -79,7 +78,7 @@ RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
 RenderAvatarPhysicsLODFactor 1	0
-RenderAvatarMaxVisible      1   3
+RenderAvatarMaxNonImpostors 1   3
 RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
@@ -92,7 +91,6 @@ RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
 RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
 VertexShaderEnable			1	0
 WindLightUseAtmosShaders	1	0
@@ -110,7 +108,7 @@ RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
 RenderAvatarPhysicsLODFactor 1	0
-RenderAvatarMaxVisible      1   3
+RenderAvatarMaxNonImpostors 1   3
 RenderAvatarVP				1	0
 RenderFarClip				1	64
 RenderFlexTimeFactor		1	0
@@ -123,7 +121,6 @@ RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
 RenderTransparentWater		1	0
 RenderTreeLODFactor			1	0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	0.5
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
@@ -153,7 +150,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	1.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	0
@@ -183,7 +179,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -213,7 +208,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -243,7 +237,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -273,7 +266,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	0.5
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	1.125
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -303,7 +295,6 @@ RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTransparentWater		1	1
 RenderTreeLODFactor			1	1.0
-RenderUseImpostors			1	1
 RenderVolumeLODFactor		1	2.0
 VertexShaderEnable			1	1
 WindLightUseAtmosShaders	1	1
@@ -404,7 +395,6 @@ RenderAvatarVP				0	0
 RenderObjectBump			0	0
 RenderMaxPartCount			1	1024
 RenderTerrainDetail 		1	0
-RenderUseImpostors			0	0
 RenderVBOEnable				1	0
 RenderReflectionDetail		0	0
 WindLightUseAtmosShaders	0	0
@@ -454,37 +444,30 @@ UseOcclusion				0	0
 list Intel_830M
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_845G					
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_855GM				
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_865G			
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_900		
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_915GM	
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_915G					
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			0	0
 
 list Intel_945GM			
 RenderTerrainDetail			1	0
@@ -501,7 +484,6 @@ RenderVBOEnable				1	0
 list Intel_965
 RenderTerrainDetail			1	0
 RenderVBOEnable				1	0
-RenderUseImpostors			1	0
 UseOcclusion				0	0
 
 list Intel_G33
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 13f4e6ec63e5b08fbe83faf21308e5d0887cd343..27e8b83e138179c76d636b19f0af9b0fcbcb0f1b 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -588,7 +588,7 @@ static void settings_to_globals()
 	LLVOTree::sTreeFactor				= gSavedSettings.getF32("RenderTreeLODFactor");
 	LLVOAvatar::sLODFactor				= gSavedSettings.getF32("RenderAvatarLODFactor");
 	LLVOAvatar::sPhysicsLODFactor		= gSavedSettings.getF32("RenderAvatarPhysicsLODFactor");
-	LLVOAvatar::sMaxVisible				= (U32)gSavedSettings.getS32("RenderAvatarMaxVisible");
+	LLVOAvatar::updateImpostorRendering(gSavedSettings.getU32("RenderAvatarMaxNonImpostors"));
 	LLVOAvatar::sVisibleInFirstPerson	= gSavedSettings.getBOOL("FirstPersonAvatarVisible");
 	// clamp auto-open time to some minimum usable value
 	LLFolderView::sAutoOpenTime			= llmax(0.25f, gSavedSettings.getF32("FolderAutoOpenDelay"));
@@ -610,7 +610,6 @@ static void settings_modify()
 	LLRenderTarget::sUseFBO				= gSavedSettings.getBOOL("RenderDeferred");
 	LLPipeline::sRenderBump				= gSavedSettings.getBOOL("RenderObjectBump");
 	LLPipeline::sRenderDeferred		= LLPipeline::sRenderBump && gSavedSettings.getBOOL("RenderDeferred");
-	LLVOAvatar::sUseImpostors			= gSavedSettings.getBOOL("RenderUseImpostors");
 	LLVOSurfacePatch::sLODFactor		= gSavedSettings.getF32("RenderTerrainLODFactor");
 	LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4]
 	gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession;
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index e1d3d1a90502c9275447079dd6c5835ea48e60a5..e58c2c103739d772229a09fb392deb2cdd327d6a 100755
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -1281,13 +1281,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
 		return;
 	}
 
-	llassert(LLPipeline::sImpostorRender || !avatarp->isVisuallyMuted());
-
-	/*if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview,  3=morph view
-	{
-		gPipeline.enableLightsAvatarEdit(LLColor4(.5f, .5f, .5f, 1.f));
-	}*/
-	
 	if (pass == 1)
 	{
 		// render rigid meshes (eyeballs) first
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index af84aea6a6175f393d39b88ac9a692d945f71460..5c8926e54c0f1f6830ccc1ddd2f8cd42426bdf6a 100755
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -606,7 +606,7 @@ void LLFeatureManager::applyRecommendedSettings()
 	// cap the level at 2 (high)
 	U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5));
 
-	LL_INFOS() << "Applying Recommended Features" << LL_ENDL;
+	LL_INFOS("RenderInit") << "Applying Recommended Features for level " << level << LL_ENDL;
 
 	setGraphicsLevel(level, false);
 	gSavedSettings.setU32("RenderQualityPerformance", level);
@@ -813,7 +813,7 @@ void LLFeatureManager::applyBaseMasks()
 	if (osInfo.mMajorVer == 10 && osInfo.mMinorVer < 7)
 	{
 		maskFeatures("OSX_10_6_8");
-        }
+	}
 #endif
 
 	// now mask by gpu string
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 0ac18408dbc0bde8198670df8d6c5529a18c43fe..a37bebc5477553b25a285b0ffa941ec0cb743b4f 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -120,6 +120,18 @@ char const* const VISIBILITY_HIDDEN = "hidden";
 //control value for middle mouse as talk2push button
 const static std::string MIDDLE_MOUSE_CV = "MiddleMouse";
 
+/// This must equal the maximum value set for the IndirectMaxComplexity slider in panel_preferences_graphics1.xml
+static const U32 INDIRECT_MAX_ARC_OFF = 101; // all the way to the right == disabled
+static const U32 MIN_INDIRECT_ARC_LIMIT = 1; // must match minimum of IndirectMaxComplexity in panel_preferences_graphics1.xml
+static const U32 MAX_INDIRECT_ARC_LIMIT = INDIRECT_MAX_ARC_OFF-1; // one short of all the way to the right...
+
+/// These are the effective range of values for RenderAvatarMaxComplexity
+static const F32 MIN_ARC_LIMIT =  20000.0f;
+static const F32 MAX_ARC_LIMIT = 300000.0f;
+static const F32 MIN_ARC_LOG = log(MIN_ARC_LIMIT);
+static const F32 MAX_ARC_LOG = log(MAX_ARC_LIMIT);
+static const F32 ARC_LIMIT_MAP_SCALE = (MAX_ARC_LOG - MIN_ARC_LOG) / (MAX_INDIRECT_ARC_LIMIT - MIN_INDIRECT_ARC_LIMIT);
+
 class LLVoiceSetKeyDialog : public LLModalDialog
 {
 public:
@@ -341,6 +353,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	mCommitCallbackRegistrar.add("Pref.VertexShaderEnable",		boost::bind(&LLFloaterPreference::onVertexShaderEnable, this));
 	mCommitCallbackRegistrar.add("Pref.WindowedMod",			boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));
 	mCommitCallbackRegistrar.add("Pref.UpdateSliderText",		boost::bind(&LLFloaterPreference::refreshUI,this));
+	mCommitCallbackRegistrar.add("Pref.UpdateIndirectMaxNonImpostors",		boost::bind(&LLFloaterPreference::updateMaximumNonImpostors,this));
+	mCommitCallbackRegistrar.add("Pref.UpdateIndirectMaxComplexity",		boost::bind(&LLFloaterPreference::updateMaxComplexity,this));
 	mCommitCallbackRegistrar.add("Pref.QualityPerformance",		boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
 	mCommitCallbackRegistrar.add("Pref.applyUIColor",			boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
 	mCommitCallbackRegistrar.add("Pref.getUIColor",				boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2));
@@ -773,6 +787,9 @@ void LLFloaterPreference::updateShowFavoritesCheckbox(bool val)
 void LLFloaterPreference::setHardwareDefaults()
 {
 	LLFeatureManager::getInstance()->applyRecommendedSettings();
+	// reset indirects before refresh because we may have changed what they control
+	setIndirectControls(); 
+
 	refreshEnabledGraphics();
 	gSavedSettings.setString("PresetGraphicActive", "");
 	LLPresetsManager::getInstance()->triggerChangeSignal();
@@ -785,7 +802,9 @@ void LLFloaterPreference::setHardwareDefaults()
 		LLView* view = *iter;
 		LLPanelPreference* panel = dynamic_cast<LLPanelPreference*>(view);
 		if (panel)
+		{
 			panel->setHardwareDefaults();
+		}
 	}
 }
 
@@ -930,6 +949,7 @@ void LLFloaterPreference::refreshEnabledGraphics()
 	{
 		instance->refresh();
 	}
+	setIndirectControls();
 }
 
 void LLFloaterPreference::onClickClearCache()
@@ -1220,12 +1240,6 @@ void LLFloaterPreference::refreshEnabledState()
 	ctrl_shadow->setEnabled(enabled);
 	shadow_text->setEnabled(enabled);
 
-	LLTextBox* maximum_arc_text = getChild<LLTextBox>("MaximumARCText");
-
-	enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors") && gSavedSettings.getBOOL("RenderUseImpostors");
-	getChildView("MaximumARC")->setEnabled(enabled);
-	maximum_arc_text->setEnabled(enabled);
-
 	// Hardware settings
 	F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple");
 	S32Megabytes min_tex_mem = LLViewerTextureList::getMinVideoRamSetting();
@@ -1291,6 +1305,48 @@ void LLFloaterPreference::refreshEnabledState()
 	getChild<LLButton>("default_creation_permissions")->setEnabled(LLStartUp::getStartupState() < STATE_STARTED ? false : true);
 }
 
+// static
+void LLFloaterPreference::setIndirectControls()
+{
+	/*
+	 * We have controls that have an indirect relationship between the control
+	 * values and adjacent text and the underlying setting they influence.
+	 * In each case, the control and its associated setting are named Indirect<something>
+	 * This method interrogates the controlled setting and establishes the
+	 * appropriate value for the indirect control. It must be called whenever the
+	 * underlying setting may have changed other than through the indirect control,
+	 * such as when the 'Reset all to recommended settings' button is used...
+	 */
+	setIndirectMaxNonImpostors();
+	setIndirectMaxArc();
+}
+
+// static
+void LLFloaterPreference::setIndirectMaxNonImpostors()
+{
+	U32 max_non_impostors = gSavedSettings.getU32("RenderAvatarMaxNonImpostors");
+	// for this one, we just need to make zero, which means off, the max value of the slider
+	U32 indirect_max_non_impostors = (0 == max_non_impostors) ? LLVOAvatar::IMPOSTORS_OFF : max_non_impostors;
+	gSavedSettings.setU32("IndirectMaxNonImpostors", indirect_max_non_impostors);
+}
+
+void LLFloaterPreference::setIndirectMaxArc()
+{
+	U32 max_arc = gSavedSettings.getU32("RenderAvatarMaxComplexity");
+	U32 indirect_max_arc;
+	if (0 == max_arc)
+	{
+		// the off position is all the way to the right, so set to control max
+		indirect_max_arc = INDIRECT_MAX_ARC_OFF;
+	}
+	else
+	{
+		// This is the inverse of the calculation in updateMaxComplexity
+		indirect_max_arc = (U32)((log(max_arc) - MIN_ARC_LOG) / ARC_LIMIT_MAP_SCALE) + MIN_INDIRECT_ARC_LIMIT;
+	}
+	gSavedSettings.setU32("IndirectMaxComplexity", indirect_max_arc);
+}
+
 void LLFloaterPreference::disableUnavailableSettings()
 {	
 	LLComboBox* ctrl_reflections   = getChild<LLComboBox>("Reflections");
@@ -1299,8 +1355,6 @@ void LLFloaterPreference::disableUnavailableSettings()
 	LLCheckBoxCtrl* ctrl_avatar_cloth  = getChild<LLCheckBoxCtrl>("AvatarCloth");
 	LLCheckBoxCtrl* ctrl_shader_enable = getChild<LLCheckBoxCtrl>("BasicShaders");
 	LLCheckBoxCtrl* ctrl_wind_light    = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders");
-	LLSliderCtrl* ctrl_maximum_arc = getChild<LLSliderCtrl>("MaximumARC");
-	LLTextBox* maximum_arc_text = getChild<LLTextBox>("MaximumARCText");
 	LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders");
 	LLCheckBoxCtrl* ctrl_deferred2 = getChild<LLCheckBoxCtrl>("UseLightShaders2");
 	LLComboBox* ctrl_shadows = getChild<LLComboBox>("ShadowDetail");
@@ -1449,13 +1503,6 @@ void LLFloaterPreference::disableUnavailableSettings()
 		ctrl_avatar_cloth->setEnabled(FALSE);
 		ctrl_avatar_cloth->setValue(FALSE);
 	}
-
-	// disabled impostors
-	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors"))
-	{
-		ctrl_maximum_arc->setEnabled(FALSE);
-		maximum_arc_text->setEnabled(FALSE);
-	}
 }
 
 void LLFloaterPreference::refresh()
@@ -1476,9 +1523,9 @@ void LLFloaterPreference::refresh()
 	updateSliderText(getChild<LLSliderCtrl>("RenderPostProcess",	true), getChild<LLTextBox>("PostProcessText",			true));
 	updateSliderText(getChild<LLSliderCtrl>("SkyMeshDetail",		true), getChild<LLTextBox>("SkyMeshDetailText",			true));
 	updateSliderText(getChild<LLSliderCtrl>("TerrainDetail",		true), getChild<LLTextBox>("TerrainDetailText",			true));	
-	updateImpostorsText(getChild<LLSliderCtrl>("MaxNumberAvatarDrawn",		true), getChild<LLTextBox>("ImpostorsText",			true));	
-	updateMaximumArcText(getChild<LLSliderCtrl>("MaximumARC",		true), getChild<LLTextBox>("MaximumARCText",			true));	
-
+	setIndirectControls();
+	setMaximumNonImpostorsText(gSavedSettings.getU32("RenderAvatarMaxNonImpostors"),getChild<LLTextBox>("IndirectMaxNonImpostorsText", true));	
+	setMaxComplexityText(gSavedSettings.getU32("RenderAvatarMaxComplexity"),getChild<LLTextBox>("IndirectMaxComplexityText", true));	
 	refreshEnabledState();
 }
 
@@ -1621,12 +1668,12 @@ void LLFloaterPreference::onClickLogPath()
 	//Path changed
 	if(proposed_name != dir_name)
 	{
-	gSavedPerAccountSettings.setString("InstantMessageLogPath", dir_name);
+		gSavedPerAccountSettings.setString("InstantMessageLogPath", dir_name);
 		mPriorInstantMessageLogPath = proposed_name;
 	
-	// enable/disable 'Delete transcripts button
-	updateDeleteTranscriptsButton();
-}
+		// enable/disable 'Delete transcripts button
+		updateDeleteTranscriptsButton();
+	}
 }
 
 bool LLFloaterPreference::moveTranscriptsAndLog()
@@ -1760,59 +1807,71 @@ void LLFloaterPreference::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_b
 	}
 }
 
-void LLFloaterPreference::updateImpostorsText(LLSliderCtrl* ctrl, LLTextBox* text_box)
+
+void LLFloaterPreference::updateMaximumNonImpostors()
 {
-	F32 value = (F32)ctrl->getValue().asReal();
+	// Called when the IndirectMaxNonImpostors control changes
+	// Responsible for fixing the slider label (IndirectMaxNonImpostorsText) and setting RenderAvatarMaxNonImpostors
+	LLSliderCtrl* ctrl = getChild<LLSliderCtrl>("IndirectMaxNonImpostors",true);
+	U32 value = ctrl->getValue().asInteger();
 
-	if (value < IMPOSTORS_OFF)
+	if (0 == value || LLVOAvatar::IMPOSTORS_OFF <= value)
 	{
-		text_box->setText(llformat("%0.0f", value));
-		if (!gSavedSettings.getBOOL("RenderUseImpostors"))
-		{
-			gSavedSettings.setBOOL("RenderUseImpostors", true);
-		}
+		value=0;
 	}
-	else
+	gSavedSettings.setU32("RenderAvatarMaxNonImpostors", value);
+	LLVOAvatar::updateImpostorRendering(value); // make it effective immediately
+	setMaximumNonImpostorsText(value, getChild<LLTextBox>("IndirectMaxNonImpostorsText"));
+}
+
+void LLFloaterPreference::setMaximumNonImpostorsText(U32 value, LLTextBox* text_box)
+{
+	if (0 == value)
 	{
 		text_box->setText(LLTrans::getString("no_limit"));
-		gSavedSettings.setBOOL("RenderUseImpostors", false);
+	}
+	else
+	{
+		text_box->setText(llformat("%d", value));
 	}
 }
 
-void LLFloaterPreference::updateMaximumArcText(LLSliderCtrl* ctrl, LLTextBox* text_box)
+void LLFloaterPreference::updateMaxComplexity()
 {
-	F32 min_result = 20000.0f;
-	F32 max_result = 300000.0f;
+	// Called when the IndirectMaxComplexity control changes
+	// Responsible for fixing the slider label (IndirectMaxComplexityText) and setting RenderAvatarMaxComplexity
+	LLSliderCtrl* ctrl = getChild<LLSliderCtrl>("IndirectMaxComplexity");
+	U32 indirect_value = ctrl->getValue().asInteger();
+	U32 max_arc;
+	
+	if (INDIRECT_MAX_ARC_OFF == indirect_value)
+	{
+		// The 'off' position is when the slider is all the way to the right, 
+		// which is a value of INDIRECT_MAX_ARC_OFF,
+		// so it is necessary to set max_arc to 0 disable muted avatars.
+		max_arc = 0;
+	}
+	else
+	{
+		// if this is changed, the inverse calculation in setIndirectMaxArc
+		// must be changed to match
+		max_arc = (U32)exp(MIN_ARC_LOG + (ARC_LIMIT_MAP_SCALE * (indirect_value - MIN_INDIRECT_ARC_LIMIT)));
+	}
 
-	F32 value = (F32)ctrl->getValue().asReal();
+	gSavedSettings.setU32("RenderAvatarMaxComplexity", (U32)max_arc);
+	setMaxComplexityText(max_arc, getChild<LLTextBox>("IndirectMaxComplexityText"));
+}
 
-	if (101.0f == value)
+void LLFloaterPreference::setMaxComplexityText(U32 value, LLTextBox* text_box)
+{
+	if (0 == value)
 	{
-		// It has been decided that having the slider all the way to the right will be the off position, which
-		// is a value of 101, so it is necessary to change value to 0 disable impostor generation.
-		value = 0.0f;
 		text_box->setText(LLTrans::getString("no_limit"));
 	}
 	else
 	{
-
-		// 100 is the maximum value of this control set in panel_preferences_graphics1.xml
-		F32 minp = 1.0f;
-		F32 maxp = 100.0f;
-
-		// The result should be between min_result and max_result
-		F32 minv = log(min_result);
-		F32 maxv = log(max_result);
-
-		// calculate adjustment factor
-		F32 scale = (maxv - minv) / (maxp - minp);
-
-		value = exp(minv + scale * (value - minp));
-
-		text_box->setText(llformat("%0.0f", value));
+		text_box->setText(llformat("%d", value));
 	}
-
-	gSavedSettings.setU32("RenderAutoMuteRenderWeightLimit", (U32)value);
 }
 
 void LLFloaterPreference::onChangeMaturity()
@@ -2411,7 +2470,6 @@ void LLPanelPreferenceGraphics::saveSettings()
 void LLPanelPreferenceGraphics::setHardwareDefaults()
 {
 	resetDirtyChilds();
-	LLPanelPreference::setHardwareDefaults();
 }
 
 LLFloaterPreferenceProxy::LLFloaterPreferenceProxy(const LLSD& key)
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 10087f8aa3dd82e0f1bdb967c3dd410c808a6ef1..c23d3a45931e8f52a5efeb09494f544ed50b5990 100755
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -58,10 +58,6 @@ typedef enum
 		
 	} EGraphicsSettings;
 
-// 65 is the maximum value for impostors set in the xml file.  When the slider reaches this
-// value impostors are turned off.
-const U32	IMPOSTORS_OFF = 66;
-
 // Floater to control preferences (display, audio, bandwidth, general.
 class LLFloaterPreference : public LLFloater, public LLAvatarPropertiesObserver, public LLConversationLogObserver
 {
@@ -162,8 +158,14 @@ public:
 	void onChangeQuality(const LLSD& data);
 	
 	void updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box);
-	void updateImpostorsText(LLSliderCtrl* ctrl, LLTextBox* text_box);
-	void updateMaximumArcText(LLSliderCtrl* ctrl, LLTextBox* text_box);
+	void updateMaximumNonImpostors();
+	void setMaximumNonImpostorsText(U32 value, LLTextBox* text_box);
+	void updateMaxComplexity();
+	void setMaxComplexityText(U32 value, LLTextBox* text_box);
+	static void setIndirectControls();
+	static void setIndirectMaxNonImpostors();
+	static void setIndirectMaxArc();
+	
 	void refreshUI();
 
 	void onCommitParcelMediaAutoPlayEnable();
@@ -203,6 +205,7 @@ private:
 	std::string mDirectoryVisibility;
 	
 	LLAvatarData mAvatarProperties;
+	LOG_CLASS(LLFloaterPreference);
 };
 
 class LLPanelPreference : public LLPanel
@@ -246,6 +249,7 @@ private:
 	string_color_map_t mSavedColors;
 
 	Updater* mBandWidthUpdater;
+	LOG_CLASS(LLPanelPreference);
 };
 
 class LLPanelPreferenceGraphics : public LLPanelPreference
@@ -267,6 +271,7 @@ protected:
 private:
 
 	void onPresetsListChange();
+	LOG_CLASS(LLPanelPreferenceGraphics);
 };
 
 class LLFloaterPreferenceProxy : public LLFloater
@@ -294,7 +299,7 @@ private:
 	bool mSocksSettingsDirty;
 	typedef std::map<LLControlVariable*, LLSD> control_values_map_t;
 	control_values_map_t mSavedValues;
-
+	LOG_CLASS(LLFloaterPreferenceProxy);
 };
 
 
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index c6eae680833bed1a11c8d06969b1e4310de50edd..16f40fb747393d55ff6f6c0f177040f065062470 100755
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -219,12 +219,6 @@ static bool handleAvatarPhysicsLODChanged(const LLSD& newvalue)
 	return true;
 }
 
-static bool handleAvatarMaxVisibleChanged(const LLSD& newvalue)
-{
-	LLVOAvatar::sMaxVisible = (U32) newvalue.asInteger();
-	return true;
-}
-
 static bool handleTerrainLODChanged(const LLSD& newvalue)
 {
 		LLVOSurfacePatch::sLODFactor = (F32)newvalue.asReal();
@@ -418,12 +412,6 @@ static bool handleRenderBumpChanged(const LLSD& newval)
 	return true;
 }
 
-static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
-{
-	LLVOAvatar::sUseImpostors = newvalue.asBoolean();
-	return true;
-}
-
 static bool handleRenderDebugGLChanged(const LLSD& newvalue)
 {
 	gDebugGL = newvalue.asBoolean() || gDebugSession;
@@ -630,7 +618,6 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
-	gSavedSettings.getControl("RenderAvatarMaxVisible")->getSignal()->connect(boost::bind(&handleAvatarMaxVisibleChanged, _2));
 	gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2));
 	gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2));
 	gSavedSettings.getControl("RenderAvatarPhysicsLODFactor")->getSignal()->connect(boost::bind(&handleAvatarPhysicsLODChanged, _2));
@@ -648,7 +635,6 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleRenderBumpChanged, _2));
 	gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
 	gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
-	gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _2));
 	gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _2));
 	gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2));
 	gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 0a35b2bb009ca2aaf73ad98bae76f954a06a7506..8136bd3a320c2371093c1583047b4b486c65d504 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -613,7 +613,7 @@ private:
 //-----------------------------------------------------------------------------
 LLAvatarAppearanceDictionary *LLVOAvatar::sAvatarDictionary = NULL;
 S32 LLVOAvatar::sFreezeCounter = 0;
-U32 LLVOAvatar::sMaxVisible = 12;
+U32 LLVOAvatar::sMaxNonImpostors = 12; // overridden based on graphics setting
 F32 LLVOAvatar::sRenderDistance = 256.f;
 S32	LLVOAvatar::sNumVisibleAvatars = 0;
 S32	LLVOAvatar::sNumLODChangesThisFrame = 0;
@@ -640,7 +640,7 @@ BOOL LLVOAvatar::sShowFootPlane = FALSE;
 BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE;
 F32 LLVOAvatar::sLODFactor = 1.f;
 F32 LLVOAvatar::sPhysicsLODFactor = 1.f;
-BOOL LLVOAvatar::sUseImpostors = FALSE;
+bool LLVOAvatar::sUseImpostors = false;
 BOOL LLVOAvatar::sJointDebug = FALSE;
 F32 LLVOAvatar::sUnbakedTime = 0.f;
 F32 LLVOAvatar::sUnbakedUpdateTime = 0.f;
@@ -3079,7 +3079,7 @@ bool LLVOAvatar::isVisuallyMuted() const
 	{
 			static LLCachedControl<U32> max_attachment_bytes(gSavedSettings, "RenderAutoMuteByteLimit", 0);
 			static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit", 0.0);
-			static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAutoMuteRenderWeightLimit", 0);
+			static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0);
 
 			if (mVisuallyMuteSetting == ALWAYS_VISUAL_MUTE)
 			{	// Always want to see this AV as an impostor
@@ -3234,18 +3234,18 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
 		{ // visually muted avatars update at 16 hz
 			mUpdatePeriod = 16;
 		}
-		else if (mVisibilityRank <= LLVOAvatar::sMaxVisible ||
-			mDrawable->mDistanceWRTCamera < 1.f + mag)
-		{ //first 25% of max visible avatars are not impostored
-			//also, don't impostor avatars whose bounding box may be penetrating the 
-			//impostor camera near clip plane
+		else if (   mVisibilityRank <= LLVOAvatar::sMaxNonImpostors
+				 || mDrawable->mDistanceWRTCamera < 1.f + mag)
+		{   // first 25% of max visible avatars are not impostored
+			// also, don't impostor avatars whose bounding box may be penetrating the 
+			// impostor camera near clip plane
 			mUpdatePeriod = 1;
 		}
-		else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 4)
+		else if (mVisibilityRank > LLVOAvatar::sMaxNonImpostors * 4)
 		{ //background avatars are REALLY slow updating impostors
 			mUpdatePeriod = 16;
 		}
-		else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 3)
+		else if (mVisibilityRank > LLVOAvatar::sMaxNonImpostors * 3)
 		{ //back 25% of max visible avatars are slow updating impostors
 			mUpdatePeriod = 8;
 		}
@@ -8019,6 +8019,34 @@ void LLVOAvatar::getImpostorValues(LLVector4a* extents, LLVector3& angle, F32& d
 	angle.mV[2] = da;
 }
 
+// static
+const U32 LLVOAvatar::IMPOSTORS_OFF = 66; /* Must equal the maximum allowed the RenderAvatarMaxNonImpostors
+										   * slider in panel_preferences_graphics1.xml */
+
+// static
+void LLVOAvatar::updateImpostorRendering(U32 newMaxNonImpostorsValue)
+{
+	U32  oldmax = sMaxNonImpostors;
+	bool oldflg = sUseImpostors;
+	
+	if (IMPOSTORS_OFF <= newMaxNonImpostorsValue)
+	{
+		sMaxNonImpostors = 0;
+	}
+	else
+	{
+		sMaxNonImpostors = newMaxNonImpostorsValue;
+	}
+	// the sUseImpostors flag depends on whether or not sMaxNonImpostors is set to the no-limit value (0)
+	sUseImpostors = (0 != sMaxNonImpostors);
+
+	LL_DEBUGS("AvatarRender")
+		<< "was " << (oldflg ? "use" : "don't use" ) << " impostors (max " << oldmax << "); "
+		<< "now " << (sUseImpostors ? "use" : "don't use" ) << " impostors (max " << sMaxNonImpostors << "); "
+		<< LL_ENDL;
+}
+
+
 void LLVOAvatar::idleUpdateRenderCost()
 {
 	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_AVATAR_DRAW_INFO))
@@ -8047,7 +8075,7 @@ void LLVOAvatar::idleUpdateRenderCost()
 		// Render Cost (ARC)
 		calculateUpdateRenderCost();				// Update mVisualComplexity if needed	
 
-		static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAutoMuteRenderWeightLimit", 0);
+		static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0);
 		info_line = llformat("%d ARC", mVisualComplexity);
 
 		if (max_render_cost != 0) // zero means don't care, so don't bother coloring based on this
@@ -8068,7 +8096,7 @@ void LLVOAvatar::idleUpdateRenderCost()
 		// Visual rank
 		info_line = llformat("%d rank", mVisibilityRank);
 		// Use grey for imposters, white for normal rendering or no impostors
-		info_color.set((sMaxVisible > 0 && mVisibilityRank > sMaxVisible) ? LLColor4::grey : LLColor4::white);
+		info_color.set((sMaxNonImpostors > 0 && mVisibilityRank > sMaxNonImpostors) ? LLColor4::grey : LLColor4::white);
 		info_style = LLFontGL::NORMAL;
 		mText->addLine(info_line, info_color, info_style);
 
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 0cf455db1566785658e98331ea39593891203cbe..e3b7f1b6a7d53240ddc0db8506b70a943d6a6680 100755
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -263,7 +263,7 @@ public:
 	
 	S32				getUpdatePeriod()				{ return mUpdatePeriod;			};
 	const LLColor4 &  getMutedAVColor()				{ return mMutedAVColor;			};
-
+	static void     updateImpostorRendering(U32 newMaxNonImpostorsValue);
 
 	void 			idleUpdateBelowWater();
 
@@ -273,10 +273,12 @@ public:
 public:
 	static S32		sRenderName;
 	static BOOL		sRenderGroupTitles;
-	static U32		sMaxVisible; //(affected by control "RenderAvatarMaxVisible")
+	static const U32 IMPOSTORS_OFF; /* Must equal the maximum allowed the RenderAvatarMaxNonImpostors
+									 * slider in panel_preferences_graphics1.xml */
+	static U32		sMaxNonImpostors; //(affected by control "RenderAvatarMaxNonImpostors")
 	static F32		sRenderDistance; //distance at which avatars will render.
 	static BOOL		sShowAnimationDebug; // show animation debug info
-	static BOOL		sUseImpostors; //use impostors for far away avatars
+	static bool		sUseImpostors; //use impostors for far away avatars
 	static BOOL		sShowFootPlane;	// show foot collision plane reported by server
 	static BOOL		sShowCollisionVolumes;	// show skeletal collision volumes
 	static BOOL		sVisibleInFirstPerson;
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 03712c1065e31c3ed57b6f0682681020e970d690..6002b5a4ebac1fa360dea1e7b7766dabc16706f2 100755
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -569,7 +569,7 @@ void LLPipeline::init()
 	connectRefreshCachedSettingsSafe("RenderAutoMaskAlphaDeferred");
 	connectRefreshCachedSettingsSafe("RenderAutoMaskAlphaNonDeferred");
 	connectRefreshCachedSettingsSafe("RenderUseFarClip");
-	connectRefreshCachedSettingsSafe("RenderAvatarMaxVisible");
+	connectRefreshCachedSettingsSafe("RenderAvatarMaxNonImpostors");
 	connectRefreshCachedSettingsSafe("RenderDelayVBUpdate");
 	connectRefreshCachedSettingsSafe("UseOcclusion");
 	connectRefreshCachedSettingsSafe("VertexShaderEnable");
@@ -1081,7 +1081,8 @@ void LLPipeline::refreshCachedSettings()
 	LLPipeline::sAutoMaskAlphaDeferred = gSavedSettings.getBOOL("RenderAutoMaskAlphaDeferred");
 	LLPipeline::sAutoMaskAlphaNonDeferred = gSavedSettings.getBOOL("RenderAutoMaskAlphaNonDeferred");
 	LLPipeline::sUseFarClip = gSavedSettings.getBOOL("RenderUseFarClip");
-	LLVOAvatar::sMaxVisible = (U32)gSavedSettings.getS32("RenderAvatarMaxVisible");
+	LLVOAvatar::sMaxNonImpostors = gSavedSettings.getU32("RenderAvatarMaxNonImpostors");
+	LLVOAvatar::updateImpostorRendering(LLVOAvatar::sMaxNonImpostors);
 	LLPipeline::sDelayVBUpdate = gSavedSettings.getBOOL("RenderDelayVBUpdate");
 
 	LLPipeline::sUseOcclusion = 
@@ -11357,7 +11358,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
 	{
 		LL_RECORD_BLOCK_TIME(FTM_IMPOSTOR_MARK_VISIBLE);
 		markVisible(avatar->mDrawable, *viewer_camera);
-		LLVOAvatar::sUseImpostors = FALSE;
+		LLVOAvatar::sUseImpostors = false; // @TODO why?
 
 		LLVOAvatar::attachment_map_t::iterator iter;
 		for (iter = avatar->mAttachmentPoints.begin();
@@ -11594,7 +11595,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
 
 	avatar->setImpostorDim(tdim);
 
-	LLVOAvatar::sUseImpostors = TRUE;
+	LLVOAvatar::sUseImpostors = true; // @TODO why?
 	sUseOcclusion = occlusion;
 	sReflectionRender = FALSE;
 	sImpostorRender = FALSE;
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 756c765bbd7666402def6ee46e088f087218b541..8634b5fed244d8782fe8c993defa978210509420 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -481,7 +481,7 @@
           </text>
 
           <slider
-            control_name="MaximumARC"
+            control_name="IndirectMaxComplexity"
             follows="left|top"
             height="16"
             initial_value="101"
@@ -492,13 +492,13 @@
             left="30"
             min_val="1"
             max_val="101"
-            name="MaximumARC"
+            name="IndirectMaxComplexity"
             show_text="false"
             top_delta="16"
             width="300">
             <slider.commit_callback
-              function="Pref.UpdateSliderText"
-              parameter="MaximumARCText" />
+              function="Pref.UpdateIndirectMaxComplexity"
+              parameter="IndirectMaxComplexityText" />
           </slider>
           <text
             type="string"
@@ -509,31 +509,31 @@
             top_delta="0"
             left_delta="304"
             text_readonly_color="LabelDisabledColor"
-            name="MaximumARCText"
+            name="IndirectMaxComplexityText"
             width="128">
                0
           </text>
 
           <slider
-            control_name="RenderAvatarMaxVisible"
+            control_name="IndirectMaxNonImpostors"
             decimal_digits="0"
             follows="left|top"
             height="16"
             increment="1"
-            initial_value="12"
+            initial_value="0"
             label="Max. # of non-impostors:"
             label_width="185"
             layout="topleft"
             left="30"
             min_val="1"
             max_val="66"
-            name="MaxNumberAvatarDrawn"
+            name="IndirectMaxNonImpostors"
             show_text="false"
             top_delta="16"
             width="300">
             <slider.commit_callback
-              function="Pref.UpdateSliderText"
-              parameter="ImpostorsText" />
+              function="Pref.UpdateIndirectMaxNonImpostors"
+              parameter="IndirectMaxNonImpostorsText" />
           </slider>
           <text
             type="string"
@@ -544,9 +544,9 @@
             top_delta="0"
             left_delta="304"
             text_readonly_color="LabelDisabledColor"
-            name="ImpostorsText"
+            name="IndirectMaxNonImpostorsText"
             width="128">
-               0
+               No Limit
           </text>
 
           <slider