diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c6347c3f652891c33a259bf09158afb2e0c7ae4b..7af0067f5b1cc6be11651ce5f036ee67101c8a23 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10295,17 +10295,6 @@
       <key>Value</key>
       <real>1.0</real>
     </map>
-    <key>RenderRiggedLodCompensation</key>
-    <map>
-      <key>Comment</key>
-      <string>Affects visibility range of worn rigged meshes to compensate for missing LODs (limited by avatars own visibility)</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>F32</string>
-      <key>Value</key>
-      <real>6.5</real>
-    </map>
     <key>RenderWater</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index bf7e643d0b0bd1af5d80b500a95a3c17e5c94528..9db03a74381a9fbd58a485b3cc42ba162f0c1dea 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -592,7 +592,6 @@ 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::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..16f40fb747393d55ff6f6c0f177040f065062470 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -207,12 +207,6 @@ static bool handleVolumeLODChanged(const LLSD& newvalue)
 	return true;
 }
 
-static bool handleRiggedLODChanged(const LLSD& newvalue)
-{
-	LLVOVolume::sRiggedLODCompensation = llmax(0.25f, (F32)newvalue.asReal());
-    return true;
-}
-
 static bool handleAvatarLODChanged(const LLSD& newvalue)
 {
 	LLVOAvatar::sLODFactor = (F32) newvalue.asReal();
@@ -625,7 +619,6 @@ 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("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/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp
index 86591ff4df1aab8feda23cf0e8ef94d707920dbc..023f1b92ba5ff92a6a11abfceb9d25e929c9b943 100644
--- a/indra/newview/llvieweroctree.cpp
+++ b/indra/newview/llvieweroctree.cpp
@@ -465,7 +465,7 @@ LLViewerOctreeGroup::LLViewerOctreeGroup(OctreeNode* node)
 {
 	LLVector4a tmp;
 	tmp.splat(0.f);
-	mExtents[0] = mExtents[1] = mObjectBounds[0] = mObjectBounds[1] = 
+	mExtents[0] = mExtents[1] = mObjectBounds[0] = mObjectBounds[0] = mObjectBounds[1] = 
 		mObjectExtents[0] = mObjectExtents[1] = tmp;
 	
 	mBounds[0] = node->getCenter();
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 4f4b33fa8cef72ab328ab7ad394d826deba61c55..9e68bb78e0900f3bee15c7b2ba474857134a121a 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -253,7 +253,7 @@ BOOL gQuietSnapshot = FALSE;
 
 // Minimum value for UIScaleFactor, also defined in preferences, ui_scale_slider
 static const F32 MIN_UI_SCALE = 0.75f;
-// 2.0 in preferences, but win10 supports larger scaling and value is used more as
+// 4.0 in preferences, but win10 supports larger scaling and value is used more as
 // sanity check, so leaving space for larger values from DPI updates.
 static const F32 MAX_UI_SCALE = 7.0f;
 static const F32 MIN_DISPLAY_SCALE = 0.75f;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 8d86623665eff5f0b9b7310fcbc106e7198b492a..8c026bae2166176ca0c5d64b57d2df0c817b22a2 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -80,14 +80,12 @@
 
 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::sLODSlopDistanceFactor = 0.5f; //Changing this to zero, effectively disables the LOD transition slop 
 F32 LLVOVolume::sDistanceFactor = 1.0f;
 S32 LLVOVolume::sNumLODChanges = 0;
@@ -1215,18 +1213,18 @@ void LLVOVolume::sculpt()
 	}
 }
 
-S32	LLVOVolume::computeLODDetail(F32 distance, F32 radius, F32 lod_factor)
+S32	LLVOVolume::computeLODDetail(F32 distance, F32 radius)
 {
 	S32	cur_detail;
 	if (LLPipeline::sDynamicLOD)
 	{
 		// We've got LOD in the profile, and in the twist.  Use radius.
-		F32 tan_angle = (lod_factor*radius) / distance;
+		F32 tan_angle = (LLVOVolume::sLODFactor*radius)/distance;
 		cur_detail = LLVolumeLODGroup::getDetailFromTan(ll_round(tan_angle, 0.01f));
 	}
 	else
 	{
-		cur_detail = llclamp((S32)(sqrtf(radius)*lod_factor*4.f), 0, 3);
+		cur_detail = llclamp((S32) (sqrtf(radius)*LLVOVolume::sLODFactor*4.f), 0, 3);		
 	}
 	return cur_detail;
 }
@@ -1242,7 +1240,6 @@ BOOL LLVOVolume::calcLOD()
 	
 	F32 radius;
 	F32 distance;
-	F32 lod_factor = LLVOVolume::sLODFactor;
 
 	if (mDrawable->isState(LLDrawable::RIGGED))
 	{
@@ -1254,54 +1251,22 @@ BOOL LLVOVolume::calcLOD()
 			return FALSE;
 		}
 
-		// Note: when changing, take note that a lot of rigged meshes have only one LOD.
 		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);
+		radius = avatar->getBinRadius();
 	}
 	else
 	{
 		distance = mDrawable->mDistanceWRTCamera;
 		radius = getVolume() ? getVolume()->mLODScaleBias.scaledVec(getScale()).length() : getScale().length();
 	}
-
+	
 	//hold onto unmodified distance for debugging
 	//F32 debug_distance = distance;
-
+	
 	distance *= sDistanceFactor;
 
-	F32 rampDist = lod_factor * 2;
-
+	F32 rampDist = LLVOVolume::sLODFactor * 2;
+	
 	if (distance < rampDist)
 	{
 		// Boost LOD when you're REALLY close
@@ -1314,8 +1279,7 @@ BOOL LLVOVolume::calcLOD()
 	distance *= F_PI/3.f;
 
 	cur_detail = computeLODDetail(ll_round(distance, 0.01f), 
-									ll_round(radius, 0.01f),
-									lod_factor);
+									ll_round(radius, 0.01f));
 
 
 	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_LOD_INFO) &&
@@ -1789,10 +1753,7 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable)
 		dirtySpatialGroup(drawable->isState(LLDrawable::IN_REBUILD_Q1));
 		compiled = TRUE;
 		lodOrSculptChanged(drawable, compiled);
-		if (!mLODChanged)
-		{
-			genBBoxes(FALSE);
-		}
+		genBBoxes(FALSE);
 	}
 	// it has its own drawable (it's moved) or it has changed UVs or it has changed xforms from global<->local
 	else
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index ff005f8dc50565b5b58464264d7c2734347ecf13..a3319083200be4300e5abebf5201bdeaa2d30dac 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -327,7 +327,7 @@ class LLVOVolume : public LLViewerObject
 	void clearRiggedVolume();
 
 protected:
-	S32	computeLODDetail(F32	distance, F32 radius, F32 lod_factor);
+	S32	computeLODDetail(F32	distance, F32 radius);
 	BOOL calcLOD();
 	LLFace* addFace(S32 face_index);
 	void updateTEData();
@@ -379,7 +379,6 @@ 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 sDistanceFactor;			// LOD distance factor
 
 	static LLPointer<LLObjectMediaDataClient> sObjectMediaClient;
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 0d176e7484593aa2e60fa6b1f33c3155dcd77c82..0cd56af6d7e437d259d1d391ec4b95a762f7e8f1 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -138,7 +138,7 @@
    initial_value="1"
    layout="topleft"
    left_pad="0"
-   max_val="2.0"
+   max_val="4.0"
    min_val="0.75"
    name="ui_scale_slider"
    top_pad="-14"