diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
index 640e273415c48de1eb5b26617dce7ad5a21b2382..b64852f17b8bb91010364c80b87b1c086717e9cb 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -281,7 +281,7 @@ void main()
 	color.rgb += diff.rgb * vary_pointlight_col_linear * col.rgb;
 
 	color.rgb = linear_to_srgb(color.rgb);
-
+	//color.rgb = vec3(1,0,1);
 	frag_color = color;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightAlphaMaskF.glsl
index 3d93583e1e060640a5a93ad4154de69b805d789a..a74256de8114e63dc39cd29de2dd034376faf4e5 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightAlphaMaskF.glsl
@@ -71,7 +71,8 @@ void main()
 	vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);
 #endif
 
-	if (color.a < minimum_alpha)
+	float final_alpha = color.a * vertex_color.a;
+	if (final_alpha < minimum_alpha)
 	{
 		discard;
 	}
@@ -83,8 +84,8 @@ void main()
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
 
 	color.rgb = linear_to_srgb(color.rgb);
-
+	//color.rgb = vec3(1,0,1);
 	frag_color.rgb = color.rgb;
-	frag_color.a   = color.a;
+	frag_color.a   = final_alpha;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
index 33c07a6e087710330d7b5ff11e5453108d66a594..5876efedecdc0ea482a32fdb99d9f7f382bb303b 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
@@ -69,14 +69,15 @@ void main()
 	vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);
 #endif
 
-	color.rgb *= vertex_color.rgb;
+
 	color.rgb = srgb_to_linear(color.rgb);
+	color.rgb *= vertex_color.rgb;
 
 	color.rgb = fullbrightAtmosTransport(color.rgb);
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
 
 	color.rgb = linear_to_srgb(color.rgb);
-
+	//color.rgb = vec3(1,0,1);
 	frag_color.rgb = color.rgb;
 	frag_color.a   = color.a;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
index 9ce4d89df733f9853ba8d763a41a0f3cba657ac7..954a27b698af74ac41e21ca445d913d71d8e9876 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
@@ -266,6 +266,13 @@ vec4 getPosition_d(vec2 pos_screen, float depth)
 	return pos;
 }
 
+#ifndef WATER_FOG
+vec3 getPositionEye()
+{
+	return vary_PositionEye;
+}
+#endif
+
 vec3 getSunlitColor()
 {
 	return vary_SunlitColor;
@@ -728,6 +735,10 @@ void main()
 	glare = min(glare, 1.0);
 	float al = max(diffcol.a,glare)*vertex_color.a;
 
+
+	//convert to gamma space for display on screen
+	col.rgb = linear_to_srgb(col.rgb);
+
 #ifdef WATER_FOG
 	vec4 temp = applyWaterFogDeferred(pos, vec4(col.rgb, al));
 	col.rgb = temp.rgb;
@@ -738,6 +749,7 @@ void main()
 	frag_color.a   = al;
 
 #else
+	//final_color.rgb = vec3(1,0,1);
 	frag_data[0] = final_color;
 	frag_data[1] = final_specular; // XYZ = Specular color. W = Specular exponent.
 	frag_data[2] = final_normal; // XY = Normal.  Z = Env. intensity.
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index 953f0189f0bb57a3e8898e1c6fc0e1122cf96013..950512a79dbad9936628cdfc20c590545b18bb0a 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -436,16 +436,15 @@ void main()
 		if (norm.w < 0.5)
 		{
 			col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a);
-
-			#ifdef WATER_FOG
-				vec4 fogged = applyWaterFogDeferred(pos,vec4(col, bloom));
-				col = fogged.rgb;
-				bloom = fogged.a;
-			#endif
-
 			col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);			
 		}
 
+		#ifdef WATER_FOG
+			vec4 fogged = applyWaterFogDeferred(pos,vec4(col, bloom));
+			col = fogged.rgb;
+			bloom = fogged.a;
+		#endif
+
 		col = srgb_to_linear(col);
 
 		//col = vec3(1,0,1);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
index 17288873c81c3a7353e0e0b6c2186fd321eb79e4..74154152909238ef547c61b8b61e404873631f70 100755
--- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
@@ -192,7 +192,10 @@ void main()
 	//wavef = normalize(wavef);
 	vec3 screenspacewavef = (norm_mat*vec4(wavef, 1.0)).xyz;
 	
-	frag_data[0] = vec4(linear_to_srgb(color.rgb), 0.5); // diffuse
+	// this is needed for materials in reflections, but not otherwise
+	//
+	//frag_data[0] = vec4(linear_to_srgb(color.rgb), 0.5); // diffuse
+	frag_data[0] = vec4(color.rgb, 0.5); // diffuse
 	frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
 	frag_data[2] = vec4(encode_normal(screenspacewavef), 0.0, 0.0); // normalxyz, displace
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index 9b72c5b57d0be97f84998912b6c283a9940d869c..0c71b4f554b0ac290eeb77d0d16d1963219be2e6 100755
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -455,23 +455,21 @@ void main()
 		if (norm.w < 0.5)
 		{
 			col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a);
-
-			#ifdef WATER_FOG
-				vec4 fogged = applyWaterFogDeferred(pos,vec4(col, bloom));
-				col = fogged.rgb;
-				bloom = fogged.a;
-			#endif
-
 			col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
 		}
 
+		#ifdef WATER_FOG
+			vec4 fogged = applyWaterFogDeferred(pos,vec4(col, bloom));
+			col = fogged.rgb;
+			bloom = fogged.a;
+		#endif
+
 		col = srgb_to_linear(col);
 
 		//col = vec3(1,0,1);
 		//col.g = envIntensity;
 	}
-	
+
 	frag_color.rgb = col;
 	frag_color.a = bloom;
 }
-
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 3d6c5398d5baa1fede962bfb48b178681e4d0562..c4b4c76254a29119a5cd205863c15c38380d4466 100755
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -5379,6 +5379,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 			}
 
 			bool use_legacy_bump = te->getBumpmap() && (te->getBumpmap() < 18) && (!mat || mat->getNormalID().isNull());
+			bool opaque = te->getColor().mV[3] >= 0.999f;
 
 			if (mat && LLPipeline::sRenderDeferred && !hud_group)
 			{
@@ -5388,7 +5389,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 				{
 					if (mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_MASK)
 					{
-						if (te->getColor().mV[3] >= 0.999f)
+						if (opaque)
 						{
 							registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK);
 						}
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index d88cb30887a35301a68b326a65182ba5d0a4de90..d89ad615ae0244b9c20c1dc6c50c4ac9105a66fe 100755
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -11262,7 +11262,9 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
 	
 	S32 occlusion = sUseOcclusion;
 	sUseOcclusion = 0;
-	//sReflectionRender = sRenderDeferred ? FALSE : TRUE;
+
+	sReflectionRender = sRenderDeferred ? FALSE : TRUE;
+
 	sShadowRender = TRUE;
 	sImpostorRender = TRUE;