diff --git a/Source/Core/Data/DynamicBitmapImage.cs b/Source/Core/Data/DynamicBitmapImage.cs
index 0ac7dbc84ab7e632494c7bfb259028e1fd13c24e..43d4b0025c86578198fc5ee74ffdb66d454c9b1f 100755
--- a/Source/Core/Data/DynamicBitmapImage.cs
+++ b/Source/Core/Data/DynamicBitmapImage.cs
@@ -16,7 +16,9 @@
 
 #region ================== Namespaces
 
+using System;
 using System.Drawing;
+using System.Drawing.Imaging;
 using CodeImp.DoomBuilder.Rendering;
 
 #endregion
@@ -34,6 +36,9 @@ namespace CodeImp.DoomBuilder.Data
 		// Constructor
 		public DynamicBitmapImage(Bitmap img, string name) : base(img, name)
 		{
+			if (img.PixelFormat != PixelFormat.Format32bppArgb)
+				throw new Exception("Dynamic images must be in 32 bits ARGB format.");
+
 			// Initialize
 			this.UseColorCorrection = false;
 			this.dynamictexture = true;
diff --git a/Source/Core/Data/ImageData.cs b/Source/Core/Data/ImageData.cs
index 67c4f637acaa386cdb631a0c1f88126fa6f5011c..06a75654c971ab19742ec607be9b857e1c7e6fc7 100755
--- a/Source/Core/Data/ImageData.cs
+++ b/Source/Core/Data/ImageData.cs
@@ -402,9 +402,6 @@ namespace CodeImp.DoomBuilder.Data
 				// Bitmap has incorrect format?
 				if(bitmap.PixelFormat != PixelFormat.Format32bppArgb)
 				{
-					if(dynamictexture)
-						throw new Exception("Dynamic images must be in 32 bits ARGB format.");
-						
 					//General.ErrorLogger.Add(ErrorType.Warning, "Image '" + name + "' does not have A8R8G8B8 pixel format. Conversion was needed.");
 					Bitmap oldbitmap = bitmap;
 					try
@@ -467,12 +464,6 @@ namespace CodeImp.DoomBuilder.Data
 				width = bitmap.Size.Width;
 				height = bitmap.Size.Height;
 
-				if(dynamictexture)
-				{
-					if((width != General.NextPowerOf2(width)) || (height != General.NextPowerOf2(height)))
-						throw new Exception("Dynamic images must have a size in powers of 2.");
-				}
-
 				// Do we still have to set a scale?
 				if((scale.x == 0.0f) && (scale.y == 0.0f))
 				{
@@ -688,16 +679,8 @@ namespace CodeImp.DoomBuilder.Data
 
             texture = new Texture(General.Map.Graphics, loadedbitmap);
 
-            if (dynamictexture)
-            {
-                if ((width != texture.Width) || (height != texture.Height))
-                    throw new Exception("Could not create a texture with the same size as the image.");
-            }
-            else
-            {
-                loadedbitmap.Dispose();
-                loadedbitmap = null;
-            }
+            loadedbitmap.Dispose();
+            loadedbitmap = null;
 
 #if DEBUG
 			texture.Tag = name; //mxd. Helps with tracking undisposed resources...
@@ -706,15 +689,14 @@ namespace CodeImp.DoomBuilder.Data
 		}
 
 		// This updates a dynamic texture
-		public void UpdateTexture()
+		public void UpdateTexture(Bitmap canvas)
 		{
+			if (canvas.PixelFormat != PixelFormat.Format32bppArgb)
+				throw new Exception("Dynamic images must be in 32 bits ARGB format.");
 			if(!dynamictexture)
 				throw new Exception("The image must be a dynamic image to support direct updating.");
 
-			if((texture != null) && !texture.Disposed)
-			{
-                General.Map.Graphics.SetPixels(texture, loadedbitmap);
-			}
+            General.Map.Graphics.SetPixels(GetTexture(), canvas);
 		}
 		
 		// This destroys the Direct3D texture
diff --git a/Source/Plugins/VisplaneExplorer/VisplaneExplorerMode.cs b/Source/Plugins/VisplaneExplorer/VisplaneExplorerMode.cs
index 3e25628d024a60a59b80af3295e1225e6caeab0d..a4986579cf492c2fd3b0a64c4cacb293bb03a844 100755
--- a/Source/Plugins/VisplaneExplorer/VisplaneExplorerMode.cs
+++ b/Source/Plugins/VisplaneExplorer/VisplaneExplorerMode.cs
@@ -29,13 +29,6 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
 			  AllowCopyPaste = false)]
 	public class VisplaneExplorerMode : ClassicMode
 	{
-		#region ================== APIs
-
-		[DllImport("kernel32.dll")]
-		static extern void RtlZeroMemory(IntPtr dst, int length);
-
-		#endregion
-
 		#region ================== Variables
 
 		// The image is the ImageData resource for Doom Builder to work with
@@ -119,8 +112,13 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
 			Palette pal = (BuilderPlug.InterfaceForm.ShowHeatmap ? BuilderPlug.Palettes[(int)ViewStats.Heatmap] : BuilderPlug.Palettes[viewstats]);
 
 			BitmapData bd = canvas.LockBits(new Rectangle(0, 0, canvas.Size.Width, canvas.Size.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
-			RtlZeroMemory(bd.Scan0, bd.Width * bd.Height * 4);
-			int* p = (int*)bd.Scan0.ToPointer();
+			uint* p = (uint*)bd.Scan0.ToPointer();
+
+			int count = bd.Width * bd.Height;
+			for (int i = 0; i < count; i++)
+			{
+				p[i] = 0;
+			}
 
 			foreach(KeyValuePair<Point, Tile> t in tiles)
 			{
@@ -168,13 +166,13 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
 
 						// Get the data and apply the color
 						byte value = t.Value.GetPointByte((int)ux, Tile.TILE_SIZE - 1 - (int)uy, viewstats);
-						p[screeny * bd.Width + screenx] = pal.Colors[value];
+						p[screeny * bd.Width + screenx] = (uint)pal.Colors[value];
 					}
 				}
 			}
 			
 			canvas.UnlockBits(bd);
-			image.UpdateTexture();
+			image.UpdateTexture(canvas);
 		}
 
 		// This queues points for all current tiles