diff --git a/Builder.sln.DotSettings.user b/Builder.sln.DotSettings.user
index 9af4ab9ee278cda72cdd6dcde86bb300bafd6510..ab84c80c9ab350e834b846f322a235d20bb5bc20 100644
--- a/Builder.sln.DotSettings.user
+++ b/Builder.sln.DotSettings.user
@@ -5,5 +5,6 @@
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UDMF/@EntryIndexedValue">UDMF</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=Constants/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /&gt;</s:String>
 	<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /&gt;</s:String>
+	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=BuilderModes_002FProperties_002FResources/@EntryIndexedValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Builder_002FProperties_002FResources/@EntryIndexedValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/ResxEditorPersonal/Initialized/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>
\ No newline at end of file
diff --git a/Source/Plugins/BuilderModes/BuilderModes.csproj b/Source/Plugins/BuilderModes/BuilderModes.csproj
index 1046e548a19c99a608d77c2b44306e9d9e180662..8ceabcce7393295e3c754666b421e3c3efdcb2ce 100755
--- a/Source/Plugins/BuilderModes/BuilderModes.csproj
+++ b/Source/Plugins/BuilderModes/BuilderModes.csproj
@@ -755,6 +755,9 @@
   <ItemGroup>
     <None Include="Resources\Warning.png" />
   </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Radial.png" />
+  </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DrawEllipseMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DrawEllipseMode.cs
index 9deaf565b54085d7a28caba6f148e1e7cc0ab279..f462069a11bb1393faa80d88ee6e1da629b39708 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/DrawEllipseMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DrawEllipseMode.cs
@@ -68,10 +68,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			panel.OnValueChanged += OptionsPanelOnValueChanged;
 			panel.OnContinuousDrawingChanged += OnContinuousDrawingChanged;
 			panel.OnShowGuidelinesChanged += OnShowGuidelinesChanged;
+			panel.OnRadialDrawingChanged += OnRadialDrawingChanged;
 
 			// Needs to be set after adding the OnContinuousDrawingChanged event...
 			panel.ContinuousDrawing = General.Settings.ReadPluginSetting("drawellipsemode.continuousdrawing", false);
 			panel.ShowGuidelines = General.Settings.ReadPluginSetting("drawellipsemode.showguidelines", false);
+			panel.RadialDrawing = General.Settings.ReadPluginSetting("drawellipsemode.radialdrawing", false);
 		}
 
 		override protected void AddInterface() 
@@ -87,6 +89,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			General.Settings.WritePluginSetting("drawellipsemode.angle", panel.Angle);
 			General.Settings.WritePluginSetting("drawellipsemode.continuousdrawing", panel.ContinuousDrawing);
 			General.Settings.WritePluginSetting("drawellipsemode.showguidelines", panel.ShowGuidelines);
+			General.Settings.WritePluginSetting("drawellipsemode.radialdrawing", panel.RadialDrawing);
+			
 
 			// Remove the buttons
 			panel.Unregister();
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DrawRectangleMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DrawRectangleMode.cs
index adc805685dcac5a0c8281e5a20b9697204ecb7c9..9b3da24f34d658a33292ee14e94a5510dc16a466 100755
--- a/Source/Plugins/BuilderModes/ClassicModes/DrawRectangleMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DrawRectangleMode.cs
@@ -46,6 +46,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		protected int height;
 		protected int minpointscount;
 		protected bool alwaysrendershapehints;
+		protected bool radialdrawing;
 
 		private bool blockupdate;
 
@@ -102,10 +103,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			panel.OnValueChanged += OptionsPanelOnValueChanged;
 			panel.OnContinuousDrawingChanged += OnContinuousDrawingChanged;
 			panel.OnShowGuidelinesChanged += OnShowGuidelinesChanged;
+			panel.OnRadialDrawingChanged += OnRadialDrawingChanged;
 
 			// Needs to be set after adding the OnContinuousDrawingChanged event...
 			panel.ContinuousDrawing = General.Settings.ReadPluginSetting("drawrectanglemode.continuousdrawing", false);
 			panel.ShowGuidelines = General.Settings.ReadPluginSetting("drawrectanglemode.showguidelines", false);
+			panel.RadialDrawing = General.Settings.ReadPluginSetting("drawrectanglemode.radialdrawing", false);
 		}
 
 		protected override void AddInterface() 
@@ -120,6 +123,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			General.Settings.WritePluginSetting("drawrectanglemode.bevelwidth", bevelwidth);
 			General.Settings.WritePluginSetting("drawrectanglemode.continuousdrawing", panel.ContinuousDrawing);
 			General.Settings.WritePluginSetting("drawrectanglemode.showguidelines", panel.ShowGuidelines);
+			General.Settings.WritePluginSetting("drawrectanglemode.radialdrawing", panel.RadialDrawing);
 
 			// Remove the buttons
 			panel.Unregister();
@@ -317,6 +321,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		{
 			if(!p1.pos.IsFinite() || !p2.pos.IsFinite()) return;
 
+			if (radialdrawing)
+			{
+				Vector2D delta = p2.pos - p1.pos;
+				p1.pos -= delta;
+			}
+
 			// Make sure start always stays at left and up from the end
 			if (p1.pos.x < p2.pos.x) 
 			{
@@ -504,6 +514,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			subdivisions = panel.Subdivisions;
 			Update();
 		}
+		
+		protected void OnRadialDrawingChanged(object value, EventArgs e)
+		{
+			radialdrawing = (bool)value;
+		}
 
 		#endregion
 
diff --git a/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.Designer.cs b/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.Designer.cs
index 8fd1fa200761b16ec6692142cdb050c32305cc89..282914177dcf939eb69f5b3075852c8ba2bf5dc4 100755
--- a/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.Designer.cs
+++ b/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.Designer.cs
@@ -30,6 +30,7 @@
 		{
 			this.toolStrip1 = new System.Windows.Forms.ToolStrip();
 			this.continuousdrawing = new System.Windows.Forms.ToolStripButton();
+			this.radialdrawing = new System.Windows.Forms.ToolStripButton();
 			this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
 			this.subdivslabel = new System.Windows.Forms.ToolStripLabel();
 			this.subdivs = new CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown();
@@ -47,6 +48,7 @@
 			this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.continuousdrawing,
             this.showguidelines,
+            this.radialdrawing,
             this.toolStripSeparator1,
             this.subdivslabel,
             this.subdivs,
@@ -184,6 +186,17 @@
 			this.showguidelines.Text = "Guidelines";
 			this.showguidelines.CheckedChanged += new System.EventHandler(this.showguidelines_CheckedChanged);
 			// 
+			// radialdrawing
+			// 
+			this.radialdrawing.CheckOnClick = true;
+			this.radialdrawing.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Radial;
+			this.radialdrawing.ImageTransparentColor = System.Drawing.Color.Magenta;
+			this.radialdrawing.Margin = new System.Windows.Forms.Padding(2, 1, 0, 2);
+			this.radialdrawing.Name = "radialdrawing";
+			this.radialdrawing.Size = new System.Drawing.Size(82, 22);
+			this.radialdrawing.Text = "Radial drawing";
+			this.radialdrawing.CheckedChanged += new System.EventHandler(this.radialdrawing_CheckedChanged);
+			// 
 			// DrawEllipseOptionsPanel
 			// 
 			this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
@@ -207,6 +220,7 @@
 		private CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown spikiness;
 		private System.Windows.Forms.ToolStripButton reset;
 		private System.Windows.Forms.ToolStripButton continuousdrawing;
+		private System.Windows.Forms.ToolStripButton radialdrawing;
 		private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
 		private System.Windows.Forms.ToolStripLabel anglelabel;
 		private CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown angle;
diff --git a/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.cs b/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.cs
index 042b80acaeb29151a8a774bfb391b072f08db327..af681df73f63b7c2fa066859d0a74fef5d0cecb0 100755
--- a/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.cs
+++ b/Source/Plugins/BuilderModes/Interface/DrawEllipseOptionsPanel.cs
@@ -8,6 +8,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public event EventHandler OnValueChanged;
 		public event EventHandler OnContinuousDrawingChanged;
 		public event EventHandler OnShowGuidelinesChanged;
+		public event EventHandler OnRadialDrawingChanged;
 
 		private bool blockevents;
 
@@ -20,6 +21,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public int MinSpikiness { get { return (int)spikiness.Minimum; } set { spikiness.Minimum = value; } }
 		public bool ContinuousDrawing { get { return continuousdrawing.Checked; } set { continuousdrawing.Checked = value; } }
 		public bool ShowGuidelines { get { return showguidelines.Checked; } set { showguidelines.Checked = value; } }
+		public bool RadialDrawing { get { return radialdrawing.Checked; } set { radialdrawing.Checked = value; } }
 		
 		public DrawEllipseOptionsPanel() 
 		{
@@ -35,6 +37,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			General.Interface.BeginToolbarUpdate();
 			General.Interface.AddButton(continuousdrawing);
 			General.Interface.AddButton(showguidelines);
+			General.Interface.AddButton(radialdrawing);
 			General.Interface.AddButton(toolStripSeparator1);
 			General.Interface.AddButton(subdivslabel);
 			General.Interface.AddButton(subdivs);
@@ -59,6 +62,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			General.Interface.RemoveButton(toolStripSeparator1);
 			General.Interface.RemoveButton(showguidelines);
 			General.Interface.RemoveButton(continuousdrawing);
+			General.Interface.RemoveButton(radialdrawing);
 			General.Interface.EndToolbarUpdate();
 		}
 
@@ -89,5 +93,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		{
 			if(OnShowGuidelinesChanged != null) OnShowGuidelinesChanged(showguidelines.Checked, EventArgs.Empty);
 		}
+		
+		private void radialdrawing_CheckedChanged(object sender, EventArgs e)
+		{
+			if(OnRadialDrawingChanged != null) OnRadialDrawingChanged(radialdrawing.Checked, EventArgs.Empty);
+		}
 	}
 }
diff --git a/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.Designer.cs b/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.Designer.cs
index 1ac5f0257d7cbde514516f9350986aed8a553c8d..002bdc53754df1a728a2e8580345ba8e6c0bf1a5 100755
--- a/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.Designer.cs
+++ b/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.Designer.cs
@@ -31,6 +31,7 @@
 			this.toolStrip1 = new System.Windows.Forms.ToolStrip();
 			this.continuousdrawing = new System.Windows.Forms.ToolStripButton();
 			this.showguidelines = new System.Windows.Forms.ToolStripButton();
+			this.radialdrawing = new System.Windows.Forms.ToolStripButton();
 			this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
 			this.radiuslabel = new System.Windows.Forms.ToolStripLabel();
 			this.radius = new CodeImp.DoomBuilder.Controls.ToolStripNumericUpDown();
@@ -45,6 +46,7 @@
 			this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.continuousdrawing,
             this.showguidelines,
+            this.radialdrawing,
             this.toolStripSeparator1,
             this.radiuslabel,
             this.radius,
@@ -78,6 +80,17 @@
 			this.showguidelines.Text = "Guidelines";
 			this.showguidelines.CheckedChanged += new System.EventHandler(this.showguidelines_CheckedChanged);
 			// 
+			// radialdrawing
+			// 
+			this.radialdrawing.CheckOnClick = true;
+			this.radialdrawing.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Radial;
+			this.radialdrawing.ImageTransparentColor = System.Drawing.Color.Magenta;
+			this.radialdrawing.Margin = new System.Windows.Forms.Padding(2, 1, 0, 2);
+			this.radialdrawing.Name = "radialdrawing";
+			this.radialdrawing.Size = new System.Drawing.Size(82, 22);
+			this.radialdrawing.Text = "Radial drawing";
+			this.radialdrawing.CheckedChanged += new System.EventHandler(this.radialdrawing_CheckedChanged);
+			// 
 			// toolStripSeparator1
 			// 
 			this.toolStripSeparator1.Name = "toolStripSeparator1";
@@ -176,5 +189,6 @@
 		private System.Windows.Forms.ToolStripButton continuousdrawing;
 		private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
 		private System.Windows.Forms.ToolStripButton showguidelines;
+		private System.Windows.Forms.ToolStripButton radialdrawing;
 	}
 }
diff --git a/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.cs b/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.cs
index cd880049a16602554e56ab2b16eeb97fc2722bdb..f60b60d4865a7d0d177977181a28354544a00f92 100755
--- a/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.cs
+++ b/Source/Plugins/BuilderModes/Interface/DrawRectangleOptionsPanel.cs
@@ -8,6 +8,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public event EventHandler OnValueChanged;
 		public event EventHandler OnContinuousDrawingChanged;
 		public event EventHandler OnShowGuidelinesChanged;
+		public event EventHandler OnRadialDrawingChanged;
 
 		private bool blockevents;
 
@@ -19,6 +20,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public int MinSubdivisions { get { return (int)subdivs.Minimum; } set { subdivs.Minimum = value; } }
 		public bool ContinuousDrawing { get { return continuousdrawing.Checked; } set { continuousdrawing.Checked = value; } }
 		public bool ShowGuidelines { get { return showguidelines.Checked; } set { showguidelines.Checked = value; } }
+		public bool RadialDrawing { get { return radialdrawing.Checked; } set { radialdrawing.Checked = value; } }
 
 		public DrawRectangleOptionsPanel() 
 		{
@@ -33,6 +35,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			General.Interface.BeginToolbarUpdate();
 			General.Interface.AddButton(continuousdrawing);
 			General.Interface.AddButton(showguidelines);
+			General.Interface.AddButton(radialdrawing);
 			General.Interface.AddButton(toolStripSeparator1);
 			General.Interface.AddButton(radiuslabel);
 			General.Interface.AddButton(radius);
@@ -53,6 +56,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			General.Interface.RemoveButton(toolStripSeparator1);
 			General.Interface.RemoveButton(showguidelines);
 			General.Interface.RemoveButton(continuousdrawing);
+			General.Interface.RemoveButton(radialdrawing);
 			General.Interface.EndToolbarUpdate();
 		}
 
@@ -82,5 +86,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		{
 			if(OnShowGuidelinesChanged != null) OnShowGuidelinesChanged(showguidelines.Checked, EventArgs.Empty);
 		}
+		
+		private void radialdrawing_CheckedChanged(object sender, EventArgs e)
+		{
+			if(OnRadialDrawingChanged != null) OnRadialDrawingChanged(radialdrawing.Checked, EventArgs.Empty);
+		}
 	}
 }
diff --git a/Source/Plugins/BuilderModes/Properties/Resources.Designer.cs b/Source/Plugins/BuilderModes/Properties/Resources.Designer.cs
index b600770f957b0b5281d1849d305350830a6a0e40..9505d1834204539ecfd5549b46d099604d630b48 100755
--- a/Source/Plugins/BuilderModes/Properties/Resources.Designer.cs
+++ b/Source/Plugins/BuilderModes/Properties/Resources.Designer.cs
@@ -450,6 +450,16 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap Radial {
+            get {
+                object obj = ResourceManager.GetObject("Radial", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized resource of type System.Drawing.Bitmap.
         /// </summary>
diff --git a/Source/Plugins/BuilderModes/Properties/Resources.resx b/Source/Plugins/BuilderModes/Properties/Resources.resx
index 6697ef8e4cbd9a682995a3c130b49c6db7cc9ec0..97dbda6356e7963585a7b61c37d5d6ce11ccefe4 100755
--- a/Source/Plugins/BuilderModes/Properties/Resources.resx
+++ b/Source/Plugins/BuilderModes/Properties/Resources.resx
@@ -199,6 +199,9 @@
   <data name="Guidelines" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\Guidelines.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="Radial" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Radial.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="DrawGridMode" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\DrawGridMode.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
diff --git a/Source/Plugins/BuilderModes/Resources/Radial.png b/Source/Plugins/BuilderModes/Resources/Radial.png
new file mode 100644
index 0000000000000000000000000000000000000000..0702a267a424909a635b95d0a79db63b72d97209
Binary files /dev/null and b/Source/Plugins/BuilderModes/Resources/Radial.png differ