diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj
index 3ecb70ca869fbe3759a9bdb86a548301e7233dd1..cb82b75325d317aa564b915c46abd18b68678e80 100644
--- a/Source/Core/Builder.csproj
+++ b/Source/Core/Builder.csproj
@@ -3,7 +3,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>8.0.50727</ProductVersion>
+    <ProductVersion>9.0.30729</ProductVersion>
     <SchemaVersion>2.0</SchemaVersion>
     <ProjectGuid>{818B3D10-F791-4C3F-9AF5-BB2D0079B63C}</ProjectGuid>
     <OutputType>WinExe</OutputType>
@@ -504,6 +504,7 @@
     <Reference Include="System.Core">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Design" />
     <Reference Include="System.Drawing" />
     <Reference Include="System.Windows.Forms" />
     <Reference Include="Trackbar, Version=1.0.2486.37933, Culture=neutral, PublicKeyToken=503bf28f63ad27b4" />
@@ -661,6 +662,7 @@
     <Compile Include="Config\AllTexturesSet.cs" />
     <Compile Include="Config\FlagTranslation.cs" />
     <Compile Include="Config\PasteOptions.cs" />
+    <Compile Include="Controls\ButtonsNumericTextboxDesigner.cs" />
     <Compile Include="Controls\PasteOptionsControl.cs">
       <SubType>UserControl</SubType>
     </Compile>
@@ -739,7 +741,7 @@
     </EmbeddedResource>
     <EmbeddedResource Include="Resources\Crosshair.png" />
     <EmbeddedResource Include="Resources\CrosshairBusy.png" />
-    <Compile Include="Config\BrightnessList.cs" />
+    <Compile Include="General\StepsList.cs" />
     <None Include="Resources\Builder16.png" />
     <None Include="Resources\CLogo.png" />
     <Content Include="Resources\DB2.ico" />
diff --git a/Source/Core/Config/GameConfiguration.cs b/Source/Core/Config/GameConfiguration.cs
index 7e974bf69329add734a62b1edc3c5da91fc940d2..5538439ab70120f6d77f88cf93bfc01fb419f402 100644
--- a/Source/Core/Config/GameConfiguration.cs
+++ b/Source/Core/Config/GameConfiguration.cs
@@ -107,7 +107,7 @@ namespace CodeImp.DoomBuilder.Config
 		private Dictionary<int, SectorEffectInfo> sectoreffects;
 		private List<SectorEffectInfo> sortedsectoreffects;
 		private List<GeneralizedOption> geneffectoptions;
-		private BrightnessList brightnesslevels;
+		private StepsList brightnesslevels;
 
 		// Universal fields
 		private List<UniversalFieldInfo> linedeffields;
@@ -188,7 +188,7 @@ namespace CodeImp.DoomBuilder.Config
 		public IDictionary<int, SectorEffectInfo> SectorEffects { get { return sectoreffects; } }
 		public List<SectorEffectInfo> SortedSectorEffects { get { return sortedsectoreffects; } }
 		public List<GeneralizedOption> GenEffectOptions { get { return geneffectoptions; } }
-		public BrightnessList BrightnessLevels { get { return brightnesslevels; } }
+		public StepsList BrightnessLevels { get { return brightnesslevels; } }
 
 		// Universal fields
 		public List<UniversalFieldInfo> LinedefFields { get { return linedeffields; } }
@@ -236,7 +236,7 @@ namespace CodeImp.DoomBuilder.Config
 			this.thingflagstranslation = new List<FlagTranslation>();
 			this.linedefflagstranslation = new List<FlagTranslation>();
 			this.thingfilters = new List<ThingsFilter>();
-			this.brightnesslevels = new BrightnessList();
+			this.brightnesslevels = new StepsList();
 			
 			// Read general settings
 			configname = cfg.ReadSetting("game", "<unnamed game>");
diff --git a/Source/Core/Controls/ArgumentBox.Designer.cs b/Source/Core/Controls/ArgumentBox.Designer.cs
index 496c788e9e4f58ae0fa005d8733a436de0887b59..a30933283ef9b4dd0e8d51a1695df4c9251a05a1 100644
--- a/Source/Core/Controls/ArgumentBox.Designer.cs
+++ b/Source/Core/Controls/ArgumentBox.Designer.cs
@@ -30,6 +30,7 @@ namespace CodeImp.DoomBuilder.Controls
 		{
 			this.combobox = new System.Windows.Forms.ComboBox();
 			this.button = new System.Windows.Forms.Button();
+			this.scrollbuttons = new System.Windows.Forms.VScrollBar();
 			this.SuspendLayout();
 			// 
 			// combobox
@@ -40,6 +41,7 @@ namespace CodeImp.DoomBuilder.Controls
 			this.combobox.Size = new System.Drawing.Size(149, 22);
 			this.combobox.TabIndex = 0;
 			this.combobox.Validating += new System.ComponentModel.CancelEventHandler(this.combobox_Validating);
+			this.combobox.TextChanged += new System.EventHandler(this.combobox_TextChanged);
 			// 
 			// button
 			// 
@@ -55,10 +57,23 @@ namespace CodeImp.DoomBuilder.Controls
 			this.button.Visible = false;
 			this.button.Click += new System.EventHandler(this.button_Click);
 			// 
+			// scrollbuttons
+			// 
+			this.scrollbuttons.LargeChange = 10000;
+			this.scrollbuttons.Location = new System.Drawing.Point(186, -1);
+			this.scrollbuttons.Maximum = 10000;
+			this.scrollbuttons.Minimum = -10000;
+			this.scrollbuttons.Name = "scrollbuttons";
+			this.scrollbuttons.Size = new System.Drawing.Size(18, 24);
+			this.scrollbuttons.TabIndex = 2;
+			this.scrollbuttons.Visible = false;
+			this.scrollbuttons.ValueChanged += new System.EventHandler(this.scrollbuttons_ValueChanged);
+			// 
 			// ArgumentBox
 			// 
 			this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
 			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
+			this.Controls.Add(this.scrollbuttons);
 			this.Controls.Add(this.button);
 			this.Controls.Add(this.combobox);
 			this.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -74,5 +89,6 @@ namespace CodeImp.DoomBuilder.Controls
 
 		private System.Windows.Forms.ComboBox combobox;
 		private System.Windows.Forms.Button button;
+		private System.Windows.Forms.VScrollBar scrollbuttons;
 	}
 }
diff --git a/Source/Core/Controls/ArgumentBox.cs b/Source/Core/Controls/ArgumentBox.cs
index 3b2ff332a0dadeee144adfdd1eb7846031ca1865..dace21d11375e8d702ff1042ac26bf926a63c78b 100644
--- a/Source/Core/Controls/ArgumentBox.cs
+++ b/Source/Core/Controls/ArgumentBox.cs
@@ -40,7 +40,8 @@ namespace CodeImp.DoomBuilder.Controls
 		#region ================== Variables
 
 		private TypeHandler typehandler;
-
+		private bool ignorebuttonchange = false;
+		
 		#endregion
 
 		#region ================== Properties
@@ -54,6 +55,7 @@ namespace CodeImp.DoomBuilder.Controls
 		{
 			// Initialize
 			InitializeComponent();
+			scrollbuttons.Value = 0;
 		}
 
 		#endregion
@@ -65,10 +67,13 @@ namespace CodeImp.DoomBuilder.Controls
 		{
 			if(button.Visible)
 				combobox.Width = ClientRectangle.Width - button.Width - 2;
+			else if(scrollbuttons.Visible)
+				combobox.Width = ClientRectangle.Width - scrollbuttons.Width - 2;
 			else
 				combobox.Width = ClientRectangle.Width;
 
 			button.Left = ClientRectangle.Width - button.Width;
+			scrollbuttons.Left = ClientRectangle.Width - scrollbuttons.Width;
 			Height = button.Height;
 		}
 
@@ -89,8 +94,7 @@ namespace CodeImp.DoomBuilder.Controls
 			if(combobox.Text.Trim().Length > 0)
 			{
 				// Prefixed?
-				if(combobox.Text.Trim().StartsWith("++") ||
-				   combobox.Text.Trim().StartsWith("--"))
+				if(CheckIsRelative())
 				{
 					// Try parsing to number
 					if(!int.TryParse(str, NumberStyles.Integer, CultureInfo.CurrentCulture, out num))
@@ -121,6 +125,30 @@ namespace CodeImp.DoomBuilder.Controls
 			combobox.Focus();
 			combobox.SelectAll();
 		}
+
+		// Text changes
+		private void combobox_TextChanged(object sender, EventArgs e)
+		{
+			scrollbuttons.Enabled = !CheckIsRelative();
+		}
+		
+		// Scroll buttons clicked
+		private void scrollbuttons_ValueChanged(object sender, EventArgs e)
+		{
+			if(!ignorebuttonchange)
+			{
+				ignorebuttonchange = true;
+				if(!CheckIsRelative())
+				{
+					typehandler.SetValue(combobox.Text);
+					int newvalue = GetResult(0) - scrollbuttons.Value;
+					if(newvalue < 0) newvalue = 0;
+					combobox.Text = newvalue.ToString();
+				}
+				scrollbuttons.Value = 0;
+				ignorebuttonchange = false;
+			}
+		}
 		
 		#endregion
 		
@@ -146,6 +174,7 @@ namespace CodeImp.DoomBuilder.Controls
 			{
 				// Show the combobox
 				button.Visible = false;
+				scrollbuttons.Visible = false;
 				combobox.DropDownStyle = ComboBoxStyle.DropDown;
 				combobox.Items.AddRange(typehandler.GetEnumList().ToArray());
 			}
@@ -154,12 +183,14 @@ namespace CodeImp.DoomBuilder.Controls
 			{
 				// Show the button
 				button.Visible = true;
+				scrollbuttons.Visible = false;
 				combobox.DropDownStyle = ComboBoxStyle.Simple;
 			}
 			else
 			{
-				// Show just a textbox
+				// Show textbox with scroll buttons
 				button.Visible = false;
+				scrollbuttons.Visible = true;
 				combobox.DropDownStyle = ComboBoxStyle.Simple;
 			}
 			
@@ -186,6 +217,13 @@ namespace CodeImp.DoomBuilder.Controls
 			combobox.SelectedItem = null;
 			combobox.Text = "";
 		}
+
+		// This checks if the number is relative
+		public bool CheckIsRelative()
+		{
+			// Prefixed with ++ or --?
+			return (combobox.Text.Trim().StartsWith("++") || combobox.Text.Trim().StartsWith("--"));
+		}
 		
 		// This returns the selected value
 		public int GetResult(int original)
diff --git a/Source/Core/Controls/ArgumentBox.resx b/Source/Core/Controls/ArgumentBox.resx
index 1e02acb4d241e727bcd8db98778a61232b6bfcad..285681bd573c6cbf1dcd0dfc1e32f73e50357902 100644
--- a/Source/Core/Controls/ArgumentBox.resx
+++ b/Source/Core/Controls/ArgumentBox.resx
@@ -123,6 +123,9 @@
   <metadata name="button.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="scrollbuttons.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
diff --git a/Source/Core/Controls/ButtonsNumericTextbox.Designer.cs b/Source/Core/Controls/ButtonsNumericTextbox.Designer.cs
index 7e80a8bb96859729c8c77d57b8118043a2fc4811..8427896f0fa910c3ffdceaade89dfb396f0fbc18 100644
--- a/Source/Core/Controls/ButtonsNumericTextbox.Designer.cs
+++ b/Source/Core/Controls/ButtonsNumericTextbox.Designer.cs
@@ -34,8 +34,10 @@ namespace CodeImp.DoomBuilder.Controls
 			// 
 			// buttons
 			// 
+			this.buttons.LargeChange = 10000;
 			this.buttons.Location = new System.Drawing.Point(163, 0);
-			this.buttons.Minimum = -100;
+			this.buttons.Maximum = 10000;
+			this.buttons.Minimum = -10000;
 			this.buttons.Name = "buttons";
 			this.buttons.Size = new System.Drawing.Size(18, 24);
 			this.buttons.TabIndex = 1;
@@ -53,13 +55,13 @@ namespace CodeImp.DoomBuilder.Controls
 			this.textbox.TabIndex = 0;
 			this.textbox.TextChanged += new System.EventHandler(this.textbox_TextChanged);
 			// 
-			// ClickableNumericTextbox
+			// ButtonsNumericTextbox
 			// 
 			this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
 			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
 			this.Controls.Add(this.buttons);
 			this.Controls.Add(this.textbox);
-			this.Name = "ClickableNumericTextbox";
+			this.Name = "ButtonsNumericTextbox";
 			this.Size = new System.Drawing.Size(289, 68);
 			this.Layout += new System.Windows.Forms.LayoutEventHandler(this.ClickableNumericTextbox_Layout);
 			this.Resize += new System.EventHandler(this.ClickableNumericTextbox_Resize);
diff --git a/Source/Core/Controls/ButtonsNumericTextbox.cs b/Source/Core/Controls/ButtonsNumericTextbox.cs
index a1f0600417045f66a9a0d736f5b8e573a393fc70..4f87b2b346cca22a25c23dff70f8b84e04217994 100644
--- a/Source/Core/Controls/ButtonsNumericTextbox.cs
+++ b/Source/Core/Controls/ButtonsNumericTextbox.cs
@@ -32,25 +32,32 @@ using CodeImp.DoomBuilder.Editing;
 
 namespace CodeImp.DoomBuilder.Controls
 {
+	[Designer(typeof(ButtonsNumericTextboxDesigner))]
 	public partial class ButtonsNumericTextbox : UserControl
 	{
 		#region ================== Events
 
-		public event EventHandler TextChanged;
+		public event EventHandler WhenTextChanged;
 
 		#endregion
 
 		#region ================== Variables
 		
 		private bool ignorebuttonchange = false;
+		private StepsList steps = null;
+		private int stepsize = 1;
 		
 		#endregion
 
 		#region ================== Properties
-		
+
+		public bool AllowDecimal { get { return textbox.AllowDecimal; } set { textbox.AllowDecimal = value; } }
 		public bool AllowNegative { get { return textbox.AllowNegative; } set { textbox.AllowNegative = value; } }
 		public bool AllowRelative { get { return textbox.AllowRelative; } set { textbox.AllowRelative = value; } }
+		public int ButtonStep { get { return stepsize; } set { stepsize = value; } }
 		public string Text { get { return textbox.Text; } set { textbox.Text = value; } }
+		internal NumericTextbox Textbox { get { return textbox; } }
+		public StepsList StepValues { get { return steps; } set { steps = value; } }
 		
 		#endregion
 		
@@ -61,6 +68,7 @@ namespace CodeImp.DoomBuilder.Controls
 		{
 			InitializeComponent();
 			buttons.Value = 0;
+			textbox.MouseWheel += textbox_MouseWheel;
 		}
 
 		#endregion
@@ -92,7 +100,7 @@ namespace CodeImp.DoomBuilder.Controls
 		// Text in textbox changes
 		private void textbox_TextChanged(object sender, EventArgs e)
 		{
-			if(TextChanged != null) TextChanged(sender, e);
+			if(WhenTextChanged != null) WhenTextChanged(sender, e);
 			buttons.Enabled = !textbox.CheckIsRelative();
 		}
 		
@@ -104,14 +112,40 @@ namespace CodeImp.DoomBuilder.Controls
 				ignorebuttonchange = true;
 				if(!textbox.CheckIsRelative())
 				{
-					int newvalue = textbox.GetResult(0) - buttons.Value;
-					textbox.Text = newvalue.ToString();
+					if(steps != null)
+					{
+						if(buttons.Value < 0)
+							textbox.Text = steps.GetNextHigher(textbox.GetResult(0)).ToString();
+						else if(buttons.Value > 0)
+							textbox.Text = steps.GetNextLower(textbox.GetResult(0)).ToString();
+					}
+					else if(textbox.AllowDecimal)
+					{
+						float newvalue = textbox.GetResultFloat(0.0f) - (float)(buttons.Value * stepsize);
+						if((newvalue < 0.0f) && !textbox.AllowNegative) newvalue = 0.0f;
+						textbox.Text = newvalue.ToString();
+					}
+					else
+					{
+						int newvalue = textbox.GetResult(0) - (buttons.Value * stepsize);
+						if((newvalue < 0) && !textbox.AllowNegative) newvalue = 0;
+						textbox.Text = newvalue.ToString();
+					}
 				}
 				buttons.Value = 0;
 				ignorebuttonchange = false;
 			}
 		}
 
+		// Mouse wheel used
+		private void textbox_MouseWheel(object sender, MouseEventArgs e)
+		{
+			if(e.Delta < 0)
+				buttons.Value += buttons.SmallChange;
+			else if(e.Delta > 0)
+				buttons.Value -= buttons.SmallChange;
+		}
+		
 		#endregion
 		
 		#region ================== Methods
diff --git a/Source/Core/Controls/ButtonsNumericTextboxDesigner.cs b/Source/Core/Controls/ButtonsNumericTextboxDesigner.cs
new file mode 100644
index 0000000000000000000000000000000000000000..efb2d2e6aa9b2187ea67bd296692f8f57a9474ee
--- /dev/null
+++ b/Source/Core/Controls/ButtonsNumericTextboxDesigner.cs
@@ -0,0 +1,75 @@
+
+#region ================== Copyright (c) 2007 Pascal vd Heiden
+
+/*
+ * Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
+ * This program is released under GNU General Public License
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ */
+
+#endregion
+
+#region ================== Namespaces
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.Design;
+using System.Drawing;
+using System.Text;
+using System.Globalization;
+using System.Windows.Forms;
+using System.Windows.Forms.Design.Behavior;
+using CodeImp.DoomBuilder.Actions;
+using CodeImp.DoomBuilder.Geometry;
+using CodeImp.DoomBuilder.Rendering;
+using CodeImp.DoomBuilder.Editing;
+using System.Windows.Forms.Design;
+
+#endregion
+
+namespace CodeImp.DoomBuilder.Controls
+{
+	// Designer for ButtonsNumericTextbox
+	internal class ButtonsNumericTextboxDesigner : ControlDesigner
+	{
+		public override IList SnapLines
+		{
+			get
+			{
+				IList snaplines = base.SnapLines;
+
+				ButtonsNumericTextbox control = base.Control as ButtonsNumericTextbox;
+				if(control == null) { return snaplines; }
+
+				IDesigner designer = TypeDescriptor.CreateDesigner(control.Textbox, typeof(IDesigner));
+				if(designer == null) { return snaplines; }
+				designer.Initialize(control.Textbox);
+
+				using(designer)
+				{
+					ControlDesigner boxdesigner = designer as ControlDesigner;
+					if(boxdesigner == null) { return snaplines; }
+					
+					// Add the baseline and right snap lines from the textbox
+					foreach(SnapLine line in boxdesigner.SnapLines)
+					{
+						if(line.SnapLineType == SnapLineType.Baseline)
+							snaplines.Add(new SnapLine(line.SnapLineType, line.Offset + control.Textbox.Top, line.Filter, line.Priority));
+						
+						if(line.SnapLineType == SnapLineType.Right)
+							snaplines.Add(new SnapLine(line.SnapLineType, line.Offset + control.Textbox.Left, line.Filter, line.Priority));
+					}
+				}
+
+				return snaplines;
+			}
+		}
+	}
+}
diff --git a/Source/Core/Config/BrightnessList.cs b/Source/Core/General/StepsList.cs
similarity index 85%
rename from Source/Core/Config/BrightnessList.cs
rename to Source/Core/General/StepsList.cs
index 01ce6a2bcb6cd7cc90b897447ee1b95c28dcad2d..019918ce455a1c54d1a63c6050ecec8b29a87f0d 100644
--- a/Source/Core/Config/BrightnessList.cs
+++ b/Source/Core/General/StepsList.cs
@@ -28,11 +28,11 @@ using System.Diagnostics;
 
 #endregion
 
-namespace CodeImp.DoomBuilder.Config
+namespace CodeImp.DoomBuilder
 {
-	public class BrightnessList : List<int>
+	public class StepsList : List<int>
 	{
-		// This returns a brightness level higher
+		// This returns a step higher
 		public int GetNextHigher(int level)
 		{
 			int low = 0;
@@ -52,7 +52,7 @@ namespace CodeImp.DoomBuilder.Config
 			return base[high];
 		}
 		
-		// This returns a brightness level lower
+		// This returns a step lower
 		public int GetNextLower(int level)
 		{
 			int low = 0;
@@ -72,7 +72,7 @@ namespace CodeImp.DoomBuilder.Config
 			return base[low];
 		}
 
-		// This returns the nearest brightness level
+		// This returns the nearest step
 		public int GetNearest(int level)
 		{
 			int low = 0;
diff --git a/Source/Core/Windows/GridSetupForm.Designer.cs b/Source/Core/Windows/GridSetupForm.Designer.cs
index 1869fab975043512b310475da811b8e62ab1977e..d709ac7e474a194dc0fdcdad19fc135a04d13221 100644
--- a/Source/Core/Windows/GridSetupForm.Designer.cs
+++ b/Source/Core/Windows/GridSetupForm.Designer.cs
@@ -31,14 +31,14 @@ namespace CodeImp.DoomBuilder.Windows
 			System.Windows.Forms.GroupBox groupBox1;
 			System.Windows.Forms.Label label1;
 			System.Windows.Forms.GroupBox groupBox2;
-			this.gridsize = new System.Windows.Forms.NumericUpDown();
-			this.backscaley = new System.Windows.Forms.NumericUpDown();
-			this.backscalex = new System.Windows.Forms.NumericUpDown();
+			this.gridsize = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.backscaley = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.backscalex = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.backoffsety = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.backoffsetx = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			this.backscale = new System.Windows.Forms.Label();
 			this.selectfile = new System.Windows.Forms.Button();
 			this.showbackground = new System.Windows.Forms.CheckBox();
-			this.backoffsety = new System.Windows.Forms.NumericUpDown();
-			this.backoffsetx = new System.Windows.Forms.NumericUpDown();
 			this.backoffset = new System.Windows.Forms.Label();
 			this.selectflat = new System.Windows.Forms.Button();
 			this.selecttexture = new System.Windows.Forms.Button();
@@ -50,12 +50,7 @@ namespace CodeImp.DoomBuilder.Windows
 			label1 = new System.Windows.Forms.Label();
 			groupBox2 = new System.Windows.Forms.GroupBox();
 			groupBox1.SuspendLayout();
-			((System.ComponentModel.ISupportInitialize)(this.gridsize)).BeginInit();
 			groupBox2.SuspendLayout();
-			((System.ComponentModel.ISupportInitialize)(this.backscaley)).BeginInit();
-			((System.ComponentModel.ISupportInitialize)(this.backscalex)).BeginInit();
-			((System.ComponentModel.ISupportInitialize)(this.backoffsety)).BeginInit();
-			((System.ComponentModel.ISupportInitialize)(this.backoffsetx)).BeginInit();
 			this.SuspendLayout();
 			// 
 			// groupBox1
@@ -66,33 +61,20 @@ namespace CodeImp.DoomBuilder.Windows
 			groupBox1.Controls.Add(label1);
 			groupBox1.Location = new System.Drawing.Point(12, 12);
 			groupBox1.Name = "groupBox1";
-			groupBox1.Size = new System.Drawing.Size(285, 71);
+			groupBox1.Size = new System.Drawing.Size(293, 71);
 			groupBox1.TabIndex = 0;
 			groupBox1.TabStop = false;
 			groupBox1.Text = " Grid ";
 			// 
 			// gridsize
 			// 
-			this.gridsize.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.gridsize.Location = new System.Drawing.Point(146, 28);
-			this.gridsize.Maximum = new decimal(new int[] {
-            4096,
-            0,
-            0,
-            0});
-			this.gridsize.Minimum = new decimal(new int[] {
-            1,
-            0,
-            0,
-            0});
+			this.gridsize.AllowNegative = false;
+			this.gridsize.AllowRelative = true;
+			this.gridsize.ButtonStep = 8;
+			this.gridsize.Location = new System.Drawing.Point(146, 26);
 			this.gridsize.Name = "gridsize";
-			this.gridsize.Size = new System.Drawing.Size(79, 20);
-			this.gridsize.TabIndex = 0;
-			this.gridsize.Value = new decimal(new int[] {
-            32,
-            0,
-            0,
-            0});
+			this.gridsize.Size = new System.Drawing.Size(75, 24);
+			this.gridsize.TabIndex = 1;
 			// 
 			// label1
 			// 
@@ -105,79 +87,75 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// groupBox2
 			// 
-			groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-						| System.Windows.Forms.AnchorStyles.Left)));
+			groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
 			groupBox2.Controls.Add(this.backscaley);
 			groupBox2.Controls.Add(this.backscalex);
+			groupBox2.Controls.Add(this.backoffsety);
+			groupBox2.Controls.Add(this.backoffsetx);
 			groupBox2.Controls.Add(this.backscale);
 			groupBox2.Controls.Add(this.selectfile);
 			groupBox2.Controls.Add(this.showbackground);
-			groupBox2.Controls.Add(this.backoffsety);
-			groupBox2.Controls.Add(this.backoffsetx);
 			groupBox2.Controls.Add(this.backoffset);
 			groupBox2.Controls.Add(this.selectflat);
 			groupBox2.Controls.Add(this.selecttexture);
 			groupBox2.Controls.Add(this.backgroundimage);
 			groupBox2.Location = new System.Drawing.Point(12, 89);
 			groupBox2.Name = "groupBox2";
-			groupBox2.Size = new System.Drawing.Size(285, 255);
+			groupBox2.Size = new System.Drawing.Size(293, 261);
 			groupBox2.TabIndex = 1;
 			groupBox2.TabStop = false;
 			groupBox2.Text = " Background ";
 			// 
 			// backscaley
 			// 
+			this.backscaley.AllowNegative = false;
+			this.backscaley.AllowRelative = true;
+			this.backscaley.ButtonStep = 1;
 			this.backscaley.Enabled = false;
-			this.backscaley.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.backscaley.Location = new System.Drawing.Point(197, 209);
-			this.backscaley.Maximum = new decimal(new int[] {
-            1000,
-            0,
-            0,
-            0});
-			this.backscaley.Minimum = new decimal(new int[] {
-            1,
-            0,
-            0,
-            0});
+			this.backscaley.Location = new System.Drawing.Point(197, 212);
 			this.backscaley.Name = "backscaley";
-			this.backscaley.Size = new System.Drawing.Size(57, 20);
-			this.backscaley.TabIndex = 7;
-			this.backscaley.Value = new decimal(new int[] {
-            1,
-            0,
-            0,
-            0});
+			this.backscaley.Size = new System.Drawing.Size(67, 24);
+			this.backscaley.TabIndex = 13;
 			// 
 			// backscalex
 			// 
+			this.backscalex.AllowNegative = false;
+			this.backscalex.AllowRelative = true;
+			this.backscalex.ButtonStep = 1;
 			this.backscalex.Enabled = false;
-			this.backscalex.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.backscalex.Location = new System.Drawing.Point(134, 209);
-			this.backscalex.Maximum = new decimal(new int[] {
-            1000,
-            0,
-            0,
-            0});
-			this.backscalex.Minimum = new decimal(new int[] {
-            1,
-            0,
-            0,
-            0});
+			this.backscalex.Location = new System.Drawing.Point(124, 212);
 			this.backscalex.Name = "backscalex";
-			this.backscalex.Size = new System.Drawing.Size(57, 20);
-			this.backscalex.TabIndex = 6;
-			this.backscalex.Value = new decimal(new int[] {
-            1,
-            0,
-            0,
-            0});
+			this.backscalex.Size = new System.Drawing.Size(67, 24);
+			this.backscalex.TabIndex = 12;
+			// 
+			// backoffsety
+			// 
+			this.backoffsety.AllowNegative = true;
+			this.backoffsety.AllowRelative = true;
+			this.backoffsety.ButtonStep = 1;
+			this.backoffsety.Enabled = false;
+			this.backoffsety.Location = new System.Drawing.Point(197, 173);
+			this.backoffsety.Name = "backoffsety";
+			this.backoffsety.Size = new System.Drawing.Size(67, 24);
+			this.backoffsety.TabIndex = 11;
+			// 
+			// backoffsetx
+			// 
+			this.backoffsetx.AllowNegative = true;
+			this.backoffsetx.AllowRelative = true;
+			this.backoffsetx.ButtonStep = 1;
+			this.backoffsetx.Enabled = false;
+			this.backoffsetx.Location = new System.Drawing.Point(124, 173);
+			this.backoffsetx.Name = "backoffsetx";
+			this.backoffsetx.Size = new System.Drawing.Size(67, 24);
+			this.backoffsetx.TabIndex = 10;
 			// 
 			// backscale
 			// 
 			this.backscale.AutoSize = true;
 			this.backscale.Enabled = false;
-			this.backscale.Location = new System.Drawing.Point(40, 211);
+			this.backscale.Location = new System.Drawing.Point(30, 217);
 			this.backscale.Name = "backscale";
 			this.backscale.Size = new System.Drawing.Size(88, 14);
 			this.backscale.TabIndex = 9;
@@ -186,7 +164,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// selectfile
 			// 
 			this.selectfile.Enabled = false;
-			this.selectfile.Location = new System.Drawing.Point(137, 122);
+			this.selectfile.Location = new System.Drawing.Point(147, 122);
 			this.selectfile.Name = "selectfile";
 			this.selectfile.Size = new System.Drawing.Size(117, 25);
 			this.selectfile.TabIndex = 3;
@@ -205,39 +183,11 @@ namespace CodeImp.DoomBuilder.Windows
 			this.showbackground.UseVisualStyleBackColor = true;
 			this.showbackground.CheckedChanged += new System.EventHandler(this.showbackground_CheckedChanged);
 			// 
-			// backoffsety
-			// 
-			this.backoffsety.Enabled = false;
-			this.backoffsety.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.backoffsety.Location = new System.Drawing.Point(197, 172);
-			this.backoffsety.Maximum = new decimal(new int[] {
-            4096,
-            0,
-            0,
-            0});
-			this.backoffsety.Name = "backoffsety";
-			this.backoffsety.Size = new System.Drawing.Size(57, 20);
-			this.backoffsety.TabIndex = 5;
-			// 
-			// backoffsetx
-			// 
-			this.backoffsetx.Enabled = false;
-			this.backoffsetx.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.backoffsetx.Location = new System.Drawing.Point(134, 172);
-			this.backoffsetx.Maximum = new decimal(new int[] {
-            4096,
-            0,
-            0,
-            0});
-			this.backoffsetx.Name = "backoffsetx";
-			this.backoffsetx.Size = new System.Drawing.Size(57, 20);
-			this.backoffsetx.TabIndex = 4;
-			// 
 			// backoffset
 			// 
 			this.backoffset.AutoSize = true;
 			this.backoffset.Enabled = false;
-			this.backoffset.Location = new System.Drawing.Point(25, 175);
+			this.backoffset.Location = new System.Drawing.Point(15, 178);
 			this.backoffset.Name = "backoffset";
 			this.backoffset.Size = new System.Drawing.Size(103, 14);
 			this.backoffset.TabIndex = 4;
@@ -246,7 +196,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// selectflat
 			// 
 			this.selectflat.Enabled = false;
-			this.selectflat.Location = new System.Drawing.Point(137, 91);
+			this.selectflat.Location = new System.Drawing.Point(147, 91);
 			this.selectflat.Name = "selectflat";
 			this.selectflat.Size = new System.Drawing.Size(117, 25);
 			this.selectflat.TabIndex = 2;
@@ -257,7 +207,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// selecttexture
 			// 
 			this.selecttexture.Enabled = false;
-			this.selecttexture.Location = new System.Drawing.Point(137, 60);
+			this.selecttexture.Location = new System.Drawing.Point(147, 60);
 			this.selecttexture.Name = "selecttexture";
 			this.selecttexture.Size = new System.Drawing.Size(117, 25);
 			this.selecttexture.TabIndex = 1;
@@ -279,7 +229,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
 			this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-			this.cancel.Location = new System.Drawing.Point(185, 357);
+			this.cancel.Location = new System.Drawing.Point(193, 368);
 			this.cancel.Name = "cancel";
 			this.cancel.Size = new System.Drawing.Size(112, 25);
 			this.cancel.TabIndex = 3;
@@ -290,7 +240,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// apply
 			// 
 			this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-			this.apply.Location = new System.Drawing.Point(67, 357);
+			this.apply.Location = new System.Drawing.Point(75, 368);
 			this.apply.Name = "apply";
 			this.apply.Size = new System.Drawing.Size(112, 25);
 			this.apply.TabIndex = 2;
@@ -310,7 +260,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
 			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
 			this.CancelButton = this.cancel;
-			this.ClientSize = new System.Drawing.Size(309, 392);
+			this.ClientSize = new System.Drawing.Size(317, 403);
 			this.Controls.Add(this.cancel);
 			this.Controls.Add(this.apply);
 			this.Controls.Add(groupBox2);
@@ -328,33 +278,28 @@ namespace CodeImp.DoomBuilder.Windows
 			this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.GridSetupForm_HelpRequested);
 			groupBox1.ResumeLayout(false);
 			groupBox1.PerformLayout();
-			((System.ComponentModel.ISupportInitialize)(this.gridsize)).EndInit();
 			groupBox2.ResumeLayout(false);
 			groupBox2.PerformLayout();
-			((System.ComponentModel.ISupportInitialize)(this.backscaley)).EndInit();
-			((System.ComponentModel.ISupportInitialize)(this.backscalex)).EndInit();
-			((System.ComponentModel.ISupportInitialize)(this.backoffsety)).EndInit();
-			((System.ComponentModel.ISupportInitialize)(this.backoffsetx)).EndInit();
 			this.ResumeLayout(false);
 
 		}
 
 		#endregion
 
-		private System.Windows.Forms.NumericUpDown gridsize;
 		private System.Windows.Forms.Panel backgroundimage;
 		private System.Windows.Forms.Button selecttexture;
 		private System.Windows.Forms.Button selectflat;
-		private System.Windows.Forms.NumericUpDown backoffsety;
-		private System.Windows.Forms.NumericUpDown backoffsetx;
 		private System.Windows.Forms.CheckBox showbackground;
 		private System.Windows.Forms.Button cancel;
 		private System.Windows.Forms.Button apply;
 		private System.Windows.Forms.Label backoffset;
 		private System.Windows.Forms.Button selectfile;
-		private System.Windows.Forms.NumericUpDown backscaley;
-		private System.Windows.Forms.NumericUpDown backscalex;
 		private System.Windows.Forms.Label backscale;
 		private System.Windows.Forms.OpenFileDialog browsefile;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox gridsize;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backscaley;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backscalex;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backoffsety;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backoffsetx;
 	}
 }
\ No newline at end of file
diff --git a/Source/Core/Windows/GridSetupForm.cs b/Source/Core/Windows/GridSetupForm.cs
index 4a67efbe8bdda2428bb28a5abaabb2d4f82eabc8..7cf80e7407202623ee67ed01656189f42360137a 100644
--- a/Source/Core/Windows/GridSetupForm.cs
+++ b/Source/Core/Windows/GridSetupForm.cs
@@ -47,7 +47,7 @@ namespace CodeImp.DoomBuilder.Windows
 			InitializeComponent();
 
 			// Show grid size
-			gridsize.Value = General.Map.Grid.GridSize;
+			gridsize.Text = General.Map.Grid.GridSize.ToString();
 			
 			// Background image?
 			if((General.Map.Grid.Background != null) &&
@@ -66,12 +66,12 @@ namespace CodeImp.DoomBuilder.Windows
 			}
 
 			// Show background offset
-			backoffsetx.Value = General.Map.Grid.BackgroundX;
-			backoffsety.Value = General.Map.Grid.BackgroundY;
+			backoffsetx.Text = General.Map.Grid.BackgroundX.ToString();
+			backoffsety.Text = General.Map.Grid.BackgroundY.ToString();
 			int scalex = (int)(General.Map.Grid.BackgroundScaleX * 100.0f);
 			int scaley = (int)(General.Map.Grid.BackgroundScaleY * 100.0f);
-			backscalex.Value = General.Clamp(scalex, (int)backscalex.Minimum, (int)backscalex.Maximum);
-			backscaley.Value = General.Clamp(scaley, (int)backscaley.Minimum, (int)backscaley.Maximum);
+			backscalex.Text = General.Clamp(scalex, 1, 10000).ToString();
+			backscaley.Text = General.Clamp(scaley, 1, 10000).ToString();
 		}
 
 		// Show Background changed
@@ -152,9 +152,11 @@ namespace CodeImp.DoomBuilder.Windows
 		private void apply_Click(object sender, EventArgs e)
 		{
 			// Apply
-			General.Map.Grid.SetGridSize((int)gridsize.Value);
-			General.Map.Grid.SetBackgroundView((int)backoffsetx.Value, (int)backoffsety.Value,
-							(float)backscalex.Value / 100.0f, (float)backscaley.Value / 100.0f);
+			General.Map.Grid.SetGridSize(gridsize.GetResult(General.Map.Grid.GridSize));
+			General.Map.Grid.SetBackgroundView(backoffsetx.GetResult(General.Map.Grid.BackgroundX),
+											   backoffsety.GetResult(General.Map.Grid.BackgroundY),
+											   backscalex.GetResult((int)(General.Map.Grid.BackgroundScaleX * 100.0f)) / 100.0f,
+											   backscaley.GetResult((int)(General.Map.Grid.BackgroundScaleY * 100.0f)) / 100.0f);
 			
 			// Background image?
 			if(showbackground.Checked)
diff --git a/Source/Core/Windows/GridSetupForm.resx b/Source/Core/Windows/GridSetupForm.resx
index de96a9bf48674b9e24b1caa71c255ec8b87ff43a..659d49d2f02e04897bfe8d0275b7a1f7a54aa4a9 100644
--- a/Source/Core/Windows/GridSetupForm.resx
+++ b/Source/Core/Windows/GridSetupForm.resx
@@ -144,19 +144,19 @@
   <metadata name="backscalex.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="backscale.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="backoffsety.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="selectfile.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="backoffsetx.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="showbackground.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="backscale.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="backoffsety.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="selectfile.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="backoffsetx.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="showbackground.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
   <metadata name="backoffset.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
diff --git a/Source/Core/Windows/LinedefEditForm.Designer.cs b/Source/Core/Windows/LinedefEditForm.Designer.cs
index 4efaf7d18e06d5fdccfeae590f71ab5bca599bd8..133ed86ff6ad85c83035c9d302f90f57afa817a3 100644
--- a/Source/Core/Windows/LinedefEditForm.Designer.cs
+++ b/Source/Core/Windows/LinedefEditForm.Designer.cs
@@ -61,7 +61,6 @@ namespace CodeImp.DoomBuilder.Windows
 			this.browseaction = new System.Windows.Forms.Button();
 			this.udmfpanel = new System.Windows.Forms.Panel();
 			this.udmfactivates = new CodeImp.DoomBuilder.Controls.CheckboxArrayControl();
-			this.tag = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.newtag = new System.Windows.Forms.Button();
 			this.settingsgroup = new System.Windows.Forms.GroupBox();
 			this.flags = new CodeImp.DoomBuilder.Controls.CheckboxArrayControl();
@@ -74,25 +73,26 @@ namespace CodeImp.DoomBuilder.Windows
 			this.frontside = new System.Windows.Forms.CheckBox();
 			this.frontgroup = new System.Windows.Forms.GroupBox();
 			this.customfrontbutton = new System.Windows.Forms.Button();
-			this.frontsector = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.frontlow = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
 			this.frontmid = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
 			this.fronthigh = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
-			this.frontoffsety = new CodeImp.DoomBuilder.Controls.NumericTextbox();
-			this.frontoffsetx = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.backside = new System.Windows.Forms.CheckBox();
 			this.backgroup = new System.Windows.Forms.GroupBox();
 			this.custombackbutton = new System.Windows.Forms.Button();
-			this.backsector = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.backlow = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
 			this.backmid = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
 			this.backhigh = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
-			this.backoffsety = new CodeImp.DoomBuilder.Controls.NumericTextbox();
-			this.backoffsetx = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.tabcustom = new System.Windows.Forms.TabPage();
 			this.fieldslist = new CodeImp.DoomBuilder.Controls.FieldsEditorControl();
 			this.heightpanel1 = new System.Windows.Forms.Panel();
 			this.heightpanel2 = new System.Windows.Forms.Panel();
+			this.tag = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.frontsector = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.frontoffsetx = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.frontoffsety = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.backoffsety = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.backoffsetx = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.backsector = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			label2 = new System.Windows.Forms.Label();
 			taglabel = new System.Windows.Forms.Label();
 			label3 = new System.Windows.Forms.Label();
@@ -143,7 +143,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// label3
 			// 
-			label3.Location = new System.Drawing.Point(234, 18);
+			label3.Location = new System.Drawing.Point(252, 18);
 			label3.Name = "label3";
 			label3.Size = new System.Drawing.Size(83, 16);
 			label3.TabIndex = 3;
@@ -152,7 +152,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// label4
 			// 
-			label4.Location = new System.Drawing.Point(325, 18);
+			label4.Location = new System.Drawing.Point(343, 18);
 			label4.Name = "label4";
 			label4.Size = new System.Drawing.Size(83, 16);
 			label4.TabIndex = 4;
@@ -161,7 +161,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// label5
 			// 
-			label5.Location = new System.Drawing.Point(416, 18);
+			label5.Location = new System.Drawing.Point(434, 18);
 			label5.Name = "label5";
 			label5.Size = new System.Drawing.Size(83, 16);
 			label5.TabIndex = 5;
@@ -188,7 +188,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// label8
 			// 
-			label8.Location = new System.Drawing.Point(416, 18);
+			label8.Location = new System.Drawing.Point(437, 18);
 			label8.Name = "label8";
 			label8.Size = new System.Drawing.Size(83, 16);
 			label8.TabIndex = 5;
@@ -197,7 +197,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// label9
 			// 
-			label9.Location = new System.Drawing.Point(325, 18);
+			label9.Location = new System.Drawing.Point(346, 18);
 			label9.Name = "label9";
 			label9.Size = new System.Drawing.Size(83, 16);
 			label9.TabIndex = 4;
@@ -206,7 +206,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// label10
 			// 
-			label10.Location = new System.Drawing.Point(234, 18);
+			label10.Location = new System.Drawing.Point(255, 18);
 			label10.Name = "label10";
 			label10.Size = new System.Drawing.Size(83, 16);
 			label10.TabIndex = 3;
@@ -244,7 +244,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
 			this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-			this.cancel.Location = new System.Drawing.Point(439, 592);
+			this.cancel.Location = new System.Drawing.Point(455, 592);
 			this.cancel.Name = "cancel";
 			this.cancel.Size = new System.Drawing.Size(112, 25);
 			this.cancel.TabIndex = 2;
@@ -255,7 +255,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// apply
 			// 
 			this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-			this.apply.Location = new System.Drawing.Point(320, 592);
+			this.apply.Location = new System.Drawing.Point(336, 592);
 			this.apply.Name = "apply";
 			this.apply.Size = new System.Drawing.Size(112, 25);
 			this.apply.TabIndex = 1;
@@ -275,7 +275,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.actiongroup.Controls.Add(this.udmfpanel);
 			this.actiongroup.Location = new System.Drawing.Point(8, 177);
 			this.actiongroup.Name = "actiongroup";
-			this.actiongroup.Size = new System.Drawing.Size(517, 281);
+			this.actiongroup.Size = new System.Drawing.Size(533, 281);
 			this.actiongroup.TabIndex = 1;
 			this.actiongroup.TabStop = false;
 			this.actiongroup.Text = " Action ";
@@ -294,7 +294,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.argspanel.Controls.Add(this.arg4label);
 			this.argspanel.Location = new System.Drawing.Point(6, 54);
 			this.argspanel.Name = "argspanel";
-			this.argspanel.Size = new System.Drawing.Size(505, 83);
+			this.argspanel.Size = new System.Drawing.Size(521, 83);
 			this.argspanel.TabIndex = 2;
 			this.argspanel.Visible = false;
 			// 
@@ -394,7 +394,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.hexenpanel.Controls.Add(activationlabel);
 			this.hexenpanel.Location = new System.Drawing.Point(6, 139);
 			this.hexenpanel.Name = "hexenpanel";
-			this.hexenpanel.Size = new System.Drawing.Size(505, 49);
+			this.hexenpanel.Size = new System.Drawing.Size(521, 49);
 			this.hexenpanel.TabIndex = 3;
 			this.hexenpanel.Visible = false;
 			// 
@@ -454,20 +454,9 @@ namespace CodeImp.DoomBuilder.Windows
 			this.udmfactivates.Size = new System.Drawing.Size(437, 123);
 			this.udmfactivates.TabIndex = 0;
 			// 
-			// tag
-			// 
-			this.tag.AllowDecimal = false;
-			this.tag.AllowNegative = false;
-			this.tag.AllowRelative = true;
-			this.tag.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.tag.Location = new System.Drawing.Point(62, 28);
-			this.tag.Name = "tag";
-			this.tag.Size = new System.Drawing.Size(68, 20);
-			this.tag.TabIndex = 0;
-			// 
 			// newtag
 			// 
-			this.newtag.Location = new System.Drawing.Point(136, 27);
+			this.newtag.Location = new System.Drawing.Point(149, 27);
 			this.newtag.Name = "newtag";
 			this.newtag.Size = new System.Drawing.Size(76, 23);
 			this.newtag.TabIndex = 1;
@@ -482,7 +471,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.settingsgroup.Controls.Add(this.flags);
 			this.settingsgroup.Location = new System.Drawing.Point(8, 8);
 			this.settingsgroup.Name = "settingsgroup";
-			this.settingsgroup.Size = new System.Drawing.Size(517, 163);
+			this.settingsgroup.Size = new System.Drawing.Size(533, 163);
 			this.settingsgroup.TabIndex = 0;
 			this.settingsgroup.TabStop = false;
 			this.settingsgroup.Text = " Settings ";
@@ -496,7 +485,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.flags.Columns = 3;
 			this.flags.Location = new System.Drawing.Point(18, 26);
 			this.flags.Name = "flags";
-			this.flags.Size = new System.Drawing.Size(493, 125);
+			this.flags.Size = new System.Drawing.Size(509, 125);
 			this.flags.TabIndex = 0;
 			// 
 			// checkBox1
@@ -521,7 +510,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabs.Margin = new System.Windows.Forms.Padding(1);
 			this.tabs.Name = "tabs";
 			this.tabs.SelectedIndex = 0;
-			this.tabs.Size = new System.Drawing.Size(541, 565);
+			this.tabs.Size = new System.Drawing.Size(557, 565);
 			this.tabs.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
 			this.tabs.TabIndex = 0;
 			// 
@@ -534,7 +523,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabproperties.Location = new System.Drawing.Point(4, 23);
 			this.tabproperties.Name = "tabproperties";
 			this.tabproperties.Padding = new System.Windows.Forms.Padding(5);
-			this.tabproperties.Size = new System.Drawing.Size(533, 538);
+			this.tabproperties.Size = new System.Drawing.Size(549, 538);
 			this.tabproperties.TabIndex = 0;
 			this.tabproperties.Text = "Properties";
 			this.tabproperties.UseVisualStyleBackColor = true;
@@ -548,7 +537,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.idgroup.Controls.Add(this.newtag);
 			this.idgroup.Location = new System.Drawing.Point(8, 464);
 			this.idgroup.Name = "idgroup";
-			this.idgroup.Size = new System.Drawing.Size(517, 66);
+			this.idgroup.Size = new System.Drawing.Size(533, 66);
 			this.idgroup.TabIndex = 2;
 			this.idgroup.TabStop = false;
 			this.idgroup.Text = " Identification ";
@@ -560,7 +549,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabsidedefs.Location = new System.Drawing.Point(4, 23);
 			this.tabsidedefs.Name = "tabsidedefs";
 			this.tabsidedefs.Padding = new System.Windows.Forms.Padding(5);
-			this.tabsidedefs.Size = new System.Drawing.Size(533, 538);
+			this.tabsidedefs.Size = new System.Drawing.Size(549, 538);
 			this.tabsidedefs.TabIndex = 1;
 			this.tabsidedefs.Text = "Sidedefs";
 			this.tabsidedefs.UseVisualStyleBackColor = true;
@@ -582,7 +571,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			this.splitter.Panel2.Controls.Add(this.backside);
 			this.splitter.Panel2.Controls.Add(this.backgroup);
-			this.splitter.Size = new System.Drawing.Size(523, 528);
+			this.splitter.Size = new System.Drawing.Size(539, 528);
 			this.splitter.SplitterDistance = 256;
 			this.splitter.TabIndex = 3;
 			// 
@@ -602,14 +591,14 @@ namespace CodeImp.DoomBuilder.Windows
 			this.frontgroup.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
 						| System.Windows.Forms.AnchorStyles.Left)
 						| System.Windows.Forms.AnchorStyles.Right)));
-			this.frontgroup.Controls.Add(this.customfrontbutton);
+			this.frontgroup.Controls.Add(this.frontoffsety);
+			this.frontgroup.Controls.Add(this.frontoffsetx);
 			this.frontgroup.Controls.Add(this.frontsector);
+			this.frontgroup.Controls.Add(this.customfrontbutton);
 			this.frontgroup.Controls.Add(label11);
 			this.frontgroup.Controls.Add(this.frontlow);
 			this.frontgroup.Controls.Add(this.frontmid);
 			this.frontgroup.Controls.Add(this.fronthigh);
-			this.frontgroup.Controls.Add(this.frontoffsety);
-			this.frontgroup.Controls.Add(this.frontoffsetx);
 			this.frontgroup.Controls.Add(label6);
 			this.frontgroup.Controls.Add(label5);
 			this.frontgroup.Controls.Add(label4);
@@ -617,14 +606,14 @@ namespace CodeImp.DoomBuilder.Windows
 			this.frontgroup.Enabled = false;
 			this.frontgroup.Location = new System.Drawing.Point(3, 3);
 			this.frontgroup.Name = "frontgroup";
-			this.frontgroup.Size = new System.Drawing.Size(517, 250);
+			this.frontgroup.Size = new System.Drawing.Size(533, 250);
 			this.frontgroup.TabIndex = 1;
 			this.frontgroup.TabStop = false;
 			this.frontgroup.Text = "     ";
 			// 
 			// customfrontbutton
 			// 
-			this.customfrontbutton.Location = new System.Drawing.Point(82, 124);
+			this.customfrontbutton.Location = new System.Drawing.Point(103, 124);
 			this.customfrontbutton.Name = "customfrontbutton";
 			this.customfrontbutton.Size = new System.Drawing.Size(115, 25);
 			this.customfrontbutton.TabIndex = 3;
@@ -633,21 +622,9 @@ namespace CodeImp.DoomBuilder.Windows
 			this.customfrontbutton.Visible = false;
 			this.customfrontbutton.Click += new System.EventHandler(this.customfrontbutton_Click);
 			// 
-			// frontsector
-			// 
-			this.frontsector.AllowDecimal = false;
-			this.frontsector.AllowNegative = false;
-			this.frontsector.AllowRelative = false;
-			this.frontsector.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.frontsector.Location = new System.Drawing.Point(103, 37);
-			this.frontsector.Name = "frontsector";
-			this.frontsector.Size = new System.Drawing.Size(94, 20);
-			this.frontsector.TabIndex = 0;
-			this.frontsector.Enter += new System.EventHandler(this.SelectAllText);
-			// 
 			// frontlow
 			// 
-			this.frontlow.Location = new System.Drawing.Point(416, 37);
+			this.frontlow.Location = new System.Drawing.Point(434, 37);
 			this.frontlow.Name = "frontlow";
 			this.frontlow.Required = false;
 			this.frontlow.Size = new System.Drawing.Size(83, 112);
@@ -656,7 +633,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// frontmid
 			// 
-			this.frontmid.Location = new System.Drawing.Point(325, 37);
+			this.frontmid.Location = new System.Drawing.Point(343, 37);
 			this.frontmid.Name = "frontmid";
 			this.frontmid.Required = false;
 			this.frontmid.Size = new System.Drawing.Size(83, 112);
@@ -665,37 +642,13 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// fronthigh
 			// 
-			this.fronthigh.Location = new System.Drawing.Point(234, 37);
+			this.fronthigh.Location = new System.Drawing.Point(252, 37);
 			this.fronthigh.Name = "fronthigh";
 			this.fronthigh.Required = false;
 			this.fronthigh.Size = new System.Drawing.Size(83, 112);
 			this.fronthigh.TabIndex = 4;
 			this.fronthigh.TextureName = "";
 			// 
-			// frontoffsety
-			// 
-			this.frontoffsety.AllowDecimal = false;
-			this.frontoffsety.AllowNegative = true;
-			this.frontoffsety.AllowRelative = true;
-			this.frontoffsety.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.frontoffsety.Location = new System.Drawing.Point(152, 76);
-			this.frontoffsety.Name = "frontoffsety";
-			this.frontoffsety.Size = new System.Drawing.Size(45, 20);
-			this.frontoffsety.TabIndex = 2;
-			this.frontoffsety.Enter += new System.EventHandler(this.SelectAllText);
-			// 
-			// frontoffsetx
-			// 
-			this.frontoffsetx.AllowDecimal = false;
-			this.frontoffsetx.AllowNegative = true;
-			this.frontoffsetx.AllowRelative = true;
-			this.frontoffsetx.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.frontoffsetx.Location = new System.Drawing.Point(103, 76);
-			this.frontoffsetx.Name = "frontoffsetx";
-			this.frontoffsetx.Size = new System.Drawing.Size(45, 20);
-			this.frontoffsetx.TabIndex = 1;
-			this.frontoffsetx.Enter += new System.EventHandler(this.SelectAllText);
-			// 
 			// backside
 			// 
 			this.backside.AutoSize = true;
@@ -712,14 +665,14 @@ namespace CodeImp.DoomBuilder.Windows
 			this.backgroup.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
 						| System.Windows.Forms.AnchorStyles.Left)
 						| System.Windows.Forms.AnchorStyles.Right)));
-			this.backgroup.Controls.Add(this.custombackbutton);
+			this.backgroup.Controls.Add(this.backoffsety);
+			this.backgroup.Controls.Add(this.backoffsetx);
 			this.backgroup.Controls.Add(this.backsector);
+			this.backgroup.Controls.Add(this.custombackbutton);
 			this.backgroup.Controls.Add(label12);
 			this.backgroup.Controls.Add(this.backlow);
 			this.backgroup.Controls.Add(this.backmid);
 			this.backgroup.Controls.Add(this.backhigh);
-			this.backgroup.Controls.Add(this.backoffsety);
-			this.backgroup.Controls.Add(this.backoffsetx);
 			this.backgroup.Controls.Add(label7);
 			this.backgroup.Controls.Add(label8);
 			this.backgroup.Controls.Add(label9);
@@ -727,14 +680,14 @@ namespace CodeImp.DoomBuilder.Windows
 			this.backgroup.Enabled = false;
 			this.backgroup.Location = new System.Drawing.Point(3, 3);
 			this.backgroup.Name = "backgroup";
-			this.backgroup.Size = new System.Drawing.Size(519, 262);
+			this.backgroup.Size = new System.Drawing.Size(535, 262);
 			this.backgroup.TabIndex = 1;
 			this.backgroup.TabStop = false;
 			this.backgroup.Text = "     ";
 			// 
 			// custombackbutton
 			// 
-			this.custombackbutton.Location = new System.Drawing.Point(82, 124);
+			this.custombackbutton.Location = new System.Drawing.Point(103, 124);
 			this.custombackbutton.Name = "custombackbutton";
 			this.custombackbutton.Size = new System.Drawing.Size(115, 25);
 			this.custombackbutton.TabIndex = 3;
@@ -743,21 +696,9 @@ namespace CodeImp.DoomBuilder.Windows
 			this.custombackbutton.Visible = false;
 			this.custombackbutton.Click += new System.EventHandler(this.custombackbutton_Click);
 			// 
-			// backsector
-			// 
-			this.backsector.AllowDecimal = false;
-			this.backsector.AllowNegative = false;
-			this.backsector.AllowRelative = false;
-			this.backsector.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.backsector.Location = new System.Drawing.Point(103, 37);
-			this.backsector.Name = "backsector";
-			this.backsector.Size = new System.Drawing.Size(94, 20);
-			this.backsector.TabIndex = 0;
-			this.backsector.Enter += new System.EventHandler(this.SelectAllText);
-			// 
 			// backlow
 			// 
-			this.backlow.Location = new System.Drawing.Point(416, 37);
+			this.backlow.Location = new System.Drawing.Point(437, 37);
 			this.backlow.Name = "backlow";
 			this.backlow.Required = false;
 			this.backlow.Size = new System.Drawing.Size(83, 112);
@@ -766,7 +707,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// backmid
 			// 
-			this.backmid.Location = new System.Drawing.Point(325, 37);
+			this.backmid.Location = new System.Drawing.Point(346, 37);
 			this.backmid.Name = "backmid";
 			this.backmid.Required = false;
 			this.backmid.Size = new System.Drawing.Size(83, 112);
@@ -775,37 +716,13 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// backhigh
 			// 
-			this.backhigh.Location = new System.Drawing.Point(234, 37);
+			this.backhigh.Location = new System.Drawing.Point(255, 37);
 			this.backhigh.Name = "backhigh";
 			this.backhigh.Required = false;
 			this.backhigh.Size = new System.Drawing.Size(83, 112);
 			this.backhigh.TabIndex = 4;
 			this.backhigh.TextureName = "";
 			// 
-			// backoffsety
-			// 
-			this.backoffsety.AllowDecimal = false;
-			this.backoffsety.AllowNegative = true;
-			this.backoffsety.AllowRelative = true;
-			this.backoffsety.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.backoffsety.Location = new System.Drawing.Point(152, 76);
-			this.backoffsety.Name = "backoffsety";
-			this.backoffsety.Size = new System.Drawing.Size(45, 20);
-			this.backoffsety.TabIndex = 2;
-			this.backoffsety.Enter += new System.EventHandler(this.SelectAllText);
-			// 
-			// backoffsetx
-			// 
-			this.backoffsetx.AllowDecimal = false;
-			this.backoffsetx.AllowNegative = true;
-			this.backoffsetx.AllowRelative = true;
-			this.backoffsetx.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.backoffsetx.Location = new System.Drawing.Point(103, 76);
-			this.backoffsetx.Name = "backoffsetx";
-			this.backoffsetx.Size = new System.Drawing.Size(45, 20);
-			this.backoffsetx.TabIndex = 1;
-			this.backoffsetx.Enter += new System.EventHandler(this.SelectAllText);
-			// 
 			// tabcustom
 			// 
 			this.tabcustom.Controls.Add(this.fieldslist);
@@ -849,13 +766,83 @@ namespace CodeImp.DoomBuilder.Windows
 			this.heightpanel2.TabIndex = 4;
 			this.heightpanel2.Visible = false;
 			// 
+			// tag
+			// 
+			this.tag.AllowNegative = false;
+			this.tag.AllowRelative = true;
+			this.tag.ButtonStep = 1;
+			this.tag.Location = new System.Drawing.Point(62, 26);
+			this.tag.Name = "tag";
+			this.tag.Size = new System.Drawing.Size(75, 24);
+			this.tag.TabIndex = 7;
+			// 
+			// frontsector
+			// 
+			this.frontsector.AllowNegative = false;
+			this.frontsector.AllowRelative = false;
+			this.frontsector.ButtonStep = 1;
+			this.frontsector.Location = new System.Drawing.Point(103, 35);
+			this.frontsector.Name = "frontsector";
+			this.frontsector.Size = new System.Drawing.Size(130, 24);
+			this.frontsector.TabIndex = 14;
+			// 
+			// frontoffsetx
+			// 
+			this.frontoffsetx.AllowNegative = true;
+			this.frontoffsetx.AllowRelative = true;
+			this.frontoffsetx.ButtonStep = 1;
+			this.frontoffsetx.Location = new System.Drawing.Point(103, 74);
+			this.frontoffsetx.Name = "frontoffsetx";
+			this.frontoffsetx.Size = new System.Drawing.Size(62, 24);
+			this.frontoffsetx.TabIndex = 15;
+			// 
+			// frontoffsety
+			// 
+			this.frontoffsety.AllowNegative = true;
+			this.frontoffsety.AllowRelative = true;
+			this.frontoffsety.ButtonStep = 1;
+			this.frontoffsety.Location = new System.Drawing.Point(171, 74);
+			this.frontoffsety.Name = "frontoffsety";
+			this.frontoffsety.Size = new System.Drawing.Size(62, 24);
+			this.frontoffsety.TabIndex = 16;
+			// 
+			// backoffsety
+			// 
+			this.backoffsety.AllowNegative = true;
+			this.backoffsety.AllowRelative = true;
+			this.backoffsety.ButtonStep = 1;
+			this.backoffsety.Location = new System.Drawing.Point(171, 74);
+			this.backoffsety.Name = "backoffsety";
+			this.backoffsety.Size = new System.Drawing.Size(62, 24);
+			this.backoffsety.TabIndex = 19;
+			// 
+			// backoffsetx
+			// 
+			this.backoffsetx.AllowNegative = true;
+			this.backoffsetx.AllowRelative = true;
+			this.backoffsetx.ButtonStep = 1;
+			this.backoffsetx.Location = new System.Drawing.Point(103, 74);
+			this.backoffsetx.Name = "backoffsetx";
+			this.backoffsetx.Size = new System.Drawing.Size(62, 24);
+			this.backoffsetx.TabIndex = 18;
+			// 
+			// backsector
+			// 
+			this.backsector.AllowNegative = false;
+			this.backsector.AllowRelative = false;
+			this.backsector.ButtonStep = 1;
+			this.backsector.Location = new System.Drawing.Point(103, 35);
+			this.backsector.Name = "backsector";
+			this.backsector.Size = new System.Drawing.Size(130, 24);
+			this.backsector.TabIndex = 17;
+			// 
 			// LinedefEditForm
 			// 
 			this.AcceptButton = this.apply;
 			this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
 			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
 			this.CancelButton = this.cancel;
-			this.ClientSize = new System.Drawing.Size(561, 627);
+			this.ClientSize = new System.Drawing.Size(577, 627);
 			this.Controls.Add(this.tabs);
 			this.Controls.Add(this.cancel);
 			this.Controls.Add(this.apply);
@@ -908,27 +895,20 @@ namespace CodeImp.DoomBuilder.Windows
 		private System.Windows.Forms.CheckBox checkBox1;
 		private System.Windows.Forms.Button browseaction;
 		private CodeImp.DoomBuilder.Controls.ActionSelectorControl action;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox tag;
 		private System.Windows.Forms.Button newtag;
 		private System.Windows.Forms.TabControl tabs;
 		private System.Windows.Forms.TabPage tabproperties;
 		private System.Windows.Forms.TabPage tabsidedefs;
 		private System.Windows.Forms.GroupBox frontgroup;
 		private System.Windows.Forms.CheckBox frontside;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox frontoffsety;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox frontoffsetx;
 		private System.Windows.Forms.CheckBox backside;
 		private System.Windows.Forms.GroupBox backgroup;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox backoffsety;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox backoffsetx;
 		private CodeImp.DoomBuilder.Controls.TextureSelectorControl frontlow;
 		private CodeImp.DoomBuilder.Controls.TextureSelectorControl frontmid;
 		private CodeImp.DoomBuilder.Controls.TextureSelectorControl fronthigh;
 		private CodeImp.DoomBuilder.Controls.TextureSelectorControl backlow;
 		private CodeImp.DoomBuilder.Controls.TextureSelectorControl backmid;
 		private CodeImp.DoomBuilder.Controls.TextureSelectorControl backhigh;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox backsector;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox frontsector;
 		private System.Windows.Forms.ComboBox activation;
 		private System.Windows.Forms.Panel udmfpanel;
 		private System.Windows.Forms.Panel hexenpanel;
@@ -952,5 +932,12 @@ namespace CodeImp.DoomBuilder.Windows
 		private System.Windows.Forms.Button custombackbutton;
 		private System.Windows.Forms.Panel heightpanel1;
 		private System.Windows.Forms.Panel heightpanel2;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox tag;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox frontoffsetx;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox frontsector;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox frontoffsety;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backoffsety;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backoffsetx;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backsector;
 	}
 }
\ No newline at end of file
diff --git a/Source/Core/Windows/LinedefEditForm.resx b/Source/Core/Windows/LinedefEditForm.resx
index 0f39f35b08b13f2fe5682bc9db7744ae5c6a1884..5b456d1cd24f41961592dfefe69b5464943988f0 100644
--- a/Source/Core/Windows/LinedefEditForm.resx
+++ b/Source/Core/Windows/LinedefEditForm.resx
@@ -255,9 +255,6 @@
   <metadata name="udmfactivates.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="tag.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
   <metadata name="newtag.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
@@ -279,6 +276,9 @@
   <metadata name="idgroup.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="tag.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="tabsidedefs.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
@@ -291,12 +291,18 @@
   <metadata name="frontgroup.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="customfrontbutton.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="frontoffsety.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="frontoffsetx.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
   <metadata name="frontsector.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="customfrontbutton.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="frontlow.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
@@ -306,22 +312,22 @@
   <metadata name="fronthigh.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="frontoffsety.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="backside.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="frontoffsetx.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="backgroup.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="backside.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="backoffsety.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="backgroup.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="backoffsetx.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="custombackbutton.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="backsector.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="backsector.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="custombackbutton.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
   <metadata name="backlow.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
@@ -333,12 +339,6 @@
   <metadata name="backhigh.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="backoffsety.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="backoffsetx.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
   <metadata name="tabcustom.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
diff --git a/Source/Core/Windows/PreferencesForm.Designer.cs b/Source/Core/Windows/PreferencesForm.Designer.cs
index 0e0dc875475bf377faa6c2837d86bee73e89fb56..b211ebc7b019ee8a1b5efcb9aeb072578db0efdc 100644
--- a/Source/Core/Windows/PreferencesForm.Designer.cs
+++ b/Source/Core/Windows/PreferencesForm.Designer.cs
@@ -60,7 +60,6 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabinterface = new System.Windows.Forms.TabPage();
 			this.groupBox3 = new System.Windows.Forms.GroupBox();
 			this.scriptautoindent = new System.Windows.Forms.CheckBox();
-			this.scripttabwidth = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.label10 = new System.Windows.Forms.Label();
 			this.scriptontop = new System.Windows.Forms.CheckBox();
 			this.panel1 = new System.Windows.Forms.Panel();
@@ -97,17 +96,18 @@ namespace CodeImp.DoomBuilder.Windows
 			this.actionkey = new System.Windows.Forms.TextBox();
 			this.actiondescription = new System.Windows.Forms.Label();
 			this.tabcolors = new System.Windows.Forms.TabPage();
+			this.appearancegroup1 = new System.Windows.Forms.GroupBox();
+			this.label2 = new System.Windows.Forms.Label();
 			this.animatevisualselection = new System.Windows.Forms.CheckBox();
+			this.blackbrowsers = new System.Windows.Forms.CheckBox();
 			this.squarethings = new System.Windows.Forms.CheckBox();
+			this.doublesidedalphalabel = new System.Windows.Forms.Label();
 			this.visualbilinear = new System.Windows.Forms.CheckBox();
 			this.classicbilinear = new System.Windows.Forms.CheckBox();
+			this.imagebrightnesslabel = new System.Windows.Forms.Label();
 			this.qualitydisplay = new System.Windows.Forms.CheckBox();
-			this.imagebrightness = new Dotnetrix.Controls.TrackBar();
 			this.doublesidedalpha = new Dotnetrix.Controls.TrackBar();
-			this.imagebrightnesslabel = new System.Windows.Forms.Label();
-			this.doublesidedalphalabel = new System.Windows.Forms.Label();
-			this.label2 = new System.Windows.Forms.Label();
-			this.blackbrowsers = new System.Windows.Forms.CheckBox();
+			this.imagebrightness = new Dotnetrix.Controls.TrackBar();
 			this.colorsgroup3 = new System.Windows.Forms.GroupBox();
 			this.colorconstants = new CodeImp.DoomBuilder.Controls.ColorControl();
 			this.colorliterals = new CodeImp.DoomBuilder.Controls.ColorControl();
@@ -119,7 +119,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabpasting = new System.Windows.Forms.TabPage();
 			this.label16 = new System.Windows.Forms.Label();
 			this.pasteoptions = new CodeImp.DoomBuilder.Controls.PasteOptionsControl();
-			this.appearancegroup1 = new System.Windows.Forms.GroupBox();
+			this.scripttabwidth = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			label7 = new System.Windows.Forms.Label();
 			label6 = new System.Windows.Forms.Label();
 			label5 = new System.Windows.Forms.Label();
@@ -141,11 +141,11 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabkeys.SuspendLayout();
 			this.actioncontrolpanel.SuspendLayout();
 			this.tabcolors.SuspendLayout();
-			((System.ComponentModel.ISupportInitialize)(this.imagebrightness)).BeginInit();
+			this.appearancegroup1.SuspendLayout();
 			((System.ComponentModel.ISupportInitialize)(this.doublesidedalpha)).BeginInit();
+			((System.ComponentModel.ISupportInitialize)(this.imagebrightness)).BeginInit();
 			this.colorsgroup3.SuspendLayout();
 			this.tabpasting.SuspendLayout();
-			this.appearancegroup1.SuspendLayout();
 			this.SuspendLayout();
 			// 
 			// label7
@@ -495,8 +495,8 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// groupBox3
 			// 
-			this.groupBox3.Controls.Add(this.scriptautoindent);
 			this.groupBox3.Controls.Add(this.scripttabwidth);
+			this.groupBox3.Controls.Add(this.scriptautoindent);
 			this.groupBox3.Controls.Add(this.label10);
 			this.groupBox3.Controls.Add(this.scriptontop);
 			this.groupBox3.Controls.Add(this.panel1);
@@ -522,17 +522,6 @@ namespace CodeImp.DoomBuilder.Windows
 			this.scriptautoindent.Text = "Auto-indent";
 			this.scriptautoindent.UseVisualStyleBackColor = true;
 			// 
-			// scripttabwidth
-			// 
-			this.scripttabwidth.AllowDecimal = false;
-			this.scripttabwidth.AllowNegative = false;
-			this.scripttabwidth.AllowRelative = false;
-			this.scripttabwidth.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.scripttabwidth.Location = new System.Drawing.Point(80, 193);
-			this.scripttabwidth.Name = "scripttabwidth";
-			this.scripttabwidth.Size = new System.Drawing.Size(67, 20);
-			this.scripttabwidth.TabIndex = 20;
-			// 
 			// label10
 			// 
 			this.label10.AutoSize = true;
@@ -959,6 +948,40 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabcolors.Text = "Appearance";
 			this.tabcolors.UseVisualStyleBackColor = true;
 			// 
+			// appearancegroup1
+			// 
+			this.appearancegroup1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+						| System.Windows.Forms.AnchorStyles.Left)
+						| System.Windows.Forms.AnchorStyles.Right)));
+			this.appearancegroup1.Controls.Add(this.label2);
+			this.appearancegroup1.Controls.Add(this.animatevisualselection);
+			this.appearancegroup1.Controls.Add(this.blackbrowsers);
+			this.appearancegroup1.Controls.Add(this.squarethings);
+			this.appearancegroup1.Controls.Add(this.doublesidedalphalabel);
+			this.appearancegroup1.Controls.Add(this.visualbilinear);
+			this.appearancegroup1.Controls.Add(label1);
+			this.appearancegroup1.Controls.Add(this.classicbilinear);
+			this.appearancegroup1.Controls.Add(this.imagebrightnesslabel);
+			this.appearancegroup1.Controls.Add(this.qualitydisplay);
+			this.appearancegroup1.Controls.Add(this.doublesidedalpha);
+			this.appearancegroup1.Controls.Add(this.imagebrightness);
+			this.appearancegroup1.Location = new System.Drawing.Point(199, 191);
+			this.appearancegroup1.Name = "appearancegroup1";
+			this.appearancegroup1.Size = new System.Drawing.Size(446, 250);
+			this.appearancegroup1.TabIndex = 24;
+			this.appearancegroup1.TabStop = false;
+			this.appearancegroup1.Text = " Additional Options ";
+			// 
+			// label2
+			// 
+			this.label2.AutoSize = true;
+			this.label2.Location = new System.Drawing.Point(23, 40);
+			this.label2.Name = "label2";
+			this.label2.Size = new System.Drawing.Size(147, 14);
+			this.label2.TabIndex = 14;
+			this.label2.Text = "Passable lines transparency:";
+			this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight;
+			// 
 			// animatevisualselection
 			// 
 			this.animatevisualselection.AutoSize = true;
@@ -969,6 +992,16 @@ namespace CodeImp.DoomBuilder.Windows
 			this.animatevisualselection.Text = "Animate selection in visual modes";
 			this.animatevisualselection.UseVisualStyleBackColor = true;
 			// 
+			// blackbrowsers
+			// 
+			this.blackbrowsers.AutoSize = true;
+			this.blackbrowsers.Location = new System.Drawing.Point(26, 148);
+			this.blackbrowsers.Name = "blackbrowsers";
+			this.blackbrowsers.Size = new System.Drawing.Size(199, 18);
+			this.blackbrowsers.TabIndex = 4;
+			this.blackbrowsers.Text = "Black background in image browser";
+			this.blackbrowsers.UseVisualStyleBackColor = true;
+			// 
 			// squarethings
 			// 
 			this.squarethings.AutoSize = true;
@@ -979,6 +1012,15 @@ namespace CodeImp.DoomBuilder.Windows
 			this.squarethings.Text = "Square things";
 			this.squarethings.UseVisualStyleBackColor = true;
 			// 
+			// doublesidedalphalabel
+			// 
+			this.doublesidedalphalabel.AutoSize = true;
+			this.doublesidedalphalabel.Location = new System.Drawing.Point(337, 40);
+			this.doublesidedalphalabel.Name = "doublesidedalphalabel";
+			this.doublesidedalphalabel.Size = new System.Drawing.Size(23, 14);
+			this.doublesidedalphalabel.TabIndex = 16;
+			this.doublesidedalphalabel.Text = "0%";
+			// 
 			// visualbilinear
 			// 
 			this.visualbilinear.AutoSize = true;
@@ -999,6 +1041,15 @@ namespace CodeImp.DoomBuilder.Windows
 			this.classicbilinear.Text = "Bilinear filtering in classic modes";
 			this.classicbilinear.UseVisualStyleBackColor = true;
 			// 
+			// imagebrightnesslabel
+			// 
+			this.imagebrightnesslabel.AutoSize = true;
+			this.imagebrightnesslabel.Location = new System.Drawing.Point(337, 94);
+			this.imagebrightnesslabel.Name = "imagebrightnesslabel";
+			this.imagebrightnesslabel.Size = new System.Drawing.Size(31, 14);
+			this.imagebrightnesslabel.TabIndex = 22;
+			this.imagebrightnesslabel.Text = "+ 0 y";
+			// 
 			// qualitydisplay
 			// 
 			this.qualitydisplay.AutoSize = true;
@@ -1009,16 +1060,6 @@ namespace CodeImp.DoomBuilder.Windows
 			this.qualitydisplay.Text = "High quality display rendering";
 			this.qualitydisplay.UseVisualStyleBackColor = true;
 			// 
-			// imagebrightness
-			// 
-			this.imagebrightness.LargeChange = 3;
-			this.imagebrightness.Location = new System.Drawing.Point(176, 81);
-			this.imagebrightness.Name = "imagebrightness";
-			this.imagebrightness.Size = new System.Drawing.Size(154, 42);
-			this.imagebrightness.TabIndex = 3;
-			this.imagebrightness.TickStyle = System.Windows.Forms.TickStyle.Both;
-			this.imagebrightness.ValueChanged += new System.EventHandler(this.imagebrightness_ValueChanged);
-			// 
 			// doublesidedalpha
 			// 
 			this.doublesidedalpha.LargeChange = 3;
@@ -1029,43 +1070,15 @@ namespace CodeImp.DoomBuilder.Windows
 			this.doublesidedalpha.TickStyle = System.Windows.Forms.TickStyle.Both;
 			this.doublesidedalpha.ValueChanged += new System.EventHandler(this.doublesidedalpha_ValueChanged);
 			// 
-			// imagebrightnesslabel
-			// 
-			this.imagebrightnesslabel.AutoSize = true;
-			this.imagebrightnesslabel.Location = new System.Drawing.Point(337, 94);
-			this.imagebrightnesslabel.Name = "imagebrightnesslabel";
-			this.imagebrightnesslabel.Size = new System.Drawing.Size(31, 14);
-			this.imagebrightnesslabel.TabIndex = 22;
-			this.imagebrightnesslabel.Text = "+ 0 y";
-			// 
-			// doublesidedalphalabel
-			// 
-			this.doublesidedalphalabel.AutoSize = true;
-			this.doublesidedalphalabel.Location = new System.Drawing.Point(337, 40);
-			this.doublesidedalphalabel.Name = "doublesidedalphalabel";
-			this.doublesidedalphalabel.Size = new System.Drawing.Size(23, 14);
-			this.doublesidedalphalabel.TabIndex = 16;
-			this.doublesidedalphalabel.Text = "0%";
-			// 
-			// label2
-			// 
-			this.label2.AutoSize = true;
-			this.label2.Location = new System.Drawing.Point(23, 40);
-			this.label2.Name = "label2";
-			this.label2.Size = new System.Drawing.Size(147, 14);
-			this.label2.TabIndex = 14;
-			this.label2.Text = "Passable lines transparency:";
-			this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight;
-			// 
-			// blackbrowsers
+			// imagebrightness
 			// 
-			this.blackbrowsers.AutoSize = true;
-			this.blackbrowsers.Location = new System.Drawing.Point(26, 148);
-			this.blackbrowsers.Name = "blackbrowsers";
-			this.blackbrowsers.Size = new System.Drawing.Size(199, 18);
-			this.blackbrowsers.TabIndex = 4;
-			this.blackbrowsers.Text = "Black background in image browser";
-			this.blackbrowsers.UseVisualStyleBackColor = true;
+			this.imagebrightness.LargeChange = 3;
+			this.imagebrightness.Location = new System.Drawing.Point(176, 81);
+			this.imagebrightness.Name = "imagebrightness";
+			this.imagebrightness.Size = new System.Drawing.Size(154, 42);
+			this.imagebrightness.TabIndex = 3;
+			this.imagebrightness.TickStyle = System.Windows.Forms.TickStyle.Both;
+			this.imagebrightness.ValueChanged += new System.EventHandler(this.imagebrightness_ValueChanged);
 			// 
 			// colorsgroup3
 			// 
@@ -1202,29 +1215,17 @@ namespace CodeImp.DoomBuilder.Windows
 			this.pasteoptions.Size = new System.Drawing.Size(637, 388);
 			this.pasteoptions.TabIndex = 0;
 			// 
-			// appearancegroup1
+			// scripttabwidth
 			// 
-			this.appearancegroup1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-						| System.Windows.Forms.AnchorStyles.Left)
-						| System.Windows.Forms.AnchorStyles.Right)));
-			this.appearancegroup1.Controls.Add(this.label2);
-			this.appearancegroup1.Controls.Add(this.animatevisualselection);
-			this.appearancegroup1.Controls.Add(this.blackbrowsers);
-			this.appearancegroup1.Controls.Add(this.squarethings);
-			this.appearancegroup1.Controls.Add(this.doublesidedalphalabel);
-			this.appearancegroup1.Controls.Add(this.visualbilinear);
-			this.appearancegroup1.Controls.Add(label1);
-			this.appearancegroup1.Controls.Add(this.classicbilinear);
-			this.appearancegroup1.Controls.Add(this.imagebrightnesslabel);
-			this.appearancegroup1.Controls.Add(this.qualitydisplay);
-			this.appearancegroup1.Controls.Add(this.doublesidedalpha);
-			this.appearancegroup1.Controls.Add(this.imagebrightness);
-			this.appearancegroup1.Location = new System.Drawing.Point(199, 191);
-			this.appearancegroup1.Name = "appearancegroup1";
-			this.appearancegroup1.Size = new System.Drawing.Size(446, 250);
-			this.appearancegroup1.TabIndex = 24;
-			this.appearancegroup1.TabStop = false;
-			this.appearancegroup1.Text = " Additional Options ";
+			this.scripttabwidth.AllowDecimal = false;
+			this.scripttabwidth.AllowNegative = false;
+			this.scripttabwidth.AllowRelative = false;
+			this.scripttabwidth.ButtonStep = 2;
+			this.scripttabwidth.Location = new System.Drawing.Point(76, 191);
+			this.scripttabwidth.Name = "scripttabwidth";
+			this.scripttabwidth.Size = new System.Drawing.Size(71, 24);
+			this.scripttabwidth.StepValues = null;
+			this.scripttabwidth.TabIndex = 22;
 			// 
 			// PreferencesForm
 			// 
@@ -1268,12 +1269,12 @@ namespace CodeImp.DoomBuilder.Windows
 			this.actioncontrolpanel.ResumeLayout(false);
 			this.actioncontrolpanel.PerformLayout();
 			this.tabcolors.ResumeLayout(false);
-			((System.ComponentModel.ISupportInitialize)(this.imagebrightness)).EndInit();
+			this.appearancegroup1.ResumeLayout(false);
+			this.appearancegroup1.PerformLayout();
 			((System.ComponentModel.ISupportInitialize)(this.doublesidedalpha)).EndInit();
+			((System.ComponentModel.ISupportInitialize)(this.imagebrightness)).EndInit();
 			this.colorsgroup3.ResumeLayout(false);
 			this.tabpasting.ResumeLayout(false);
-			this.appearancegroup1.ResumeLayout(false);
-			this.appearancegroup1.PerformLayout();
 			this.ResumeLayout(false);
 
 		}
@@ -1360,11 +1361,11 @@ namespace CodeImp.DoomBuilder.Windows
 		private System.Windows.Forms.Label label15;
 		private System.Windows.Forms.CheckBox animatevisualselection;
 		private System.Windows.Forms.Label label10;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox scripttabwidth;
 		private System.Windows.Forms.CheckBox scriptautoindent;
 		private System.Windows.Forms.TabPage tabpasting;
 		private CodeImp.DoomBuilder.Controls.PasteOptionsControl pasteoptions;
 		private System.Windows.Forms.Label label16;
 		private System.Windows.Forms.GroupBox appearancegroup1;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox scripttabwidth;
 	}
 }
\ No newline at end of file
diff --git a/Source/Core/Windows/PreferencesForm.resx b/Source/Core/Windows/PreferencesForm.resx
index 35e2d6203fd85937d826b98d4d4df8ef8c785f35..aff45f2b621eaa04d602eafa8ff8e49e8af35ce6 100644
--- a/Source/Core/Windows/PreferencesForm.resx
+++ b/Source/Core/Windows/PreferencesForm.resx
@@ -222,10 +222,10 @@
   <metadata name="groupBox3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="scriptautoindent.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="scripttabwidth.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="scripttabwidth.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="scriptautoindent.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
   <metadata name="label10.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
diff --git a/Source/Core/Windows/SectorEditForm.Designer.cs b/Source/Core/Windows/SectorEditForm.Designer.cs
index f6ccae37fc696e70c6780b8be64a075a32e246bb..caa19f342d310cdaf7713c8d9fc08c8382780276 100644
--- a/Source/Core/Windows/SectorEditForm.Designer.cs
+++ b/Source/Core/Windows/SectorEditForm.Designer.cs
@@ -40,17 +40,17 @@ namespace CodeImp.DoomBuilder.Windows
 			System.Windows.Forms.Label label2;
 			System.Windows.Forms.Label label4;
 			System.Windows.Forms.Label label6;
-			this.tag = new CodeImp.DoomBuilder.Controls.NumericTextbox();
+			this.tag = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			this.newtag = new System.Windows.Forms.Button();
+			this.brightness = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			this.browseeffect = new System.Windows.Forms.Button();
-			this.brightness = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.effect = new CodeImp.DoomBuilder.Controls.ActionSelectorControl();
+			this.floorheight = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.ceilingheight = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			this.sectorheight = new System.Windows.Forms.Label();
 			this.sectorheightlabel = new System.Windows.Forms.Label();
-			this.floorheight = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.floortex = new CodeImp.DoomBuilder.Controls.FlatSelectorControl();
 			this.ceilingtex = new CodeImp.DoomBuilder.Controls.FlatSelectorControl();
-			this.ceilingheight = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.cancel = new System.Windows.Forms.Button();
 			this.apply = new System.Windows.Forms.Button();
 			this.tabs = new System.Windows.Forms.TabControl();
@@ -113,14 +113,13 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// tag
 			// 
-			this.tag.AllowDecimal = false;
 			this.tag.AllowNegative = false;
 			this.tag.AllowRelative = true;
-			this.tag.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.tag.Location = new System.Drawing.Point(89, 28);
+			this.tag.ButtonStep = 1;
+			this.tag.Location = new System.Drawing.Point(89, 26);
 			this.tag.Name = "tag";
-			this.tag.Size = new System.Drawing.Size(53, 20);
-			this.tag.TabIndex = 0;
+			this.tag.Size = new System.Drawing.Size(73, 24);
+			this.tag.TabIndex = 25;
 			// 
 			// taglabel
 			// 
@@ -133,7 +132,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			// newtag
 			// 
-			this.newtag.Location = new System.Drawing.Point(148, 27);
+			this.newtag.Location = new System.Drawing.Point(174, 27);
 			this.newtag.Name = "newtag";
 			this.newtag.Size = new System.Drawing.Size(76, 23);
 			this.newtag.TabIndex = 1;
@@ -145,8 +144,8 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			groupeffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
 						| System.Windows.Forms.AnchorStyles.Right)));
-			groupeffect.Controls.Add(this.browseeffect);
 			groupeffect.Controls.Add(this.brightness);
+			groupeffect.Controls.Add(this.browseeffect);
 			groupeffect.Controls.Add(label9);
 			groupeffect.Controls.Add(this.effect);
 			groupeffect.Controls.Add(label8);
@@ -157,6 +156,16 @@ namespace CodeImp.DoomBuilder.Windows
 			groupeffect.TabStop = false;
 			groupeffect.Text = " Effects ";
 			// 
+			// brightness
+			// 
+			this.brightness.AllowNegative = false;
+			this.brightness.AllowRelative = true;
+			this.brightness.ButtonStep = 8;
+			this.brightness.Location = new System.Drawing.Point(89, 61);
+			this.brightness.Name = "brightness";
+			this.brightness.Size = new System.Drawing.Size(73, 24);
+			this.brightness.TabIndex = 24;
+			// 
 			// browseeffect
 			// 
 			this.browseeffect.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -170,17 +179,6 @@ namespace CodeImp.DoomBuilder.Windows
 			this.browseeffect.UseVisualStyleBackColor = true;
 			this.browseeffect.Click += new System.EventHandler(this.browseeffect_Click);
 			// 
-			// brightness
-			// 
-			this.brightness.AllowDecimal = false;
-			this.brightness.AllowNegative = false;
-			this.brightness.AllowRelative = true;
-			this.brightness.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.brightness.Location = new System.Drawing.Point(89, 63);
-			this.brightness.Name = "brightness";
-			this.brightness.Size = new System.Drawing.Size(53, 20);
-			this.brightness.TabIndex = 2;
-			// 
 			// label9
 			// 
 			label9.AutoSize = true;
@@ -215,16 +213,16 @@ namespace CodeImp.DoomBuilder.Windows
 			// 
 			groupfloorceiling.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
 						| System.Windows.Forms.AnchorStyles.Right)));
+			groupfloorceiling.Controls.Add(this.floorheight);
+			groupfloorceiling.Controls.Add(this.ceilingheight);
 			groupfloorceiling.Controls.Add(this.sectorheight);
 			groupfloorceiling.Controls.Add(this.sectorheightlabel);
 			groupfloorceiling.Controls.Add(label5);
-			groupfloorceiling.Controls.Add(this.floorheight);
 			groupfloorceiling.Controls.Add(label2);
 			groupfloorceiling.Controls.Add(label4);
 			groupfloorceiling.Controls.Add(this.floortex);
 			groupfloorceiling.Controls.Add(this.ceilingtex);
 			groupfloorceiling.Controls.Add(label6);
-			groupfloorceiling.Controls.Add(this.ceilingheight);
 			groupfloorceiling.Location = new System.Drawing.Point(7, 6);
 			groupfloorceiling.Name = "groupfloorceiling";
 			groupfloorceiling.Size = new System.Drawing.Size(436, 161);
@@ -232,10 +230,32 @@ namespace CodeImp.DoomBuilder.Windows
 			groupfloorceiling.TabStop = false;
 			groupfloorceiling.Text = "Floor and Ceiling ";
 			// 
+			// floorheight
+			// 
+			this.floorheight.AllowNegative = true;
+			this.floorheight.AllowRelative = true;
+			this.floorheight.ButtonStep = 8;
+			this.floorheight.Location = new System.Drawing.Point(112, 69);
+			this.floorheight.Name = "floorheight";
+			this.floorheight.Size = new System.Drawing.Size(88, 24);
+			this.floorheight.TabIndex = 23;
+			this.floorheight.WhenTextChanged += new System.EventHandler(this.floorheight_TextChanged);
+			// 
+			// ceilingheight
+			// 
+			this.ceilingheight.AllowNegative = true;
+			this.ceilingheight.AllowRelative = true;
+			this.ceilingheight.ButtonStep = 8;
+			this.ceilingheight.Location = new System.Drawing.Point(112, 35);
+			this.ceilingheight.Name = "ceilingheight";
+			this.ceilingheight.Size = new System.Drawing.Size(88, 24);
+			this.ceilingheight.TabIndex = 22;
+			this.ceilingheight.WhenTextChanged += new System.EventHandler(this.ceilingheight_TextChanged);
+			// 
 			// sectorheight
 			// 
 			this.sectorheight.AutoSize = true;
-			this.sectorheight.Location = new System.Drawing.Point(113, 99);
+			this.sectorheight.Location = new System.Drawing.Point(113, 109);
 			this.sectorheight.Name = "sectorheight";
 			this.sectorheight.Size = new System.Drawing.Size(13, 14);
 			this.sectorheight.TabIndex = 21;
@@ -244,7 +264,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// sectorheightlabel
 			// 
 			this.sectorheightlabel.AutoSize = true;
-			this.sectorheightlabel.Location = new System.Drawing.Point(32, 99);
+			this.sectorheightlabel.Location = new System.Drawing.Point(32, 109);
 			this.sectorheightlabel.Name = "sectorheightlabel";
 			this.sectorheightlabel.Size = new System.Drawing.Size(74, 14);
 			this.sectorheightlabel.TabIndex = 20;
@@ -253,24 +273,12 @@ namespace CodeImp.DoomBuilder.Windows
 			// label5
 			// 
 			label5.AutoSize = true;
-			label5.Location = new System.Drawing.Point(40, 69);
+			label5.Location = new System.Drawing.Point(40, 74);
 			label5.Name = "label5";
 			label5.Size = new System.Drawing.Size(66, 14);
 			label5.TabIndex = 17;
 			label5.Text = "Floor height:";
 			// 
-			// floorheight
-			// 
-			this.floorheight.AllowDecimal = false;
-			this.floorheight.AllowNegative = true;
-			this.floorheight.AllowRelative = true;
-			this.floorheight.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.floorheight.Location = new System.Drawing.Point(112, 66);
-			this.floorheight.Name = "floorheight";
-			this.floorheight.Size = new System.Drawing.Size(68, 20);
-			this.floorheight.TabIndex = 1;
-			this.floorheight.TextChanged += new System.EventHandler(this.floorheight_TextChanged);
-			// 
 			// label2
 			// 
 			label2.Location = new System.Drawing.Point(237, 18);
@@ -314,18 +322,6 @@ namespace CodeImp.DoomBuilder.Windows
 			label6.TabIndex = 19;
 			label6.Text = "Ceiling height:";
 			// 
-			// ceilingheight
-			// 
-			this.ceilingheight.AllowDecimal = false;
-			this.ceilingheight.AllowNegative = true;
-			this.ceilingheight.AllowRelative = true;
-			this.ceilingheight.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.ceilingheight.Location = new System.Drawing.Point(112, 37);
-			this.ceilingheight.Name = "ceilingheight";
-			this.ceilingheight.Size = new System.Drawing.Size(68, 20);
-			this.ceilingheight.TabIndex = 0;
-			this.ceilingheight.TextChanged += new System.EventHandler(this.ceilingheight_TextChanged);
-			// 
 			// cancel
 			// 
 			this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
@@ -466,14 +462,14 @@ namespace CodeImp.DoomBuilder.Windows
 		private CodeImp.DoomBuilder.Controls.FlatSelectorControl flatSelectorControl2;
 		private CodeImp.DoomBuilder.Controls.FlatSelectorControl flatSelectorControl1;
 		private CodeImp.DoomBuilder.Controls.FieldsEditorControl fieldslist;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox ceilingheight;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox floorheight;
 		private System.Windows.Forms.Label sectorheight;
 		private CodeImp.DoomBuilder.Controls.ActionSelectorControl effect;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox brightness;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox tag;
 		private System.Windows.Forms.Button newtag;
 		private System.Windows.Forms.Button browseeffect;
 		private System.Windows.Forms.Label sectorheightlabel;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox ceilingheight;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox floorheight;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox brightness;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox tag;
 	}
 }
\ No newline at end of file
diff --git a/Source/Core/Windows/SectorEditForm.cs b/Source/Core/Windows/SectorEditForm.cs
index 5ebc0bb340365741dfd8be1aa573bbd37d50d7ad..27c96896c3b18da0b2e4e058863f5c22c3097eb7 100644
--- a/Source/Core/Windows/SectorEditForm.cs
+++ b/Source/Core/Windows/SectorEditForm.cs
@@ -55,6 +55,9 @@ namespace CodeImp.DoomBuilder.Windows
 			floortex.Initialize();
 			ceilingtex.Initialize();
 
+			// Set steps for brightness field
+			brightness.StepValues = General.Map.Config.BrightnessLevels;
+
 			// Custom fields?
 			if(!General.Map.FormatInterface.HasCustomFields)
 				tabs.TabPages.Remove(tabcustom);
diff --git a/Source/Core/Windows/SectorEditForm.resx b/Source/Core/Windows/SectorEditForm.resx
index 62ad1db5c361899248ffe7eab63af60fca42efa2..e40d81329e6150f49226ab28aa8ca63414349e41 100644
--- a/Source/Core/Windows/SectorEditForm.resx
+++ b/Source/Core/Windows/SectorEditForm.resx
@@ -117,40 +117,136 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="label3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label3.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="groupaction.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="groupaction.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="tag.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="taglabel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="taglabel.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="newtag.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="groupeffect.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="groupeffect.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="brightness.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="browseeffect.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="label9.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label9.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="effect.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="label8.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label8.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="groupfloorceiling.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="groupfloorceiling.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="floorheight.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="ceilingheight.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="sectorheight.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="sectorheightlabel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="label5.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label5.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="label4.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label4.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="floortex.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="ceilingtex.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="label6.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label6.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="cancel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="apply.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="tabs.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="tabproperties.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="tabcustom.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="fieldslist.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="flatSelectorControl2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="flatSelectorControl1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
 </root>
\ No newline at end of file
diff --git a/Source/Core/Windows/ThingEditForm.Designer.cs b/Source/Core/Windows/ThingEditForm.Designer.cs
index 58ac88acb6e7bfe89ccd9b558d76066bb92df638..835cbac04e3386a8f4375c1a376e221a84a33e2f 100644
--- a/Source/Core/Windows/ThingEditForm.Designer.cs
+++ b/Source/Core/Windows/ThingEditForm.Designer.cs
@@ -34,9 +34,8 @@ namespace CodeImp.DoomBuilder.Windows
 			System.Windows.Forms.Label taglabel;
 			System.Windows.Forms.Label label7;
 			this.thingtype = new CodeImp.DoomBuilder.Controls.ThingBrowserControl();
-			this.height = new CodeImp.DoomBuilder.Controls.NumericTextbox();
+			this.angle = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			this.heightlabel = new System.Windows.Forms.Label();
-			this.angle = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.anglecontrol = new CodeImp.DoomBuilder.Controls.AngleControl();
 			this.tabs = new System.Windows.Forms.TabControl();
 			this.tabproperties = new System.Windows.Forms.TabPage();
@@ -60,12 +59,13 @@ namespace CodeImp.DoomBuilder.Windows
 			this.browseaction = new System.Windows.Forms.Button();
 			this.doompanel = new System.Windows.Forms.Panel();
 			this.groupBox3 = new System.Windows.Forms.GroupBox();
-			this.tag = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.newtag = new System.Windows.Forms.Button();
 			this.tabcustom = new System.Windows.Forms.TabPage();
 			this.fieldslist = new CodeImp.DoomBuilder.Controls.FieldsEditorControl();
 			this.cancel = new System.Windows.Forms.Button();
 			this.apply = new System.Windows.Forms.Button();
+			this.height = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.tag = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			groupBox1 = new System.Windows.Forms.GroupBox();
 			groupBox2 = new System.Windows.Forms.GroupBox();
 			label5 = new System.Windows.Forms.Label();
@@ -109,27 +109,26 @@ namespace CodeImp.DoomBuilder.Windows
 			groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
 						| System.Windows.Forms.AnchorStyles.Right)));
 			groupBox2.Controls.Add(this.height);
+			groupBox2.Controls.Add(this.angle);
 			groupBox2.Controls.Add(this.heightlabel);
 			groupBox2.Controls.Add(label5);
-			groupBox2.Controls.Add(this.angle);
 			groupBox2.Controls.Add(this.anglecontrol);
 			groupBox2.Location = new System.Drawing.Point(397, 241);
 			groupBox2.Name = "groupBox2";
-			groupBox2.Size = new System.Drawing.Size(230, 105);
+			groupBox2.Size = new System.Drawing.Size(249, 105);
 			groupBox2.TabIndex = 2;
 			groupBox2.TabStop = false;
 			groupBox2.Text = " Coordination ";
 			// 
-			// height
+			// angle
 			// 
-			this.height.AllowDecimal = false;
-			this.height.AllowNegative = true;
-			this.height.AllowRelative = true;
-			this.height.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.height.Location = new System.Drawing.Point(68, 63);
-			this.height.Name = "height";
-			this.height.Size = new System.Drawing.Size(50, 20);
-			this.height.TabIndex = 1;
+			this.angle.AllowNegative = true;
+			this.angle.AllowRelative = true;
+			this.angle.ButtonStep = 45;
+			this.angle.Location = new System.Drawing.Point(68, 26);
+			this.angle.Name = "angle";
+			this.angle.Size = new System.Drawing.Size(72, 24);
+			this.angle.TabIndex = 10;
 			// 
 			// heightlabel
 			// 
@@ -151,24 +150,12 @@ namespace CodeImp.DoomBuilder.Windows
 			label5.TabIndex = 8;
 			label5.Text = "Angle:";
 			// 
-			// angle
-			// 
-			this.angle.AllowDecimal = false;
-			this.angle.AllowNegative = true;
-			this.angle.AllowRelative = true;
-			this.angle.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.angle.Location = new System.Drawing.Point(68, 28);
-			this.angle.Name = "angle";
-			this.angle.Size = new System.Drawing.Size(50, 20);
-			this.angle.TabIndex = 0;
-			this.angle.TextChanged += new System.EventHandler(this.angle_TextChanged);
-			// 
 			// anglecontrol
 			// 
 			this.anglecontrol.BackColor = System.Drawing.SystemColors.Control;
 			this.anglecontrol.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
 			this.anglecontrol.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-			this.anglecontrol.Location = new System.Drawing.Point(138, 13);
+			this.anglecontrol.Location = new System.Drawing.Point(156, 13);
 			this.anglecontrol.Name = "anglecontrol";
 			this.anglecontrol.Size = new System.Drawing.Size(84, 84);
 			this.anglecontrol.TabIndex = 2;
@@ -206,7 +193,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabs.Margin = new System.Windows.Forms.Padding(1);
 			this.tabs.Name = "tabs";
 			this.tabs.SelectedIndex = 0;
-			this.tabs.Size = new System.Drawing.Size(641, 379);
+			this.tabs.Size = new System.Drawing.Size(660, 379);
 			this.tabs.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
 			this.tabs.TabIndex = 0;
 			// 
@@ -220,7 +207,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabproperties.Location = new System.Drawing.Point(4, 23);
 			this.tabproperties.Name = "tabproperties";
 			this.tabproperties.Padding = new System.Windows.Forms.Padding(3);
-			this.tabproperties.Size = new System.Drawing.Size(633, 352);
+			this.tabproperties.Size = new System.Drawing.Size(652, 352);
 			this.tabproperties.TabIndex = 0;
 			this.tabproperties.Text = "Properties";
 			this.tabproperties.UseVisualStyleBackColor = true;
@@ -244,7 +231,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.settingsgroup.Controls.Add(this.flags);
 			this.settingsgroup.Location = new System.Drawing.Point(284, 6);
 			this.settingsgroup.Name = "settingsgroup";
-			this.settingsgroup.Size = new System.Drawing.Size(343, 229);
+			this.settingsgroup.Size = new System.Drawing.Size(362, 229);
 			this.settingsgroup.TabIndex = 1;
 			this.settingsgroup.TabStop = false;
 			this.settingsgroup.Text = " Settings ";
@@ -258,7 +245,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.flags.Columns = 2;
 			this.flags.Location = new System.Drawing.Point(18, 26);
 			this.flags.Name = "flags";
-			this.flags.Size = new System.Drawing.Size(319, 196);
+			this.flags.Size = new System.Drawing.Size(338, 196);
 			this.flags.TabIndex = 0;
 			// 
 			// tabeffects
@@ -269,7 +256,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabeffects.Location = new System.Drawing.Point(4, 23);
 			this.tabeffects.Name = "tabeffects";
 			this.tabeffects.Padding = new System.Windows.Forms.Padding(3);
-			this.tabeffects.Size = new System.Drawing.Size(633, 352);
+			this.tabeffects.Size = new System.Drawing.Size(652, 352);
 			this.tabeffects.TabIndex = 1;
 			this.tabeffects.Text = "Action";
 			this.tabeffects.UseVisualStyleBackColor = true;
@@ -286,7 +273,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.actiongroup.Controls.Add(this.doompanel);
 			this.actiongroup.Location = new System.Drawing.Point(6, 78);
 			this.actiongroup.Name = "actiongroup";
-			this.actiongroup.Size = new System.Drawing.Size(621, 268);
+			this.actiongroup.Size = new System.Drawing.Size(640, 268);
 			this.actiongroup.TabIndex = 22;
 			this.actiongroup.TabStop = false;
 			this.actiongroup.Text = " Action ";
@@ -308,7 +295,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.hexenpanel.Controls.Add(this.arg4label);
 			this.hexenpanel.Location = new System.Drawing.Point(6, 53);
 			this.hexenpanel.Name = "hexenpanel";
-			this.hexenpanel.Size = new System.Drawing.Size(609, 208);
+			this.hexenpanel.Size = new System.Drawing.Size(628, 208);
 			this.hexenpanel.TabIndex = 13;
 			// 
 			// arg2
@@ -434,7 +421,7 @@ namespace CodeImp.DoomBuilder.Windows
 						| System.Windows.Forms.AnchorStyles.Right)));
 			this.doompanel.Location = new System.Drawing.Point(6, 54);
 			this.doompanel.Name = "doompanel";
-			this.doompanel.Size = new System.Drawing.Size(609, 208);
+			this.doompanel.Size = new System.Drawing.Size(628, 208);
 			this.doompanel.TabIndex = 12;
 			// 
 			// groupBox3
@@ -444,25 +431,14 @@ namespace CodeImp.DoomBuilder.Windows
 			this.groupBox3.Controls.Add(this.newtag);
 			this.groupBox3.Location = new System.Drawing.Point(6, 6);
 			this.groupBox3.Name = "groupBox3";
-			this.groupBox3.Size = new System.Drawing.Size(621, 66);
+			this.groupBox3.Size = new System.Drawing.Size(640, 66);
 			this.groupBox3.TabIndex = 0;
 			this.groupBox3.TabStop = false;
 			this.groupBox3.Text = " Identification ";
 			// 
-			// tag
-			// 
-			this.tag.AllowDecimal = false;
-			this.tag.AllowNegative = false;
-			this.tag.AllowRelative = true;
-			this.tag.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.tag.Location = new System.Drawing.Point(62, 28);
-			this.tag.Name = "tag";
-			this.tag.Size = new System.Drawing.Size(68, 20);
-			this.tag.TabIndex = 0;
-			// 
 			// newtag
 			// 
-			this.newtag.Location = new System.Drawing.Point(136, 27);
+			this.newtag.Location = new System.Drawing.Point(154, 27);
 			this.newtag.Name = "newtag";
 			this.newtag.Size = new System.Drawing.Size(76, 23);
 			this.newtag.TabIndex = 1;
@@ -476,7 +452,7 @@ namespace CodeImp.DoomBuilder.Windows
 			this.tabcustom.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
 			this.tabcustom.Location = new System.Drawing.Point(4, 23);
 			this.tabcustom.Name = "tabcustom";
-			this.tabcustom.Size = new System.Drawing.Size(633, 352);
+			this.tabcustom.Size = new System.Drawing.Size(652, 352);
 			this.tabcustom.TabIndex = 2;
 			this.tabcustom.Text = "Custom";
 			this.tabcustom.UseVisualStyleBackColor = true;
@@ -491,14 +467,14 @@ namespace CodeImp.DoomBuilder.Windows
 			this.fieldslist.Location = new System.Drawing.Point(8, 9);
 			this.fieldslist.Margin = new System.Windows.Forms.Padding(8, 9, 8, 9);
 			this.fieldslist.Name = "fieldslist";
-			this.fieldslist.Size = new System.Drawing.Size(617, 334);
+			this.fieldslist.Size = new System.Drawing.Size(636, 334);
 			this.fieldslist.TabIndex = 1;
 			// 
 			// cancel
 			// 
 			this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
 			this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-			this.cancel.Location = new System.Drawing.Point(539, 406);
+			this.cancel.Location = new System.Drawing.Point(558, 406);
 			this.cancel.Name = "cancel";
 			this.cancel.Size = new System.Drawing.Size(112, 25);
 			this.cancel.TabIndex = 2;
@@ -509,7 +485,7 @@ namespace CodeImp.DoomBuilder.Windows
 			// apply
 			// 
 			this.apply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-			this.apply.Location = new System.Drawing.Point(420, 406);
+			this.apply.Location = new System.Drawing.Point(439, 406);
 			this.apply.Name = "apply";
 			this.apply.Size = new System.Drawing.Size(112, 25);
 			this.apply.TabIndex = 1;
@@ -517,13 +493,33 @@ namespace CodeImp.DoomBuilder.Windows
 			this.apply.UseVisualStyleBackColor = true;
 			this.apply.Click += new System.EventHandler(this.apply_Click);
 			// 
+			// height
+			// 
+			this.height.AllowNegative = true;
+			this.height.AllowRelative = true;
+			this.height.ButtonStep = 8;
+			this.height.Location = new System.Drawing.Point(68, 61);
+			this.height.Name = "height";
+			this.height.Size = new System.Drawing.Size(72, 24);
+			this.height.TabIndex = 11;
+			// 
+			// tag
+			// 
+			this.tag.AllowNegative = false;
+			this.tag.AllowRelative = true;
+			this.tag.ButtonStep = 1;
+			this.tag.Location = new System.Drawing.Point(62, 26);
+			this.tag.Name = "tag";
+			this.tag.Size = new System.Drawing.Size(80, 24);
+			this.tag.TabIndex = 7;
+			// 
 			// ThingEditForm
 			// 
 			this.AcceptButton = this.apply;
 			this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
 			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
 			this.CancelButton = this.cancel;
-			this.ClientSize = new System.Drawing.Size(661, 441);
+			this.ClientSize = new System.Drawing.Size(680, 441);
 			this.Controls.Add(this.cancel);
 			this.Controls.Add(this.apply);
 			this.Controls.Add(this.tabs);
@@ -567,10 +563,7 @@ namespace CodeImp.DoomBuilder.Windows
 		private CodeImp.DoomBuilder.Controls.CheckboxArrayControl flags;
 		private System.Windows.Forms.Panel spritetex;
 		private CodeImp.DoomBuilder.Controls.AngleControl anglecontrol;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox height;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox angle;
 		private System.Windows.Forms.GroupBox groupBox3;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox tag;
 		private System.Windows.Forms.Button newtag;
 		private System.Windows.Forms.GroupBox actiongroup;
 		private System.Windows.Forms.Panel hexenpanel;
@@ -590,5 +583,8 @@ namespace CodeImp.DoomBuilder.Windows
 		private CodeImp.DoomBuilder.Controls.ArgumentBox arg4;
 		private System.Windows.Forms.Label heightlabel;
 		private CodeImp.DoomBuilder.Controls.ThingBrowserControl thingtype;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox angle;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox height;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox tag;
 	}
 }
\ No newline at end of file
diff --git a/Source/Core/Windows/ThingEditForm.resx b/Source/Core/Windows/ThingEditForm.resx
index 8f5014febc16de1854b32a44dc1d4d242f0d98c8..419cbb397dd1a0c1677ff3e521881f045a266f5a 100644
--- a/Source/Core/Windows/ThingEditForm.resx
+++ b/Source/Core/Windows/ThingEditForm.resx
@@ -135,6 +135,9 @@
   <metadata name="height.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="angle.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="heightlabel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
@@ -144,9 +147,6 @@
   <metadata name="label5.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
-  <metadata name="angle.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
   <metadata name="anglecontrol.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
diff --git a/Source/Core/Windows/VertexEditForm.Designer.cs b/Source/Core/Windows/VertexEditForm.Designer.cs
index bcad3fb38d58d867bba4ef260fb4ecd0e09785de..6bfa74f8302ae63c45a40bab20768369b84c48ad 100644
--- a/Source/Core/Windows/VertexEditForm.Designer.cs
+++ b/Source/Core/Windows/VertexEditForm.Designer.cs
@@ -32,13 +32,13 @@ namespace CodeImp.DoomBuilder.Windows
 			System.Windows.Forms.Label label1;
 			System.Windows.Forms.Label label6;
 			this.groupposition = new System.Windows.Forms.GroupBox();
-			this.positiony = new CodeImp.DoomBuilder.Controls.NumericTextbox();
-			this.positionx = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.tabs = new System.Windows.Forms.TabControl();
 			this.tabcustom = new System.Windows.Forms.TabPage();
 			this.fieldslist = new CodeImp.DoomBuilder.Controls.FieldsEditorControl();
 			this.cancel = new System.Windows.Forms.Button();
 			this.apply = new System.Windows.Forms.Button();
+			this.positionx = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.positiony = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			tabproperties = new System.Windows.Forms.TabPage();
 			label1 = new System.Windows.Forms.Label();
 			label6 = new System.Windows.Forms.Label();
@@ -65,10 +65,10 @@ namespace CodeImp.DoomBuilder.Windows
 			this.groupposition.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
 						| System.Windows.Forms.AnchorStyles.Left)
 						| System.Windows.Forms.AnchorStyles.Right)));
-			this.groupposition.Controls.Add(label1);
 			this.groupposition.Controls.Add(this.positiony);
-			this.groupposition.Controls.Add(label6);
 			this.groupposition.Controls.Add(this.positionx);
+			this.groupposition.Controls.Add(label1);
+			this.groupposition.Controls.Add(label6);
 			this.groupposition.Location = new System.Drawing.Point(7, 6);
 			this.groupposition.Name = "groupposition";
 			this.groupposition.Size = new System.Drawing.Size(415, 194);
@@ -79,23 +79,12 @@ namespace CodeImp.DoomBuilder.Windows
 			// label1
 			// 
 			label1.AutoSize = true;
-			label1.Location = new System.Drawing.Point(188, 39);
+			label1.Location = new System.Drawing.Point(212, 39);
 			label1.Name = "label1";
 			label1.Size = new System.Drawing.Size(18, 14);
 			label1.TabIndex = 23;
 			label1.Text = "Y:";
 			// 
-			// positiony
-			// 
-			this.positiony.AllowDecimal = false;
-			this.positiony.AllowNegative = true;
-			this.positiony.AllowRelative = true;
-			this.positiony.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.positiony.Location = new System.Drawing.Point(211, 36);
-			this.positiony.Name = "positiony";
-			this.positiony.Size = new System.Drawing.Size(95, 20);
-			this.positiony.TabIndex = 1;
-			// 
 			// label6
 			// 
 			label6.AutoSize = true;
@@ -105,17 +94,6 @@ namespace CodeImp.DoomBuilder.Windows
 			label6.TabIndex = 21;
 			label6.Text = "X:";
 			// 
-			// positionx
-			// 
-			this.positionx.AllowDecimal = false;
-			this.positionx.AllowNegative = true;
-			this.positionx.AllowRelative = true;
-			this.positionx.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.positionx.Location = new System.Drawing.Point(68, 36);
-			this.positionx.Name = "positionx";
-			this.positionx.Size = new System.Drawing.Size(95, 20);
-			this.positionx.TabIndex = 0;
-			// 
 			// tabs
 			// 
 			this.tabs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
@@ -180,6 +158,28 @@ namespace CodeImp.DoomBuilder.Windows
 			this.apply.UseVisualStyleBackColor = true;
 			this.apply.Click += new System.EventHandler(this.apply_Click);
 			// 
+			// positionx
+			// 
+			this.positionx.AllowDecimal = false;
+			this.positionx.AllowNegative = true;
+			this.positionx.AllowRelative = true;
+			this.positionx.ButtonStep = 1;
+			this.positionx.Location = new System.Drawing.Point(68, 34);
+			this.positionx.Name = "positionx";
+			this.positionx.Size = new System.Drawing.Size(120, 24);
+			this.positionx.TabIndex = 24;
+			// 
+			// positiony
+			// 
+			this.positiony.AllowDecimal = false;
+			this.positiony.AllowNegative = true;
+			this.positiony.AllowRelative = true;
+			this.positiony.ButtonStep = 1;
+			this.positiony.Location = new System.Drawing.Point(236, 34);
+			this.positiony.Name = "positiony";
+			this.positiony.Size = new System.Drawing.Size(120, 24);
+			this.positiony.TabIndex = 25;
+			// 
 			// VertexEditForm
 			// 
 			this.AcceptButton = this.apply;
@@ -215,8 +215,8 @@ namespace CodeImp.DoomBuilder.Windows
 		private System.Windows.Forms.Button cancel;
 		private System.Windows.Forms.Button apply;
 		private CodeImp.DoomBuilder.Controls.FieldsEditorControl fieldslist;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox positiony;
 		private System.Windows.Forms.GroupBox groupposition;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox positionx;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox positiony;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox positionx;
 	}
 }
\ No newline at end of file
diff --git a/Source/Core/Windows/VertexEditForm.resx b/Source/Core/Windows/VertexEditForm.resx
index 00aa2d807b4b92e31662906ac42042e323ee9bd8..a40e5b9f0dad32e4eaf37aae5819f5a4606a538b 100644
--- a/Source/Core/Windows/VertexEditForm.resx
+++ b/Source/Core/Windows/VertexEditForm.resx
@@ -117,13 +117,49 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <metadata name="tabproperties.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="tabproperties.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="groupposition.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="positiony.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="positionx.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="label6.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="label6.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>False</value>
   </metadata>
+  <metadata name="tabs.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="tabcustom.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="fieldslist.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="cancel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="apply.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
 </root>
\ No newline at end of file
diff --git a/Source/Plugins/BuilderModes/BuilderModes.csproj b/Source/Plugins/BuilderModes/BuilderModes.csproj
index 13b8af254c54e2ba7967ef159de277392beab5ac..d3e70e614514241c98c2881cb23bb0633585d96b 100644
--- a/Source/Plugins/BuilderModes/BuilderModes.csproj
+++ b/Source/Plugins/BuilderModes/BuilderModes.csproj
@@ -2,7 +2,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>8.0.50727</ProductVersion>
+    <ProductVersion>9.0.30729</ProductVersion>
     <SchemaVersion>2.0</SchemaVersion>
     <ProjectGuid>{B42D5AA0-F9A6-4234-9C4B-A05B11A64851}</ProjectGuid>
     <OutputType>Library</OutputType>
diff --git a/Source/Plugins/BuilderModes/Interface/PreferencesForm.Designer.cs b/Source/Plugins/BuilderModes/Interface/PreferencesForm.Designer.cs
index c491e9766fa12843bb1072e1f66330644620873c..18fd345510585a2a487853391c81cced61277029 100644
--- a/Source/Plugins/BuilderModes/Interface/PreferencesForm.Designer.cs
+++ b/Source/Plugins/BuilderModes/Interface/PreferencesForm.Designer.cs
@@ -37,16 +37,16 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			this.editnewsector = new System.Windows.Forms.CheckBox();
 			this.additiveselect = new System.Windows.Forms.CheckBox();
 			this.groupBox2 = new System.Windows.Forms.GroupBox();
-			this.stitchrange = new CodeImp.DoomBuilder.Controls.NumericTextbox();
+			this.splitlinedefsrange = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.stitchrange = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.highlightthingsrange = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
+			this.highlightrange = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
 			this.label8 = new System.Windows.Forms.Label();
 			this.label2 = new System.Windows.Forms.Label();
-			this.splitlinedefsrange = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.label3 = new System.Windows.Forms.Label();
 			this.label9 = new System.Windows.Forms.Label();
 			this.label5 = new System.Windows.Forms.Label();
 			this.label6 = new System.Windows.Forms.Label();
-			this.highlightrange = new CodeImp.DoomBuilder.Controls.NumericTextbox();
-			this.highlightthingsrange = new CodeImp.DoomBuilder.Controls.NumericTextbox();
 			this.label4 = new System.Windows.Forms.Label();
 			this.label7 = new System.Windows.Forms.Label();
 			this.groupBox1 = new System.Windows.Forms.GroupBox();
@@ -152,16 +152,16 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			// 
 			// groupBox2
 			// 
+			this.groupBox2.Controls.Add(this.splitlinedefsrange);
 			this.groupBox2.Controls.Add(this.stitchrange);
+			this.groupBox2.Controls.Add(this.highlightthingsrange);
+			this.groupBox2.Controls.Add(this.highlightrange);
 			this.groupBox2.Controls.Add(this.label8);
 			this.groupBox2.Controls.Add(this.label2);
-			this.groupBox2.Controls.Add(this.splitlinedefsrange);
 			this.groupBox2.Controls.Add(this.label3);
 			this.groupBox2.Controls.Add(this.label9);
 			this.groupBox2.Controls.Add(this.label5);
 			this.groupBox2.Controls.Add(this.label6);
-			this.groupBox2.Controls.Add(this.highlightrange);
-			this.groupBox2.Controls.Add(this.highlightthingsrange);
 			this.groupBox2.Controls.Add(this.label4);
 			this.groupBox2.Controls.Add(this.label7);
 			this.groupBox2.Location = new System.Drawing.Point(6, 90);
@@ -171,17 +171,53 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			this.groupBox2.TabStop = false;
 			this.groupBox2.Text = " Ranges ";
 			// 
+			// splitlinedefsrange
+			// 
+			this.splitlinedefsrange.AllowDecimal = false;
+			this.splitlinedefsrange.AllowNegative = false;
+			this.splitlinedefsrange.AllowRelative = false;
+			this.splitlinedefsrange.ButtonStep = 5;
+			this.splitlinedefsrange.Location = new System.Drawing.Point(167, 149);
+			this.splitlinedefsrange.Name = "splitlinedefsrange";
+			this.splitlinedefsrange.Size = new System.Drawing.Size(59, 24);
+			this.splitlinedefsrange.StepValues = null;
+			this.splitlinedefsrange.TabIndex = 19;
+			// 
 			// stitchrange
 			// 
 			this.stitchrange.AllowDecimal = false;
 			this.stitchrange.AllowNegative = false;
 			this.stitchrange.AllowRelative = false;
-			this.stitchrange.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.stitchrange.Location = new System.Drawing.Point(167, 111);
-			this.stitchrange.MaxLength = 3;
+			this.stitchrange.ButtonStep = 5;
+			this.stitchrange.Location = new System.Drawing.Point(167, 109);
 			this.stitchrange.Name = "stitchrange";
-			this.stitchrange.Size = new System.Drawing.Size(59, 20);
-			this.stitchrange.TabIndex = 5;
+			this.stitchrange.Size = new System.Drawing.Size(59, 24);
+			this.stitchrange.StepValues = null;
+			this.stitchrange.TabIndex = 18;
+			// 
+			// highlightthingsrange
+			// 
+			this.highlightthingsrange.AllowDecimal = false;
+			this.highlightthingsrange.AllowNegative = false;
+			this.highlightthingsrange.AllowRelative = false;
+			this.highlightthingsrange.ButtonStep = 5;
+			this.highlightthingsrange.Location = new System.Drawing.Point(167, 69);
+			this.highlightthingsrange.Name = "highlightthingsrange";
+			this.highlightthingsrange.Size = new System.Drawing.Size(59, 24);
+			this.highlightthingsrange.StepValues = null;
+			this.highlightthingsrange.TabIndex = 17;
+			// 
+			// highlightrange
+			// 
+			this.highlightrange.AllowDecimal = false;
+			this.highlightrange.AllowNegative = false;
+			this.highlightrange.AllowRelative = false;
+			this.highlightrange.ButtonStep = 5;
+			this.highlightrange.Location = new System.Drawing.Point(167, 29);
+			this.highlightrange.Name = "highlightrange";
+			this.highlightrange.Size = new System.Drawing.Size(59, 24);
+			this.highlightrange.StepValues = null;
+			this.highlightrange.TabIndex = 16;
 			// 
 			// label8
 			// 
@@ -202,18 +238,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			this.label2.Text = "Stitch geometry within:";
 			this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight;
 			// 
-			// splitlinedefsrange
-			// 
-			this.splitlinedefsrange.AllowDecimal = false;
-			this.splitlinedefsrange.AllowNegative = false;
-			this.splitlinedefsrange.AllowRelative = false;
-			this.splitlinedefsrange.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.splitlinedefsrange.Location = new System.Drawing.Point(167, 151);
-			this.splitlinedefsrange.MaxLength = 3;
-			this.splitlinedefsrange.Name = "splitlinedefsrange";
-			this.splitlinedefsrange.Size = new System.Drawing.Size(59, 20);
-			this.splitlinedefsrange.TabIndex = 14;
-			// 
 			// label3
 			// 
 			this.label3.AutoSize = true;
@@ -252,30 +276,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			this.label6.TabIndex = 12;
 			this.label6.Text = "pixels";
 			// 
-			// highlightrange
-			// 
-			this.highlightrange.AllowDecimal = false;
-			this.highlightrange.AllowNegative = false;
-			this.highlightrange.AllowRelative = false;
-			this.highlightrange.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.highlightrange.Location = new System.Drawing.Point(167, 31);
-			this.highlightrange.MaxLength = 3;
-			this.highlightrange.Name = "highlightrange";
-			this.highlightrange.Size = new System.Drawing.Size(59, 20);
-			this.highlightrange.TabIndex = 8;
-			// 
-			// highlightthingsrange
-			// 
-			this.highlightthingsrange.AllowDecimal = false;
-			this.highlightthingsrange.AllowNegative = false;
-			this.highlightthingsrange.AllowRelative = false;
-			this.highlightthingsrange.ImeMode = System.Windows.Forms.ImeMode.Off;
-			this.highlightthingsrange.Location = new System.Drawing.Point(167, 71);
-			this.highlightthingsrange.MaxLength = 3;
-			this.highlightthingsrange.Name = "highlightthingsrange";
-			this.highlightthingsrange.Size = new System.Drawing.Size(59, 20);
-			this.highlightthingsrange.TabIndex = 11;
-			// 
 			// label4
 			// 
 			this.label4.AutoSize = true;
@@ -365,20 +365,20 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		private System.Windows.Forms.CheckBox additiveselect;
 		private System.Windows.Forms.Label label2;
 		private System.Windows.Forms.Label label3;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox stitchrange;
 		private System.Windows.Forms.Label label4;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox highlightrange;
 		private System.Windows.Forms.Label label5;
 		private System.Windows.Forms.Label label6;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox highlightthingsrange;
 		private System.Windows.Forms.Label label7;
 		private System.Windows.Forms.Label label8;
-		private CodeImp.DoomBuilder.Controls.NumericTextbox splitlinedefsrange;
 		private System.Windows.Forms.Label label9;
 		private System.Windows.Forms.GroupBox groupBox1;
 		private System.Windows.Forms.GroupBox groupBox3;
 		private System.Windows.Forms.GroupBox groupBox2;
 		private System.Windows.Forms.CheckBox autoclearselection;
 		private System.Windows.Forms.CheckBox visualmodeclearselection;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox splitlinedefsrange;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox stitchrange;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox highlightthingsrange;
+		private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox highlightrange;
 	}
 }
\ No newline at end of file
diff --git a/Source/Plugins/BuilderModes/Interface/PreferencesForm.resx b/Source/Plugins/BuilderModes/Interface/PreferencesForm.resx
index 052706b4cc86f4c551ff28913153d140c6a5576b..0230378dfa04501ad6fef39277aa553ae090ec13 100644
--- a/Source/Plugins/BuilderModes/Interface/PreferencesForm.resx
+++ b/Source/Plugins/BuilderModes/Interface/PreferencesForm.resx
@@ -144,16 +144,22 @@
   <metadata name="groupBox2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="splitlinedefsrange.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="stitchrange.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="label8.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="highlightthingsrange.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="highlightrange.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="splitlinedefsrange.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+  <metadata name="label8.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
   <metadata name="label3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
@@ -168,12 +174,6 @@
   <metadata name="label6.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <metadata name="highlightrange.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="highlightthingsrange.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
   <metadata name="label4.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>