diff --git a/indra/newview/alcontrolcache.cpp b/indra/newview/alcontrolcache.cpp
index adfa6e435b6cdbddba41ef49cc2d5109e5c1638d..eb552aeb4627d009b268a65667ad3546365d2281 100644
--- a/indra/newview/alcontrolcache.cpp
+++ b/indra/newview/alcontrolcache.cpp
@@ -16,6 +16,7 @@ bool ALControlCache::MapShowEvents;
 bool ALControlCache::MapShowLandForSale;
 bool ALControlCache::MapShowPeople;
 bool ALControlCache::MapShowTelehubs;
+F32  ALControlCache::MaxSelectDistance = 512.f;
 bool ALControlCache::NavBarShowParcelProperties = true;
 F32	 ALControlCache::NearMeRange = 4096.f;
 U32  ALControlCache::PreferredMaturity;
@@ -65,6 +66,7 @@ void ALControlCache::initControls()
 	DECLARE_CTRL_BOOL(MapShowLandForSale);
 	DECLARE_CTRL_BOOL(MapShowPeople);
 	DECLARE_CTRL_BOOL(MapShowTelehubs);
+	DECLARE_CTRL_F32(MaxSelectDistance);
 	DECLARE_CTRL_BOOL(NavBarShowParcelProperties);
 	DECLARE_CTRL_F32(NearMeRange);
 	DECLARE_CTRL_U32(PreferredMaturity);
diff --git a/indra/newview/alcontrolcache.h b/indra/newview/alcontrolcache.h
index eb24ba7e23088f250ca11919e3181b7bdb9675c7..30b6ac9377803c31badfc83f2f6e58843673b4d8 100644
--- a/indra/newview/alcontrolcache.h
+++ b/indra/newview/alcontrolcache.h
@@ -18,6 +18,7 @@ struct ALControlCache
 	static bool		MapShowLandForSale;
 	static bool		MapShowPeople;
 	static bool		MapShowTelehubs;
+	static F32		MaxSelectDistance;
 	static bool		NavBarShowParcelProperties;
 	static F32		NearMeRange;
 	static U32		PreferredMaturity;
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 0e5f252910c23283c9deccf233ef778763e630a4..fcdaa942b28fa6889d33a7683ec5637845aca822 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -91,7 +91,7 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
 // [/RLVa:KB]
 
 	LLVector3 av_pos = gAgent.getPositionAgent();
-	F32 select_dist_squared = gSavedSettings.getF32("MaxSelectDistance");
+	F32 select_dist_squared = ALControlCache::MaxSelectDistance;
 	select_dist_squared = select_dist_squared * select_dist_squared;
 
 	BOOL deselect = (mask == MASK_CONTROL);
@@ -146,8 +146,8 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
 		LLVector3 relative_av_pos = av_pos;
 		relative_av_pos -= LLViewerCamera::getInstance()->getOrigin();
 
-		F32 new_far = relative_av_pos * LLViewerCamera::getInstance()->getAtAxis() + gSavedSettings.getF32("MaxSelectDistance");
-		F32 new_near = relative_av_pos * LLViewerCamera::getInstance()->getAtAxis() - gSavedSettings.getF32("MaxSelectDistance");
+		F32 new_far = relative_av_pos * LLViewerCamera::getInstance()->getAtAxis() + ALControlCache::MaxSelectDistance;
+		F32 new_near = relative_av_pos * LLViewerCamera::getInstance()->getAtAxis() - ALControlCache::MaxSelectDistance;
 
 		new_near = llmax(new_near, 0.1f);
 
diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp
index ed4e0fee3d17a8e0d1dcf0b99c906de0ce9df389..d7cd143b5355cb376f2712172e81bae1330366b4 100644
--- a/indra/newview/llmaniprotate.cpp
+++ b/indra/newview/llmaniprotate.cpp
@@ -1197,7 +1197,7 @@ BOOL LLManipRotate::updateVisiblity()
 			// Don't drag manip if object too far away
 			if (ALControlCache::LimitSelectDistance)
 			{
-				F32 max_select_distance = gSavedSettings.getF32("MaxSelectDistance");
+				F32 max_select_distance = ALControlCache::MaxSelectDistance;
 				if (dist_vec_squared(gAgent.getPositionAgent(), center) > (max_select_distance * max_select_distance))
 				{
 					visible = FALSE;
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
index 0d6a6e3644298ecf035e50aba5d3cd71c57fe97d..b99176edfcc60b71ec258d2427148ff584ff3b24 100644
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -251,7 +251,7 @@ void LLManipScale::render()
 				// Don't draw manip if object too far away
 				if (ALControlCache::LimitSelectDistance)
 				{
-					F32 max_select_distance = gSavedSettings.getF32("MaxSelectDistance");
+					F32 max_select_distance = ALControlCache::MaxSelectDistance;
 					if (range_from_agent_squared > max_select_distance * max_select_distance)
 					{
 						return;
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index a0edbdf38b252e25b2c53111d12d5a35ded6a91f..b40d8ab32dab48e34f4fc20d669aed24189603c3 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -1842,7 +1842,7 @@ void LLManipTranslate::renderTranslationHandles()
 		// Don't draw handles if you're too far away
 		if (ALControlCache::LimitSelectDistance)
 		{
-			if (range_from_agent > gSavedSettings.getF32("MaxSelectDistance"))
+			if (range_from_agent > ALControlCache::MaxSelectDistance)
 			{
 				return;
 			}
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index ba19a5d8b1655b384666320e415790e1e8027e62..24cd09b3d9d043d7a5092a2510f8489b1673df0c 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -4501,9 +4501,9 @@ void LLSelectMgr::deselectAllIfTooFar()
 		&& !mSelectedObjects->isAttachment()
 		&& !selectionCenter.isExactlyZero())
 	{
-//		F32 deselect_dist = gSavedSettings.getF32("MaxSelectDistance");
+//		F32 deselect_dist = ALControlCache::MaxSelectDistance;
 // [RLVa:KB] - Checked: 2010-04-11 (RLVa-1.2.0e) | Modified: RLVa-0.2.0f
-		F32 deselect_dist = (!fRlvFartouch) ? gSavedSettings.getF32("MaxSelectDistance") : s_nFartouchDist;
+		F32 deselect_dist = (!fRlvFartouch) ? ALControlCache::MaxSelectDistance : s_nFartouchDist;
 // [/RLVa:KB]
 		F32 deselect_dist_sq = deselect_dist * deselect_dist;
 
diff --git a/indra/newview/lltoolplacer.cpp b/indra/newview/lltoolplacer.cpp
index a3d13ed8435a483a56af7cda3bd1754a7d5bfd1b..aabccb289266f3c6e2491a8ebff0bdca13807674 100644
--- a/indra/newview/lltoolplacer.cpp
+++ b/indra/newview/lltoolplacer.cpp
@@ -80,7 +80,7 @@ LLToolPlacer::LLToolPlacer()
 BOOL LLToolPlacer::raycastForNewObjPos( S32 x, S32 y, LLViewerObject** hit_obj, S32* hit_face, 
 							 BOOL* b_hit_land, LLVector3* ray_start_region, LLVector3* ray_end_region, LLViewerRegion** region )
 {
-	F32 max_dist_from_camera = gSavedSettings.getF32( "MaxSelectDistance" ) - 1.f;
+	F32 max_dist_from_camera = ALControlCache::MaxSelectDistance - 1.f;
 
 	// Viewer-side pick to find the right sim to create the object on.  
 	// First find the surface the object will be created on.
diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp
index 74a6327f99d40f2fc6f9518540ee0fd9c6cc5840..f2898d334fb5c05854df1d48cd7dcfa033607a0e 100644
--- a/indra/newview/llviewercamera.cpp
+++ b/indra/newview/llviewercamera.cpp
@@ -332,7 +332,7 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
 		if (limit_select_distance)
 		{
 			// ...select distance from control
-			z_far = gSavedSettings.getF32("MaxSelectDistance");
+			z_far = ALControlCache::MaxSelectDistance;
 		}
 		else
 		{