diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 017b2a5249a4a7cb1dbc3c612a03a3e03a862fba..28c632b49848ad60612c43f1e080e8ce2e91e70d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10273,16 +10273,16 @@
       <key>Value</key>
       <real>1.0</real>
     </map>
-    <key>RenderRiggedLodCompensation</key>
+    <key>RenderRiggedFactorMultiplier</key>
     <map>
       <key>Comment</key>
-      <string>Affects visibility range of worn rigged meshes to compensate for missing LODs (limited by avatars own visibility)</string>
+      <string>Affects level of detail for worn rigged meshes</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <real>6.5</real>
+      <real>7.5</real>
     </map>
     <key>RenderWater</key>
     <map>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index bf7e643d0b0bd1af5d80b500a95a3c17e5c94528..b0829a3da14cb1ea832ec9ce0f417f1070749fbb 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -592,7 +592,7 @@ static void settings_to_globals()
 	LLImageGL::sGlobalUseAnisotropic	= gSavedSettings.getBOOL("RenderAnisotropic");
 	LLImageGL::sCompressTextures		= gSavedSettings.getBOOL("RenderCompressTextures");
 	LLVOVolume::sLODFactor				= gSavedSettings.getF32("RenderVolumeLODFactor");
-	LLVOVolume::sRiggedLODCompensation	= llmax(0.25f, gSavedSettings.getF32("RenderRiggedLodCompensation"));
+	LLVOVolume::sRiggedFactorMultiplier	= gSavedSettings.getF32("RenderRiggedFactorMultiplier");
 	LLVOVolume::sDistanceFactor			= 1.f-LLVOVolume::sLODFactor * 0.1f;
 	LLVolumeImplFlexible::sUpdateFactor = gSavedSettings.getF32("RenderFlexTimeFactor");
 	LLVOTree::sTreeFactor				= gSavedSettings.getF32("RenderTreeLODFactor");
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index bdd79b0da1fa3e9bce112da6fb15e0496be60891..5e74e9f01934a58862fa249d2ef5ba1fc82604c0 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -209,7 +209,7 @@ static bool handleVolumeLODChanged(const LLSD& newvalue)
 
 static bool handleRiggedLODChanged(const LLSD& newvalue)
 {
-	LLVOVolume::sRiggedLODCompensation = llmax(0.25f, (F32)newvalue.asReal());
+    LLVOVolume::sRiggedFactorMultiplier = (F32)newvalue.asReal();
     return true;
 }
 
@@ -625,7 +625,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
 	gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2));
-	gSavedSettings.getControl("RenderRiggedLodCompensation")->getSignal()->connect(boost::bind(&handleRiggedLODChanged, _2));
+	gSavedSettings.getControl("RenderRiggedFactorMultiplier")->getSignal()->connect(boost::bind(&handleRiggedLODChanged, _2));
 	gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2));
 	gSavedSettings.getControl("RenderAvatarPhysicsLODFactor")->getSignal()->connect(boost::bind(&handleAvatarPhysicsLODChanged, _2));
 	gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _2));
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 8d86623665eff5f0b9b7310fcbc106e7198b492a..55739915a36bed98cce3630cfb695e4028526b65 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -80,14 +80,13 @@
 
 const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;
 const F32 FORCE_CULL_AREA = 8.f;
-static const F32 MINIMUM_RIGGED_RADIUS = 0.05f;
 U32 JOINT_COUNT_REQUIRED_FOR_FULLRIG = 20;
 
 BOOL gAnimateTextures = TRUE;
 //extern BOOL gHideSelectedObjects;
 
 F32 LLVOVolume::sLODFactor = 1.f;
-F32 LLVOVolume::sRiggedLODCompensation = 6.5f;
+F32 LLVOVolume::sRiggedFactorMultiplier = 6.f;
 F32	LLVOVolume::sLODSlopDistanceFactor = 0.5f; //Changing this to zero, effectively disables the LOD transition slop 
 F32 LLVOVolume::sDistanceFactor = 1.0f;
 S32 LLVOVolume::sNumLODChanges = 0;
@@ -1255,39 +1254,12 @@ BOOL LLVOVolume::calcLOD()
 		}
 
 		// Note: when changing, take note that a lot of rigged meshes have only one LOD.
+		lod_factor *= LLVOVolume::sRiggedFactorMultiplier;
 		distance = avatar->mDrawable->mDistanceWRTCamera;
 		F32 avatar_radius = avatar->getBinRadius();
-		F32 object_radius = 0;
-
-		LLDrawable* drawablep = mDrawable.get();
-		while (!drawablep->isRoot())
-		{
-			drawablep = drawablep->getParent();
-		}
-
-		// Mesh can consist of multiple objects that have to be treated as one item or we will
-		// get strange deformations or partially missing meshes (smallest elements will disappear)
-		LLSpatialBridge* bridge = drawablep->getSpatialBridge();
-		if (bridge)
-		{
-			const LLVector4a* ext = bridge->getSpatialExtents();
-			LLVector4a diff;
-			diff.setSub(ext[1], ext[0]);
-			object_radius = diff.getLength3().getF32();
-		}
-
-		if (object_radius <= 0)
-		{
-			// bridge missing or somehow not updated
-			const LLVector4a* ext = mDrawable->getSpatialExtents();
-			LLVector4a diff;
-			diff.setSub(ext[1], ext[0]);
-			object_radius = diff.getLength3().getF32();
-		}
-
-		// sRiggedLODCompensation is made to compensate for missing lower lods
-		radius = object_radius * LLVOVolume::sRiggedLODCompensation;
-		radius = llclamp(radius, MINIMUM_RIGGED_RADIUS, avatar_radius);
+		F32 object_radius = getVolume() ? getVolume()->mLODScaleBias.scaledVec(getScale()).length() : getScale().length();
+		radius = object_radius * LLVOVolume::sRiggedFactorMultiplier;
+		radius = llmin(radius, avatar_radius);
 	}
 	else
 	{
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index ff005f8dc50565b5b58464264d7c2734347ecf13..ca9917069b09aed47b1588af0f08363d5b84078d 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -379,7 +379,7 @@ class LLVOVolume : public LLViewerObject
 public:
 	static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop
 	static F32 sLODFactor;				// LOD scale factor
-	static F32 sRiggedLODCompensation;	// HACK: worn rigged LODs often have only high lod, so we are bumping them up withing avatar's visibility
+	static F32 sRiggedFactorMultiplier;	// Worn rigged LOD scale factor multiplier
 	static F32 sDistanceFactor;			// LOD distance factor
 
 	static LLPointer<LLObjectMediaDataClient> sObjectMediaClient;