diff --git a/Build/GZBuilder.cfg b/Build/GZBuilder.cfg
index 00109f4a238f57c0ade390939309ecee853467a8..7ab8981a108d5e61eb8ff5e26606c61654d44b7f 100644
--- a/Build/GZBuilder.cfg
+++ b/Build/GZBuilder.cfg
@@ -52,7 +52,7 @@ shortcuts
 	buildermodes_fliplinedefs = 70;
 	buildermodes_joinsectors = 74;
 	buildermodes_removepoint = 8;
-	buildermodes_brightnessmode = 66;
+	buildermodes_brightnessmode = 65602;
 	buildermodes_mergesectors = 65610;
 	buildermodes_splitlinedefs = 0;
 	buildermodes_visualmode = 87;
diff --git a/Source/Core/Rendering/IRenderer2D.cs b/Source/Core/Rendering/IRenderer2D.cs
index e6ba1db03f8a4ffda8636a1c16e85fd695b94447..9d564564f6dc45a90b8faf40d6c210a2d5929bef 100644
--- a/Source/Core/Rendering/IRenderer2D.cs
+++ b/Source/Core/Rendering/IRenderer2D.cs
@@ -37,6 +37,7 @@ namespace CodeImp.DoomBuilder.Rendering
 		float Scale { get; }
 		int VertexSize { get; }
 		ViewMode ViewMode { get; }
+		bool FullBrightness { get; set; } //mxd
 		
 		// View methods
 		Vector2D DisplayToMap(Vector2D mousepos);
diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs
index b3c0b8695ba3ef4c4340002281f8747080fdbe1d..1d846d2ca5b279d3f98c10e38e217194a28d888c 100644
--- a/Source/Core/Rendering/Renderer2D.cs
+++ b/Source/Core/Rendering/Renderer2D.cs
@@ -88,6 +88,9 @@ namespace CodeImp.DoomBuilder.Rendering
 		// Geometry plotter
 		private Plotter plotter;
 
+		//mxd. Options
+		private bool fullbrightness;
+
 		// Vertices to present the textures
 		private VertexBuffer screenverts;
 		private FlatVertex[] backimageverts;
@@ -140,7 +143,8 @@ namespace CodeImp.DoomBuilder.Rendering
 		public int VertexSize { get { return vertexsize; } }
 		public ViewMode ViewMode { get { return viewmode; } }
 		public SurfaceManager Surfaces { get { return surfaces; } }
-        public RectangleF Viewport { get { return viewport; } } //mxd
+		public RectangleF Viewport { get { return viewport; } } //mxd
+		public bool FullBrightness { get { return fullbrightness; } set { fullbrightness = value; } } //mxd
 
 		#endregion
 
@@ -1319,7 +1323,7 @@ namespace CodeImp.DoomBuilder.Rendering
 
 				// Draw
 				graphics.Shaders.Display2D.Begin();
-				graphics.Shaders.Display2D.BeginPass(2);
+				graphics.Shaders.Display2D.BeginPass(1); //mxd
 				graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, text.NumFaces >> 1);
 				graphics.Device.DrawPrimitives(PrimitiveType.TriangleList, 0, text.NumFaces);
 				graphics.Shaders.Display2D.EndPass();
@@ -1467,25 +1471,23 @@ namespace CodeImp.DoomBuilder.Rendering
 		//mxd
 		public void RenderArrow(Line3D line, PixelColor c) {
 			float scaler = 20f / scale;
-			//foreach(Line3D l in lines) {
+
 			RenderLine(line.v1, line.v2, 0.8f, c, true);
 			float angle = line.GetAngle();
 			//arrowhead
 			RenderLine(line.v2, new Vector2D(line.v2.x - scaler * (float)Math.Sin(angle - 0.46f), line.v2.y + scaler * (float)Math.Cos(angle - 0.46f)), 0.8f, c, true);
 			RenderLine(line.v2, new Vector2D(line.v2.x - scaler * (float)Math.Sin(angle + 0.46f), line.v2.y + scaler * (float)Math.Cos(angle + 0.46f)), 0.8f, c, true);
-			//}
 		}
 
 		//mxd
 		public void PlotArrow(Line3D line, PixelColor c) {
 			float scaler = 16f / scale;
-			//foreach(Line3D l in lines) {
+
 			PlotLine(line.v1, line.v2, c);
 			float angle = line.GetAngle();
 			//arrowhead
 			PlotLine(line.v2, new Vector2D(line.v2.x - scaler * (float)Math.Sin(angle - 0.46f), line.v2.y + scaler * (float)Math.Cos(angle - 0.46f)), c);
 			PlotLine(line.v2, new Vector2D(line.v2.x - scaler * (float)Math.Sin(angle + 0.46f), line.v2.y + scaler * (float)Math.Cos(angle + 0.46f)), c);
-			//}
 		}
 
 		// This renders a line with given color
diff --git a/Source/Core/Rendering/SurfaceManager.cs b/Source/Core/Rendering/SurfaceManager.cs
index 6827f4e0eb937c01444ad1e2daf34f4c9bf7f288..1d204898cd8455991de97b3653f0543e47d62d75 100644
--- a/Source/Core/Rendering/SurfaceManager.cs
+++ b/Source/Core/Rendering/SurfaceManager.cs
@@ -653,6 +653,7 @@ namespace CodeImp.DoomBuilder.Rendering
 		{
 			if(!resourcesunloaded)
 			{
+				int pass = General.Map.Renderer2D.FullBrightness ? 2 : 1; //mxd
 				graphics.Shaders.Display2D.Begin();
 				foreach(KeyValuePair<ImageData, List<SurfaceEntry>> imgsurfaces in surfaces)
 				{
@@ -660,7 +661,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					graphics.Shaders.Display2D.Texture1 = imgsurfaces.Key.Texture;
 					if(!graphics.Shaders.Enabled) graphics.Device.SetTexture(0, imgsurfaces.Key.Texture);
 
-					graphics.Shaders.Display2D.BeginPass(1);
+					graphics.Shaders.Display2D.BeginPass(pass);
 					
 					// Go for all surfaces
 					VertexBuffer lastbuffer = null;
diff --git a/Source/Core/Resources/display2d.fx b/Source/Core/Resources/display2d.fx
index 551aa7a9169222ca6b25ccb466a10c93e1959819..500aecc9248b1f47fbc5e9ba00feaeac3027d92e 100644
--- a/Source/Core/Resources/display2d.fx
+++ b/Source/Core/Resources/display2d.fx
@@ -111,12 +111,12 @@ float4 ps_normal(PixelData pd) : COLOR
 	return float4(c.rgb, c.a * rendersettings.w) * pd.color;
 }
 
-// Pixel shader for text
-float4 ps_text(PixelData pd) : COLOR
+//mxd. Pixel shader for full bright drawing
+float4 ps_fullbright(PixelData pd) : COLOR
 {
 	// Take this pixel's color
 	float4 c = tex2D(texture1linear, pd.uv);
-	return float4(c.rgb, c.a * rendersettings.w) * pd.color;
+	return float4(c.rgb, c.a * rendersettings.w);
 }
 
 // Technique for shader model 2.0
@@ -134,9 +134,9 @@ technique SM20
 	    PixelShader = compile ps_2_0 ps_normal();
 	}
 	
-	pass p2
+	pass p2 //mxd
 	{
 	    VertexShader = compile vs_2_0 vs_transform();
-	    PixelShader = compile ps_2_0 ps_text();
+	    PixelShader = compile ps_2_0 ps_fullbright();
 	}
 }
diff --git a/Source/Plugins/BuilderModes/ClassicModes/BaseClassicMode.cs b/Source/Plugins/BuilderModes/ClassicModes/BaseClassicMode.cs
index 5b96aec5c739d9154e07e1447566aa6f8ac96689..7c4d9528b2854c09b1cdbd691ab5406c35b4ad4f 100644
--- a/Source/Plugins/BuilderModes/ClassicModes/BaseClassicMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/BaseClassicMode.cs
@@ -226,6 +226,17 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			paintselectpressed = false;
 		}
 
+		//mxd
+		[BeginAction("togglebrightness")]
+		protected virtual void ToggleBrightness() {
+			renderer.FullBrightness = !renderer.FullBrightness;
+			string onoff = renderer.FullBrightness ? "ON" : "OFF";
+			General.Interface.DisplayStatus(StatusType.Action, "Full Brightness is now " + onoff + ".");
+
+			// Redraw display to show changes
+			General.Interface.RedrawDisplay();
+		}
+
 		#endregion
 	}
 }
diff --git a/Source/Plugins/BuilderModes/Resources/Actions.cfg b/Source/Plugins/BuilderModes/Resources/Actions.cfg
index b720e32b35356aa269dd33f3f9ab24f9742d5763..bcf21ab78e0df93e65d6003088553337275e1e84 100644
--- a/Source/Plugins/BuilderModes/Resources/Actions.cfg
+++ b/Source/Plugins/BuilderModes/Resources/Actions.cfg
@@ -856,7 +856,7 @@ togglegravity
 togglebrightness
 {
 	title = "Toggle Full Brightness";
-	category = "visual";
+	category = "tools";
 	description = "Toggles the use of sector brightness on and off. When sector brightness is off, the world is displayed fully bright, without lighting effects.";
 	allowkeys = true;
 	allowmouse = true;