diff --git a/Source/Core/VisualModes/VisualSector.cs b/Source/Core/VisualModes/VisualSector.cs
index 8a04708d064cd98d592ea914fdeb258a446794bc..dc5511c1a3dc84d4927043209813f3664b6b1e71 100755
--- a/Source/Core/VisualModes/VisualSector.cs
+++ b/Source/Core/VisualModes/VisualSector.cs
@@ -53,7 +53,11 @@ namespace CodeImp.DoomBuilder.VisualModes
 		internal List<VisualGeometry> FixedGeometry { get { return fixedgeometry; } }
 		internal List<VisualGeometry> AllGeometry { get { return allgeometry; } }
 		internal VertexBuffer GeometryBuffer { get { return geobuffer; } }
-		internal bool NeedsUpdateGeo { get { return updategeo; } set { updategeo |= value; } }
+		internal bool NeedsUpdateGeo
+        {
+            get { return updategeo; }
+            set { updategeo |= value; }
+        }
 		
 		public bool IsDisposed { get { return isdisposed; } }
 		public Sector Sector { get { return sector; } }
@@ -105,7 +109,7 @@ namespace CodeImp.DoomBuilder.VisualModes
 			// Trash geometry buffer
 			if(geobuffer != null) geobuffer.Dispose();
 			geobuffer = null;
-			updategeo = true;
+            NeedsUpdateGeo = true;
 		}
 
 		// This is called resets when the device is reset
@@ -164,7 +168,7 @@ namespace CodeImp.DoomBuilder.VisualModes
 		/// </summary>
 		public void AddGeometry(VisualGeometry geo)
 		{
-			updategeo = true;
+            NeedsUpdateGeo = true;
 			allgeometry.Add(geo);
 			if(geo.Sidedef != null)
 			{
@@ -186,7 +190,7 @@ namespace CodeImp.DoomBuilder.VisualModes
 			allgeometry.Clear();
 			fixedgeometry.Clear();
 			sidedefgeometry.Clear();
-			updategeo = true;
+            NeedsUpdateGeo = true;
 		}
 
 		// This gets the geometry list for the specified sidedef
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs
index 809ebb4484fdfe8a02487a6d6e456730cbc7f2ea..0de67de4239f6e89738eb75e5ef58440d87343be 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs
@@ -45,11 +45,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
 
 		protected readonly BaseVisualMode mode;
 		protected long setuponloadedtexture;
+        private long lastsetuponloadedtexture;
 
-		// This is only used to see if this object has already received a change
-		// in a multiselection. The Changed property on the BaseVisualSector is
-		// used to indicate a rebuild is needed.
-		protected bool changed;
+        // This is only used to see if this object has already received a change
+        // in a multiselection. The Changed property on the BaseVisualSector is
+        // used to indicate a rebuild is needed.
+        protected bool changed;
 
 		protected SectorLevel level;
 		protected Effect3DFloor extrafloor;
@@ -597,17 +598,21 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public virtual void OnProcess(long deltatime)
 		{
 			// If the texture was not loaded, but is loaded now, then re-setup geometry
-			if(setuponloadedtexture != 0)
+			if(setuponloadedtexture != lastsetuponloadedtexture)
 			{
-				ImageData t = General.Map.Data.GetFlatImage(setuponloadedtexture);
-				if(t != null)
-				{
-					if(t.IsImageLoaded)
-					{
-						setuponloadedtexture = 0;
-						Setup();
-					}
-				}
+                if (setuponloadedtexture != 0)
+                {
+                    ImageData t = General.Map.Data.GetFlatImage(setuponloadedtexture);
+                    if (t != null && t.IsImageLoaded)
+                    {
+                        lastsetuponloadedtexture = setuponloadedtexture;
+                        Setup();
+                    }
+                }
+                else
+                {
+                    lastsetuponloadedtexture = setuponloadedtexture;
+                }
 			}
 		}
 
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs
index a8e54286eb9ca00c9446d31e3f76f8cafe072b62..01102873a2a3e1f483e290fc51129fd8def77440 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs
@@ -48,9 +48,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		protected Plane top;
 		protected Plane bottom;
 		protected long setuponloadedtexture;
-		
-		// UV dragging
-		private float dragstartanglexy;
+        private long lastsetuponloadedtexture;
+
+        // UV dragging
+        private float dragstartanglexy;
 		private float dragstartanglez;
 		private Vector3D dragorigin;
 		private Vector3D deltaxy;
@@ -884,20 +885,24 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		// Processing
 		public virtual void OnProcess(long deltatime)
 		{
-			// If the texture was not loaded, but is loaded now, then re-setup geometry
-			if(setuponloadedtexture != 0)
-			{
-				ImageData t = General.Map.Data.GetTextureImage(setuponloadedtexture);
-				if(t != null)
-				{
-					if(t.IsImageLoaded)
-					{
-						setuponloadedtexture = 0;
-						Setup();
-					}
-				}
-			}
-		}
+            // If the texture was not loaded, but is loaded now, then re-setup geometry
+            if (setuponloadedtexture != lastsetuponloadedtexture)
+            {
+                if (setuponloadedtexture != 0)
+                {
+                    ImageData t = General.Map.Data.GetTextureImage(setuponloadedtexture);
+                    if (t != null && t.IsImageLoaded)
+                    {
+                        lastsetuponloadedtexture = setuponloadedtexture;
+                        Setup();
+                    }
+                }
+                else
+                {
+                    lastsetuponloadedtexture = setuponloadedtexture;
+                }
+            }
+        }
 		
 		// Change target height
 		public virtual void OnChangeTargetHeight(int amount)