diff --git a/src/Main/FrameBuffer.cpp b/src/Main/FrameBuffer.cpp
index a2f9d52..59543ac 100644
--- a/src/Main/FrameBuffer.cpp
+++ b/src/Main/FrameBuffer.cpp
@@ -124,8 +124,8 @@
 			cursor = cursorImage->lockExternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC);
 			cursorImage->unlockExternal();
 
-			cursorWidth = cursorImage->getExternalWidth();
-			cursorHeight = cursorImage->getExternalHeight();
+			cursorWidth = cursorImage->getWidth();
+			cursorHeight = cursorImage->getHeight();
 		}
 		else
 		{
diff --git a/src/OpenGL/libGL/Device.cpp b/src/OpenGL/libGL/Device.cpp
index 5a90363..7dc9376 100644
--- a/src/OpenGL/libGL/Device.cpp
+++ b/src/OpenGL/libGL/Device.cpp
@@ -185,8 +185,8 @@
 
 		int x0 = 0;
 		int y0 = 0;
-		int width = renderTarget->getExternalWidth();
-		int height = renderTarget->getExternalHeight();
+		int width = renderTarget->getWidth();
+		int height = renderTarget->getHeight();
 
 		if(scissorEnable)   // Clamp against scissor rectangle
 		{
@@ -211,8 +211,8 @@
 
 		int x0 = 0;
 		int y0 = 0;
-		int width = depthStencil->getExternalWidth();
-		int height = depthStencil->getExternalHeight();
+		int width = depthStencil->getWidth();
+		int height = depthStencil->getHeight();
 
 		if(scissorEnable)   // Clamp against scissor rectangle
 		{
@@ -234,8 +234,8 @@
 
 		int x0 = 0;
 		int y0 = 0;
-		int width = depthStencil->getExternalWidth();
-		int height = depthStencil->getExternalHeight();
+		int width = depthStencil->getWidth();
+		int height = depthStencil->getHeight();
 
 		if(scissorEnable)   // Clamp against scissor rectangle
 		{
@@ -496,10 +496,10 @@
 			return false;
 		}
 		
-		int sWidth = source->getExternalWidth();
-		int sHeight = source->getExternalHeight();
-		int dWidth = dest->getExternalWidth();
-		int dHeight = dest->getExternalHeight();
+		int sWidth = source->getWidth();
+		int sHeight = source->getHeight();
+		int dWidth = dest->getWidth();
+		int dHeight = dest->getHeight();
 
 		SliceRect sRect;
 		SliceRect dRect;
@@ -547,8 +547,8 @@
 				sw::byte *sourceBuffer = (sw::byte*)source->lockInternal(0, 0, sRect.slice, LOCK_READONLY, PUBLIC);
 				sw::byte *destBuffer = (sw::byte*)dest->lockInternal(0, 0, dRect.slice, LOCK_DISCARD, PUBLIC);
 
-				unsigned int width = source->getInternalWidth();
-				unsigned int height = source->getInternalHeight();
+				unsigned int width = source->getWidth();
+				unsigned int height = source->getHeight();
 				unsigned int pitch = source->getInternalPitchB();
 
 				for(unsigned int y = 0; y < height; y++)
@@ -568,8 +568,8 @@
 				sw::byte *sourceBuffer = (sw::byte*)source->lockStencil(0, PUBLIC);
 				sw::byte *destBuffer = (sw::byte*)dest->lockStencil(0, PUBLIC);
 
-				unsigned int width = source->getInternalWidth();
-				unsigned int height = source->getInternalHeight();
+				unsigned int width = source->getWidth();
+				unsigned int height = source->getHeight();
 				unsigned int pitch = source->getStencilPitchB();
 
 				for(unsigned int y = 0; y < height; y++)
@@ -710,17 +710,17 @@
 			if(renderTarget)
 			{
 				scissor.x0 = max(scissor.x0, 0);
-				scissor.x1 = min(scissor.x1, renderTarget->getExternalWidth());
+				scissor.x1 = min(scissor.x1, renderTarget->getWidth());
 				scissor.y0 = max(scissor.y0, 0);
-				scissor.y1 = min(scissor.y1, renderTarget->getExternalHeight());
+				scissor.y1 = min(scissor.y1, renderTarget->getHeight());
 			}
 
 			if(depthStencil)
 			{
 				scissor.x0 = max(scissor.x0, 0);
-				scissor.x1 = min(scissor.x1, depthStencil->getExternalWidth());
+				scissor.x1 = min(scissor.x1, depthStencil->getWidth());
 				scissor.y0 = max(scissor.y0, 0);
-				scissor.y1 = min(scissor.y1, depthStencil->getExternalHeight());
+				scissor.y1 = min(scissor.y1, depthStencil->getHeight());
 			}
 
 			setScissor(scissor);
diff --git a/src/OpenGL/libGLES_CM/Device.cpp b/src/OpenGL/libGLES_CM/Device.cpp
index a37fb89..508668f 100644
--- a/src/OpenGL/libGLES_CM/Device.cpp
+++ b/src/OpenGL/libGLES_CM/Device.cpp
@@ -144,8 +144,8 @@
 
 		int x0 = 0;
 		int y0 = 0;
-		int width = renderTarget->getExternalWidth();
-		int height = renderTarget->getExternalHeight();
+		int width = renderTarget->getWidth();
+		int height = renderTarget->getHeight();
 
 		if(scissorEnable)   // Clamp against scissor rectangle
 		{
@@ -170,8 +170,8 @@
 
 		int x0 = 0;
 		int y0 = 0;
-		int width = depthStencil->getExternalWidth();
-		int height = depthStencil->getExternalHeight();
+		int width = depthStencil->getWidth();
+		int height = depthStencil->getHeight();
 
 		if(scissorEnable)   // Clamp against scissor rectangle
 		{
@@ -193,8 +193,8 @@
 
 		int x0 = 0;
 		int y0 = 0;
-		int width = depthStencil->getExternalWidth();
-		int height = depthStencil->getExternalHeight();
+		int width = depthStencil->getWidth();
+		int height = depthStencil->getHeight();
 
 		if(scissorEnable)   // Clamp against scissor rectangle
 		{
@@ -414,10 +414,10 @@
 			return false;
 		}
 		
-		int sWidth = source->getExternalWidth();
-		int sHeight = source->getExternalHeight();
-		int dWidth = dest->getExternalWidth();
-		int dHeight = dest->getExternalHeight();
+		int sWidth = source->getWidth();
+		int sHeight = source->getHeight();
+		int dWidth = dest->getWidth();
+		int dHeight = dest->getHeight();
 
 		SliceRect sRect;
 		SliceRect dRect;
@@ -465,8 +465,8 @@
 				sw::byte *sourceBuffer = (sw::byte*)source->lockInternal(0, 0, sRect.slice, LOCK_READONLY, PUBLIC);
 				sw::byte *destBuffer = (sw::byte*)dest->lockInternal(0, 0, dRect.slice, LOCK_DISCARD, PUBLIC);
 
-				unsigned int width = source->getInternalWidth();
-				unsigned int height = source->getInternalHeight();
+				unsigned int width = source->getWidth();
+				unsigned int height = source->getHeight();
 				unsigned int pitch = source->getInternalPitchB();
 
 				for(unsigned int y = 0; y < height; y++)
@@ -486,8 +486,8 @@
 				sw::byte *sourceBuffer = (sw::byte*)source->lockStencil(0, PUBLIC);
 				sw::byte *destBuffer = (sw::byte*)dest->lockStencil(0, PUBLIC);
 
-				unsigned int width = source->getInternalWidth();
-				unsigned int height = source->getInternalHeight();
+				unsigned int width = source->getWidth();
+				unsigned int height = source->getHeight();
 				unsigned int pitch = source->getStencilPitchB();
 
 				for(unsigned int y = 0; y < height; y++)
@@ -583,17 +583,17 @@
 			if(renderTarget)
 			{
 				scissor.x0 = max(scissor.x0, 0);
-				scissor.x1 = min(scissor.x1, renderTarget->getExternalWidth());
+				scissor.x1 = min(scissor.x1, renderTarget->getWidth());
 				scissor.y0 = max(scissor.y0, 0);
-				scissor.y1 = min(scissor.y1, renderTarget->getExternalHeight());
+				scissor.y1 = min(scissor.y1, renderTarget->getHeight());
 			}
 
 			if(depthStencil)
 			{
 				scissor.x0 = max(scissor.x0, 0);
-				scissor.x1 = min(scissor.x1, depthStencil->getExternalWidth());
+				scissor.x1 = min(scissor.x1, depthStencil->getWidth());
 				scissor.y0 = max(scissor.y0, 0);
-				scissor.y1 = min(scissor.y1, depthStencil->getExternalHeight());
+				scissor.y1 = min(scissor.y1, depthStencil->getHeight());
 			}
 
 			setScissor(scissor);
diff --git a/src/OpenGL/libGLESv2/Device.cpp b/src/OpenGL/libGLESv2/Device.cpp
index 36ac149..79b8c26 100644
--- a/src/OpenGL/libGLESv2/Device.cpp
+++ b/src/OpenGL/libGLESv2/Device.cpp
@@ -161,8 +161,8 @@
 	{
 		x0 = 0;
 		y0 = 0;
-		width = sourceSurface->getExternalWidth();
-		height = sourceSurface->getExternalHeight();
+		width = sourceSurface->getWidth();
+		height = sourceSurface->getHeight();
 
 		if(scissorEnable)   // Clamp against scissor rectangle
 		{
@@ -511,10 +511,10 @@
 			return false;
 		}
 		
-		int sWidth = source->getExternalWidth();
-		int sHeight = source->getExternalHeight();
-		int dWidth = dest->getExternalWidth();
-		int dHeight = dest->getExternalHeight();
+		int sWidth = source->getWidth();
+		int sHeight = source->getHeight();
+		int dWidth = dest->getWidth();
+		int dHeight = dest->getHeight();
 
 		bool flipX = false;
 		bool flipY = false;
@@ -606,7 +606,7 @@
 				sw::byte *sourceBuffer = (sw::byte*)source->lockInternal(0, 0, sourceRect->slice, LOCK_READONLY, PUBLIC);
 				sw::byte *destBuffer = (sw::byte*)dest->lockInternal(0, 0, destRect->slice, LOCK_DISCARD, PUBLIC);
 
-				copyBuffer(sourceBuffer, destBuffer, source->getInternalWidth(), source->getInternalHeight(), source->getInternalPitchB(), dest->getInternalPitchB(), egl::Image::bytes(source->getInternalFormat()), flipX, flipY);
+				copyBuffer(sourceBuffer, destBuffer, source->getWidth(), source->getHeight(), source->getInternalPitchB(), dest->getInternalPitchB(), egl::Image::bytes(source->getInternalFormat()), flipX, flipY);
 
 				source->unlockInternal();
 				dest->unlockInternal();
@@ -617,7 +617,7 @@
 				sw::byte *sourceBuffer = (sw::byte*)source->lockStencil(0, PUBLIC);
 				sw::byte *destBuffer = (sw::byte*)dest->lockStencil(0, PUBLIC);
 
-				copyBuffer(sourceBuffer, destBuffer, source->getInternalWidth(), source->getInternalHeight(), source->getInternalPitchB(), dest->getInternalPitchB(), egl::Image::bytes(source->getInternalFormat()), flipX, flipY);
+				copyBuffer(sourceBuffer, destBuffer, source->getWidth(), source->getHeight(), source->getInternalPitchB(), dest->getInternalPitchB(), egl::Image::bytes(source->getInternalFormat()), flipX, flipY);
 
 				source->unlockStencil();
 				dest->unlockStencil();
@@ -673,12 +673,12 @@
 			return false;
 		}
 
-		int sWidth  = source->getExternalWidth();
-		int sHeight = source->getExternalHeight();
-		int sDepth  = source->getExternalDepth();
-		int dWidth  = dest->getExternalWidth();
-		int dHeight = dest->getExternalHeight();
-		int dDepth  = dest->getExternalDepth();
+		int sWidth  = source->getWidth();
+		int sHeight = source->getHeight();
+		int sDepth  = source->getDepth();
+		int dWidth  = dest->getWidth();
+		int dHeight = dest->getHeight();
+		int dDepth  = dest->getDepth();
 
 		bool scaling = (sWidth != dWidth) || (sHeight != dHeight) || (sDepth != dDepth);
 		bool equalFormats = source->getInternalFormat() == dest->getInternalFormat();
@@ -817,17 +817,17 @@
 			if(renderTarget)
 			{
 				scissor.x0 = max(scissor.x0, 0);
-				scissor.x1 = min(scissor.x1, renderTarget->getExternalWidth());
+				scissor.x1 = min(scissor.x1, renderTarget->getWidth());
 				scissor.y0 = max(scissor.y0, 0);
-				scissor.y1 = min(scissor.y1, renderTarget->getExternalHeight());
+				scissor.y1 = min(scissor.y1, renderTarget->getHeight());
 			}
 
 			if(depthStencil)
 			{
 				scissor.x0 = max(scissor.x0, 0);
-				scissor.x1 = min(scissor.x1, depthStencil->getExternalWidth());
+				scissor.x1 = min(scissor.x1, depthStencil->getWidth());
 				scissor.y0 = max(scissor.y0, 0);
-				scissor.y1 = min(scissor.y1, depthStencil->getExternalHeight());
+				scissor.y1 = min(scissor.y1, depthStencil->getHeight());
 			}
 
 			setScissor(scissor);
diff --git a/src/Renderer/Blitter.cpp b/src/Renderer/Blitter.cpp
index f3b9ab6..07f9e3b 100644
--- a/src/Renderer/Blitter.cpp
+++ b/src/Renderer/Blitter.cpp
@@ -95,18 +95,18 @@
 		source->lockInternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC);
 		dest->lockInternal(0, 0, 0, sw::LOCK_WRITEONLY, sw::PUBLIC);
 
-		float w = static_cast<float>(source->getExternalWidth())  / static_cast<float>(dest->getExternalWidth());
-		float h = static_cast<float>(source->getExternalHeight()) / static_cast<float>(dest->getExternalHeight());
-		float d = static_cast<float>(source->getExternalDepth())  / static_cast<float>(dest->getExternalDepth());
+		float w = static_cast<float>(source->getWidth())  / static_cast<float>(dest->getWidth());
+		float h = static_cast<float>(source->getHeight()) / static_cast<float>(dest->getHeight());
+		float d = static_cast<float>(source->getDepth())  / static_cast<float>(dest->getDepth());
 
 		float z = 0.5f * d;
-		for(int k = 0; k < dest->getExternalDepth(); ++k)
+		for(int k = 0; k < dest->getDepth(); ++k)
 		{
 			float y = 0.5f * h;
-			for(int j = 0; j < dest->getExternalHeight(); ++j)
+			for(int j = 0; j < dest->getHeight(); ++j)
 			{
 				float x = 0.5f * w;
-				for(int i = 0; i < dest->getExternalWidth(); ++i)
+				for(int i = 0; i < dest->getWidth(); ++i)
 				{
 					dest->writeInternal(i, j, k, source->sampleInternal(x, y, z));
 					x += w;
@@ -271,7 +271,7 @@
 						unscale = vector(1.0f, 1.0f, 1.0f, 1.0f);
 						break;
 					default:
-						return false;
+						return nullptr;
 					}
 
 					float4 scale;
@@ -296,7 +296,7 @@
 						scale = vector(1.0f, 1.0f, 1.0f, 1.0f);
 						break;
 					default:
-						return false;
+						return nullptr;
 					}
 
 					if(unscale != scale)
@@ -309,9 +309,9 @@
 						color = Min(color, Float4(1.0f, 1.0f, 1.0f, 1.0f));
 
 						color = Max(color, Float4(Surface::isUnsignedComponent(state.destFormat, 0) ? 0.0f : -1.0f,
-							                        Surface::isUnsignedComponent(state.destFormat, 1) ? 0.0f : -1.0f,
-													Surface::isUnsignedComponent(state.destFormat, 2) ? 0.0f : -1.0f,
-													Surface::isUnsignedComponent(state.destFormat, 3) ? 0.0f : -1.0f));
+						                          Surface::isUnsignedComponent(state.destFormat, 1) ? 0.0f : -1.0f,
+						                          Surface::isUnsignedComponent(state.destFormat, 2) ? 0.0f : -1.0f,
+						                          Surface::isUnsignedComponent(state.destFormat, 3) ? 0.0f : -1.0f));
 					}
 
 					Pointer<Byte> d = destLine + i * Surface::bytes(state.destFormat);
@@ -368,7 +368,7 @@
 						*Pointer<Float>(d) = color.x;
 						break;
 					default:
-						return false;
+						return nullptr;
 					}
 
 					x += w;
@@ -439,8 +439,8 @@
 		data.y0d = dRect.y0;
 		data.y1d = dRect.y1;
 
-		data.sWidth = source->getInternalWidth();
-		data.sHeight = source->getInternalHeight();
+		data.sWidth = source->getWidth();
+		data.sHeight = source->getHeight();
 
 		blitFunction(&data);
 
diff --git a/src/Renderer/Sampler.cpp b/src/Renderer/Sampler.cpp
index 3d73ceb..9f26e4e 100644
--- a/src/Renderer/Sampler.cpp
+++ b/src/Renderer/Sampler.cpp
@@ -109,9 +109,9 @@
 				externalTextureFormat = surface->getExternalFormat();
 				internalTextureFormat = surface->getInternalFormat();
 
-				int width = surface->getInternalWidth();
-				int height = surface->getInternalHeight();
-				int depth = surface->getInternalDepth();
+				int width = surface->getWidth();
+				int height = surface->getHeight();
+				int depth = surface->getDepth();
 				int pitchP = surface->getInternalPitchP();
 				int sliceP = surface->getInternalSliceP();
 
diff --git a/src/Renderer/Surface.hpp b/src/Renderer/Surface.hpp
index b50c127..75c926a 100644
--- a/src/Renderer/Surface.hpp
+++ b/src/Renderer/Surface.hpp
@@ -165,11 +165,12 @@
 		
 		virtual ~Surface();
 
+		inline int getWidth() const;
+		inline int getHeight() const;
+		inline int getDepth() const;
+
 		void *lockExternal(int x, int y, int z, Lock lock, Accessor client);
 		void unlockExternal();
-		inline int getExternalWidth() const;
-		inline int getExternalHeight() const;
-		inline int getExternalDepth() const;
 		inline Format getExternalFormat() const;
 		inline int getExternalPitchB() const;
 		inline int getExternalPitchP() const;
@@ -178,9 +179,6 @@
 
 		virtual void *lockInternal(int x, int y, int z, Lock lock, Accessor client);
 		virtual void unlockInternal();
-		inline int getInternalWidth() const;
-		inline int getInternalHeight() const;
-		inline int getInternalDepth() const;
 		inline Format getInternalFormat() const;
 		inline int getInternalPitchB() const;
 		inline int getInternalPitchP() const;
@@ -377,17 +375,17 @@
 
 namespace sw
 {
-	int Surface::getExternalWidth() const
+	int Surface::getWidth() const
 	{
 		return external.width;
 	}
 
-	int Surface::getExternalHeight() const
+	int Surface::getHeight() const
 	{
 		return external.height;
 	}
 
-	int Surface::getExternalDepth() const
+	int Surface::getDepth() const
 	{
 		return external.depth;
 	}
@@ -417,21 +415,6 @@
 		return external.sliceP;
 	}
 
-	int Surface::getInternalWidth() const
-	{
-		return internal.width;
-	}
-
-	int Surface::getInternalHeight() const
-	{
-		return internal.height;
-	}
-
-	int Surface::getInternalDepth() const
-	{
-		return internal.depth;
-	}
-
 	Format Surface::getInternalFormat() const
 	{
 		return internal.format;
