diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
index 52345e7e51c01a6f6db89631e34d55c3d9451375..d730d920549f25a5c8e34c2618b1aa7ad01b5427 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
@@ -351,23 +351,6 @@ vec3 hue_to_rgb(float hue)
 
 // PBR Utils
 
-// ior Index of Refraction, normally 1.5
-// returns reflect0
-float calcF0(float ior)
-{
-    float f0 = (1.0 - ior) / (1.0 + ior);
-    return f0 * f0;
-}
-
-vec3 fresnel(float vh, vec3 f0, vec3 f90 )
-{
-    float x  = 1.0 - abs(vh);
-    float x2 = x*x;
-    float x5 = x2*x2*x;
-    vec3  fr = f0 + (f90 - f0)*x5;
-    return fr;
-}
-
 vec3 fresnelSchlick( vec3 reflect0, vec3 reflect90, float vh)
 {
     return reflect0 + (reflect90 - reflect0) * pow(clamp(1.0 - vh, 0.0, 1.0), 5.0);
@@ -682,6 +665,9 @@ vec3 pbrPunctual(vec3 diffuseColor, vec3 specularColor,
                     vec3 v, // surface point to camera
                     vec3 l) //surface point to light
 {
+    // make sure specular highlights from punctual lights don't fall off of polished surfaces
+    perceptualRoughness = max(perceptualRoughness, 8.0/255.0);
+    
 	float alphaRoughness = perceptualRoughness * perceptualRoughness;
 
 	// Compute reflectance.
diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
index 6dd140bff3b2426c22c56712dba34faadf797d29..a8a3b5d33f3a5e3d62290109e53f98238ebd519a 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
@@ -111,9 +111,6 @@ void main()
     float depth        = texture2DRect(depthMap, tc.xy).r;
     vec4  pos          = getPositionWithDepth(tc, depth);
     vec4  norm         = texture2DRect(normalMap, tc);
-    float envIntensity = norm.z;
-    norm.xyz           = getNorm(tc);
-
     vec3  light_dir   = (sun_up_factor == 1) ? sun_dir : moon_dir;
     float light_gamma = 1.0 / 1.3;
 
@@ -147,6 +144,7 @@ void main()
     bool hasPBR = GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_PBR);
     if (hasPBR)
     {
+        norm.xyz           = getNorm(tc);
         vec3 orm = texture2DRect(emissiveRect, tc).rgb; //orm is packed into "emissiveRect" to keep the data in linear color space
         float perceptualRoughness = orm.g;
         float metallic = orm.b;
@@ -164,6 +162,10 @@ void main()
         vec3 f0 = vec3(0.04);
         vec3 baseColor = diffuse.rgb;
         
+        //baseColor.rgb = vec3(0,0,0);
+        //colorEmissive = srgb_to_linear(norm.xyz*0.5+0.5);
+
+
         vec3 diffuseColor = baseColor.rgb*(vec3(1.0)-f0);
         diffuseColor *= 1.0 - metallic;
 
@@ -187,6 +189,9 @@ void main()
     }
     else
     {
+        float envIntensity = norm.z;
+        norm.xyz           = getNorm(tc);
+
         float da          = clamp(dot(norm.xyz, light_dir.xyz), 0.0, 1.0);
         da                = pow(da, light_gamma);
 
@@ -249,5 +254,6 @@ void main()
         frag_color.rgb = srgb_to_linear(color.rgb);
     }
 
+
     frag_color.a = bloom;
 }