diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj
index 8e9c1137f8426ecb46bccb84cf9679a20baae312..3eeee099db35f7f83b025e8608cf07dac58837d8 100644
--- a/Source/Core/Builder.csproj
+++ b/Source/Core/Builder.csproj
@@ -1126,6 +1126,13 @@
     <None Include="Resources\About.png" />
     <None Include="Resources\Configuration.png" />
     <EmbeddedResource Include="Resources\Black.png" />
+    <None Include="Resources\Angle1.png" />
+    <None Include="Resources\Angle2.png" />
+    <None Include="Resources\Angle3.png" />
+    <None Include="Resources\Angle4.png" />
+    <None Include="Resources\Angle5.png" />
+    <None Include="Resources\Angle6.png" />
+    <None Include="Resources\Angle7.png" />
     <Content Include="Resources\DB2.ico" />
     <None Include="Resources\GZDB2.ico" />
     <None Include="Resources\fog.png" />
diff --git a/Source/Core/Controls/ArgumentBox.cs b/Source/Core/Controls/ArgumentBox.cs
index 447aef5fe11ced41963a2746ff2a7a4ced4ce6c1..e22cc9e5d3d84f0073114b8db33f981707ccf490 100644
--- a/Source/Core/Controls/ArgumentBox.cs
+++ b/Source/Core/Controls/ArgumentBox.cs
@@ -129,6 +129,13 @@ namespace CodeImp.DoomBuilder.Controls
 		private void combobox_TextChanged(object sender, EventArgs e)
 		{
 			scrollbuttons.Enabled = !CheckIsRelative();
+
+			//mxd. Update button image?
+			if(typehandler.DynamicImage)
+			{
+				combobox_Validating(sender, new CancelEventArgs());
+				button.Image = typehandler.BrowseImage;
+			}
 		}
 
 		// Mouse wheel used
diff --git a/Source/Core/Controls/FieldsEditorControl.cs b/Source/Core/Controls/FieldsEditorControl.cs
index 7c08243668824f011ba1750c02742eb5006e3083..807c42c14272e3bbe4ac1c561d7b604580352911 100644
--- a/Source/Core/Controls/FieldsEditorControl.cs
+++ b/Source/Core/Controls/FieldsEditorControl.cs
@@ -804,7 +804,9 @@ namespace CodeImp.DoomBuilder.Controls
 				if(row is FieldsEditorRow)
 				{
 					// Browse
-					(row as FieldsEditorRow).Browse(this.ParentForm);
+					FieldsEditorRow frow = (FieldsEditorRow)row;
+					frow.Browse(this.ParentForm);
+					if(frow.TypeHandler.DynamicImage) browsebutton.Image = frow.TypeHandler.BrowseImage; //mxd
 					fieldslist.Focus();
 				}
 			}
diff --git a/Source/Core/IO/UniversalStreamReader.cs b/Source/Core/IO/UniversalStreamReader.cs
index 015385ab9e09bbf6a0b14e995c297079e5be93b0..cbe5f342cdbf3a13bca79ce7c4969f4c77ef604c 100644
--- a/Source/Core/IO/UniversalStreamReader.cs
+++ b/Source/Core/IO/UniversalStreamReader.cs
@@ -225,7 +225,7 @@ namespace CodeImp.DoomBuilder.IO
 
 			// Go for all lines
 			map.SetCapacity(0, map.Linedefs.Count + linescolls.Count, map.Sidedefs.Count + sidescolls.Count, 0, 0);
-			char[] splitter = new[] { ' ' }; //mxd
+			char[] splitter = { ' ' }; //mxd
 			for(int i = 0; i < linescolls.Count; i++)
 			{
 				// Read fields
@@ -235,7 +235,8 @@ namespace CodeImp.DoomBuilder.IO
 				int v1 = GetCollectionEntry(lc, "v1", true, 0, where);
 				int v2 = GetCollectionEntry(lc, "v2", true, 0, where);
 
-				if(!vertexlink.ContainsKey(v1) || !vertexlink.ContainsKey(v2)) { //mxd
+				if(!vertexlink.ContainsKey(v1) || !vertexlink.ContainsKey(v2))
+				{ //mxd
 					General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + i + " references one or more invalid vertices. Linedef has been removed.");
 					continue;
 				}
@@ -508,7 +509,7 @@ namespace CodeImp.DoomBuilder.IO
 					//mxd. Try to find the type from configuration
 					if(setknowncustomtypes) 
 					{
-						type = General.Map.Config.ReadSetting("universalfields." + elementname + "." + e.Key + ".type", -1);
+						type = General.Map.Options.GetUniversalFieldType(elementname, e.Key, -1);
 
 						if(type != -1) 
 						{
diff --git a/Source/Core/Map/UniValue.cs b/Source/Core/Map/UniValue.cs
index e2144b56dec9478a28e1a90585b97caae3ba9d52..5a74b9e6c1853f0db31e0b7903dbd045feeae4da 100644
--- a/Source/Core/Map/UniValue.cs
+++ b/Source/Core/Map/UniValue.cs
@@ -126,6 +126,7 @@ namespace CodeImp.DoomBuilder.Map
 				}
 				
 				case UniversalType.AngleDegrees:
+				case UniversalType.AngleByte: //mxd
 				case UniversalType.Color:
 				case UniversalType.EnumBits:
 				case UniversalType.EnumOption:
diff --git a/Source/Core/Properties/Resources.Designer.cs b/Source/Core/Properties/Resources.Designer.cs
index 987ee0052eee8863f43bd87551f8a71961174d98..5fa8163528a0cc0f4923646bab28e416cccdf3c4 100644
--- a/Source/Core/Properties/Resources.Designer.cs
+++ b/Source/Core/Properties/Resources.Designer.cs
@@ -81,6 +81,55 @@ namespace CodeImp.DoomBuilder.Properties {
             }
         }
         
+        internal static System.Drawing.Bitmap Angle1 {
+            get {
+                object obj = ResourceManager.GetObject("Angle1", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Angle2 {
+            get {
+                object obj = ResourceManager.GetObject("Angle2", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Angle3 {
+            get {
+                object obj = ResourceManager.GetObject("Angle3", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Angle4 {
+            get {
+                object obj = ResourceManager.GetObject("Angle4", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Angle5 {
+            get {
+                object obj = ResourceManager.GetObject("Angle5", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Angle6 {
+            get {
+                object obj = ResourceManager.GetObject("Angle6", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Angle7 {
+            get {
+                object obj = ResourceManager.GetObject("Angle7", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap ArrowDown {
             get {
                 object obj = ResourceManager.GetObject("ArrowDown", resourceCulture);
diff --git a/Source/Core/Properties/Resources.resx b/Source/Core/Properties/Resources.resx
index 6afe901600ffe6c1866747ed641eb316e6aa9b85..19b2e3e3501ea49c382b0d181be4858cef0bcd20 100644
--- a/Source/Core/Properties/Resources.resx
+++ b/Source/Core/Properties/Resources.resx
@@ -565,4 +565,25 @@
   <data name="FixedThingsScale" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\FixedThingsScale.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="Angle1" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Angle1.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Angle2" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Angle2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Angle3" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Angle3.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Angle4" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Angle4.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Angle5" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Angle5.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Angle6" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Angle6.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Angle7" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Angle7.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/Source/Core/Resources/Angle1.png b/Source/Core/Resources/Angle1.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e0a3b07a5ae58fdb27d86b9a2b01a10c1c578d3
Binary files /dev/null and b/Source/Core/Resources/Angle1.png differ
diff --git a/Source/Core/Resources/Angle2.png b/Source/Core/Resources/Angle2.png
new file mode 100644
index 0000000000000000000000000000000000000000..721a845f81a366937fa8b1bc269419e718d54b37
Binary files /dev/null and b/Source/Core/Resources/Angle2.png differ
diff --git a/Source/Core/Resources/Angle3.png b/Source/Core/Resources/Angle3.png
new file mode 100644
index 0000000000000000000000000000000000000000..82a44cccd8f9a6c9f5b05fdb6617758cdd4c2fbf
Binary files /dev/null and b/Source/Core/Resources/Angle3.png differ
diff --git a/Source/Core/Resources/Angle4.png b/Source/Core/Resources/Angle4.png
new file mode 100644
index 0000000000000000000000000000000000000000..601e88d939c333ea932ffcc216a50cd43421b54c
Binary files /dev/null and b/Source/Core/Resources/Angle4.png differ
diff --git a/Source/Core/Resources/Angle5.png b/Source/Core/Resources/Angle5.png
new file mode 100644
index 0000000000000000000000000000000000000000..709258ea25eec7039caa58dd13ad58ef725a8539
Binary files /dev/null and b/Source/Core/Resources/Angle5.png differ
diff --git a/Source/Core/Resources/Angle6.png b/Source/Core/Resources/Angle6.png
new file mode 100644
index 0000000000000000000000000000000000000000..01ab35c74f9dd42784263046dd74d3af706b54d8
Binary files /dev/null and b/Source/Core/Resources/Angle6.png differ
diff --git a/Source/Core/Resources/Angle7.png b/Source/Core/Resources/Angle7.png
new file mode 100644
index 0000000000000000000000000000000000000000..9552fe3c6774772a86373a4b5786061ca1470e05
Binary files /dev/null and b/Source/Core/Resources/Angle7.png differ
diff --git a/Source/Core/Types/AngleByteHandler.cs b/Source/Core/Types/AngleByteHandler.cs
index bfc8dc9d61a4729bdca719427893dfe28ce40f4a..d5cd1a3a054f3687e5be17bbde813c05e061d2e3 100644
--- a/Source/Core/Types/AngleByteHandler.cs
+++ b/Source/Core/Types/AngleByteHandler.cs
@@ -1,6 +1,7 @@
 #region ================== Namespaces
 
 using System;
+using System.Drawing;
 using System.Windows.Forms;
 using CodeImp.DoomBuilder.Windows;
 
@@ -11,6 +12,12 @@ namespace CodeImp.DoomBuilder.Types
 	[TypeHandler(UniversalType.AngleByte, "Byte Angle", true)]
 	internal class AngleByteHandler : AngleDegreesHandler
 	{
+		#region ================== Properties
+
+		public override Image BrowseImage { get { return angleicons[General.ClampAngle((int)Math.Round((float)value / 256 * 360) + 22) / 45]; } }
+
+		#endregion
+
 		#region ================== Methods
 
 		public override void Browse(IWin32Window parent) 
diff --git a/Source/Core/Types/AngleDegreesFloatHandler.cs b/Source/Core/Types/AngleDegreesFloatHandler.cs
index ba7e6ea7e1d116eb66e562eb150d1a39d10b0f7e..5655c38abcd0c890c3f83460b76e6bbfe0229236 100644
--- a/Source/Core/Types/AngleDegreesFloatHandler.cs
+++ b/Source/Core/Types/AngleDegreesFloatHandler.cs
@@ -27,7 +27,7 @@ using CodeImp.DoomBuilder.Windows;
 namespace CodeImp.DoomBuilder.Types
 {
 	[TypeHandler(UniversalType.AngleDegreesFloat, "Degrees (Decimal)", true)]
-	internal class AngleDegreesFloatHandler : TypeHandler
+	internal class AngleDegreesFloatHandler : AngleDegreesHandler
 	{
 		#region ================== Constants
 
@@ -35,7 +35,7 @@ namespace CodeImp.DoomBuilder.Types
 
 		#region ================== Variables
 
-		private float value;
+		private new float value;
 
 		#endregion
 
@@ -43,7 +43,7 @@ namespace CodeImp.DoomBuilder.Types
 
 		public override bool IsBrowseable { get { return true; } }
 
-		public override Image BrowseImage { get { return Properties.Resources.Angle; } }
+		public override Image BrowseImage { get { return angleicons[General.ClampAngle((int)Math.Round(value) + 22) / 45]; } }
 		
 		#endregion
 
@@ -73,7 +73,8 @@ namespace CodeImp.DoomBuilder.Types
 				// Set directly
 				this.value = Convert.ToSingle(value);
 			}
-			else {
+			else
+			{
 				// Try parsing as string
 				float result;
 				if(float.TryParse(value.ToString(), NumberStyles.Float, CultureInfo.CurrentCulture, out result))
diff --git a/Source/Core/Types/AngleDegreesHandler.cs b/Source/Core/Types/AngleDegreesHandler.cs
index 01f1e36fd3ff7110a6a132bfa34b342e210fdd92..88a73984b6991cb210f326254bf3c2154edc0854 100644
--- a/Source/Core/Types/AngleDegreesHandler.cs
+++ b/Source/Core/Types/AngleDegreesHandler.cs
@@ -36,6 +36,7 @@ namespace CodeImp.DoomBuilder.Types
 		#region ================== Variables
 
 		protected int value;
+		protected Image[] angleicons;
 
 		#endregion
 
@@ -43,12 +44,28 @@ namespace CodeImp.DoomBuilder.Types
 
 		public override bool IsBrowseable { get { return true; } }
 
-		public override Image BrowseImage { get { return Properties.Resources.Angle; } }
-		
+		public override Image BrowseImage { get { return angleicons[General.ClampAngle(value + 22) / 45]; } }
+		public override bool DynamicImage { get { return true; } }
+
 		#endregion
 
 		#region ================== Constructor
 
+		public AngleDegreesHandler()
+		{
+			angleicons = new[]
+			{
+				Properties.Resources.Angle,
+				Properties.Resources.Angle7,
+				Properties.Resources.Angle6,
+				Properties.Resources.Angle5,
+				Properties.Resources.Angle4,
+				Properties.Resources.Angle3,
+				Properties.Resources.Angle2,
+				Properties.Resources.Angle1
+			};
+		}
+
 		#endregion
 
 		#region ================== Methods
diff --git a/Source/Core/Types/AngleRadiansHandler.cs b/Source/Core/Types/AngleRadiansHandler.cs
index e167062984e7a922a190ac9359a1d57373f21b0f..a3668507327111e77119375d68adf1d3269b5b31 100644
--- a/Source/Core/Types/AngleRadiansHandler.cs
+++ b/Source/Core/Types/AngleRadiansHandler.cs
@@ -28,7 +28,7 @@ using CodeImp.DoomBuilder.Geometry;
 namespace CodeImp.DoomBuilder.Types
 {
 	[TypeHandler(UniversalType.AngleRadians, "Radians", true)]
-	internal class AngleRadiansHandler : TypeHandler
+	internal class AngleRadiansHandler : AngleDegreesHandler
 	{
 		#region ================== Constants
 
@@ -36,7 +36,7 @@ namespace CodeImp.DoomBuilder.Types
 
 		#region ================== Variables
 
-		private float value;
+		private new float value;
 
 		#endregion
 
@@ -44,7 +44,7 @@ namespace CodeImp.DoomBuilder.Types
 
 		public override bool IsBrowseable { get { return true; } }
 
-		public override Image BrowseImage { get { return Properties.Resources.Angle; } }
+		public override Image BrowseImage { get { return angleicons[General.ClampAngle(Angle2D.RealToDoom(value) + 22) / 45]; } }
 		
 		#endregion
 
diff --git a/Source/Core/Types/TypeHandler.cs b/Source/Core/Types/TypeHandler.cs
index be7172ff8c83b824f0ca1629e836f7eac469f2e6..804a0f2012ed61428fed465ebf9034f51c34302a 100644
--- a/Source/Core/Types/TypeHandler.cs
+++ b/Source/Core/Types/TypeHandler.cs
@@ -59,6 +59,7 @@ namespace CodeImp.DoomBuilder.Types
 		public virtual bool IsLimitedToEnums { get { return false; } }
 		
 		public virtual Image BrowseImage { get { return null; } }
+		public virtual bool DynamicImage { get { return false; } } //mxd. When set to true, the button image will be re-applied after value changes
 
 		#endregion