diff --git a/Source/Core/Config/ConfigurationInfo.cs b/Source/Core/Config/ConfigurationInfo.cs
index 4789c19dbd4fb5d3b03ab600f64da789f71d569e..fb8eab7ffa5f16c783f1a8a22598cf2acad854cb 100644
--- a/Source/Core/Config/ConfigurationInfo.cs
+++ b/Source/Core/Config/ConfigurationInfo.cs
@@ -143,6 +143,8 @@ namespace CodeImp.DoomBuilder.Config
                     info.TestSkill = General.Settings.ReadSetting(path + ".testskill", 3);
                     testEngines.Add(info);
                 }
+
+				if(currentEngineIndex >= testEngines.Count)	currentEngineIndex = 0;
             }
 
             //mxd. read custom linedef colors 
diff --git a/Source/Core/GZBuilder/Data/EngineInfo.cs b/Source/Core/GZBuilder/Data/EngineInfo.cs
index 84b6d904f975f375395cba7e10b56002926678a6..cf982a5da83faa8681673b51215aeb0c17bd6738 100644
--- a/Source/Core/GZBuilder/Data/EngineInfo.cs
+++ b/Source/Core/GZBuilder/Data/EngineInfo.cs
@@ -28,9 +28,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data {
         public void CheckProgramName(bool forced) {
             if ((forced || TestProgramName == DEFAULT_ENGINE_NAME) && !String.IsNullOrEmpty(TestProgram)) {
                 //get engine name from folder name
-                string n = Path.GetDirectoryName(TestProgram);
-                int pos = n.LastIndexOf(Path.DirectorySeparatorChar);
-                TestProgramName = n.Substring(pos + 1, n.Length - pos - 1);
+				TestProgramName = Path.GetFileNameWithoutExtension(TestProgram);
             }
         }
     }
diff --git a/Source/Core/Map/Thing.cs b/Source/Core/Map/Thing.cs
index 53dc67a0e1d97a0a009b163dc93225510ca9011e..d6b1c3703c99e75b4824fd9e05dc8c63f1c2dd1f 100644
--- a/Source/Core/Map/Thing.cs
+++ b/Source/Core/Map/Thing.cs
@@ -56,6 +56,7 @@ namespace CodeImp.DoomBuilder.Map
 		private int tag;
 		private int action;
 		private int[] args;
+		protected float scale; //mxd. Used in model rendering
 
 		// Configuration
 		private float size;
@@ -70,6 +71,7 @@ namespace CodeImp.DoomBuilder.Map
 		public MapSet Map { get { return map; } }
         public int Type { get { return type; } set { BeforePropsChange(); type = value; } }
 		public Vector3D Position { get { return pos; } }
+		public float Scale { get { return scale; } } //mxd
 		public float Angle { get { return anglerad; } }
 		public int AngleDoom { get { return angledoom; } }
 		internal Dictionary<string, bool> Flags { get { return flags; } }
@@ -96,6 +98,7 @@ namespace CodeImp.DoomBuilder.Map
 			this.listindex = listindex;
 			this.flags = new Dictionary<string, bool>();
 			this.args = new int[NUM_ARGS];
+			this.scale = 1.0f; //mxd
 			
 			if(map == General.Map.Map)
 				General.Map.UndoRedo.RecAddThing(this);
@@ -415,6 +418,7 @@ namespace CodeImp.DoomBuilder.Map
 			// Apply size
 			size = ti.Radius;
 			fixedsize = ti.FixedSize;
+			scale = ti.SpriteScale.Width; //mxd
 			
 			// Color valid?
 			if((ti.Color >= 0) && (ti.Color < ColorCollection.NUM_THING_COLORS))
diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs
index 1d846d2ca5b279d3f98c10e38e217194a28d888c..4ae0818449f441cfb9f2c4c338f8ca8511601136 100644
--- a/Source/Core/Rendering/Renderer2D.cs
+++ b/Source/Core/Rendering/Renderer2D.cs
@@ -1160,7 +1160,7 @@ namespace CodeImp.DoomBuilder.Rendering
                             graphics.Shaders.Things2D.FillColor = group.Value.Selected ? General.Colors.Selection.ToColorValue() : General.Colors.ModelWireframe.ToColorValue();
 
                             for (int i = 0; i < mde.Model.Meshes.Count; i++) {
-                                graphics.Shaders.Things2D.SetTransformSettings(group.Key, group.Value.Angle, scale);
+								graphics.Shaders.Things2D.SetTransformSettings(group.Key, group.Value.Angle, scale * group.Value.Scale);
                                 graphics.Shaders.Things2D.ApplySettings();
 
                                 // Draw
diff --git a/Source/Core/Rendering/Renderer3D.cs b/Source/Core/Rendering/Renderer3D.cs
index f4827b545f40867d99e47b64c6ca6a1b38a50a2d..49531ab9b25ed0bec4c3d9dcaab63e3d7c30b432 100644
--- a/Source/Core/Rendering/Renderer3D.cs
+++ b/Source/Core/Rendering/Renderer3D.cs
@@ -1066,6 +1066,7 @@ namespace CodeImp.DoomBuilder.Rendering
 
                     // Create the matrix for positioning / rotation
                     world = Matrix.Multiply(t.Orientation, Matrix.RotationZ(t.Thing.Angle));
+					world = Matrix.Multiply(world, t.Scale);
                     world = Matrix.Multiply(world, t.Position);
                     ApplyMatrices3D();
 
diff --git a/Source/Core/VisualModes/VisualThing.cs b/Source/Core/VisualModes/VisualThing.cs
index fe1a0aada1b54a92ca65814c77a49477829c3f9b..d20dcc81320264a8a1ca4b1242263c64da1f7cfe 100644
--- a/Source/Core/VisualModes/VisualThing.cs
+++ b/Source/Core/VisualModes/VisualThing.cs
@@ -72,6 +72,7 @@ namespace CodeImp.DoomBuilder.VisualModes
         //mxd
         private int cameraDistance3D;
         private int thingHeight;
+		protected Matrix scale; //mxd. Used in model rendering
 
         //mxd. light properties
         private int lightType;
@@ -103,6 +104,7 @@ namespace CodeImp.DoomBuilder.VisualModes
         
         //mxd
         internal int VertexColor { get { return vertices.Length > 0 ? vertices[0].c : 0;} }
+		internal Matrix Scale { get { return scale; } }
         public int CameraDistance3D { get { return cameraDistance3D; } }
 		public bool Sizeless { get { return sizeless; } }
         public Vector3 Center { 
@@ -166,6 +168,7 @@ namespace CodeImp.DoomBuilder.VisualModes
 			this.orientation = Matrix.Identity;
 			this.position = Matrix.Identity;
 			this.cagescales = Matrix.Identity;
+			this.scale = Matrix.Identity; //mxd
 
             //mxd
             lightType = -1;
@@ -286,6 +289,11 @@ namespace CodeImp.DoomBuilder.VisualModes
 			triangles = vertices.Length / 3;
 			updategeo = true;
 		}
+
+		//mxd
+		protected void SetScale(float scaleX, float scaleY) {
+			scale = Matrix.Scaling(scaleX, scaleX, scaleY);
+		}
 		
 		// This updates the visual thing
 		public virtual void Update()
diff --git a/Source/Core/Windows/ConfigForm.cs b/Source/Core/Windows/ConfigForm.cs
index dca69ad8151b655266b5fb48cdf9c413ceebb4bb..aa9dc7bfb74ee8b0d3b0643adc847e01320f05b2 100644
--- a/Source/Core/Windows/ConfigForm.cs
+++ b/Source/Core/Windows/ConfigForm.cs
@@ -624,6 +624,7 @@ namespace CodeImp.DoomBuilder.Windows
         private void btnRemoveEngine_Click(object sender, EventArgs e) {
             //remove params
             int index = cbEngineSelector.SelectedIndex;
+			cbEngineSelector.SelectedIndex = -1;
             configinfo.TestEngines.RemoveAt(index);
             
             //refresh engines list
@@ -642,7 +643,9 @@ namespace CodeImp.DoomBuilder.Windows
 
         //mxd
         private void cbEngineSelector_SelectedIndexChanged(object sender, EventArgs e) {
-            //set new values
+			if(cbEngineSelector.SelectedIndex == -1) return;
+			
+			//set new values
             configinfo.CurrentEngineIndex = cbEngineSelector.SelectedIndex;
 			cbEngineSelector.Tag = cbEngineSelector.SelectedIndex; //store for later use
 
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs
index 933686cca622feaf6b7f03793345cb04216c10f0..6a16a29233bb5b34536340fa62d2555c9ee0f9eb 100644
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs
@@ -25,6 +25,7 @@ using CodeImp.DoomBuilder.Geometry;
 using CodeImp.DoomBuilder.VisualModes;
 using CodeImp.DoomBuilder.Config;
 using CodeImp.DoomBuilder.Data;
+using System.Drawing.Drawing2D;
 
 #endregion
 
@@ -259,6 +260,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			SetPosition(pos);
 			SetCageSize(infoRadius, infoHeight);
 			SetCageColor(Thing.Color);
+			SetScale(info.SpriteScale.Width, info.SpriteScale.Height); //mxd
 
 			// Keep info for object picking
 			cageradius2 = infoRadius * Angle2D.SQRT2;