diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index 2eb60a7980db3da4be60702c27be3194eb5f950d..2f135e922eb0984609ceaab619cdb3335bbb0119 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -569,23 +569,18 @@ static std::string get_object_log(GLhandleARB ret)
 
 //dump shader source for debugging
 void LLShaderMgr::dumpShaderSource(U32 shader_code_count, GLcharARB** shader_code_text)
-{	
-	for (U32 i = 0; i < shader_code_count; i++)
-	{
-		GLcharARB *line = shader_code_text[i];
-		size_t     len  = strlen( line );
-		GLcharARB  last = len > 0 ? line[len - 1] : 0;
-
-		// LL_ENDL already outputs a newline so temporarily strip off the end newline to prevent EVERY line outputting an (extra) blank line
-		if (last == '\n')
-		    line[len - 1] = 0;
+{
+	char num_str[16]; // U32 = max 10 digits
 
-		LL_SHADER_LOADING_WARNS() << i << ": " << shader_code_text[i] << LL_ENDL;
+	LL_SHADER_LOADING_WARNS() << "\n";
 
-		if (last == '\n')
-			line[len - 1] = '\n';
+	for (U32 i = 0; i < shader_code_count; i++)
+	{
+		snprintf(num_str, sizeof(num_str), "%4d: ", i+1);
+		std::string line_number(num_str);
+		LL_CONT << line_number << shader_code_text[i];
 	}
-    LL_SHADER_LOADING_WARNS() << LL_ENDL;
+    LL_CONT << LL_ENDL;
 }
 
 void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns, const std::string& filename) 
@@ -599,8 +594,8 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns, const std::string&
 
 	if (log.length() > 0)
 	{
-        LL_SHADER_LOADING_WARNS() << "Shader loading from " << fname << ":\n" << LL_ENDL;
-        LL_SHADER_LOADING_WARNS() << log << LL_ENDL;
+        LL_SHADER_LOADING_WARNS() << "Shader loading from " << fname << LL_ENDL;
+        LL_SHADER_LOADING_WARNS() << "\n" << log << LL_ENDL;
 	}
  }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
index c1cd57b089abfee1008c155d9b93005e62a20e5b..bf824b3afeb6e07868e6b12d50cf63a93ff92c82 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
@@ -234,14 +234,14 @@ void main()
 	diffcol.rgb = srgb_to_linear(diffcol.rgb);
 #endif
 
-#if HAS_SPECULAR_MAP != 0
+#ifdef HAS_SPECULAR_MAP
     vec4 spec = texture2D(specularMap, vary_texcoord2.xy);
     spec.rgb *= specular_color.rgb;
 #else
     vec4 spec = vec4(specular_color.rgb, 1.0);
 #endif
 
-#if HAS_NORMAL_MAP
+#ifdef HAS_NORMAL_MAP
 	vec4 norm = texture2D(bumpMap, vary_texcoord1.xy);
 
 	norm.xyz = norm.xyz * 2 - 1;
@@ -268,7 +268,7 @@ void main()
 
     vec4 final_specular = spec;
     
-#if HAS_SPECULAR_MAP != 0
+#ifdef HAS_SPECULAR_MAP
     vec4 final_normal = vec4(encode_normal(normalize(tnorm)), env_intensity * spec.a, 0.0);
 	final_specular.a = specular_color.a * norm.a;
 #else
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl
index 79b552ee1a9656fcb18a5e93d406ab30cd8d2b6c..1e244d9dfdae3d0e1ef7920ba3ff2b58c0e75431 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl
@@ -35,6 +35,7 @@ ATTRIBUTE vec2 texcoord0;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
 VARYING vec3 vary_texcoord1;
+VARYING vec4 vary_position;
 
 
 void calcAtmospherics(vec3 inPositionEye);
@@ -46,6 +47,9 @@ void main()
 	
 	mat = modelview_matrix * mat;
 	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz;
+
+    mat4 mvp = modelview_matrix * projection_matrix;
+    vary_position = mvp * vec4(position, 1.0);
 	
 	vec4 norm = vec4(position.xyz, 1.0);
 	norm.xyz += normal.xyz;