diff --git a/Source/Core/GZBuilder/Data/LinksCollector.cs b/Source/Core/GZBuilder/Data/LinksCollector.cs
index 4c1586ff3c44d3e7df77664cf5302b3bc5d71b6b..06912f7a81c74ce6fdbd8c2c3f2359e05f7150a2 100755
--- a/Source/Core/GZBuilder/Data/LinksCollector.cs
+++ b/Source/Core/GZBuilder/Data/LinksCollector.cs
@@ -7,6 +7,8 @@ using CodeImp.DoomBuilder.Map;
 using CodeImp.DoomBuilder.Geometry;
 using CodeImp.DoomBuilder.Rendering;
 using CodeImp.DoomBuilder.VisualModes;
+using System.Drawing;
+using System.Linq;
 
 #endregion
 
@@ -828,6 +830,207 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
 			return circles;
 		}
 
+		public static List<Line3D> GetSRB2Lines()
+		{
+			List<Line3D> eventlines = new List<Line3D>();
+			//List<ITextLabel> textlabels = new List<ITextLabel>();
+
+			if (!(General.Settings.SRB2RenderNiGHTS || General.Settings.SRB2RenderZoomTubes || General.Settings.SRB2RenderPolyobjects)) 
+				return eventlines;
+
+			List<Thing> axes = new List<Thing>();
+			List<Thing> axistransferlines = new List<Thing>();
+			List<Thing> waypoints = new List<Thing>();
+			List<Thing> polyanchors = new List<Thing>();
+			List<Thing> polyspawns = new List<Thing>();
+			List<Linedef> firstlines = new List<Linedef>();
+
+			// Collect relevant things
+			foreach (Thing t in General.Map.Map.Things)
+			{
+				if (General.Settings.SRB2RenderNiGHTS && t.Type == 1700)
+					axes.Add(t);
+				else if (General.Settings.SRB2RenderNiGHTS && t.Type == 1702)
+					axistransferlines.Add(t);
+				else if (General.Settings.SRB2RenderZoomTubes && t.Type == 753)
+					waypoints.Add(t);
+				else if (General.Settings.SRB2RenderPolyobjects && t.Type == 760)
+					polyanchors.Add(t);
+				else if (General.Settings.SRB2RenderPolyobjects && (t.Type == 761 || t.Type == 762))
+					polyspawns.Add(t);
+			}
+
+			// Sort by axis number and mare number.
+			axistransferlines = axistransferlines.OrderBy(x => x.Args[0]).ThenBy(x => x.Args[1]).ToList();
+
+			// Sort waypoints by order and sequence number.
+			waypoints = waypoints.OrderBy(x => x.Args[0]).ThenBy(x => x.Args[1]).ToList();
+
+			// Sort polyobject stuff by "angle"/tag
+			polyanchors.Sort((x, y) => x.Tag.CompareTo(y.Tag));
+			polyspawns.Sort((x, y) => x.Tag.CompareTo(y.Tag));
+
+			// Collect relevant lines
+			if (General.Settings.SRB2RenderPolyobjects)
+			{
+				foreach (Linedef l in General.Map.Map.Linedefs)
+				{
+					if (l.Action == 20) firstlines.Add(l);
+				}
+
+				//Sort polyobject first lines by tag
+				firstlines.Sort((x, y) => x.Args[0].CompareTo(y.Args[0]));
+			}
+
+			//Render (zoom tube) waypoint sequences.
+			if (General.Settings.SRB2RenderZoomTubes)
+			{
+				int i = 0;
+				int size = waypoints.Count;
+				int seqStart = 0;
+				while (i < size)
+				{
+					int iNext = i + 1;
+					if (waypoints[i].Args[1] == 0) // start of a new sequence?
+					{
+						seqStart = i;
+						//TextLabel l = new TextLabel();
+						//l.Text = waypoints[i].Args[0].ToString();
+						//l.Location = waypoints[i].Position;
+						//l.Color = PixelColor.FromColor(Color.FromArgb(255, 0, 255, 192));
+						//l.TransformCoords = true;
+						//textlabels.Add(l);
+					}
+
+					if (iNext < size)
+					{
+						// draw line between this waypoint and the next
+						if (waypoints[iNext].Args[1] == waypoints[i].Args[1] + 1)
+							eventlines.Add(new Line3D(waypoints[i].Position, waypoints[iNext].Position, PixelColor.FromColor(Color.FromArgb(255, 0, 255, 192))));
+
+						// mark duplicate waypoints
+						else if (waypoints[iNext].Args[1] == waypoints[i].Args[1])
+						{
+							eventlines.AddRange(MakeCircleLines(waypoints[i].Position, PixelColor.FromColor(Color.Red), 32, CIRCLE_SIDES));
+							eventlines.AddRange(MakeCircleLines(waypoints[iNext].Position, PixelColor.FromColor(Color.Red), 32, CIRCLE_SIDES));
+						}
+
+						// mark inaccessible waypoints
+						else if (i > 0 && waypoints[i].Args[1] - waypoints[i - 1].Args[1] > 1)
+							eventlines.AddRange(MakeCircleLines(waypoints[i].Position, PixelColor.FromColor(Color.Red), 32, CIRCLE_SIDES));
+
+						// draw different line between last and first waypoint of this sequence
+						else if (waypoints[i].Args[0] == waypoints[seqStart].Args[0] && waypoints[iNext].Args[0] > waypoints[i].Args[0])
+							eventlines.Add(new Line3D(waypoints[i].Position, waypoints[seqStart].Position, PixelColor.FromColor(Color.FromArgb(255, 0, 192, 255))));
+					}
+					i = iNext;
+				}
+			}
+
+			//Render axis transfer lines.
+			if (General.Settings.SRB2RenderNiGHTS)
+			{
+				int i = 0;
+				int size = axistransferlines.Count;
+				while (i < size - 1)
+				{
+					int iNext = i;
+					while (iNext < size - 1 && axistransferlines[++iNext].Args[1] <= axistransferlines[i].Args[1]) ;
+
+					if (iNext < size && axistransferlines[iNext].Args[1] == axistransferlines[i].Args[1] + 1)
+					{
+						int mare = axistransferlines[i].Args[0];
+						eventlines.Add(new Line3D(axistransferlines[i].Position, axistransferlines[iNext].Position, General.Colors.GetNiGHTSColor(mare)));
+						/* Start looking for partners for the one beyond iNext. */
+						i = iNext + 1;
+					}
+					else
+					{
+						/* No partner, so start looking for partners for iNext. */
+						i = iNext;
+					}
+				}
+				//Render axes.
+				foreach (Thing axis in axes)
+				{
+					int mare = axis.Args[0];
+					eventlines.AddRange(MakeCircleLines(axis.Position, General.Colors.GetNiGHTSColor(mare), axis.Args[2], CIRCLE_SIDES * 2));
+				}
+			}
+
+			if (General.Settings.SRB2RenderPolyobjects)
+			{ 
+				int i = 0, j = 0, k = 0;
+				Sector s = null;
+				while (i < polyanchors.Count && j < polyspawns.Count && k < firstlines.Count)
+				{
+					while (j + 1 < polyspawns.Count && polyanchors[i].Tag > polyspawns[j].Tag) j++;
+					while (k + 1 < firstlines.Count && polyanchors[i].Tag > firstlines[k].Args[0]) k++;
+
+					if (polyanchors[i].Tag == firstlines[k].Args[0])
+						s = firstlines[k].Back.Sector;
+					else
+						s = null;
+
+					if (polyanchors[i].Tag == polyspawns[j].Tag && s != null)
+					{
+						while (j + 1 < polyspawns.Count && polyspawns[j].Tag == polyspawns[j + 1].Tag)
+						{
+							//TextLabel l = new TextLabel();
+							//l.Text = polyspawns[j].Tag.ToString();
+							//l.Location = polyspawns[j].Position;
+							//l.Color = PixelColor.FromColor(Color.Red);
+							//l.TransformCoords = true;
+							//textlabels.Add(l);
+							j++;
+						}
+
+						double xdiff = polyanchors[i].Position.x - polyspawns[j].Position.x;
+						double ydiff = polyanchors[i].Position.y - polyspawns[j].Position.y;
+
+						foreach (Sidedef side in s.Sidedefs)
+						{
+							Vector2D start = side.Line.Start.Position;
+							Vector2D end = side.Line.End.Position;
+							start.x -= xdiff;
+							start.y -= ydiff;
+							end.x -= xdiff;
+							end.y -= ydiff;
+							eventlines.Add(new Line3D(start, end, PixelColor.FromColor(Color.FromArgb(255, 128, 255, 0)), false));
+						}
+
+						//TextLabel ls = new TextLabel();
+						//ls.Text = polyspawns[j].Tag.ToString();
+						//ls.Location = polyspawns[j].Position;
+						//ls.Color = PixelColor.FromColor(Color.FromArgb(255, 128, 255, 0));
+						//ls.TransformCoords = true;
+						//textlabels.Add(ls);
+
+						//TextLabel la = new TextLabel();
+						//la.Text = polyanchors[j].Tag.ToString();
+						//la.Location = polyanchors[j].Position;
+						//la.Color = PixelColor.FromColor(Color.FromArgb(255, 255, 192, 0));
+						//la.TransformCoords = true;
+						//textlabels.Add(la);
+					}
+					else
+					{
+						//TextLabel l = new TextLabel();
+						//l.Text = polyanchors[j].Tag.ToString();
+						//l.Location = polyanchors[j].Position;
+						//l.Color = PixelColor.FromColor(Color.Red);
+						//l.TransformCoords = true;
+						//textlabels.Add(l);
+					}
+
+					i++;
+				}
+			}
+
+			//General.Map.Renderer2D.RenderText(textlabels);
+			return eventlines;
+		}
+
 		#endregion
 
 		#region ================== Utility
diff --git a/Source/Core/Rendering/IRenderer2D.cs b/Source/Core/Rendering/IRenderer2D.cs
index 0e475a83c53cf7f1cebec1718f47f238ad8f488f..b6117c99809eee3f7ec1cf97a5b525803b34d33d 100755
--- a/Source/Core/Rendering/IRenderer2D.cs
+++ b/Source/Core/Rendering/IRenderer2D.cs
@@ -69,12 +69,13 @@ namespace CodeImp.DoomBuilder.Rendering
 		void PlotVerticesSet(ICollection<Vertex> vertices, bool checkMode = true);
 		void RenderThing(Thing t, PixelColor c, float alpha);
 		void RenderThingSet(ICollection<Thing> things, float alpha);
+		void RenderSRB2Extras();
 		void RenderRectangle(RectangleF rect, float bordersize, PixelColor c, bool transformrect);
 		void RenderRectangleFilled(RectangleF rect, PixelColor c, bool transformrect);
 		void RenderRectangleFilled(RectangleF rect, PixelColor c, bool transformrect, ImageData texture);
 		void RenderLine(Vector2D start, Vector2D end, float thickness, PixelColor c, bool transformcoords);
 		void RenderArrows(ICollection<Line3D> line); //mxd
-		void RenderArrows(ICollection<Line3D> line, bool transformcoords); //mxd
+		void RenderArrows(ICollection<Line3D> line, bool transformcoords, bool sizecheck); //mxd
 		void RenderText(TextLabel text); //mxd, DB2 compatibility
 		void RenderText(ITextLabel text); //mxd
 		void RenderText(IList<ITextLabel> labels); //mxd
diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs
index 47700d76012e9b91058ed03bfe26ea2e231c232a..4324bf9c302f4b4a3b0e185f123e9fba45c6bac9 100755
--- a/Source/Core/Rendering/Renderer2D.cs
+++ b/Source/Core/Rendering/Renderer2D.cs
@@ -112,17 +112,6 @@ namespace CodeImp.DoomBuilder.Rendering
         // Presentation
         private Presentation present;
 
-		// SRB2 stuff
-		private List<Thing> axes;
-		private List<Thing> axistransferlines;
-		private List<Thing> waypoints;
-		private List<Thing> polyanchors;
-		private List<Thing> polyspawns;
-		private List<Linedef> firstlines;
-
-		private TextLabel spawnlabel;
-		private TextLabel anchorlabel;
-
 		#endregion
 
 		#region ================== Properties
@@ -163,24 +152,6 @@ namespace CodeImp.DoomBuilder.Rendering
 			// Create rendertargets
 			CreateRendertargets();
 
-			anchorlabel = new TextLabel() // create sequence ID label
-			{
-				Text = "0",
-				AlignX = TextAlignmentX.Center,
-				AlignY = TextAlignmentY.Middle,
-				Color = PixelColor.FromColor(Color.FromArgb(255, 255, 192, 0)),
-				TransformCoords = true
-			};
-
-			spawnlabel = new TextLabel() // create sequence ID label
-			{
-				Text = "0",
-				AlignX = TextAlignmentX.Center,
-				AlignY = TextAlignmentY.Middle,
-				Color = PixelColor.FromColor(Color.FromArgb(255, 128, 255, 0)),
-				TransformCoords = true
-			};
-
 			// We have no destructor
 			GC.SuppressFinalize(this);
 		}
@@ -1594,7 +1565,7 @@ namespace CodeImp.DoomBuilder.Rendering
 				}
 
 				//mxd. Render thing boxes
-				RenderArrows(bboxes, false);
+				RenderArrows(bboxes, false, true);
 			}
 		}
 		
@@ -1615,194 +1586,7 @@ namespace CodeImp.DoomBuilder.Rendering
 
 		public void RenderSRB2Extras()
 		{
-			if (!(General.Settings.SRB2RenderNiGHTS || General.Settings.SRB2RenderZoomTubes || General.Settings.SRB2RenderPolyobjects)) return;
-
-			axes = new List<Thing>();
-			axistransferlines = new List<Thing>();
-			waypoints = new List<Thing>();
-			polyanchors = new List<Thing>();
-			polyspawns = new List<Thing>();
-			firstlines = new List<Linedef>();
-
-			// Collect relevant things
-			foreach (Thing t in General.Map.Map.Things)
-			{
-				if (General.Settings.SRB2RenderNiGHTS && t.Type == 1700)
-					axes.Add(t);
-				else if (General.Settings.SRB2RenderNiGHTS && t.Type == 1702)
-					axistransferlines.Add(t);
-				else if (General.Settings.SRB2RenderZoomTubes && t.Type == 753)
-					waypoints.Add(t);
-				else if (General.Settings.SRB2RenderPolyobjects && t.Type == 760)
-					polyanchors.Add(t);
-				else if (General.Settings.SRB2RenderPolyobjects && (t.Type == 761 || t.Type == 762))
-					polyspawns.Add(t);
-			}
-
-			// Sort waypoints by order and sequence number.
-			waypoints = waypoints.OrderBy(x => x.Args[0]).ThenBy(x => x.Args[1]).ToList();
-
-			// Sort polyobject stuff by "angle"/tag
-			polyanchors.Sort((x, y) => x.Tag.CompareTo(y.Tag));
-			polyspawns.Sort((x, y) => x.Tag.CompareTo(y.Tag));
-
-			// Sort by axis number and mare number.
-			axistransferlines = axistransferlines.OrderBy(x => x.Args[0]).ThenBy(x => x.Args[1]).ToList();
-
-			// Collect relevant lines
-			if (General.Settings.SRB2RenderPolyobjects)
-			{
-				foreach (Linedef l in General.Map.Map.Linedefs)
-				{
-					if (l.Action == 20) firstlines.Add(l);
-				}
-			
-				//Sort polyobject first lines by tag
-				firstlines.Sort((x, y) => x.Args[0].CompareTo(y.Args[0]));
-			}
-
-			//Render (zoom tube) waypoint sequences.
-			if (General.Settings.SRB2RenderZoomTubes)
-			{
-				int i = 0;
-				int size = waypoints.Count;
-				int seqStart = 0;
-				ITextLabel[] sequencelabels = new ITextLabel[256];
-				while (i < size)
-				{
-					int iNext = i + 1;
-					if (waypoints[i].Args[1] == 0) // start of a new sequence?
-					{
-						seqStart = i;
-						sequencelabels[waypoints[i].Args[0]] = new TextLabel() // create sequence ID label
-						{
-							Text = waypoints[i].Args[0].ToString(),
-							AlignX = TextAlignmentX.Center,
-							AlignY = TextAlignmentY.Middle,
-							Color = PixelColor.FromColor(Color.FromArgb(255, 0, 255, 192)),
-							TransformCoords = true,
-							Location = waypoints[i].Position
-						};
-					}
-
-					if (iNext < size)
-					{
-						// draw line between this waypoint and the next
-						if (waypoints[iNext].Args[1] == waypoints[i].Args[1] + 1)
-							RenderLine(waypoints[i].Position, waypoints[iNext].Position, 1.5f, PixelColor.FromColor(Color.FromArgb(255, 0, 255, 192)), true);
-
-						// mark duplicate waypoints
-						else if (waypoints[iNext].Args[1] == waypoints[i].Args[1])
-						{
-							RenderCircle(waypoints[i].Position, 32f, 1f, PixelColor.FromColor(Color.Red), true);
-							RenderCircle(waypoints[iNext].Position, 32f, 1f, PixelColor.FromColor(Color.Red), true);
-						}
-
-						// mark inaccessible waypoints
-						else if (i > 0 && waypoints[i].Args[1] - waypoints[i - 1].Args[1] > 1)
-							RenderCircle(waypoints[i].Position, 32f, 1f, PixelColor.FromColor(Color.Red), true);
-
-						// draw different line between last and first waypoint of this sequence
-						else if (waypoints[i].Args[0] == waypoints[seqStart].Args[0] && waypoints[iNext].Args[0] > waypoints[i].Args[0])
-							RenderLine(waypoints[i].Position, waypoints[seqStart].Position, 0.75f, PixelColor.FromColor(Color.FromArgb(255, 0, 192, 255)), true);
-					}
-					i = iNext;
-				}
-			
-				for (i = 0; i < 256; i++)
-					if (sequencelabels[i] != null) RenderText(sequencelabels[i]);
-			}
-
-			//Render axis transfer lines.
-			if (General.Settings.SRB2RenderNiGHTS)
-			{
-				int i = 0;
-				int size = axistransferlines.Count;
-				while (i < size - 1)
-				{
-					int iNext = i;
-					while (iNext < size - 1 && axistransferlines[++iNext].Args[1] <= axistransferlines[i].Args[1]) ;
-
-					if (iNext < size && axistransferlines[iNext].Args[1] == axistransferlines[i].Args[1] + 1)
-					{
-						int mare = axistransferlines[i].Args[0];
-						RenderLine(axistransferlines[i].Position, axistransferlines[iNext].Position, 1f, General.Colors.GetNiGHTSColor(mare), true);
-						/* Start looking for partners for the one beyond iNext. */
-						i = iNext + 1;
-					}
-					else
-					{
-						/* No partner, so start looking for partners for iNext. */
-						i = iNext;
-					}
-				}
-				//Render axes.
-				foreach (Thing axis in axes)
-				{
-					int mare = axis.Args[0];
-					RenderCircle(axis.Position, axis.Args[2], 1f, General.Colors.GetNiGHTSColor(mare), true);
-				}
-			}
-
-			if (General.Settings.SRB2RenderPolyobjects)
-			{
-				int i = 0, j = 0, k = 0;
-				Sector s = null;
-				while (i < polyanchors.Count && j < polyspawns.Count && k < firstlines.Count)
-				{
-					while (j + 1 < polyspawns.Count && polyanchors[i].Tag > polyspawns[j].Tag) j++;
-					while (k + 1 < firstlines.Count && polyanchors[i].Tag > firstlines[k].Args[0]) k++;
-			
-					if (polyanchors[i].Tag == firstlines[k].Args[0])
-						s = firstlines[k].Back.Sector;
-					else
-						s = null;
-			
-					if (polyanchors[i].Tag == polyspawns[j].Tag && s != null)
-					{
-						while (j + 1 < polyspawns.Count && polyspawns[j].Tag == polyspawns[j + 1].Tag)
-						{
-							// Mark redundant spawnpoints
-							spawnlabel.Text = polyspawns[j].Tag.ToString();
-							spawnlabel.Location = polyspawns[j].Position;
-							spawnlabel.Color = PixelColor.FromColor(Color.Red);
-							RenderText((ITextLabel)spawnlabel);
-							j++;
-						}
-			
-						double xdiff = polyanchors[i].Position.x - polyspawns[j].Position.x;
-						double ydiff = polyanchors[i].Position.y - polyspawns[j].Position.y;
-			
-						foreach (Sidedef side in s.Sidedefs)
-						{
-							Vector2D start = side.Line.Start.Position;
-							Vector2D end = side.Line.End.Position;
-							start.x -= xdiff;
-							start.y -= ydiff;
-							end.x -= xdiff;
-							end.y -= ydiff;
-							RenderLine(start, end, 1.0f, PixelColor.FromColor(Color.FromArgb(255, 128, 255, 0)), true);
-						}
-						anchorlabel.Color = PixelColor.FromColor(Color.FromArgb(255, 255, 192, 0));
-						spawnlabel.Color = PixelColor.FromColor(Color.FromArgb(255, 128, 255, 0));
-			
-						spawnlabel.Text = polyspawns[j].Tag.ToString();
-						spawnlabel.Location = polyspawns[j].Position;
-						RenderText((ITextLabel)spawnlabel);
-					}
-					else
-					{
-						// Mark unused polyobject anchors
-						anchorlabel.Color = PixelColor.FromColor(Color.Red);
-					}
-			
-					anchorlabel.Text = polyanchors[i].Tag.ToString();
-					anchorlabel.Location = polyanchors[i].Position;
-					RenderText((ITextLabel)anchorlabel);
-			
-					i++;
-				}
-			}
+			RenderArrows(LinksCollector.GetSRB2Lines(), true, false);
 		}
 
 		#endregion
@@ -2108,8 +1892,8 @@ namespace CodeImp.DoomBuilder.Rendering
 		}
 
 		//mxd
-		public void RenderArrows(ICollection<Line3D> lines) { RenderArrows(lines, true); }
-		public void RenderArrows(ICollection<Line3D> lines, bool transformcoords) 
+		public void RenderArrows(ICollection<Line3D> lines) { RenderArrows(lines, true, true); }
+		public void RenderArrows(ICollection<Line3D> lines, bool transformcoords, bool sizecheck) 
 		{
 			if(lines.Count == 0) return;
 			int pointscount = 0;
@@ -2130,7 +1914,7 @@ namespace CodeImp.DoomBuilder.Rendering
 				float miny = (float)Math.Min(line.Start2D.y, line.End2D.y);
 
 				// Too small / not on screen?
-				if(((line.End2D - line.Start2D).GetLengthSq() < MINIMUM_SPRITE_RADIUS) || ((maxx <= 0.0f) || (minx >= windowsize.Width) || (maxy <= 0.0f) || (miny >= windowsize.Height)))
+				if(((line.End2D - line.Start2D).GetLengthSq() < MINIMUM_SPRITE_RADIUS && sizecheck) || ((maxx <= 0.0f && sizecheck) || (minx >= windowsize.Width) || (maxy <= 0.0f && sizecheck) || (miny >= windowsize.Height)))
 				{
 					line.SkipRendering = true;
 				}
@@ -2496,23 +2280,6 @@ namespace CodeImp.DoomBuilder.Rendering
 			}
 		}
 
-		// This renders a circle with given color
-		public void RenderCircle(Vector2D center, float radius, float thickness, PixelColor c, bool transformcoords)
-		{
-			int CIRCLE_PRECISION = 128;
-			Vector2D[] points = new Vector2D[CIRCLE_PRECISION];
-			for (int i = 0; i < CIRCLE_PRECISION; i++)
-			{
-				float fAngle = i * 2 * (float)Math.PI / CIRCLE_PRECISION;
-				points[i].x = center.x + ((float)Math.Cos(fAngle) * radius);
-				points[i].y = center.y + ((float)Math.Sin(fAngle) * radius);
-			}
-			for (int i = 0; i < CIRCLE_PRECISION; i++)
-			{
-				RenderLine(points[i], points[(i + 1) % CIRCLE_PRECISION], thickness, c, transformcoords);
-			}
-		}
-
 		#endregion
 	}
 }
diff --git a/Source/Plugins/3DFloorMode/DrawSlopesMode.cs b/Source/Plugins/3DFloorMode/DrawSlopesMode.cs
index 49afc98a7c3655a474e16f45f5daa039c69d8138..6a7b58084c739cfc5248b2b528ceb9fad12cfea3 100644
--- a/Source/Plugins/3DFloorMode/DrawSlopesMode.cs
+++ b/Source/Plugins/3DFloorMode/DrawSlopesMode.cs
@@ -786,6 +786,7 @@ namespace CodeImp.DoomBuilder.ThreeDFloorMode
 			if (renderer.StartThings(true))
 			{
 				renderer.RenderThingSet(General.Map.Map.Things, 1.0f);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/3DFloorMode/SlopeMode.cs b/Source/Plugins/3DFloorMode/SlopeMode.cs
index 817537a4a0690d8ab95e781f7b46092a7de2b26e..72346c03515e0b01a1d7c6cee710ff2f1c986084 100644
--- a/Source/Plugins/3DFloorMode/SlopeMode.cs
+++ b/Source/Plugins/3DFloorMode/SlopeMode.cs
@@ -210,6 +210,7 @@ namespace CodeImp.DoomBuilder.ThreeDFloorMode
 			{
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, Presentation.THINGS_HIDDEN_ALPHA);
 				renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, 1.0f);
+				renderer.RenderSRB2Extras();
 
 				renderer.Finish();
 			}
diff --git a/Source/Plugins/3DFloorMode/ThreeDFloorMode.cs b/Source/Plugins/3DFloorMode/ThreeDFloorMode.cs
index 0a4de1d73ed81a9aefd26cd1f46c1574e76ec577..823d530219ef2a394ab3ef29448507e9b4791fea 100644
--- a/Source/Plugins/3DFloorMode/ThreeDFloorMode.cs
+++ b/Source/Plugins/3DFloorMode/ThreeDFloorMode.cs
@@ -840,6 +840,7 @@ namespace CodeImp.DoomBuilder.ThreeDFloorMode
 			{
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, Presentation.THINGS_HIDDEN_ALPHA);
 				renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, 1.0f);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/BridgeMode.cs b/Source/Plugins/BuilderModes/ClassicModes/BridgeMode.cs
index 221305a70b870bdacd7f5230fa6c4988e1467246..e34d8dbb72af61d958205498d42f34753e4e7c59 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/BridgeMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/BridgeMode.cs
@@ -373,6 +373,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.ClassicModes
 			if(renderer.StartThings(true)) 
 			{
 				renderer.RenderThingSet(General.Map.Map.Things, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DragLinedefsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DragLinedefsMode.cs
index 56d4ee24e53f022f81c7a3ce04d45372cee5fe62..c0f8101eadde1ec752e34fe155d92c1c415f7912 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/DragLinedefsMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DragLinedefsMode.cs
@@ -113,6 +113,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				if(renderer.StartThings(true))
 				{
 					renderer.RenderThingSet(General.Map.Map.Things, General.Settings.ActiveThingsAlpha);
+					renderer.RenderSRB2Extras();
 					renderer.Finish();
 				}
 			}
@@ -154,6 +155,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(unselectedthings, General.Settings.ActiveThingsAlpha);
 				renderer.RenderThingSet(selectedthings, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DragSectorsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DragSectorsMode.cs
index 67e3126b2166a2d43208f02cc95a3e3449284e01..16e6c5907573f90b278ff6c330a58803ade07083 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/DragSectorsMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DragSectorsMode.cs
@@ -120,6 +120,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				if(renderer.StartThings(true))
 				{
 					renderer.RenderThingSet(General.Map.Map.Things, General.Settings.ActiveThingsAlpha);
+					renderer.RenderSRB2Extras();
 					renderer.Finish();
 				}
 			}
@@ -154,6 +155,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(unselectedthings, General.Settings.ActiveThingsAlpha);
 				renderer.RenderThingSet(selectedthings, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DragThingsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DragThingsMode.cs
index 6d160141172fb99bcb6f2e1a8fb6122c0555e54d..4d52edc457be00ae187da00c6ec40a71e810cbff 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/DragThingsMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DragThingsMode.cs
@@ -320,6 +320,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(unmovingthings, General.Settings.ActiveThingsAlpha);
 				renderer.RenderThingSet(dragthings, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 
 				// Draw the dragged item highlighted
 				// This is important to know, because this item is used
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DragVerticesMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DragVerticesMode.cs
index a550f1aca1aaca7c3898ae5637cece257bdcb79c..a35dc9c362d9b2150e71a6dbb2adf18298c221bf 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/DragVerticesMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DragVerticesMode.cs
@@ -106,6 +106,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				if(renderer.StartThings(true))
 				{
 					renderer.RenderThingSet(General.Map.Map.Things, General.Settings.ActiveThingsAlpha);
+					renderer.RenderSRB2Extras();
 					renderer.Finish();
 				}
 			}
@@ -139,6 +140,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(unselectedthings, General.Settings.ActiveThingsAlpha);
 				renderer.RenderThingSet(selectedthings, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DrawGeometryMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DrawGeometryMode.cs
index a3ab3a128ebf53982343b089ed30f3328e013058..6a769d91d999706ebe8acd6ef3d479431f694fc1 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/DrawGeometryMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DrawGeometryMode.cs
@@ -900,6 +900,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			if(renderer.StartThings(true))
 			{
 				renderer.RenderThingSet(General.Map.Map.Things, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs
index acc89cf90a2154fec452f30d9f53c1520e2d2078..8ba7f85a3c124339933c15e5b8e4642566294429 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs
@@ -1962,7 +1962,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			{
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, General.Settings.ActiveThingsAlpha);
-				if(highlighted is Thing) renderer.RenderThing((Thing)highlighted, General.Colors.Highlight, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
+				if (highlighted is Thing) renderer.RenderThing((Thing)highlighted, General.Colors.Highlight, General.Settings.ActiveThingsAlpha);
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/ErrorCheckMode.cs b/Source/Plugins/BuilderModes/ClassicModes/ErrorCheckMode.cs
index 13b06d4d1be7bbc94314fdf0a8f535c6dba8c312..5e1ef6f4a50da732f5db88e47786b9ff736d189d 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/ErrorCheckMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/ErrorCheckMode.cs
@@ -137,6 +137,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			if(renderer.StartThings(true))
 			{
 				renderer.RenderThingSet(General.Map.Map.Things, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				//foreach(ErrorResult result in selection) result.RenderThingsSelection(renderer); //mxd
 				renderer.Finish();
 			}
diff --git a/Source/Plugins/BuilderModes/ClassicModes/FindReplaceMode.cs b/Source/Plugins/BuilderModes/ClassicModes/FindReplaceMode.cs
index 5b1bbd56874ff8cad67085b39a507ca15b3fc706..28717ef0ed9be17b38974e4e1342bf879bf8d421 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/FindReplaceMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/FindReplaceMode.cs
@@ -142,7 +142,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			if(renderer.StartThings(true))
 			{
 				renderer.RenderThingSet(General.Map.Map.Things, General.Settings.ActiveThingsAlpha);
-				if(BuilderPlug.Me.FindReplaceForm.Finder != null)
+				renderer.RenderSRB2Extras();
+				if (BuilderPlug.Me.FindReplaceForm.Finder != null)
 					BuilderPlug.Me.FindReplaceForm.Finder.RenderThingsSelection(renderer, selection);
 				renderer.Finish();
 			}
diff --git a/Source/Plugins/BuilderModes/ClassicModes/FlatAlignMode.cs b/Source/Plugins/BuilderModes/ClassicModes/FlatAlignMode.cs
index 84cfca74f18be998f6735453be8446d9b0c4b49a..00a445d3ecab611638201a31c8b8798513ba890c 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/FlatAlignMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/FlatAlignMode.cs
@@ -877,6 +877,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			{
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs
index d26910913d4d56f6a61883682073a1a204cd4b2f..b447a3dc6708e23f7d623b9ba7ae8bc069ba3332 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs
@@ -701,6 +701,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			{
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/MakeSectorMode.cs b/Source/Plugins/BuilderModes/ClassicModes/MakeSectorMode.cs
index 0130faf4059a4c632aae952089c937df7f435136..70cda7e880c763634e0f884d71c0c9c33fca5139 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/MakeSectorMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/MakeSectorMode.cs
@@ -344,6 +344,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			{
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs
index 4441b5d260048ea502af9d6e1c56a07d3794de55..1c294ccc7706c4112a606892f38e85b05436becf 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs
@@ -952,6 +952,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			{
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs
index f534b739feaec9b8fd69678c68d19bd4c1f902b8..c54d2c22d53b54da48b90fa8d895ebd694df2243 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs
@@ -249,8 +249,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
 				float alpha = (General.Settings.FixedThingsScale ? Presentation.THINGS_ALPHA : General.Settings.ActiveThingsAlpha); //mxd
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, alpha);
-				
-				if(highlighted != null && !highlighted.IsDisposed)
+				renderer.RenderSRB2Extras();
+
+				if (highlighted != null && !highlighted.IsDisposed)
 				{
 					renderer.RenderThing(highlighted, General.Colors.Highlight, alpha);
 					highlightasso.Render();
diff --git a/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs b/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs
index c3fe5f0a464fd752a2bd7d0d887cdd56b8756b79..d40207a77a516cf9bf496e26a5904fcab57bd89c 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs
@@ -183,6 +183,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			{
 				renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, General.Settings.HiddenThingsAlpha);
 				renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}
 
diff --git a/Source/Plugins/StairSectorBuilder/StairSectorBuilderMode.cs b/Source/Plugins/StairSectorBuilder/StairSectorBuilderMode.cs
index eba439eb7f8e68d58654c76e73ecf41d84f73b90..3e4f98e44540bce5d7865b6151f3cbb50828d9cb 100755
--- a/Source/Plugins/StairSectorBuilder/StairSectorBuilderMode.cs
+++ b/Source/Plugins/StairSectorBuilder/StairSectorBuilderMode.cs
@@ -1481,6 +1481,7 @@ namespace CodeImp.DoomBuilder.StairSectorBuilderMode
 			if(renderer.StartThings(true))
 			{
 				renderer.RenderThingSet(General.Map.Map.Things, General.Settings.ActiveThingsAlpha);
+				renderer.RenderSRB2Extras();
 				renderer.Finish();
 			}