diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
index 029f282d7c99ca90aea81bbbee5e0157c2fd7cb0..5e6c5ebec862090da050846c3565f1e26f5c6974 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
@@ -9,34 +9,6 @@
 
 #extension GL_ARB_texture_rectangle : enable
 
-varying float vary_texture_index;
-
-uniform sampler2D tex0;
-uniform sampler2D tex1;
-uniform sampler2D tex2;
-uniform sampler2D tex3;
-uniform sampler2D tex4;
-uniform sampler2D tex5;
-uniform sampler2D tex6;
-uniform sampler2D tex7;
-
-vec4 textureLookup(vec2 texcoord)
-{
-	switch (int(vary_texture_index+0.25))
-	{
-		case 0: return texture2D(tex0, texcoord);
-		case 1: return texture2D(tex1, texcoord);
-		case 2: return texture2D(tex2, texcoord);
-		case 3: return texture2D(tex3, texcoord);
-		case 4: return texture2D(tex4, texcoord);
-		case 5: return texture2D(tex5, texcoord);
-		case 6: return texture2D(tex6, texcoord);
-		case 7: return texture2D(tex7, texcoord);
-	}
-
-	return vec4(0,0,0,0);
-}
-
 vec3 fullbrightAtmosTransport(vec3 light);
 vec3 fullbrightScaleSoftClip(vec3 light);
 
@@ -45,12 +17,13 @@ void main()
 {
 	float shadow = 1.0;
 
-	vec4 color = textureLookup(gl_TexCoord[0].xy)*gl_Color;
+	vec4 color = diffuseLookup(gl_TexCoord[0].xy)*gl_Color;
 	
 	color.rgb = fullbrightAtmosTransport(color.rgb);
 
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
 
-	gl_FragColor = color;
+	//gl_FragColor = color;
+	gl_FragColor = vec4(1,0,1,1);
 }
 
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 8985d3680e0b0d6611f216344026612274b05e4f..813b3820ee8948c05e566754853c8531af581281 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -537,6 +537,12 @@ void LLDrawPoolBump::beginFullbrightShiny()
 		gGL.getTexUnit(cube_channel)->bind(cube_map);
 		gGL.getTexUnit(0)->activate();
 	}
+
+	if (mVertexShaderLevel > 1)
+	{ //indexed texture rendering, channel 0 is always diffuse
+		diffuse_channel = 0;
+	}
+
 	mShiny = TRUE;
 }
 
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index a1cb6d4ea694a1a6c50a325400e5347c95cde0c3..e3ed2d064985680852e0623f884ee8cb931a1e60 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -1303,8 +1303,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredFullbrightProgram.mFeatures.calculatesAtmospherics = true;
 		gDeferredFullbrightProgram.mFeatures.hasGamma = true;
 		gDeferredFullbrightProgram.mFeatures.hasTransport = true;
-		gDeferredFullbrightProgram.mFeatures.isFullbright = true;
-		gDeferredFullbrightProgram.mFeatures.mIndexedTextureChannels = 0;
+		gDeferredFullbrightProgram.mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits;
 		gDeferredFullbrightProgram.mShaderFiles.clear();
 		gDeferredFullbrightProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredFullbrightProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB));