diff --git a/src/gl/dynlights/gl_dynlight.cpp b/src/gl/dynlights/gl_dynlight.cpp
index ae19ecf60..40008e3ad 100644
--- a/src/gl/dynlights/gl_dynlight.cpp
+++ b/src/gl/dynlights/gl_dynlight.cpp
@@ -1082,6 +1082,7 @@ void gl_AttachLight(AActor *actor, unsigned int count, const FLightDefaults *lig
 		light->target = actor;
 		light->owned = true;
 		light->ObjectFlags |= OF_Transient;
+		light->flags4 |= MF4_ATTENUATE;
 		actor->dynamiclights.Push(light);
 	}
 	light->flags2&=~MF2_DORMANT;
diff --git a/src/gl/dynlights/gl_dynlight.h b/src/gl/dynlights/gl_dynlight.h
index 84965e318..c51e0c79d 100644
--- a/src/gl/dynlights/gl_dynlight.h
+++ b/src/gl/dynlights/gl_dynlight.h
@@ -50,6 +50,7 @@ enum
 #define MF4_SUBTRACTIVE MF4_MISSILEEVENMORE
 #define MF4_ADDITIVE MF4_MISSILEMORE
 #define MF4_DONTLIGHTSELF MF4_SEESDAGGERS
+#define MF4_ATTENUATE MF4_INCOMBAT
 
 enum ELightType
 {
diff --git a/src/gl/dynlights/gl_dynlight1.cpp b/src/gl/dynlights/gl_dynlight1.cpp
index d20f5c01b..2f8ef44ed 100644
--- a/src/gl/dynlights/gl_dynlight1.cpp
+++ b/src/gl/dynlights/gl_dynlight1.cpp
@@ -116,7 +116,7 @@ bool gl_GetLight(int group, Plane & p, ADynamicLight * light, bool checkside, FD
 	data[4] = r;
 	data[5] = g;
 	data[6] = b;
-	data[7] = 0;
+	data[7] = !!(light->flags4 & MF4_ATTENUATE);
 	return true;
 }
 
diff --git a/wadsrc/static/shaders/glsl/main.fp b/wadsrc/static/shaders/glsl/main.fp
index fb1983fc7..36db31f68 100644
--- a/wadsrc/static/shaders/glsl/main.fp
+++ b/wadsrc/static/shaders/glsl/main.fp
@@ -142,16 +142,19 @@ float diffuseContribution(vec3 lightDirection, vec3 normal)
 //
 //===========================================================================
 
-float pointLightAttenuation(vec4 lightpos)
+float pointLightAttenuation(vec4 lightpos, float attenuate)
 {
 	float attenuation = max(lightpos.w - distance(pixelpos.xyz, lightpos.xyz),0.0) / lightpos.w;
-	#if 0
+	if (attenuate == 0.0)
+	{
 		return attenuation;
-	#else
+	}
+	else
+	{
 		vec3 lightDirection = normalize(lightpos.xyz - pixelpos.xyz);
 		float diffuseAmount = diffuseContribution(lightDirection, normalize(vWorldNormal.xyz));
 		return attenuation * diffuseAmount;
-	#endif
+	}
 }
 
 //===========================================================================
@@ -229,7 +232,7 @@ vec4 getLightColor(float fogdist, float fogfactor)
 				vec4 lightpos = lights[i];
 				vec4 lightcolor = lights[i+1];
 				
-				lightcolor.rgb *= pointLightAttenuation(lightpos);
+				lightcolor.rgb *= pointLightAttenuation(lightpos, lightcolor.a);
 				dynlight.rgb += lightcolor.rgb;
 			}
 			//
@@ -240,7 +243,7 @@ vec4 getLightColor(float fogdist, float fogfactor)
 				vec4 lightpos = lights[i];
 				vec4 lightcolor = lights[i+1];
 				
-				lightcolor.rgb *= pointLightAttenuation(lightpos);
+				lightcolor.rgb *= pointLightAttenuation(lightpos, lightcolor.a);
 				dynlight.rgb -= lightcolor.rgb;
 			}
 		}
@@ -322,7 +325,7 @@ void main()
 						vec4 lightpos = lights[i];
 						vec4 lightcolor = lights[i+1];
 						
-						lightcolor.rgb *= pointLightAttenuation(lightpos);
+						lightcolor.rgb *= pointLightAttenuation(lightpos, lightcolor.a);
 						addlight.rgb += lightcolor.rgb;
 					}
 					frag.rgb = clamp(frag.rgb + desaturate(addlight).rgb, 0.0, 1.0);