diff --git a/Source/Core/Rendering/RenderDevice.cs b/Source/Core/Rendering/RenderDevice.cs
index 47a84bd99764f0c74b5240734919a350e002cac6..52a3c49860c7947a1ed75604908d0eef29e51697 100755
--- a/Source/Core/Rendering/RenderDevice.cs
+++ b/Source/Core/Rendering/RenderDevice.cs
@@ -187,18 +187,6 @@ namespace CodeImp.DoomBuilder.Rendering
             RenderDevice_SetZWriteEnable(Handle, value);
         }
 
-        Matrix[] Transforms = new Matrix[] { Matrix.Identity, Matrix.Identity, Matrix.Identity };
-
-        public Matrix GetTransform(TransformState state)
-        {
-            return Transforms[(int)state];
-        }
-
-        public void SetTransform(TransformState state, Matrix matrix)
-        {
-            Transforms[(int)state] = matrix;
-        }
-
         public void SetTexture(int unit, BaseTexture value)
         {
             RenderDevice_SetTexture(Handle, unit, value != null ? value.Handle : IntPtr.Zero);
@@ -366,11 +354,6 @@ namespace CodeImp.DoomBuilder.Rendering
 			SetTextureFactor(-1);
 			SetZEnable(false);
 			SetZWriteEnable(false);
-
-			// Matrices
-			SetTransform(TransformState.World, Matrix.Identity);
-			SetTransform(TransformState.View, Matrix.Identity);
-			SetTransform(TransformState.Projection, Matrix.Identity);
 			
 			// Texture addressing
 			SetSamplerState(0, TextureAddress.Wrap);
@@ -602,7 +585,7 @@ namespace CodeImp.DoomBuilder.Rendering
     public enum Blend : int { InverseSourceAlpha, SourceAlpha, One, BlendFactor }
     public enum BlendOperation : int { Add, ReverseSubtract }
     public enum FillMode : int { Solid, Wireframe }
-    public enum TransformState : int { World, View, Projection }
+    public enum TransformState : int { World, View }
     public enum TextureAddress : int { Wrap, Clamp }
     public enum PrimitiveType : int { LineList, TriangleList, TriangleStrip }
     public enum TextureFilter : int { None, Point, Linear, Anisotropic }
diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs
index 25e409077d147996d4340d6d1c3de4707cddb337..876d87e47d6ef41b73308c1abcca440a8284550d 100755
--- a/Source/Core/Rendering/Renderer2D.cs
+++ b/Source/Core/Rendering/Renderer2D.cs
@@ -110,8 +110,12 @@ namespace CodeImp.DoomBuilder.Rendering
 		private RectangleF viewport;
 		private RectangleF yviewport;
 
-		// Presentation
-		private Presentation present;
+        // Spaghetti
+        Matrix viewmatrix = Matrix.Identity;
+        Matrix worldmatrix = Matrix.Identity;
+
+        // Presentation
+        private Presentation present;
 		
 		#endregion
 
@@ -185,7 +189,7 @@ namespace CodeImp.DoomBuilder.Rendering
 			graphics.SetZEnable(false);
 			graphics.SetFogEnable(false);
 			graphics.SetVertexBuffer(screenverts);
-			graphics.SetTransform(TransformState.World, Matrix.Identity);
+			worldmatrix = Matrix.Identity;
 
 			// Go for all layers
 			foreach(PresentLayer layer in present.layers)
@@ -468,8 +472,7 @@ namespace CodeImp.DoomBuilder.Rendering
 
 			Matrix scaling = Matrix.Scaling((1f / windowsize.Width) * 2f, (1f / windowsize.Height) * -2f, 1f);
 			Matrix translate = Matrix.Translation(-(float)windowsize.Width * 0.5f, -(float)windowsize.Height * 0.5f, 0f);
-			graphics.SetTransform(TransformState.View, translate * scaling);
-			graphics.SetTransform(TransformState.Projection, Matrix.Identity);
+			viewmatrix = translate * scaling;
 			Vector2D lt = DisplayToMap(new Vector2D(0.0f, 0.0f));
 			Vector2D rb = DisplayToMap(new Vector2D(windowsize.Width, windowsize.Height));
 			viewport = new RectangleF(lt.x, lt.y, rb.x - lt.x, rb.y - lt.y);
@@ -483,11 +486,11 @@ namespace CodeImp.DoomBuilder.Rendering
 			{
 				Matrix translate = Matrix.Translation(translatex, translatey, 0f);
 				Matrix scaling = Matrix.Scaling(scale, -scale, 1f);
-				graphics.SetTransform(TransformState.World, translate * scaling);
+				worldmatrix = translate * scaling;
 			}
 			else
 			{
-				graphics.SetTransform(TransformState.World, Matrix.Identity);
+				worldmatrix = Matrix.Identity;
 			}
 		}
 
@@ -495,9 +498,7 @@ namespace CodeImp.DoomBuilder.Rendering
         {
             Vector4 values = new Vector4(texelx, texely, fsaafactor, alpha);
             graphics.SetUniform(UniformName.rendersettings, values);
-            Matrix world = graphics.GetTransform(TransformState.World);
-            Matrix view = graphics.GetTransform(TransformState.View);
-            graphics.SetUniform(UniformName.transformsettings, world * view);
+            graphics.SetUniform(UniformName.transformsettings, worldmatrix * viewmatrix);
             graphics.SetSamplerFilter(0, bilinear ? TextureFilter.Linear : TextureFilter.Point);
         }
 
@@ -505,16 +506,13 @@ namespace CodeImp.DoomBuilder.Rendering
         {
             Vector4 values = new Vector4(0.0f, 0.0f, 1.0f, alpha);
             graphics.SetUniform(UniformName.rendersettings, values);
-            Matrix world = graphics.GetTransform(TransformState.World);
-            Matrix view = graphics.GetTransform(TransformState.View);
-            graphics.SetUniform(UniformName.transformsettings, world * view);
+            graphics.SetUniform(UniformName.transformsettings, worldmatrix * viewmatrix);
         }
 
         //mxd. Used to render models
         private void SetThings2DTransformSettings(Matrix world)
         {
-            Matrix view = graphics.GetTransform(TransformState.View);
-            graphics.SetUniform(UniformName.transformsettings, world * view);
+            graphics.SetUniform(UniformName.transformsettings, world * viewmatrix);
         }
 
         /// <summary>
diff --git a/Source/Core/Rendering/Renderer3D.cs b/Source/Core/Rendering/Renderer3D.cs
index 72fe814ea22cf59512d2d28ec02741cae0ecd346..8e5afea508f354b064cd228e152ad412f8a8f5cf 100755
--- a/Source/Core/Rendering/Renderer3D.cs
+++ b/Source/Core/Rendering/Renderer3D.cs
@@ -52,9 +52,13 @@ namespace CodeImp.DoomBuilder.Rendering
 		private Vector3D cameraposition;
         private Vector3D cameravector;
 		private ShaderName shaderpass;
-		
-		// Window size
-		private Size windowsize;
+
+        // Spaghetti
+        Matrix viewmatrix = Matrix.Identity;
+        Matrix worldmatrix = Matrix.Identity;
+
+        // Window size
+        private Size windowsize;
 		
 		// Frustum
 		private ProjectedFrustum2D frustum;
@@ -287,9 +291,8 @@ namespace CodeImp.DoomBuilder.Rendering
 		// This sets the appropriate view matrix
 		public void ApplyMatrices2D()
 		{
-			graphics.SetTransform(TransformState.World, world);
-			graphics.SetTransform(TransformState.Projection, Matrix.Identity);
-			graphics.SetTransform(TransformState.View, view2d);
+			worldmatrix = world;
+			viewmatrix = view2d;
 		}
 		
 		#endregion
@@ -2011,8 +2014,7 @@ namespace CodeImp.DoomBuilder.Rendering
 			graphics.SetSourceBlend(Blend.SourceAlpha);
 			graphics.SetDestinationBlend(Blend.InverseSourceAlpha);
 			graphics.SetTextureFactor(-1);
-			graphics.SetTransform(TransformState.World, Matrix.Identity);
-			graphics.SetTransform(TransformState.Projection, Matrix.Identity);
+			worldmatrix = Matrix.Identity;
 			ApplyMatrices2D();
 
             graphics.SetShader(ShaderName.display2d_normal);
@@ -2038,9 +2040,7 @@ namespace CodeImp.DoomBuilder.Rendering
         {
             Vector4 values = new Vector4(texelx, texely, fsaafactor, alpha);
             graphics.SetUniform(UniformName.rendersettings, values);
-            Matrix world = graphics.GetTransform(TransformState.World);
-            Matrix view = graphics.GetTransform(TransformState.View);
-            graphics.SetUniform(UniformName.transformsettings, world * view);
+            graphics.SetUniform(UniformName.transformsettings, worldmatrix * viewmatrix);
             graphics.SetSamplerFilter(0, bilinear ? TextureFilter.Linear : TextureFilter.Point);
         }
 
diff --git a/Source/Native/RenderDevice.h b/Source/Native/RenderDevice.h
index ca734ba96904b72aeec02aa2bc2080e694519592..860d9216cf819049cc255ec96d52d57eb2d40614 100644
--- a/Source/Native/RenderDevice.h
+++ b/Source/Native/RenderDevice.h
@@ -14,7 +14,6 @@ enum class Cull : int { None, Clockwise };
 enum class Blend : int { InverseSourceAlpha, SourceAlpha, One, BlendFactor };
 enum class BlendOperation : int { Add, ReverseSubtract };
 enum class FillMode : int { Solid, Wireframe };
-enum class TransformState : int { World, View, Projection, NumTransforms };
 enum class TextureAddress : int { Wrap, Clamp };
 enum class ShaderFlags : int { None, Debug };
 enum class PrimitiveType : int { LineList, TriangleList, TriangleStrip };