diff --git a/Source/Core/Rendering/RenderDevice.cs b/Source/Core/Rendering/RenderDevice.cs
index f6dcf3a12947d7f95f453225832ec149c4f40b26..47a84bd99764f0c74b5240734919a350e002cac6 100755
--- a/Source/Core/Rendering/RenderDevice.cs
+++ b/Source/Core/Rendering/RenderDevice.cs
@@ -276,7 +276,8 @@ namespace CodeImp.DoomBuilder.Rendering
 
         public void SetBufferData(VertexBuffer buffer, int length, VertexFormat format)
         {
-            RenderDevice_SetVertexBufferData(Handle, buffer.Handle, IntPtr.Zero, length * (format == VertexFormat.Flat ? FlatVertex.Stride : WorldVertex.Stride), format);
+            int stride = (format == VertexFormat.Flat) ? FlatVertex.Stride : WorldVertex.Stride;
+            RenderDevice_SetVertexBufferData(Handle, buffer.Handle, IntPtr.Zero, length * stride, format);
         }
 
         public void SetBufferData(VertexBuffer buffer, FlatVertex[] data)
@@ -291,18 +292,18 @@ namespace CodeImp.DoomBuilder.Rendering
 
         public void SetBufferSubdata(VertexBuffer buffer, long destOffset, FlatVertex[] data)
         {
-            RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset, data, data.Length * Marshal.SizeOf<FlatVertex>());
+            RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset * FlatVertex.Stride, data, data.Length * FlatVertex.Stride);
         }
 
         public void SetBufferSubdata(VertexBuffer buffer, long destOffset, WorldVertex[] data)
         {
-            RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset, data, data.Length * Marshal.SizeOf<WorldVertex>());
+            RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset * WorldVertex.Stride, data, data.Length * WorldVertex.Stride);
         }
 
-        public void SetBufferSubdata(VertexBuffer buffer, long destOffset, FlatVertex[] data, long offset, long size)
+        public void SetBufferSubdata(VertexBuffer buffer, FlatVertex[] data, long size)
         {
-            if (data.Length < size || size < 0) throw new ArgumentOutOfRangeException("size");
-            RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset, data, size * Marshal.SizeOf<FlatVertex>());
+            if (size < 0 || size > data.Length) throw new ArgumentOutOfRangeException("size");
+            RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, 0, data, size * FlatVertex.Stride);
         }
 
         public void SetPixels(Texture texture, System.Drawing.Bitmap bitmap)
diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs
index 96bb8065840d5f1b6a057bad0b6f2fcb2e99466a..25e409077d147996d4340d6d1c3de4707cddb337 100755
--- a/Source/Core/Rendering/Renderer2D.cs
+++ b/Source/Core/Rendering/Renderer2D.cs
@@ -1283,7 +1283,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					if(buffercount == locksize)
 					{
 						// Write to buffer
-                        graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6);
+                        graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6);
 						
 						// Draw!
 						graphics.Draw(PrimitiveType.TriangleList, 0, buffercount * 2);
@@ -1295,7 +1295,7 @@ namespace CodeImp.DoomBuilder.Rendering
 				}
 
 				// Write to buffer
-				if(buffercount > 0) graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6);
+				if(buffercount > 0) graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6);
 				
 				// Draw what's still remaining
 				if(buffercount > 0)
@@ -1422,7 +1422,7 @@ namespace CodeImp.DoomBuilder.Rendering
 							if(buffercount == locksize)
 							{
 								// Write to buffer
-                                graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6);
+                                graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6);
 
 								// Draw!
 								graphics.Draw(PrimitiveType.TriangleList, 0, buffercount * 2);
@@ -1435,7 +1435,7 @@ namespace CodeImp.DoomBuilder.Rendering
 						}
 
 						// Write to buffer
-                        graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6);
+                        graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6);
 
 						// Draw what's still remaining
 						if(buffercount > 0) graphics.Draw(PrimitiveType.TriangleList, 0, buffercount * 2);
@@ -1466,7 +1466,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					if(buffercount == locksize) 
 					{
 						// Write to buffer
-                        graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6);
+                        graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6);
 
 						// Draw!
 						graphics.Draw(PrimitiveType.TriangleList, 0, buffercount * 2);
@@ -1478,7 +1478,7 @@ namespace CodeImp.DoomBuilder.Rendering
 				}
 
 				// Write to buffer
-				if(buffercount > 0) graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6);
+				if(buffercount > 0) graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6);
 
 				// Draw what's still remaining
 				if(buffercount > 0) 
diff --git a/Source/Core/Rendering/SurfaceManager.cs b/Source/Core/Rendering/SurfaceManager.cs
index 5177dad0a0fbe3c7f6fcd3756e05bd3d6433af4f..ab8d6bff515b112bf167257fd566ce8fd9f64859 100755
--- a/Source/Core/Rendering/SurfaceManager.cs
+++ b/Source/Core/Rendering/SurfaceManager.cs
@@ -147,8 +147,8 @@ namespace CodeImp.DoomBuilder.Rendering
 					{
 						if(e.bufferindex == i)
 						{
-                            General.Map.Graphics.SetBufferSubdata(b, e.vertexoffset * FlatVertex.Stride, e.floorvertices);
-                            General.Map.Graphics.SetBufferSubdata(b, (e.vertexoffset + e.floorvertices.Length) * FlatVertex.Stride, e.ceilvertices);
+                            General.Map.Graphics.SetBufferSubdata(b, e.vertexoffset, e.floorvertices);
+                            General.Map.Graphics.SetBufferSubdata(b, e.vertexoffset + e.floorvertices.Length, e.ceilvertices);
 						}
 					}
 
@@ -326,8 +326,8 @@ namespace CodeImp.DoomBuilder.Rendering
 						if(!resourcesunloaded)
 						{
                             // Fill buffer
-                            General.Map.Graphics.SetBufferSubdata(set.buffers[bufferindex], vertexoffset * FlatVertex.Stride, e.floorvertices);
-                            General.Map.Graphics.SetBufferSubdata(set.buffers[bufferindex], (vertexoffset + e.floorvertices.Length) * FlatVertex.Stride, e.ceilvertices);
+                            General.Map.Graphics.SetBufferSubdata(set.buffers[bufferindex], vertexoffset, e.floorvertices);
+                            General.Map.Graphics.SetBufferSubdata(set.buffers[bufferindex], vertexoffset + e.floorvertices.Length, e.ceilvertices);
 						}
 
 						// Set the new location in the buffer
@@ -448,8 +448,8 @@ namespace CodeImp.DoomBuilder.Rendering
 				if(!resourcesunloaded)
 				{
 					VertexBuffer vb = set.buffers[e.bufferindex];
-                    General.Map.Graphics.SetBufferSubdata(vb, e.vertexoffset * FlatVertex.Stride, e.floorvertices);
-                    General.Map.Graphics.SetBufferSubdata(vb, (e.vertexoffset + e.floorvertices.Length) * FlatVertex.Stride, e.ceilvertices);
+                    General.Map.Graphics.SetBufferSubdata(vb, e.vertexoffset, e.floorvertices);
+                    General.Map.Graphics.SetBufferSubdata(vb, e.vertexoffset + e.floorvertices.Length, e.ceilvertices);
 				}
 			}
 		}
diff --git a/Source/Core/VisualModes/VisualSector.cs b/Source/Core/VisualModes/VisualSector.cs
index 3dd6c3d8642706537cf02fb054f1d27ef3cde0c9..8a04708d064cd98d592ea914fdeb258a446794bc 100755
--- a/Source/Core/VisualModes/VisualSector.cs
+++ b/Source/Core/VisualModes/VisualSector.cs
@@ -145,7 +145,7 @@ namespace CodeImp.DoomBuilder.VisualModes
 				{
 					if((g.Vertices != null) && (g.Vertices.Length > 0))
 					{
-                        graphics.SetBufferSubdata(geobuffer, v * WorldVertex.Stride, g.Vertices);
+                        graphics.SetBufferSubdata(geobuffer, v, g.Vertices);
 						g.VertexOffset = v;
 						v += g.Vertices.Length;
 					}