diff --git a/indra/newview/llreflectionmap.cpp b/indra/newview/llreflectionmap.cpp
index 85c02831308c628034722e397ce3fb40b2eaa1c1..931ebbaf050b13289705f89af98d8d9108212b94 100644
--- a/indra/newview/llreflectionmap.cpp
+++ b/indra/newview/llreflectionmap.cpp
@@ -117,7 +117,7 @@ void LLReflectionMap::autoAdjustOrigin()
             {
                 int face = -1;
                 LLVector4a intersection;
-                LLDrawable* drawable = mGroup->lineSegmentIntersect(bounds[0], corners[i], false, false, true, &face, &intersection);
+                LLDrawable* drawable = mGroup->lineSegmentIntersect(bounds[0], corners[i], false, false, true, true, &face, &intersection);
                 if (drawable != nullptr)
                 {
                     hit = true;
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 6480cecf810400e96e6821f0b122c530842849b8..f9752c337c6526b61f41fa746e71629a6ee5a68c 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -3524,8 +3524,9 @@ class LLOctreeIntersect : public LLOctreeTraveler<LLViewerOctreeEntry, LLPointer
 	BOOL mPickTransparent;
 	BOOL mPickRigged;
     BOOL mPickUnselectable;
+    BOOL mPickReflectionProbe;
 
-	LLOctreeIntersect(const LLVector4a& start, const LLVector4a& end, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_unselectable,
+	LLOctreeIntersect(const LLVector4a& start, const LLVector4a& end, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_unselectable, BOOL pick_reflection_probe,
 					  S32* face_hit, LLVector4a* intersection, LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)
 		: mStart(start),
 		  mEnd(end),
@@ -3537,7 +3538,8 @@ class LLOctreeIntersect : public LLOctreeTraveler<LLViewerOctreeEntry, LLPointer
 		  mHit(NULL),
 		  mPickTransparent(pick_transparent),
 		  mPickRigged(pick_rigged),
-          mPickUnselectable(pick_unselectable)
+          mPickUnselectable(pick_unselectable),
+          mPickReflectionProbe(pick_reflection_probe)
 	{
 	}
 	
@@ -3610,7 +3612,8 @@ class LLOctreeIntersect : public LLOctreeTraveler<LLViewerOctreeEntry, LLPointer
 		{
 			LLViewerObject* vobj = drawable->getVObj();
 
-			if (vobj)
+            if (vobj &&
+                (!vobj->isReflectionProbe() || mPickReflectionProbe))
 			{
 				LLVector4a intersection;
 				bool skip_check = false;
@@ -3656,6 +3659,7 @@ LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector4a& start, co
 													 BOOL pick_transparent,
 													 BOOL pick_rigged,
                                                      BOOL pick_unselectable,
+                                                     BOOL pick_reflection_probe,
 													 S32* face_hit,                   // return the face hit
 													 LLVector4a* intersection,         // return the intersection point
 													 LLVector2* tex_coord,            // return the texture coordinates of the intersection point
@@ -3664,7 +3668,7 @@ LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector4a& start, co
 	)
 
 {
-	LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, face_hit, intersection, tex_coord, normal, tangent);
+	LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, intersection, tex_coord, normal, tangent);
 	LLDrawable* drawable = intersect.check(mOctree);
 
 	return drawable;
@@ -3674,6 +3678,7 @@ LLDrawable* LLSpatialGroup::lineSegmentIntersect(const LLVector4a& start, const
     BOOL pick_transparent,
     BOOL pick_rigged,
     BOOL pick_unselectable,
+    BOOL pick_reflection_probe,
     S32* face_hit,                   // return the face hit
     LLVector4a* intersection,         // return the intersection point
     LLVector2* tex_coord,            // return the texture coordinates of the intersection point
@@ -3682,7 +3687,7 @@ LLDrawable* LLSpatialGroup::lineSegmentIntersect(const LLVector4a& start, const
 )
 
 {
-    LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, face_hit, intersection, tex_coord, normal, tangent);
+    LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, intersection, tex_coord, normal, tangent);
     LLDrawable* drawable = intersect.check(getOctreeNode());
 
     return drawable;
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 298fff907dfd64aea6c8b820ad271465a7f6b532..6b59d07c90fbf879087a62c36cf3129690b3436b 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -299,6 +299,7 @@ class LLSpatialGroup final : public LLOcclusionCullingGroup
         BOOL pick_transparent,
         BOOL pick_rigged,
         BOOL pick_unselectable,
+        BOOL pick_reflection_probe,
         S32* face_hit,                          // return the face hit
         LLVector4a* intersection = NULL,         // return the intersection point
         LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point
@@ -373,6 +374,7 @@ class LLSpatialPartition: public LLViewerOctreePartition, public LLGeometryManag
 									 BOOL pick_transparent, 
 									 BOOL pick_rigged,
                                      BOOL pick_unselectable,
+                                     BOOL pick_reflection_probe,
 									 S32* face_hit,                          // return the face hit
 									 LLVector4a* intersection = NULL,         // return the intersection point
 									 LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 187c81342d3c7d13310d46134544b6cc0d3f5423..d2739e117bccc668c8def21e66c0f07e482bdb1a 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -118,7 +118,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
 	mMouseDownY = y;
 	LLTimer pick_timer;
 	BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
-	LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged);
+	LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged, FALSE, TRUE, FALSE);
 	LLPickInfo visible_pick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);
 	LLViewerObject *transp_object = transparent_pick.getObject();
 	LLViewerObject *visible_object = visible_pick.getObject();
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index cf4a51b292c9f9cbfed6d56f4598bbad15f774a1..d974681761c1e715626e48a28eac4da4282ff8d8 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -3370,7 +3370,7 @@ void LLViewerWindow::updateUI()
 	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_RAYCAST))
 	{
 		gDebugRaycastFaceHit = -1;
-		gDebugRaycastObject = cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE,
+		gDebugRaycastObject = cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, FALSE,
 											  &gDebugRaycastFaceHit,
 											  &gDebugRaycastIntersection,
 											  &gDebugRaycastTexCoord,
@@ -4311,7 +4311,7 @@ void LLViewerWindow::pickAsync( S32 x,
         pick_transparent = TRUE;
     }
 
-	LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, pick_rigged, FALSE, TRUE, pick_unselectable, callback);
+	LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, pick_rigged, FALSE, TRUE, pick_unselectable, TRUE, callback);
 	schedulePick(pick_info);
 }
 
@@ -4367,7 +4367,7 @@ void LLViewerWindow::returnEmptyPicks()
 }
 
 // Performs the GL object/land pick.
-LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_particle, BOOL pick_unselectable)
+LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_particle, BOOL pick_unselectable, BOOL pick_reflection_probe)
 {
 	BOOL in_build_mode = LLFloaterReg::instanceVisible("build");
 	if ((in_build_mode && gSavedSettings.getBOOL("SelectInvisibleObjects")) || LLDrawPoolAlpha::sShowDebugAlpha)
@@ -4379,7 +4379,7 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_transp
 	
 	// shortcut queueing in mPicks and just update mLastPick in place
 	MASK	key_mask = gKeyboard->currentMask(TRUE);
-	mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, pick_rigged, pick_particle, TRUE, FALSE, NULL);
+	mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, pick_rigged, pick_particle, pick_reflection_probe, TRUE, FALSE, NULL);
 	mLastPick.fetchResults();
 
 	return mLastPick;
@@ -4417,6 +4417,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
 												BOOL pick_transparent,
 												BOOL pick_rigged,
                                                 BOOL pick_unselectable,
+                                                BOOL pick_reflection_probe,
 												S32* face_hit,
 												LLVector4a *intersection,
 												LLVector2 *uv,
@@ -4495,7 +4496,8 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
 		}
 		else // is a world object
 		{
-			if (this_object->lineSegmentIntersect(mw_start, mw_end, this_face, pick_transparent, pick_rigged, pick_unselectable,
+            if ((pick_reflection_probe || !this_object->isReflectionProbe())
+                && this_object->lineSegmentIntersect(mw_start, mw_end, this_face, pick_transparent, pick_rigged, pick_unselectable,
 												  face_hit, intersection, uv, normal, tangent))
 			{
 				found = this_object;
@@ -4516,7 +4518,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
 // [/RLVa:KB]
 		if (!found) // if not found in HUD, look in world:
 		{
-			found = gPipeline.lineSegmentIntersectInWorld(mw_start, mw_end, pick_transparent, pick_rigged, pick_unselectable,
+			found = gPipeline.lineSegmentIntersectInWorld(mw_start, mw_end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe,
 														  face_hit, intersection, uv, normal, tangent);
 			if (found && !pick_transparent)
 			{
@@ -6306,30 +6308,32 @@ LLPickInfo::LLPickInfo()
 {
 }
 
-LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos, 
-		       MASK keyboard_mask, 
-		       BOOL pick_transparent,
-			   BOOL pick_rigged,
-			   BOOL pick_particle,
-		       BOOL pick_uv_coords,
-			   BOOL pick_unselectable,
-		       void (*pick_callback)(const LLPickInfo& pick_info))
-	: mMousePt(mouse_pos),
-	  mKeyMask(keyboard_mask),
-	  mPickCallback(pick_callback),
-	  mPickType(PICK_INVALID),
-	  mWantSurfaceInfo(pick_uv_coords),
-	  mObjectFace(-1),
-	  mUVCoords(-1.f, -1.f),
-	  mSTCoords(-1.f, -1.f),
-	  mXYCoords(-1, -1),
-	  mNormal(),
-	  mTangent(),
-	  mBinormal(),
-	  mHUDIcon(NULL),
-	  mPickTransparent(pick_transparent),
-	  mPickRigged(pick_rigged),
-	  mPickParticle(pick_particle),
+LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,
+    MASK keyboard_mask,
+    BOOL pick_transparent,
+    BOOL pick_rigged,
+    BOOL pick_particle,
+    BOOL pick_reflection_probe,
+    BOOL pick_uv_coords,
+    BOOL pick_unselectable,
+    void (*pick_callback)(const LLPickInfo& pick_info))
+    : mMousePt(mouse_pos),
+    mKeyMask(keyboard_mask),
+    mPickCallback(pick_callback),
+    mPickType(PICK_INVALID),
+    mWantSurfaceInfo(pick_uv_coords),
+    mObjectFace(-1),
+    mUVCoords(-1.f, -1.f),
+    mSTCoords(-1.f, -1.f),
+    mXYCoords(-1, -1),
+    mNormal(),
+    mTangent(),
+    mBinormal(),
+    mHUDIcon(NULL),
+    mPickTransparent(pick_transparent),
+    mPickRigged(pick_rigged),
+    mPickParticle(pick_particle),
+    mPickReflectionProbe(pick_reflection_probe),
 	  mPickUnselectable(pick_unselectable)
 {
 }
@@ -6360,7 +6364,7 @@ void LLPickInfo::fetchResults()
 	}
 
 	LLViewerObject* hit_object = gViewerWindow->cursorIntersect(mMousePt.mX, mMousePt.mY, 512.f,
-									NULL, -1, mPickTransparent, mPickRigged, mPickUnselectable, &face_hit,
+									NULL, -1, mPickTransparent, mPickRigged, mPickUnselectable, mPickReflectionProbe, &face_hit,
 									&intersection, &uv, &normal, &tangent, &start, &end);
 	
 	mPickPt = mMousePt;
@@ -6521,7 +6525,7 @@ void LLPickInfo::getSurfaceInfo()
 	if (objectp)
 	{
 		if (gViewerWindow->cursorIntersect(ll_round((F32)mMousePt.mX), ll_round((F32)mMousePt.mY), 1024.f,
-										   objectp, -1, mPickTransparent, mPickRigged, mPickUnselectable,
+										   objectp, -1, mPickTransparent, mPickRigged, mPickUnselectable, mPickReflectionProbe,
 										   &mObjectFace,
 										   &intersection,
 										   &mSTCoords,
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 6bd2c6a6eae85f142369e5136dbbf32977e27fca..622e09f5badd19ab9d1978877170e486a686d2a8 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -93,6 +93,7 @@ class LLPickInfo
 		BOOL pick_transparent,
 		BOOL pick_rigged,
 		BOOL pick_particle,
+        BOOL pick_reflection_probe,
 		BOOL pick_surface_info,
 		BOOL pick_unselectable,
 		void (*pick_callback)(const LLPickInfo& pick_info));
@@ -129,6 +130,7 @@ class LLPickInfo
 	BOOL			mPickRigged;
 	BOOL			mPickParticle;
 	BOOL			mPickUnselectable;
+    BOOL            mPickReflectionProbe = FALSE;
 	void		    getSurfaceInfo();
 
 private:
@@ -404,7 +406,7 @@ class LLViewerWindow final : public LLWindowCallbacks
 								BOOL pick_transparent = FALSE,
 								BOOL pick_rigged = FALSE,
 								BOOL pick_unselectable = FALSE);
-	LLPickInfo		pickImmediate(S32 x, S32 y, BOOL pick_transparent, BOOL pick_rigged = FALSE, BOOL pick_particle = FALSE, BOOL pick_unselectable = TRUE);
+	LLPickInfo		pickImmediate(S32 x, S32 y, BOOL pick_transparent, BOOL pick_rigged = FALSE, BOOL pick_particle = FALSE, BOOL pick_unselectable = TRUE, BOOL pick_reflection_probe = TRUE);
 	LLHUDIcon* cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth,
 										   LLVector4a* intersection);
 
@@ -414,6 +416,7 @@ class LLViewerWindow final : public LLWindowCallbacks
 									BOOL pick_transparent = FALSE,
 									BOOL pick_rigged = FALSE,
                                     BOOL pick_unselectable = TRUE,
+                                    BOOL pick_reflection_probe = TRUE,
 									S32* face_hit = NULL,
 									LLVector4a *intersection = NULL,
 									LLVector2 *uv = NULL,
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 41821e671870c84d6d91da66107a8d673b0bfd45..92af626c313b98062d79672435ae00f1fca94a88 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -6364,7 +6364,7 @@ LLVOPartGroup* LLPipeline::lineSegmentIntersectParticle(const LLVector4a& start,
 		LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_PARTICLE);
 		if (part && hasRenderType(part->mDrawableType))
 		{
-			LLDrawable* hit = part->lineSegmentIntersect(start, local_end, TRUE, FALSE, TRUE, face_hit, &position, NULL, NULL, NULL);
+			LLDrawable* hit = part->lineSegmentIntersect(start, local_end, TRUE, FALSE, TRUE, FALSE, face_hit, &position, NULL, NULL, NULL);
 			if (hit)
 			{
 				drawable = hit;
@@ -6393,6 +6393,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,
 														bool pick_transparent,
 														bool pick_rigged,
                                                         bool pick_unselectable,
+                                                        bool pick_reflection_probe,
 														S32* face_hit,
 														LLVector4a* intersection,         // return the intersection point
 														LLVector2* tex_coord,            // return the texture coordinates of the intersection point
@@ -6424,7 +6425,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,
 				LLSpatialPartition* part = region->getSpatialPartition(j);
 				if (part && hasRenderType(part->mDrawableType))
 				{
-					LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, face_hit, &position, tex_coord, normal, tangent);
+					LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, &position, tex_coord, normal, tangent);
 					if (hit)
 					{
 						drawable = hit;
@@ -6478,7 +6479,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,
 			LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_AVATAR);
 			if (part && hasRenderType(part->mDrawableType))
 			{
-				LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, face_hit, &position, tex_coord, normal, tangent);
+				LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, &position, tex_coord, normal, tangent);
 				if (hit)
 				{
 					LLVector4a delta;
@@ -6563,7 +6564,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInHUD(const LLVector4a& start, c
 		LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_HUD);
 		if (part)
 		{
-			LLDrawable* hit = part->lineSegmentIntersect(start, end, pick_transparent, FALSE, TRUE, face_hit, intersection, tex_coord, normal, tangent);
+			LLDrawable* hit = part->lineSegmentIntersect(start, end, pick_transparent, FALSE, TRUE, FALSE, face_hit, intersection, tex_coord, normal, tangent);
 			if (hit)
 			{
 				drawable = hit;
@@ -7289,7 +7290,7 @@ void LLPipeline::renderDoF(LLRenderTarget* src, LLRenderTarget* dst)
 						LLVector4a result;
 						result.clear();
 
-						gViewerWindow->cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, NULL, &result);
+						gViewerWindow->cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, TRUE, NULL, &result);
 
 						focus_point.set(result.getF32ptr());
 					}
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index a1023e1899854c2a741f8bf285017763c369ea2e..d491009460815513abdbfe8c80ec368031803ceb 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -184,6 +184,7 @@ class LLPipeline
 												bool pick_transparent,
 												bool pick_rigged,
                                                 bool pick_unselectable,
+                                                bool pick_reflection_probe,
 												S32* face_hit,                          // return the face hit
 												LLVector4a* intersection = NULL,         // return the intersection point
 												LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 7b833e2cf1a0b252e510b9d450b7f0b11a9216c1..2a8033eaede0777bf5807e5894c4714388c5f95a 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -12323,9 +12323,8 @@ Would you like to save them first?
   <notification
     icon="notifytip.tga"
     name="AutoAdjustHDRSky"
-    persist="true"
     type="alertmodal">
-      You are editing a non-HDR sky that has been automatically converted to HDR.  To remove HDR and tone mapping, set Reflection Probe Ambiance to zero.
+      You are editing a non-HDR sky that has been automatically converted to HDR. To remove HDR and tone mapping, set Reflection Probe Ambiance to zero.
     <usetemplate
         ignoretext="HDR Sky adjustment warning"
         name="okignore"