diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 9fb5eef3a25be433c354e61d94ed5cf99898284e..2fe80af373cf62d3b002bed43d68015c1e22fac8 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -1363,7 +1363,7 @@ void LLVertexBuffer::setBuffer()
     U32 data_mask = LLGLSLShader::sCurBoundShaderPtr->mAttributeMask;
 
     // this Vertex Buffer must provide all necessary attributes for currently bound shader
-    llassert((data_mask & mTypeMask) == data_mask);
+    //llassert((data_mask & mTypeMask) == data_mask);
 
     if (sGLRenderBuffer != mGLBuffer)
     {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
index 1e640d95aeb09ab58f1bf83cedc9ab224b89177f..929b4e17b18b074fe32eb5332393135c2e4a5738 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
@@ -35,7 +35,6 @@ out vec4 frag_color;
 
 uniform sampler2D diffuseRect;
 uniform sampler2D depthMap;
-uniform sampler2D bloomMap;
 
 uniform float depth_cutoff;
 uniform float norm_cutoff;
@@ -81,7 +80,6 @@ void main()
 	sc = min(sc, max_cof);
 	sc = max(sc, -max_cof);
 	
-	vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy);
-	frag_color.rgb = diff.rgb + bloom.rgb;
+	frag_color.rgb = diff.rgb;
 	frag_color.a = sc/max_cof*0.5+0.5;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
index cc77712347a33d8c9dd10db356ae4b8df0498871..203c3aca4ac2214b596e3974a8087ad5e6760d2e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
@@ -34,6 +34,7 @@ out vec4 frag_color;
 #endif
 
 uniform sampler2D diffuseRect;
+uniform sampler2D emissiveRect;
 
 uniform vec2 screen_res;
 VARYING vec2 vary_fragcoord;
@@ -196,7 +197,7 @@ float noise(vec2 x) {
 void main() 
 {
     //this is the one of the rare spots where diffuseRect contains linear color values (not sRGB)
-    vec4 diff = texture2D(diffuseRect, vary_fragcoord);
+    vec4 diff = texture2D(diffuseRect, vary_fragcoord) + texture2D(emissiveRect, vary_fragcoord);
     diff.rgb = toneMap(diff.rgb);
     vec2 tc = vary_fragcoord.xy*screen_res;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
index a79f644aef8615f136f4a87f581c957eaf5beab5..1b868aee8d5c7334e38de79f2d0ce1d883f01324 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
@@ -34,7 +34,6 @@ out vec4 frag_color;
 #endif
 
 uniform sampler2D diffuseRect;
-uniform sampler2D bloomMap;
 
 uniform vec2 screen_res;
 VARYING vec2 vary_fragcoord;
@@ -43,7 +42,6 @@ void main()
 {
 	vec4 diff = texture2D(diffuseRect, vary_fragcoord.xy);
 	
-	vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy);
-	frag_color = diff + bloom;
+	frag_color = diff;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
index 3ead2149f5f32347277c2ac99c0c9b5c0cbc1b8c..770c436edea5b8ebdcce0dcbe1023d1748604e69 100644
--- a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
@@ -29,7 +29,6 @@
 
 out vec4 frag_color;
 
-uniform sampler2D emissiveRect;
 uniform sampler2D diffuseRect;
 uniform sampler2D depthMap;
 
@@ -37,8 +36,7 @@ in vec2 tc;
 
 void main() 
 {
-	frag_color = texture2D(emissiveRect, tc) +
-					texture2D(diffuseRect, tc);
+	frag_color = texture2D(diffuseRect, tc);
 
     gl_FragDepth = texture(depthMap, tc).r;
 }
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index b5b5d9ef7fabd500f6accf076662571eeb4ea30a..466a5d29958408c4db7fc1454f62712a393945d3 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7489,6 +7489,12 @@ void LLPipeline::renderFinalize()
 				screenTarget()->bindTexture(0, channel, LLTexUnit::TFO_POINT);
             }
 
+			channel = gDeferredPostGammaCorrectProgram.enableTexture(LLShaderMgr::DEFERRED_EMISSIVE, screenTarget()->getUsage());
+			if (channel > -1)
+			{
+				mGlow[1].bindTexture(0, channel, LLTexUnit::TFO_BILINEAR);
+			}
+
             gDeferredPostGammaCorrectProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, screenTarget()->getWidth(), screenTarget()->getHeight());
 
             static LLCachedControl<F32> exposure(gSavedSettings, "RenderExposure", 1.f);
@@ -7516,8 +7522,8 @@ void LLPipeline::renderFinalize()
 		bool multisample = RenderFSAASamples > 1 && mRT->fxaaBuffer.isComplete();
 		LLGLSLShader* shader = &gGlowCombineProgram;
 
-		S32 width = mRT->screen.getWidth();
-		S32 height = mRT->screen.getHeight();
+		S32 width = screenTarget()->getWidth();
+		S32 height = screenTarget()->getHeight();
 
 		S32 channel = -1;
 
@@ -7535,10 +7541,10 @@ void LLPipeline::renderFinalize()
 			shader->bind();
 			shader->uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, width, height);
 
-			channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mRT->deferredLight.getUsage());
+			channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, screenTarget()->getUsage());
 			if (channel > -1)
 			{
-				mRT->deferredLight.bindTexture(0, channel);
+				screenTarget()->bindTexture(0, channel);
 			}
 
             {
@@ -7549,7 +7555,7 @@ void LLPipeline::renderFinalize()
 
 			gGL.flush();
 
-			shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mRT->deferredLight.getUsage());
+			shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, screenTarget()->getUsage());
 			shader->unbind();
 
 			mRT->fxaaBuffer.flush();
@@ -7601,11 +7607,9 @@ void LLPipeline::renderFinalize()
 
 			shader->bind();
 
-            S32 glow_channel = shader->getTextureChannel(LLShaderMgr::DEFERRED_EMISSIVE);
             S32 screen_channel = shader->getTextureChannel(LLShaderMgr::DEFERRED_DIFFUSE);
             S32 depth_channel = shader->getTextureChannel(LLShaderMgr::DEFERRED_DEPTH);
 
-			gGL.getTexUnit(glow_channel)->bind(&mGlow[1]);
 			gGL.getTexUnit(screen_channel)->bind(screenTarget());
             gGL.getTexUnit(depth_channel)->bind(&mRT->deferredScreen, true);
 
@@ -7622,7 +7626,6 @@ void LLPipeline::renderFinalize()
 			shader->unbind();
 		}
 	}
-    
 
     gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
@@ -7779,12 +7782,6 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_
         }
 	}
 
-	channel = shader.enableTexture(LLShaderMgr::DEFERRED_BLOOM);
-	if (channel > -1)
-	{
-		mGlow[1].bindTexture(0, channel);
-	}
-
 	stop_glerror();
 
     bindShadowMaps(shader);