diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
index e329023a8a1780cc6c3e5302528104783ade7d8b..183a736defe88d91d48a32255fedcec6dc1226f4 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
@@ -150,17 +150,6 @@ vec4 getNorm(vec2 screenpos)
     return norm;
 }
 
-// return packedNormalEnvIntensityFlags since GBUFFER_FLAG_HAS_PBR needs .w
-// See: C++: addDeferredAttachments(), GLSL: softenLightF
-vec4 getNormalEnvIntensityFlags(vec2 screenpos, out vec3 n, out float envIntensity)
-{
-    vec4 norm = texture(normalMap, screenpos.xy);
-    n = norm.xyz;
-    envIntensity = texture(emissiveRect, screenpos.xy).r;
-
-    return norm;
-}
-
 // get linear depth value given a depth buffer sample d and znear and zfar values
 float linearDepth(float d, float znear, float zfar)
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
index 3ce2efa9730a32f563eb2beacad689f52731bdb3..b4ab7cd1692699613f3b7eccf60c77f22ad97e45 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
@@ -47,7 +47,6 @@ vec2 texgen_object(vec4 vpos, mat4 mat, vec4 tp0, vec4 tp1)
     
     tcoord.x = dot(vpos, tp0);
     tcoord.y = dot(vpos, tp1);
-
     tcoord.z = 0;
     tcoord.w = 1;
 
diff --git a/indra/newview/llheroprobemanager.cpp b/indra/newview/llheroprobemanager.cpp
index de2563f6c12951cc3a8b1fd0e79754e30be09e4c..852116958b32888430b75faeb32f4fb2da893344 100644
--- a/indra/newview/llheroprobemanager.cpp
+++ b/indra/newview/llheroprobemanager.cpp
@@ -75,7 +75,7 @@ LLHeroProbeManager::~LLHeroProbeManager()
 // helper class to seed octree with probes
 void LLHeroProbeManager::update()
 {
-    if (!LLPipeline::RenderMirrors || gTeleportDisplay || LLStartUp::getStartupState() < STATE_PRECACHE)
+    if (!LLPipeline::RenderMirrors || !LLPipeline::sReflectionProbesEnabled || gTeleportDisplay || LLStartUp::getStartupState() < STATE_PRECACHE)
     {
         return;
     }
@@ -124,7 +124,7 @@ void LLHeroProbeManager::update()
         float camera_center_distance = 99999.f;
         for (auto vo : mHeroVOList)
         {
-            if (vo && !vo->isDead() && vo->mDrawable.notNull())
+            if (vo && !vo->isDead() && vo->mDrawable.notNull() && vo->isReflectionProbe() && vo->getReflectionProbeIsBox())
             {
                 float distance = (LLViewerCamera::instance().getOrigin() - vo->getPositionAgent()).magVec();
                 float center_distance = cameraDirection * (vo->getPositionAgent() - camera_pos);
@@ -213,6 +213,12 @@ void LLHeroProbeManager::update()
 
 void LLHeroProbeManager::renderProbes()
 {
+    if (!LLPipeline::RenderMirrors || !LLPipeline::sReflectionProbesEnabled || gTeleportDisplay ||
+        LLStartUp::getStartupState() < STATE_PRECACHE)
+    {
+        return;
+    }
+
     static LLCachedControl<S32> sDetail(gSavedSettings, "RenderHeroReflectionProbeDetail", -1);
     static LLCachedControl<S32> sLevel(gSavedSettings, "RenderHeroReflectionProbeLevel", 3);
 
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
index dacf4a5c93e92816353475ea97308ca77571cc1c..0807fafee08095c34d59658b55c890908fc6f8c4 100644
--- a/indra/newview/llpanelvolume.cpp
+++ b/indra/newview/llpanelvolume.cpp
@@ -417,6 +417,7 @@ void LLPanelVolume::getState( )
 
     // Reflection Probe
     BOOL is_probe = volobjp && volobjp->isReflectionProbe();
+    bool is_mirror = volobjp && volobjp->getReflectionProbeIsMirror();
     getChild<LLUICtrl>("Reflection Probe")->setValue(is_probe);
     getChildView("Reflection Probe")->setEnabled(editable && single_volume && volobjp && !volobjp->isMesh());
 
@@ -424,9 +425,9 @@ void LLPanelVolume::getState( )
 
     getChildView("Probe Dynamic")->setEnabled(probe_enabled);
     getChildView("Probe Mirror")->setEnabled(probe_enabled);
-    getChildView("Probe Volume Type")->setEnabled(probe_enabled);
-    getChildView("Probe Ambiance")->setEnabled(probe_enabled);
-    getChildView("Probe Near Clip")->setEnabled(probe_enabled);
+    getChildView("Probe Volume Type")->setEnabled(probe_enabled && !is_mirror);
+    getChildView("Probe Ambiance")->setEnabled(probe_enabled && !is_mirror);
+    getChildView("Probe Near Clip")->setEnabled(probe_enabled && !is_mirror);
 
     if (!probe_enabled)
     {
@@ -1638,6 +1639,8 @@ void LLPanelVolume::onCommitProbe(LLUICtrl* ctrl, void* userdata)
     volobjp->setReflectionProbeIsDynamic(self->getChild<LLUICtrl>("Probe Dynamic")->getValue().asBoolean());
 
     bool is_mirror = self->getChild<LLUICtrl>("Probe Mirror")->getValue().asBoolean();
+    self->getChildView("Probe Volume Type")->setEnabled(!is_mirror);
+
     volobjp->setReflectionProbeIsMirror(is_mirror);
 
     self->getChildView("Probe Ambiance")->setEnabled(!is_mirror);
@@ -1645,7 +1648,7 @@ void LLPanelVolume::onCommitProbe(LLUICtrl* ctrl, void* userdata)
 
     std::string shape_type = self->getChild<LLUICtrl>("Probe Volume Type")->getValue().asString();
 
-    bool is_box = shape_type == "Box";
+    bool is_box = shape_type == "Box" || is_mirror;
 
     if (volobjp->setReflectionProbeIsBox(is_box))
     {