diff --git a/Shaders/sunlight.frag b/Shaders/sunlight.frag
index 7db44e1b0..85e110f23 100644
--- a/Shaders/sunlight.frag
+++ b/Shaders/sunlight.frag
@@ -62,8 +62,6 @@ void main() {
     if ( spec_emis.a < 0.1 )
         discard;
     vec3 normal = normal_decode(texture2D( normal_tex, coords ).rg);
-    float len = length(normal);
-    normal /= len;
     vec3 viewDir = normalize(ray);
     vec3 pos = position( viewDir, coords, depth_tex );
 
@@ -89,14 +87,15 @@ void main() {
     lightDir = normalize( lightDir );
     vec3 color = texture2D( color_tex, coords ).rgb;
     vec3 Idiff = clamp( dot( lightDir, normal ), 0.0, 1.0 ) * color * fg_SunDiffuseColor.rgb;
-    vec3 halfDir = lightDir - viewDir;
-    len = length( halfDir );
+    vec3 halfDir = normalize( lightDir - viewDir );
     vec3 Ispec = vec3(0.0);
     vec3 Iemis = spec_emis.z * color;
-    if (len > 0.0001) {
-        halfDir /= len;
-        Ispec = pow( clamp( dot( halfDir, normal ), 0.0, 1.0 ), spec_emis.y * 128.0 ) * spec_emis.x * fg_SunSpecularColor.rgb;
-    }
+
+    float cosAngIncidence = clamp(dot(normal, lightDir), 0.0, 1.0);
+    float blinnTerm = clamp( dot( halfDir, normal ), 0.0, 1.0 );
+
+    if (cosAngIncidence > 0.0)
+        Ispec = pow( blinnTerm, spec_emis.y * 128.0 ) * spec_emis.x * fg_SunSpecularColor.rgb;
 
     float matID = texture2D( color_tex, coords ).a * 255.0;
     if (matID == 255.0)