diff --git a/src/Common/Math.hpp b/src/Common/Math.hpp
index 47a13f5..086c6c6 100644
--- a/src/Common/Math.hpp
+++ b/src/Common/Math.hpp
@@ -92,38 +92,41 @@
 	}
 
 	#define BITS(x)    ( \
-	!!(x & 0x80000000) + \
-	!!(x & 0xC0000000) + \
-	!!(x & 0xE0000000) + \
-	!!(x & 0xF0000000) + \
-	!!(x & 0xF8000000) + \
-	!!(x & 0xFC000000) + \
-	!!(x & 0xFE000000) + \
-	!!(x & 0xFF000000) + \
-	!!(x & 0xFF800000) + \
-	!!(x & 0xFFC00000) + \
-	!!(x & 0xFFE00000) + \
-	!!(x & 0xFFF00000) + \
-	!!(x & 0xFFF80000) + \
-	!!(x & 0xFFFC0000) + \
-	!!(x & 0xFFFE0000) + \
-	!!(x & 0xFFFF0000) + \
-	!!(x & 0xFFFF8000) + \
-	!!(x & 0xFFFFC000) + \
-	!!(x & 0xFFFFE000) + \
-	!!(x & 0xFFFFF000) + \
-	!!(x & 0xFFFFF800) + \
-	!!(x & 0xFFFFFC00) + \
-	!!(x & 0xFFFFFE00) + \
-	!!(x & 0xFFFFFF00) + \
-	!!(x & 0xFFFFFF80) + \
-	!!(x & 0xFFFFFFC0) + \
-	!!(x & 0xFFFFFFE0) + \
-	!!(x & 0xFFFFFFF0) + \
-	!!(x & 0xFFFFFFF8) + \
-	!!(x & 0xFFFFFFFC) + \
-	!!(x & 0xFFFFFFFE) + \
-	!!(x & 0xFFFFFFFF))
+	!!((x) & 0x80000000) + \
+	!!((x) & 0xC0000000) + \
+	!!((x) & 0xE0000000) + \
+	!!((x) & 0xF0000000) + \
+	!!((x) & 0xF8000000) + \
+	!!((x) & 0xFC000000) + \
+	!!((x) & 0xFE000000) + \
+	!!((x) & 0xFF000000) + \
+	!!((x) & 0xFF800000) + \
+	!!((x) & 0xFFC00000) + \
+	!!((x) & 0xFFE00000) + \
+	!!((x) & 0xFFF00000) + \
+	!!((x) & 0xFFF80000) + \
+	!!((x) & 0xFFFC0000) + \
+	!!((x) & 0xFFFE0000) + \
+	!!((x) & 0xFFFF0000) + \
+	!!((x) & 0xFFFF8000) + \
+	!!((x) & 0xFFFFC000) + \
+	!!((x) & 0xFFFFE000) + \
+	!!((x) & 0xFFFFF000) + \
+	!!((x) & 0xFFFFF800) + \
+	!!((x) & 0xFFFFFC00) + \
+	!!((x) & 0xFFFFFE00) + \
+	!!((x) & 0xFFFFFF00) + \
+	!!((x) & 0xFFFFFF80) + \
+	!!((x) & 0xFFFFFFC0) + \
+	!!((x) & 0xFFFFFFE0) + \
+	!!((x) & 0xFFFFFFF0) + \
+	!!((x) & 0xFFFFFFF8) + \
+	!!((x) & 0xFFFFFFFC) + \
+	!!((x) & 0xFFFFFFFE) + \
+	!!((x) & 0xFFFFFFFF))
+
+	#define MAX(x, y) ((x) > (y) ? (x) : (y))
+	#define MIN(x, y) ((x) < (y) ? (x) : (y))
 
 	inline float exp2(float x)
 	{
diff --git a/src/D3D9/Direct3D9.cpp b/src/D3D9/Direct3D9.cpp
index 298b22f..de8a86e 100644
--- a/src/D3D9/Direct3D9.cpp
+++ b/src/D3D9/Direct3D9.cpp
@@ -1446,11 +1446,11 @@
 							D3DLINECAPS_TEXTURE |	// Supports texture-mapping. 
 							D3DLINECAPS_ZTEST;		// Supports z-buffer comparisons.
 		
-		caps.MaxTextureWidth = 1 << (MIPMAP_LEVELS - 1);
-		caps.MaxTextureHeight = 1 << (MIPMAP_LEVELS - 1);
-		caps.MaxVolumeExtent = 1 << (MIPMAP_LEVELS - 1);
+		caps.MaxTextureWidth = 1 << (sw::MIPMAP_LEVELS - 1);
+		caps.MaxTextureHeight = 1 << (sw::MIPMAP_LEVELS - 1);
+		caps.MaxVolumeExtent = 1 << (sw::MIPMAP_LEVELS - 1);
 		caps.MaxTextureRepeat = 8192;
-		caps.MaxTextureAspectRatio = 1 << (MIPMAP_LEVELS - 1);
+		caps.MaxTextureAspectRatio = 1 << (sw::MIPMAP_LEVELS - 1);
 		caps.MaxAnisotropy = maxAnisotropy;
 		caps.MaxVertexW = 1e+010;
 
diff --git a/src/D3D9/Direct3DCubeTexture9.cpp b/src/D3D9/Direct3DCubeTexture9.cpp
index 992095e..7907788 100644
--- a/src/D3D9/Direct3DCubeTexture9.cpp
+++ b/src/D3D9/Direct3DCubeTexture9.cpp
@@ -32,10 +32,10 @@
 			int width = edgeLength;
 			int height = edgeLength;
 
-			for(unsigned int level = 0; level < MIPMAP_LEVELS; level++)
+			for(unsigned int level = 0; level < sw::MIPMAP_LEVELS; level++)
 			{
 				if(level < this->levels)
-				{					
+				{
 					surfaceLevel[face][level] = new Direct3DSurface9(device, this, width, height, format, pool, D3DMULTISAMPLE_NONE, 0, false, usage);
 					surfaceLevel[face][level]->bind();
 				}
@@ -56,7 +56,7 @@
 
 		for(unsigned int face = 0; face < 6; face++)
 		{
-			for(int level = 0; level < MIPMAP_LEVELS; level++)
+			for(int level = 0; level < sw::MIPMAP_LEVELS; level++)
 			{
 				if(surfaceLevel[face][level])
 				{
diff --git a/src/D3D9/Direct3DCubeTexture9.hpp b/src/D3D9/Direct3DCubeTexture9.hpp
index bead8ec..a86bb0d 100644
--- a/src/D3D9/Direct3DCubeTexture9.hpp
+++ b/src/D3D9/Direct3DCubeTexture9.hpp
@@ -66,7 +66,7 @@
 		// Creation parameters
 		const unsigned int edgeLength;
 
-		Direct3DSurface9 *surfaceLevel[6][MIPMAP_LEVELS];
+		Direct3DSurface9 *surfaceLevel[6][sw::MIPMAP_LEVELS];
 	};
 }
 
diff --git a/src/D3D9/Direct3DDevice9.cpp b/src/D3D9/Direct3DDevice9.cpp
index 9000357..299ec85 100644
--- a/src/D3D9/Direct3DDevice9.cpp
+++ b/src/D3D9/Direct3DDevice9.cpp
@@ -145,14 +145,14 @@
 			SetTransform(D3DTS_WORLDMATRIX(i), &identity);
 		}
 
-		for(int i = 0; i < FRAGMENT_UNIFORM_VECTORS; i++)
+		for(int i = 0; i < MAX_PIXEL_SHADER_CONST; i++)
 		{
 			float zero[4] = {0, 0, 0, 0};
 
 			SetPixelShaderConstantF(i, zero, 1);
 		}
 
-		for(int i = 0; i < VERTEX_UNIFORM_VECTORS; i++)
+		for(int i = 0; i < MAX_VERTEX_SHADER_CONST; i++)
 		{
 			float zero[4] = {0, 0, 0, 0};
 
@@ -565,7 +565,7 @@
 
 		*surface = 0;
 
-		if(width == 0 || height == 0 || d3d9->CheckDeviceFormat(adapter, deviceType, D3DFMT_X8R8G8B8, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, format) != D3D_OK || height > OUTLINE_RESOLUTION)
+		if(width == 0 || height == 0 || d3d9->CheckDeviceFormat(adapter, deviceType, D3DFMT_X8R8G8B8, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, format) != D3D_OK || height > sw::OUTLINE_RESOLUTION)
 		{
 			return INVALIDCALL();
 		}
@@ -779,7 +779,7 @@
 
 		*surface = 0;
 
-		if(width == 0 || height == 0 || d3d9->CheckDeviceFormat(adapter, deviceType, D3DFMT_X8R8G8B8, D3DUSAGE_RENDERTARGET, D3DRTYPE_SURFACE, format) != D3D_OK || height > OUTLINE_RESOLUTION)
+		if(width == 0 || height == 0 || d3d9->CheckDeviceFormat(adapter, deviceType, D3DFMT_X8R8G8B8, D3DUSAGE_RENDERTARGET, D3DRTYPE_SURFACE, format) != D3D_OK || height > sw::OUTLINE_RESOLUTION)
 		{
 			return INVALIDCALL();
 		}
@@ -2969,7 +2969,7 @@
 
 		if(!stateRecorder)
 		{
-			for(unsigned int i = 0; i < count && startRegister + i < FRAGMENT_UNIFORM_VECTORS; i++)
+			for(unsigned int i = 0; i < count && startRegister + i < MAX_PIXEL_SHADER_CONST; i++)
 			{
 				pixelShaderConstantF[startRegister + i][0] = constantData[i * 4 + 0];
 				pixelShaderConstantF[startRegister + i][1] = constantData[i * 4 + 1];
@@ -5245,7 +5245,7 @@
 
 		if(!stateRecorder)
 		{
-			for(unsigned int i = 0; i < count && startRegister + i < VERTEX_UNIFORM_VECTORS; i++)
+			for(unsigned int i = 0; i < count && startRegister + i < MAX_VERTEX_SHADER_CONST; i++)
 			{
 				vertexShaderConstantF[startRegister + i][0] = constantData[i * 4 + 0];
 				vertexShaderConstantF[startRegister + i][1] = constantData[i * 4 + 1];
@@ -6087,7 +6087,7 @@
 						Direct3DTexture9 *texture = dynamic_cast<Direct3DTexture9*>(baseTexture);
 						Direct3DSurface9 *surface;
 
-						for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+						for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 						{
 							int surfaceLevel = mipmapLevel;
 
@@ -6116,7 +6116,7 @@
 						Direct3DCubeTexture9 *cubeTexture = dynamic_cast<Direct3DCubeTexture9*>(baseTexture);
 						Direct3DSurface9 *surface;
 
-						for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+						for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 						{
 							int surfaceLevel = mipmapLevel;
 
@@ -6144,7 +6144,7 @@
 						Direct3DVolumeTexture9 *volumeTexture = dynamic_cast<Direct3DVolumeTexture9*>(baseTexture);
 						Direct3DVolume9 *volume;
 
-						for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+						for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 						{
 							int surfaceLevel = mipmapLevel;
 
diff --git a/src/D3D9/Direct3DDevice9.hpp b/src/D3D9/Direct3DDevice9.hpp
index c854678..06bad2d 100644
--- a/src/D3D9/Direct3DDevice9.hpp
+++ b/src/D3D9/Direct3DDevice9.hpp
@@ -42,6 +42,12 @@
 	class Direct3DIndexBuffer9;
 	class CriticalSection;
 
+	enum
+	{
+		MAX_VERTEX_SHADER_CONST = MIN(256, sw::VERTEX_UNIFORM_VECTORS),
+		MAX_PIXEL_SHADER_CONST = MIN(224, sw::FRAGMENT_UNIFORM_VECTORS),
+	};
+
 	class Direct3DDevice9 : public IDirect3DDevice9, public Unknown
 	{
 		friend CriticalSection;
@@ -264,11 +270,11 @@
 		unsigned int vertexShaderConstantsFDirty;
 		unsigned int vertexShaderConstantsIDirty;
 
-		float pixelShaderConstantF[FRAGMENT_UNIFORM_VECTORS][4];
+		float pixelShaderConstantF[MAX_PIXEL_SHADER_CONST][4];
 		int pixelShaderConstantI[16][4];
 		int pixelShaderConstantB[16];
 
-		float vertexShaderConstantF[VERTEX_UNIFORM_VECTORS][4];
+		float vertexShaderConstantF[MAX_VERTEX_SHADER_CONST][4];
 		int vertexShaderConstantI[16][4];
 		int vertexShaderConstantB[16];
 
diff --git a/src/D3D9/Direct3DStateBlock9.cpp b/src/D3D9/Direct3DStateBlock9.cpp
index da0611a..1ad9ffa 100644
--- a/src/D3D9/Direct3DStateBlock9.cpp
+++ b/src/D3D9/Direct3DStateBlock9.cpp
@@ -52,7 +52,7 @@
 			capturePixelSamplerStates();
 			capturePixelShaderStates();
 		}
-		
+
 		if(type == D3DSBT_VERTEXSTATE || type == D3DSBT_ALL)
 		{
 			captureVertexRenderStates();
@@ -112,7 +112,7 @@
 
 		return Unknown::AddRef();
 	}
-	
+
 	unsigned long Direct3DStateBlock9::Release()
 	{
 		TRACE("");
@@ -130,7 +130,7 @@
 		{
 			return INVALIDCALL();
 		}
-		
+
 		if(fvfCaptured)
 		{
 			device->SetFVF(FVF);
@@ -248,7 +248,7 @@
 			device->SetViewport(&viewport);
 		}
 
-		for(int i = 0; i < FRAGMENT_UNIFORM_VECTORS; i++)
+		for(int i = 0; i < MAX_PIXEL_SHADER_CONST; i++)
 		{
 			if(*(int*)pixelShaderConstantF[i] != 0x80000000)
 			{
@@ -272,7 +272,7 @@
 			}
 		}
 
-		for(int i = 0; i < VERTEX_UNIFORM_VECTORS; i++)
+		for(int i = 0; i < MAX_VERTEX_SHADER_CONST; i++)
 		{
 			if(*(int*)vertexShaderConstantF[i] != 0x80000000)
 			{
@@ -322,7 +322,7 @@
 		CriticalSection cs(device);
 
 		TRACE("");
-		
+
 		if(fvfCaptured)
 		{
 			device->GetFVF(&FVF);
@@ -332,7 +332,7 @@
 		{
 			Direct3DVertexDeclaration9 *vertexDeclaration;
 			device->GetVertexDeclaration(reinterpret_cast<IDirect3DVertexDeclaration9**>(&vertexDeclaration));
-			
+
 			if(vertexDeclaration)
 			{
 				vertexDeclaration->bind();
@@ -351,7 +351,7 @@
 		{
 			Direct3DIndexBuffer9 *indexBuffer;
 			device->GetIndices(reinterpret_cast<IDirect3DIndexBuffer9**>(&indexBuffer));
-			
+
 			if(indexBuffer)
 			{
 				indexBuffer->bind();
@@ -525,7 +525,7 @@
 			device->GetViewport(&viewport);
 		}
 
-		for(int i = 0; i < FRAGMENT_UNIFORM_VECTORS; i++)
+		for(int i = 0; i < MAX_PIXEL_SHADER_CONST; i++)
 		{
 			if(*(int*)pixelShaderConstantF[i] != 0x80000000)
 			{
@@ -549,7 +549,7 @@
 			}
 		}
 
-		for(int i = 0; i < VERTEX_UNIFORM_VECTORS; i++)
+		for(int i = 0; i < MAX_VERTEX_SHADER_CONST; i++)
 		{
 			if(*(int*)vertexShaderConstantF[i] != 0x80000000)
 			{
@@ -872,7 +872,7 @@
 
 		viewportCaptured = false;
 
-		for(int i = 0; i < FRAGMENT_UNIFORM_VECTORS; i++)
+		for(int i = 0; i < MAX_PIXEL_SHADER_CONST; i++)
 		{
 			(int&)pixelShaderConstantF[i][0] = 0x80000000;
 			(int&)pixelShaderConstantF[i][1] = 0x80000000;
@@ -880,7 +880,7 @@
 			(int&)pixelShaderConstantF[i][3] = 0x80000000;
 		}
 
-		for(int i = 0; i < VERTEX_UNIFORM_VECTORS; i++)
+		for(int i = 0; i < MAX_VERTEX_SHADER_CONST; i++)
 		{
 			(int&)vertexShaderConstantF[i][0] = 0x80000000;
 			(int&)vertexShaderConstantF[i][1] = 0x80000000;
@@ -1085,7 +1085,7 @@
 		{
 			captureSamplerState(sampler, D3DSAMP_ADDRESSU);
 			captureSamplerState(sampler, D3DSAMP_ADDRESSV);
-			captureSamplerState(sampler, D3DSAMP_ADDRESSW); 
+			captureSamplerState(sampler, D3DSAMP_ADDRESSW);
 			captureSamplerState(sampler, D3DSAMP_BORDERCOLOR);
 			captureSamplerState(sampler, D3DSAMP_MAGFILTER);
 			captureSamplerState(sampler, D3DSAMP_MINFILTER);
@@ -1102,7 +1102,7 @@
 	{
 		pixelShaderCaptured = true;
 		device->GetPixelShader(reinterpret_cast<IDirect3DPixelShader9**>(&pixelShader));
-		
+
 		if(pixelShader)
 		{
 			pixelShader->bind();
@@ -1111,7 +1111,7 @@
 
 		device->GetPixelShaderConstantF(0, pixelShaderConstantF[0], 32);
 		device->GetPixelShaderConstantI(0, pixelShaderConstantI[0], 16);
-		device->GetPixelShaderConstantB(0, pixelShaderConstantB, 16);	
+		device->GetPixelShaderConstantB(0, pixelShaderConstantB, 16);
 	}
 
 	void Direct3DStateBlock9::captureVertexRenderStates()
@@ -1206,16 +1206,16 @@
 	{
 		vertexShaderCaptured = true;
 		device->GetVertexShader(reinterpret_cast<IDirect3DVertexShader9**>(&vertexShader));
-		
+
 		if(vertexShader)
 		{
 			vertexShader->bind();
 			vertexShader->Release();
 		}
 
-		device->GetVertexShaderConstantF(0, vertexShaderConstantF[0], VERTEX_UNIFORM_VECTORS);
+		device->GetVertexShaderConstantF(0, vertexShaderConstantF[0], MAX_VERTEX_SHADER_CONST);
 		device->GetVertexShaderConstantI(0, vertexShaderConstantI[0], 16);
-		device->GetVertexShaderConstantB(0, vertexShaderConstantB, 16);		
+		device->GetVertexShaderConstantB(0, vertexShaderConstantB, 16);
 	}
 
 	void Direct3DStateBlock9::captureStreamSourceFrequencies()
@@ -1232,7 +1232,7 @@
 		device->GetFVF(&FVF);
 		fvfCaptured = true;
 	}
-	
+
 	void Direct3DStateBlock9::captureVertexDeclaration()
 	{
 		vertexDeclarationCaptured = true;
@@ -1273,7 +1273,7 @@
 		{
 			streamSourceCaptured[stream] = true;
 			device->GetStreamSource(stream, reinterpret_cast<IDirect3DVertexBuffer9**>(&streamSource[stream].vertexBuffer), &streamSource[stream].offset, &streamSource[stream].stride);
-			
+
 			if(streamSource[stream].vertexBuffer)
 			{
 				streamSource[stream].vertexBuffer->bind();
diff --git a/src/D3D9/Direct3DStateBlock9.hpp b/src/D3D9/Direct3DStateBlock9.hpp
index 3fd4bbc..e831a04 100644
--- a/src/D3D9/Direct3DStateBlock9.hpp
+++ b/src/D3D9/Direct3DStateBlock9.hpp
@@ -12,7 +12,7 @@
 #ifndef D3D9_Direct3DStateBlock9_hpp
 #define D3D9_Direct3DStateBlock9_hpp
 
-#include "Config.hpp"
+#include "Direct3DDevice9.hpp"
 #include "Unknown.hpp"
 
 #include <vector>
@@ -172,11 +172,11 @@
 		bool viewportCaptured;
 		D3DVIEWPORT9 viewport;
 
-		float pixelShaderConstantF[FRAGMENT_UNIFORM_VECTORS][4];
+		float pixelShaderConstantF[MAX_PIXEL_SHADER_CONST][4];
 		int pixelShaderConstantI[16][4];
 		int pixelShaderConstantB[16];
 
-		float vertexShaderConstantF[VERTEX_UNIFORM_VECTORS][4];
+		float vertexShaderConstantF[MAX_VERTEX_SHADER_CONST][4];
 		int vertexShaderConstantI[16][4];
 		int vertexShaderConstantB[16];
 
diff --git a/src/D3D9/Direct3DTexture9.cpp b/src/D3D9/Direct3DTexture9.cpp
index 5e2f1c3..2d7dcda 100644
--- a/src/D3D9/Direct3DTexture9.cpp
+++ b/src/D3D9/Direct3DTexture9.cpp
@@ -27,7 +27,7 @@
 			this->levels = sw::log2(sw::max((int)width, (int)height, 1)) + 1;
 		}
 
-		for(unsigned int level = 0; level < MIPMAP_LEVELS; level++)
+		for(unsigned int level = 0; level < sw::MIPMAP_LEVELS; level++)
 		{
 			if(level < this->levels)
 			{
@@ -48,7 +48,7 @@
 	{
 		resource->lock(sw::DESTRUCT);
 
-		for(int level = 0; level < MIPMAP_LEVELS; level++)
+		for(int level = 0; level < sw::MIPMAP_LEVELS; level++)
 		{
 			if(surfaceLevel[level])
 			{
diff --git a/src/D3D9/Direct3DTexture9.hpp b/src/D3D9/Direct3DTexture9.hpp
index d8ed329..2c19834 100644
--- a/src/D3D9/Direct3DTexture9.hpp
+++ b/src/D3D9/Direct3DTexture9.hpp
@@ -67,7 +67,7 @@
 		const unsigned int width;
 		const unsigned int height;
 
-		Direct3DSurface9 *surfaceLevel[MIPMAP_LEVELS];
+		Direct3DSurface9 *surfaceLevel[sw::MIPMAP_LEVELS];
 	};
 }
 
diff --git a/src/D3D9/Direct3DVolumeTexture9.cpp b/src/D3D9/Direct3DVolumeTexture9.cpp
index 5633cc1..fff5288 100644
--- a/src/D3D9/Direct3DVolumeTexture9.cpp
+++ b/src/D3D9/Direct3DVolumeTexture9.cpp
@@ -27,7 +27,7 @@
 			this->levels = sw::log2(sw::max((int)width, (int)height, (int)depth, 1)) + 1;
 		}
 
-		for(unsigned int level = 0; level < MIPMAP_LEVELS; level++)
+		for(unsigned int level = 0; level < sw::MIPMAP_LEVELS; level++)
 		{
 			if(level < this->levels)
 			{
@@ -49,7 +49,7 @@
 	{
 		resource->lock(sw::DESTRUCT);
 
-		for(int level = 0; level < MIPMAP_LEVELS; level++)
+		for(int level = 0; level < sw::MIPMAP_LEVELS; level++)
 		{
 			if(volumeLevel[level])
 			{
diff --git a/src/D3D9/Direct3DVolumeTexture9.hpp b/src/D3D9/Direct3DVolumeTexture9.hpp
index 1fa2447..e4dda38 100644
--- a/src/D3D9/Direct3DVolumeTexture9.hpp
+++ b/src/D3D9/Direct3DVolumeTexture9.hpp
@@ -68,7 +68,7 @@
 		const unsigned int height;
 		const unsigned int depth;
 
-		Direct3DVolume9 *volumeLevel[MIPMAP_LEVELS];
+		Direct3DVolume9 *volumeLevel[sw::MIPMAP_LEVELS];
 	};
 }
 
diff --git a/src/Main/Config.cpp b/src/Main/Config.cpp
index 10928ba..becea9c 100644
--- a/src/Main/Config.cpp
+++ b/src/Main/Config.cpp
@@ -14,63 +14,66 @@
 #include "Thread.hpp"
 #include "Timer.hpp"
 
-Profiler profiler;
-
-Profiler::Profiler()
+namespace sw
 {
-	reset();
-}
+	Profiler profiler;
 
-void Profiler::reset()
-{
-	framesSec = 0;
-	framesTotal = 0;
-	FPS = 0;
-	
-	#if PERF_PROFILE
-		for(int i = 0; i < PERF_TIMERS; i++)
-		{
-			cycles[i] = 0;
-		}
-
-		ropOperations = 0;
-		ropOperationsTotal = 0;
-		ropOperationsFrame = 0;
-	
-		texOperations = 0;
-		texOperationsTotal = 0;
-		texOperationsFrame = 0;
-	
-		compressedTex = 0;
-		compressedTexTotal = 0;
-		compressedTexFrame = 0;
-	#endif
-};
-
-void Profiler::nextFrame()
-{
-	#if PERF_PROFILE
-		ropOperationsFrame = sw::atomicExchange(&ropOperations, 0);
-		texOperationsFrame = sw::atomicExchange(&texOperations, 0);
-		compressedTexFrame = sw::atomicExchange(&compressedTex, 0);
-
-		ropOperationsTotal += ropOperationsFrame;
-		texOperationsTotal += texOperationsFrame;
-		compressedTexTotal += compressedTexFrame;
-	#endif
-
-	static double fpsTime = sw::Timer::seconds();
-
-	double time = sw::Timer::seconds();
-	double delta = time - fpsTime;
-	framesSec++;
-
-	if(delta > 1.0)
+	Profiler::Profiler()
 	{
-		FPS = framesSec / delta;
-
-		fpsTime = time;
-		framesTotal += framesSec;
-		framesSec = 0;
+		reset();
 	}
-}
+
+	void Profiler::reset()
+	{
+		framesSec = 0;
+		framesTotal = 0;
+		FPS = 0;
+
+		#if PERF_PROFILE
+			for(int i = 0; i < PERF_TIMERS; i++)
+			{
+				cycles[i] = 0;
+			}
+
+			ropOperations = 0;
+			ropOperationsTotal = 0;
+			ropOperationsFrame = 0;
+
+			texOperations = 0;
+			texOperationsTotal = 0;
+			texOperationsFrame = 0;
+
+			compressedTex = 0;
+			compressedTexTotal = 0;
+			compressedTexFrame = 0;
+		#endif
+	};
+
+	void Profiler::nextFrame()
+	{
+		#if PERF_PROFILE
+			ropOperationsFrame = sw::atomicExchange(&ropOperations, 0);
+			texOperationsFrame = sw::atomicExchange(&texOperations, 0);
+			compressedTexFrame = sw::atomicExchange(&compressedTex, 0);
+
+			ropOperationsTotal += ropOperationsFrame;
+			texOperationsTotal += texOperationsFrame;
+			compressedTexTotal += compressedTexFrame;
+		#endif
+
+		static double fpsTime = sw::Timer::seconds();
+
+		double time = sw::Timer::seconds();
+		double delta = time - fpsTime;
+		framesSec++;
+
+		if(delta > 1.0)
+		{
+			FPS = framesSec / delta;
+
+			fpsTime = time;
+			framesTotal += framesSec;
+			framesSec = 0;
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/Main/Config.hpp b/src/Main/Config.hpp
index 7237d28..7d0952c 100644
--- a/src/Main/Config.hpp
+++ b/src/Main/Config.hpp
@@ -30,74 +30,69 @@
 #define DEFAULT_THREAD_COUNT 0
 #endif
 
-enum
+namespace sw
 {
-	PERF_PIXEL,
-	PERF_PIPE,
-	PERF_INTERP,
-	PERF_SHADER,
-	PERF_TEX,
-	PERF_ROP,
+	enum
+	{
+		PERF_PIXEL,
+		PERF_PIPE,
+		PERF_INTERP,
+		PERF_SHADER,
+		PERF_TEX,
+		PERF_ROP,
 
-	PERF_TIMERS
-};
+		PERF_TIMERS
+	};
 
-struct Profiler
-{
-	Profiler();
+	struct Profiler
+	{
+		Profiler();
 
-	void reset();
-	void nextFrame();
+		void reset();
+		void nextFrame();
 
-	int framesSec;
-	int framesTotal;
-	double FPS;
+		int framesSec;
+		int framesTotal;
+		double FPS;
 
-	#if PERF_PROFILE
-	double cycles[PERF_TIMERS];
+		#if PERF_PROFILE
+		double cycles[PERF_TIMERS];
 
-	int64_t ropOperations;
-	int64_t ropOperationsTotal;
-	int64_t ropOperationsFrame;
+		int64_t ropOperations;
+		int64_t ropOperationsTotal;
+		int64_t ropOperationsFrame;
 
-	int64_t texOperations;
-	int64_t texOperationsTotal;
-	int64_t texOperationsFrame;
+		int64_t texOperations;
+		int64_t texOperationsTotal;
+		int64_t texOperationsFrame;
 
-	int64_t compressedTex;
-	int64_t compressedTexTotal;
-	int64_t compressedTexFrame;
-	#endif
-};
+		int64_t compressedTex;
+		int64_t compressedTexTotal;
+		int64_t compressedTexFrame;
+		#endif
+	};
 
-extern Profiler profiler;
+	extern Profiler profiler;
 
-enum
-{
-	OUTLINE_RESOLUTION = 4096,   // Maximum vertical resolution of the render target
-	MIPMAP_LEVELS = 14,
-	MAX_COLOR_ATTACHMENTS = 8,
-	VERTEX_ATTRIBUTES = 16,
-	TEXTURE_IMAGE_UNITS = 16,
-	VERTEX_TEXTURE_IMAGE_UNITS = 16,
-	TOTAL_IMAGE_UNITS = TEXTURE_IMAGE_UNITS + VERTEX_TEXTURE_IMAGE_UNITS,
-	FRAGMENT_UNIFORM_VECTORS = 224,
-	VERTEX_UNIFORM_VECTORS = 256,
-	MAX_FRAGMENT_UNIFORM_COMPONENTS = FRAGMENT_UNIFORM_VECTORS * 4,
-	MAX_VERTEX_UNIFORM_COMPONENTS = VERTEX_UNIFORM_VECTORS * 4,
-	MAX_FRAGMENT_UNIFORM_BLOCKS = 12,
-	MAX_VERTEX_UNIFORM_BLOCKS = 12,
-	MAX_UNIFORM_BLOCK_SIZE = 16384,
-	MAX_FRAGMENT_UNIFORM_BLOCKS_COMPONENTS = MAX_FRAGMENT_UNIFORM_BLOCKS * MAX_UNIFORM_BLOCK_SIZE / 4,
-	MAX_VERTEX_UNIFORM_BLOCKS_COMPONENTS = MAX_VERTEX_UNIFORM_BLOCKS * MAX_UNIFORM_BLOCK_SIZE / 4,
-	MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = MAX_FRAGMENT_UNIFORM_BLOCKS_COMPONENTS + MAX_FRAGMENT_UNIFORM_COMPONENTS,
-	MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = MAX_VERTEX_UNIFORM_BLOCKS_COMPONENTS + MAX_VERTEX_UNIFORM_COMPONENTS,
-	MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 4,
-	MAX_UNIFORM_BUFFER_BINDINGS = MAX_FRAGMENT_UNIFORM_BLOCKS + MAX_VERTEX_UNIFORM_BLOCKS, // Limited to 127 by SourceParameter.bufferIndex in Shader.hpp
-	MAX_CLIP_PLANES = 6,
-	MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 64,
-	MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 64,
-	RENDERTARGETS = 4,
-};
+	enum
+	{
+		OUTLINE_RESOLUTION = 4096,   // Maximum vertical resolution of the render target
+		MIPMAP_LEVELS = 14,
+		VERTEX_ATTRIBUTES = 16,
+		TEXTURE_IMAGE_UNITS = 16,
+		VERTEX_TEXTURE_IMAGE_UNITS = 16,
+		TOTAL_IMAGE_UNITS = TEXTURE_IMAGE_UNITS + VERTEX_TEXTURE_IMAGE_UNITS,
+		FRAGMENT_UNIFORM_VECTORS = 224,
+		VERTEX_UNIFORM_VECTORS = 256,
+		MAX_FRAGMENT_UNIFORM_BLOCKS = 12,
+		MAX_VERTEX_UNIFORM_BLOCKS = 12,
+		MAX_UNIFORM_BUFFER_BINDINGS = MAX_FRAGMENT_UNIFORM_BLOCKS + MAX_VERTEX_UNIFORM_BLOCKS,   // Limited to 127 by SourceParameter.bufferIndex in Shader.hpp
+		MAX_UNIFORM_BLOCK_SIZE = 16384,
+		MAX_CLIP_PLANES = 6,
+		MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 64,
+		MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 64,
+		RENDERTARGETS = 4,
+	};
+}
 
 #endif   // sw_Config_hpp
diff --git a/src/Main/SwiftConfig.cpp b/src/Main/SwiftConfig.cpp
index d80e344..9dce441 100644
--- a/src/Main/SwiftConfig.cpp
+++ b/src/Main/SwiftConfig.cpp
@@ -22,10 +22,10 @@
 #include <sys/stat.h>
 #include <string.h>
 
-extern Profiler profiler;
-
 namespace sw
 {
+	extern Profiler profiler;
+
 	std::string itoa(int number)
 	{
 		std::stringstream ss;
diff --git a/src/OpenGL/libGL/Context.cpp b/src/OpenGL/libGL/Context.cpp
index 0da8157..e886392 100644
--- a/src/OpenGL/libGL/Context.cpp
+++ b/src/OpenGL/libGL/Context.cpp
@@ -2112,7 +2112,7 @@
 		{
 			Texture2D *texture = static_cast<Texture2D*>(baseTexture);
 
-			for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+			for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 			{
 				int surfaceLevel = mipmapLevel;
 
@@ -2135,7 +2135,7 @@
 			{
 				TextureCubeMap *cubeTexture = static_cast<TextureCubeMap*>(baseTexture);
 
-				for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+				for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 				{
 					int surfaceLevel = mipmapLevel;
 
diff --git a/src/OpenGL/libGL/Context.h b/src/OpenGL/libGL/Context.h
index cd41df6..74ecb6c 100644
--- a/src/OpenGL/libGL/Context.h
+++ b/src/OpenGL/libGL/Context.h
@@ -311,12 +311,12 @@
 {
     MAX_VERTEX_ATTRIBS = 9,
 	MAX_UNIFORM_VECTORS = 256,   // Device limit
-    MAX_VERTEX_UNIFORM_VECTORS = VERTEX_UNIFORM_VECTORS - 3,   // Reserve space for gl_DepthRange
+    MAX_VERTEX_UNIFORM_VECTORS = sw::VERTEX_UNIFORM_VECTORS - 3,   // Reserve space for gl_DepthRange
     MAX_VARYING_VECTORS = 10,
     MAX_TEXTURE_IMAGE_UNITS = 2,
     MAX_VERTEX_TEXTURE_IMAGE_UNITS = 1,
     MAX_COMBINED_TEXTURE_IMAGE_UNITS = MAX_TEXTURE_IMAGE_UNITS + MAX_VERTEX_TEXTURE_IMAGE_UNITS,
-    MAX_FRAGMENT_UNIFORM_VECTORS = FRAGMENT_UNIFORM_VECTORS - 3,    // Reserve space for gl_DepthRange
+    MAX_FRAGMENT_UNIFORM_VECTORS = sw::FRAGMENT_UNIFORM_VECTORS - 3,    // Reserve space for gl_DepthRange
     MAX_DRAW_BUFFERS = 1,
 
     IMPLEMENTATION_COLOR_READ_FORMAT = GL_RGB,
diff --git a/src/OpenGL/libGL/Device.hpp b/src/OpenGL/libGL/Device.hpp
index 63df3f9..e85d909 100644
--- a/src/OpenGL/libGL/Device.hpp
+++ b/src/OpenGL/libGL/Device.hpp
@@ -89,8 +89,8 @@
 		bool vertexShaderDirty;
 		unsigned int vertexShaderConstantsFDirty;
 
-		float pixelShaderConstantF[FRAGMENT_UNIFORM_VECTORS][4];
-		float vertexShaderConstantF[VERTEX_UNIFORM_VECTORS][4];
+		float pixelShaderConstantF[sw::FRAGMENT_UNIFORM_VECTORS][4];
+		float vertexShaderConstantF[sw::VERTEX_UNIFORM_VECTORS][4];
 
 		Image *renderTarget;
 		Image *depthStencil;
diff --git a/src/OpenGL/libGL/Texture.cpp b/src/OpenGL/libGL/Texture.cpp
index 162599c..0f1a0e9 100644
--- a/src/OpenGL/libGL/Texture.cpp
+++ b/src/OpenGL/libGL/Texture.cpp
@@ -271,7 +271,7 @@
 
 Texture2D::Texture2D(GLuint name) : Texture(name)
 {
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		image[i] = 0;
 	}
@@ -284,7 +284,7 @@
 {
 	resource->lock(sw::DESTRUCT);
 
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		if(image[i])
 		{
@@ -359,7 +359,7 @@
 	ASSERT(isSamplerComplete());
 	int levels = 0;
 
-	while(levels < MIPMAP_LEVELS && image[levels])
+	while(levels < IMPLEMENTATION_MAX_TEXTURE_LEVELS && image[levels])
 	{
 		levels++;
 	}
@@ -624,7 +624,7 @@
 {
 	for(int f = 0; f < 6; f++)
 	{
-		for(int i = 0; i < MIPMAP_LEVELS; i++)
+		for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 		{
 			image[f][i] = 0;
 		}
@@ -643,7 +643,7 @@
 
 	for(int f = 0; f < 6; f++)
 	{
-		for(int i = 0; i < MIPMAP_LEVELS; i++)
+		for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 		{
 			if(image[f][i])
 			{
@@ -736,7 +736,7 @@
 	ASSERT(isSamplerComplete());
 	int levels = 0;
 
-	while(levels < MIPMAP_LEVELS && image[0][levels])
+	while(levels < IMPLEMENTATION_MAX_TEXTURE_LEVELS && image[0][levels])
 	{
 		levels++;
 	}
diff --git a/src/OpenGL/libGL/Texture.h b/src/OpenGL/libGL/Texture.h
index 6574d42..327aca3 100644
--- a/src/OpenGL/libGL/Texture.h
+++ b/src/OpenGL/libGL/Texture.h
@@ -36,10 +36,10 @@
 
 enum
 {
-	IMPLEMENTATION_MAX_TEXTURE_LEVELS = MIPMAP_LEVELS,
-    IMPLEMENTATION_MAX_TEXTURE_SIZE = 1 << (MIPMAP_LEVELS - 1),
-    IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE = 1 << (MIPMAP_LEVELS - 1),
-	IMPLEMENTATION_MAX_RENDERBUFFER_SIZE = OUTLINE_RESOLUTION,
+	IMPLEMENTATION_MAX_TEXTURE_LEVELS = sw::MIPMAP_LEVELS,
+    IMPLEMENTATION_MAX_TEXTURE_SIZE = 1 << (IMPLEMENTATION_MAX_TEXTURE_LEVELS - 1),
+    IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE = 1 << (IMPLEMENTATION_MAX_TEXTURE_LEVELS - 1),
+	IMPLEMENTATION_MAX_RENDERBUFFER_SIZE = sw::OUTLINE_RESOLUTION,
 };
 
 class Texture : public NamedObject
@@ -149,7 +149,7 @@
 	bool isMipmapComplete() const;
 
 	Image *image[IMPLEMENTATION_MAX_TEXTURE_LEVELS];
-    
+
 	// A specific internal reference count is kept for colorbuffer proxy references,
     // because, as the renderbuffer acting as proxy will maintain a binding pointer
     // back to this texture, there would be a circular reference if we used a binding
@@ -170,7 +170,7 @@
     void releaseProxy(const Renderbuffer *proxy);
 
     virtual GLenum getTarget() const;
-    
+
     virtual GLsizei getWidth(GLenum target, GLint level) const;
     virtual GLsizei getHeight(GLenum target, GLint level) const;
     virtual GLenum getFormat(GLenum target, GLint level) const;
@@ -189,7 +189,7 @@
     virtual bool isSamplerComplete() const;
     virtual bool isCompressed(GLenum target, GLint level) const;
 	virtual bool isDepth(GLenum target, GLint level) const;
-	
+
     virtual void generateMipmaps();
 
     virtual Renderbuffer *getRenderbuffer(GLenum target);
@@ -205,7 +205,7 @@
     Image *getImage(GLenum face, unsigned int level);
 
     Image *image[6][IMPLEMENTATION_MAX_TEXTURE_LEVELS];
-	
+
 	// A specific internal reference count is kept for colorbuffer proxy references,
     // because, as the renderbuffer acting as proxy will maintain a binding pointer
     // back to this texture, there would be a circular reference if we used a binding
diff --git a/src/OpenGL/libGLES_CM/Context.cpp b/src/OpenGL/libGLES_CM/Context.cpp
index 5cc63be..0b1ce44 100644
--- a/src/OpenGL/libGLES_CM/Context.cpp
+++ b/src/OpenGL/libGLES_CM/Context.cpp
@@ -2342,7 +2342,7 @@
 		{
 			Texture2D *texture = static_cast<Texture2D*>(baseTexture);
 
-			for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+			for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 			{
 				int surfaceLevel = mipmapLevel;
 
diff --git a/src/OpenGL/libGLES_CM/Context.h b/src/OpenGL/libGLES_CM/Context.h
index 4e86885..90293e3 100644
--- a/src/OpenGL/libGLES_CM/Context.h
+++ b/src/OpenGL/libGLES_CM/Context.h
@@ -60,11 +60,12 @@
 
 enum
 {
-    MAX_VERTEX_ATTRIBS = VERTEX_ATTRIBUTES,
+    MAX_VERTEX_ATTRIBS = sw::VERTEX_ATTRIBUTES,
     MAX_VARYING_VECTORS = 10,
     MAX_TEXTURE_UNITS = 2,
     MAX_DRAW_BUFFERS = 1,
 	MAX_LIGHTS = 8,
+	MAX_CLIP_PLANES = sw::MAX_CLIP_PLANES,
 
 	MAX_MODELVIEW_STACK_DEPTH = 32,
 	MAX_PROJECTION_STACK_DEPTH = 2,
diff --git a/src/OpenGL/libGLES_CM/Texture.cpp b/src/OpenGL/libGLES_CM/Texture.cpp
index bd3da9c..3729d9b 100644
--- a/src/OpenGL/libGLES_CM/Texture.cpp
+++ b/src/OpenGL/libGLES_CM/Texture.cpp
@@ -331,7 +331,7 @@
 
 Texture2D::Texture2D(GLuint name) : Texture(name)
 {
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		image[i] = nullptr;
 	}
@@ -346,7 +346,7 @@
 {
 	resource->lock(sw::DESTRUCT);
 
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		if(image[i])
 		{
@@ -391,7 +391,7 @@
 {
 	int imageCount = 0;
 
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		if(image[i] && image[i]->isChildOf(this))
 		{
@@ -450,7 +450,7 @@
 	ASSERT(isSamplerComplete());
 	int levels = 0;
 
-	while(levels < MIPMAP_LEVELS && image[levels])
+	while(levels < IMPLEMENTATION_MAX_TEXTURE_LEVELS && image[levels])
 	{
 		levels++;
 	}
@@ -496,7 +496,7 @@
         return;
     }
 
-	for(int level = 0; level < MIPMAP_LEVELS; level++)
+	for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
 	{
 		if(image[level])
 		{
@@ -513,7 +513,7 @@
 
 void Texture2D::releaseTexImage()
 {
-    for(int level = 0; level < MIPMAP_LEVELS; level++)
+    for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
 	{
 		if(image[level])
 		{
@@ -817,7 +817,7 @@
 
 egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard)
 {
-	if(height > OUTLINE_RESOLUTION)
+	if(height > sw::OUTLINE_RESOLUTION)
 	{
 		ERR("Invalid parameters: %dx%d", width, height);
 		return 0;
diff --git a/src/OpenGL/libGLES_CM/Texture.h b/src/OpenGL/libGLES_CM/Texture.h
index 4a49ddb..6d53711 100644
--- a/src/OpenGL/libGLES_CM/Texture.h
+++ b/src/OpenGL/libGLES_CM/Texture.h
@@ -38,10 +38,10 @@
 
 enum
 {
-	IMPLEMENTATION_MAX_TEXTURE_LEVELS = MIPMAP_LEVELS,
-    IMPLEMENTATION_MAX_TEXTURE_SIZE = 1 << (MIPMAP_LEVELS - 1),
-    IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE = 1 << (MIPMAP_LEVELS - 1),
-	IMPLEMENTATION_MAX_RENDERBUFFER_SIZE = OUTLINE_RESOLUTION,
+	IMPLEMENTATION_MAX_TEXTURE_LEVELS = sw::MIPMAP_LEVELS,
+    IMPLEMENTATION_MAX_TEXTURE_SIZE = 1 << (IMPLEMENTATION_MAX_TEXTURE_LEVELS - 1),
+    IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE = 1 << (IMPLEMENTATION_MAX_TEXTURE_LEVELS - 1),
+	IMPLEMENTATION_MAX_RENDERBUFFER_SIZE = sw::OUTLINE_RESOLUTION,
 };
 
 class Texture : public egl::Texture
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 5ce6448..af7a884 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -2117,8 +2117,7 @@
 		*params = IMPLEMENTATION_MAX_TEXTURE_SIZE;
 		break;
 	case GL_MAX_COLOR_ATTACHMENTS: // integer, at least 8
-		UNIMPLEMENTED();
-		*params = IMPLEMENTATION_MAX_COLOR_ATTACHMENTS;
+		*params = MAX_COLOR_ATTACHMENTS;
 		break;
 	case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: // integer, at least 50048
 		*params = MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS;
@@ -2132,7 +2131,7 @@
 		break;
 	case GL_MAX_DRAW_BUFFERS: // integer, at least 8
 		UNIMPLEMENTED();
-		*params = IMPLEMENTATION_MAX_DRAW_BUFFERS;
+		*params = MAX_DRAW_BUFFERS;
 		break;
 	case GL_MAX_ELEMENT_INDEX:
 		*params = MAX_ELEMENT_INDEX;
@@ -2171,7 +2170,7 @@
 		break;
 	case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: // integer, at least 4
 		UNIMPLEMENTED();
-		*params = IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;
+		*params = MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;
 		break;
 	case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: // integer, at least 4
 		UNIMPLEMENTED();
@@ -2181,7 +2180,7 @@
 		*params = MAX_UNIFORM_BLOCK_SIZE;
 		break;
 	case GL_MAX_UNIFORM_BUFFER_BINDINGS: // integer, at least 24
-		*params = IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS;
+		*params = MAX_UNIFORM_BUFFER_BINDINGS;
 		break;
 	case GL_MAX_VARYING_COMPONENTS: // integer, at least 60
 		UNIMPLEMENTED();
@@ -2264,7 +2263,7 @@
 		}
 		break;
 	case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: // integer, defaults to 1
-		*params = IMPLEMENTATION_UNIFORM_BUFFER_OFFSET_ALIGNMENT;
+		*params = UNIFORM_BUFFER_OFFSET_ALIGNMENT;
 		break;
 	case GL_UNIFORM_BUFFER_SIZE: // indexed[n] 64-bit integer, initially 0
 		if(clientVersion >= 3)
@@ -3109,7 +3108,7 @@
 		{
 			Texture2D *texture = static_cast<Texture2D*>(baseTexture);
 
-			for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+			for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 			{
 				int surfaceLevel = mipmapLevel;
 
@@ -3130,7 +3129,7 @@
 		{
 			Texture3D *texture = static_cast<Texture3D*>(baseTexture);
 
-			for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+			for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 			{
 				int surfaceLevel = mipmapLevel;
 
@@ -3151,7 +3150,7 @@
 		{
 			Texture2DArray *texture = static_cast<Texture2DArray*>(baseTexture);
 
-			for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+			for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 			{
 				int surfaceLevel = mipmapLevel;
 
@@ -3174,7 +3173,7 @@
 			{
 				TextureCubeMap *cubeTexture = static_cast<TextureCubeMap*>(baseTexture);
 
-				for(int mipmapLevel = 0; mipmapLevel < MIPMAP_LEVELS; mipmapLevel++)
+				for(int mipmapLevel = 0; mipmapLevel < sw::MIPMAP_LEVELS; mipmapLevel++)
 				{
 					int surfaceLevel = mipmapLevel;
 
diff --git a/src/OpenGL/libGLESv2/Context.h b/src/OpenGL/libGLESv2/Context.h
index 3fc6e95..08c7a51 100644
--- a/src/OpenGL/libGLESv2/Context.h
+++ b/src/OpenGL/libGLESv2/Context.h
@@ -15,13 +15,13 @@
 #ifndef LIBGLESV2_CONTEXT_H_
 #define LIBGLESV2_CONTEXT_H_
 
-#include "libEGL/Context.hpp"
 #include "ResourceManager.h"
+#include "Buffer.h"
+#include "libEGL/Context.hpp"
 #include "common/NameSpace.hpp"
 #include "common/Object.hpp"
 #include "common/Image.hpp"
 #include "Renderer/Sampler.hpp"
-#include "TransformFeedback.h"
 
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
@@ -67,18 +67,18 @@
 class Query;
 class Sampler;
 class VertexArray;
+class TransformFeedback;
 
 enum
 {
-    MAX_VERTEX_ATTRIBS = VERTEX_ATTRIBUTES,
+    MAX_VERTEX_ATTRIBS = sw::VERTEX_ATTRIBUTES,
 	MAX_UNIFORM_VECTORS = 256,   // Device limit
-    MAX_VERTEX_UNIFORM_VECTORS = VERTEX_UNIFORM_VECTORS - 3,   // Reserve space for gl_DepthRange
+    MAX_VERTEX_UNIFORM_VECTORS = sw::VERTEX_UNIFORM_VECTORS - 3,   // Reserve space for gl_DepthRange
     MAX_VARYING_VECTORS = 10,
-    MAX_TEXTURE_IMAGE_UNITS = TEXTURE_IMAGE_UNITS,
-    MAX_VERTEX_TEXTURE_IMAGE_UNITS = VERTEX_TEXTURE_IMAGE_UNITS,
+    MAX_TEXTURE_IMAGE_UNITS = sw::TEXTURE_IMAGE_UNITS,
+    MAX_VERTEX_TEXTURE_IMAGE_UNITS = sw::VERTEX_TEXTURE_IMAGE_UNITS,
     MAX_COMBINED_TEXTURE_IMAGE_UNITS = MAX_TEXTURE_IMAGE_UNITS + MAX_VERTEX_TEXTURE_IMAGE_UNITS,
-    MAX_FRAGMENT_UNIFORM_VECTORS = FRAGMENT_UNIFORM_VECTORS - 3,    // Reserve space for gl_DepthRange
-    MAX_DRAW_BUFFERS = RENDERTARGETS,
+    MAX_FRAGMENT_UNIFORM_VECTORS = sw::FRAGMENT_UNIFORM_VECTORS - 3,    // Reserve space for gl_DepthRange
 	MAX_ELEMENT_INDEX = 0x7FFFFFFF,
 	MAX_ELEMENTS_INDICES = 0x7FFFFFFF,
 	MAX_ELEMENTS_VERTICES = 0x7FFFFFFF,
@@ -86,6 +86,20 @@
     MAX_FRAGMENT_INPUT_VECTORS = 15,
     MIN_PROGRAM_TEXEL_OFFSET = -8,
     MAX_PROGRAM_TEXEL_OFFSET = 7,
+	MAX_DRAW_BUFFERS = sw::RENDERTARGETS,
+	MAX_COLOR_ATTACHMENTS = MAX(MAX_DRAW_BUFFERS, 8),
+	MAX_FRAGMENT_UNIFORM_BLOCKS = sw::MAX_FRAGMENT_UNIFORM_BLOCKS,
+	MAX_VERTEX_UNIFORM_BLOCKS = sw::MAX_VERTEX_UNIFORM_BLOCKS,
+	MAX_FRAGMENT_UNIFORM_COMPONENTS = sw::FRAGMENT_UNIFORM_VECTORS * 4,
+	MAX_VERTEX_UNIFORM_COMPONENTS = sw::VERTEX_UNIFORM_VECTORS * 4,
+	MAX_UNIFORM_BLOCK_SIZE = sw::MAX_UNIFORM_BLOCK_SIZE,
+	MAX_FRAGMENT_UNIFORM_BLOCKS_COMPONENTS = sw::MAX_FRAGMENT_UNIFORM_BLOCKS * MAX_UNIFORM_BLOCK_SIZE / 4,
+	MAX_VERTEX_UNIFORM_BLOCKS_COMPONENTS = MAX_VERTEX_UNIFORM_BLOCKS * MAX_UNIFORM_BLOCK_SIZE / 4,
+	MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = MAX_FRAGMENT_UNIFORM_BLOCKS_COMPONENTS + MAX_FRAGMENT_UNIFORM_COMPONENTS,
+	MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = MAX_VERTEX_UNIFORM_BLOCKS_COMPONENTS + MAX_VERTEX_UNIFORM_COMPONENTS,
+	MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 4,
+	MAX_UNIFORM_BUFFER_BINDINGS = sw::MAX_UNIFORM_BUFFER_BINDINGS,
+	UNIFORM_BUFFER_OFFSET_ALIGNMENT = 1,
 };
 
 const GLenum compressedTextureFormats[] =
diff --git a/src/OpenGL/libGLESv2/Device.hpp b/src/OpenGL/libGLESv2/Device.hpp
index d254d3b..9283cf3 100644
--- a/src/OpenGL/libGLESv2/Device.hpp
+++ b/src/OpenGL/libGLESv2/Device.hpp
@@ -85,10 +85,10 @@
 		bool vertexShaderDirty;
 		unsigned int vertexShaderConstantsFDirty;
 
-		float pixelShaderConstantF[FRAGMENT_UNIFORM_VECTORS][4];
-		float vertexShaderConstantF[VERTEX_UNIFORM_VECTORS][4];
+		float pixelShaderConstantF[sw::FRAGMENT_UNIFORM_VECTORS][4];
+		float vertexShaderConstantF[sw::VERTEX_UNIFORM_VECTORS][4];
 
-		egl::Image *renderTarget[RENDERTARGETS];
+		egl::Image *renderTarget[sw::RENDERTARGETS];
 		egl::Image *depthBuffer;
 		egl::Image *stencilBuffer;
 	};
diff --git a/src/OpenGL/libGLESv2/Framebuffer.cpp b/src/OpenGL/libGLESv2/Framebuffer.cpp
index 87e60f4..34f3263 100644
--- a/src/OpenGL/libGLESv2/Framebuffer.cpp
+++ b/src/OpenGL/libGLESv2/Framebuffer.cpp
@@ -29,7 +29,7 @@
 
 Framebuffer::Framebuffer()
 {
-	for(int i = 0; i < IMPLEMENTATION_MAX_COLOR_ATTACHMENTS; ++i)
+	for(int i = 0; i < MAX_COLOR_ATTACHMENTS; i++)
 	{
 		mColorbufferType[i] = GL_NONE;
 	}
@@ -46,7 +46,7 @@
 
 Framebuffer::~Framebuffer()
 {
-	for(int i = 0; i < IMPLEMENTATION_MAX_COLOR_ATTACHMENTS; ++i)
+	for(int i = 0; i < MAX_COLOR_ATTACHMENTS; i++)
 	{
 		mColorbufferPointer[i] = nullptr;
 	}
@@ -121,7 +121,7 @@
 
 void Framebuffer::detachTexture(GLuint texture)
 {
-	for(int i = 0; i < IMPLEMENTATION_MAX_COLOR_ATTACHMENTS; ++i)
+	for(int i = 0; i < MAX_COLOR_ATTACHMENTS; i++)
 	{
 		if(mColorbufferPointer[i].name() == texture && IsTextureTarget(mColorbufferType[i]))
 		{
@@ -145,7 +145,7 @@
 
 void Framebuffer::detachRenderbuffer(GLuint renderbuffer)
 {
-	for(int i = 0; i < IMPLEMENTATION_MAX_COLOR_ATTACHMENTS; ++i)
+	for(int i = 0; i < MAX_COLOR_ATTACHMENTS; i++)
 	{
 		if(mColorbufferPointer[i].name() == renderbuffer && IsRenderbuffer(mColorbufferType[i]))
 		{
@@ -312,7 +312,7 @@
 	height = -1;
 	samples = -1;
 
-	for(int i = 0; i < IMPLEMENTATION_MAX_COLOR_ATTACHMENTS; ++i)
+	for(int i = 0; i < MAX_COLOR_ATTACHMENTS; i++)
 	{
 		if(mColorbufferType[i] != GL_NONE)
 		{
@@ -613,7 +613,7 @@
 	mColorbufferPointer[0] = new Renderbuffer(0, colorbuffer);
 	mColorbufferType[0] = defaultRenderbufferType;
 
-	for(int i = 1; i < IMPLEMENTATION_MAX_COLOR_ATTACHMENTS; ++i)
+	for(int i = 1; i < MAX_COLOR_ATTACHMENTS; i++)
 	{
 		mColorbufferPointer[i] = nullptr;
 		mColorbufferType[i] = GL_NONE;
diff --git a/src/OpenGL/libGLESv2/Framebuffer.h b/src/OpenGL/libGLESv2/Framebuffer.h
index 662a9cc..66f05f2 100644
--- a/src/OpenGL/libGLESv2/Framebuffer.h
+++ b/src/OpenGL/libGLESv2/Framebuffer.h
@@ -15,6 +15,7 @@
 #ifndef LIBGLESV2_FRAMEBUFFER_H_
 #define LIBGLESV2_FRAMEBUFFER_H_
 
+#include "Context.h"
 #include "common/Object.hpp"
 #include "common/Image.hpp"
 
diff --git a/src/OpenGL/libGLESv2/Program.cpp b/src/OpenGL/libGLESv2/Program.cpp
index ccd54b2..d965278 100644
--- a/src/OpenGL/libGLESv2/Program.cpp
+++ b/src/OpenGL/libGLESv2/Program.cpp
@@ -1134,15 +1134,15 @@
 
 	void Program::applyUniformBuffers(BufferBinding* uniformBuffers)
 	{
-		GLint vertexUniformBuffers[IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS];
-		GLint fragmentUniformBuffers[IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS];
+		GLint vertexUniformBuffers[MAX_UNIFORM_BUFFER_BINDINGS];
+		GLint fragmentUniformBuffers[MAX_UNIFORM_BUFFER_BINDINGS];
 
-		for(unsigned int bufferBindingIndex = 0; bufferBindingIndex < IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS; ++bufferBindingIndex)
+		for(unsigned int bufferBindingIndex = 0; bufferBindingIndex < MAX_UNIFORM_BUFFER_BINDINGS; bufferBindingIndex++)
 		{
 			vertexUniformBuffers[bufferBindingIndex] = -1;
 		}
 
-		for(unsigned int bufferBindingIndex = 0; bufferBindingIndex < IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS; ++bufferBindingIndex)
+		for(unsigned int bufferBindingIndex = 0; bufferBindingIndex < MAX_UNIFORM_BUFFER_BINDINGS; bufferBindingIndex++)
 		{
 			fragmentUniformBuffers[bufferBindingIndex] = -1;
 		}
@@ -1172,7 +1172,7 @@
 			}
 		}
 
-		for(unsigned int bufferBindingIndex = 0; bufferBindingIndex < IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS; ++bufferBindingIndex)
+		for(unsigned int bufferBindingIndex = 0; bufferBindingIndex < MAX_UNIFORM_BUFFER_BINDINGS; bufferBindingIndex++)
 		{
 			int index = vertexUniformBuffers[bufferBindingIndex];
 			device->VertexProcessor::setUniformBuffer(bufferBindingIndex, (index != -1) ? uniformBuffers[index].get()->getResource() : nullptr, (index != -1) ? uniformBuffers[index].getOffset() : 0);
@@ -1384,7 +1384,7 @@
 						}
 					}
 				}
-				
+
 				for(int i = 0; i < rows; i++)
 				{
 					linkedAttribute[location + i] = *attribute;
diff --git a/src/OpenGL/libGLESv2/Texture.cpp b/src/OpenGL/libGLESv2/Texture.cpp
index 8bbbed5..fe1824c 100644
--- a/src/OpenGL/libGLESv2/Texture.cpp
+++ b/src/OpenGL/libGLESv2/Texture.cpp
@@ -507,7 +507,7 @@
 
 Texture2D::Texture2D(GLuint name) : Texture(name)
 {
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		image[i] = nullptr;
 	}
@@ -522,7 +522,7 @@
 {
 	resource->lock(sw::DESTRUCT);
 
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		if(image[i])
 		{
@@ -567,7 +567,7 @@
 {
 	int imageCount = 0;
 
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		if(image[i] && image[i]->isChildOf(this))
 		{
@@ -626,7 +626,7 @@
 	ASSERT(isSamplerComplete());
 	int levels = 0;
 
-	while(levels < MIPMAP_LEVELS && image[levels])
+	while(levels < IMPLEMENTATION_MAX_TEXTURE_LEVELS && image[levels])
 	{
 		levels++;
 	}
@@ -672,7 +672,7 @@
         return;
     }
 
-	for(int level = 0; level < MIPMAP_LEVELS; level++)
+	for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
 	{
 		if(image[level])
 		{
@@ -689,7 +689,7 @@
 
 void Texture2D::releaseTexImage()
 {
-    for(int level = 0; level < MIPMAP_LEVELS; level++)
+    for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
 	{
 		if(image[level])
 		{
@@ -984,7 +984,7 @@
 {
 	for(int f = 0; f < 6; f++)
 	{
-		for(int i = 0; i < MIPMAP_LEVELS; i++)
+		for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 		{
 			image[f][i] = nullptr;
 		}
@@ -1003,7 +1003,7 @@
 
 	for(int f = 0; f < 6; f++)
 	{
-		for(int i = 0; i < MIPMAP_LEVELS; i++)
+		for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 		{
 			if(image[f][i])
 			{
@@ -1062,7 +1062,7 @@
 
 	for(int f = 0; f < 6; f++)
 	{
-		for(int i = 0; i < MIPMAP_LEVELS; i++)
+		for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 		{
 			if(image[f][i] && image[f][i]->isChildOf(this))
 			{
@@ -1122,7 +1122,7 @@
 	ASSERT(isSamplerComplete());
 	int levels = 0;
 
-	while(levels < MIPMAP_LEVELS && image[0][levels])
+	while(levels < IMPLEMENTATION_MAX_TEXTURE_LEVELS && image[0][levels])
 	{
 		levels++;
 	}
@@ -1468,7 +1468,7 @@
 
 Texture3D::Texture3D(GLuint name) : Texture(name)
 {
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		image[i] = nullptr;
 	}
@@ -1483,7 +1483,7 @@
 {
 	resource->lock(sw::DESTRUCT);
 
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		if(image[i])
 		{
@@ -1528,7 +1528,7 @@
 {
 	int imageCount = 0;
 
-	for(int i = 0; i < MIPMAP_LEVELS; i++)
+	for(int i = 0; i < IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
 	{
 		if(image[i] && image[i]->isChildOf(this))
 		{
@@ -1593,7 +1593,7 @@
 	ASSERT(isSamplerComplete());
 	int levels = 0;
 
-	while(levels < MIPMAP_LEVELS && image[levels])
+	while(levels < IMPLEMENTATION_MAX_TEXTURE_LEVELS && image[levels])
 	{
 		levels++;
 	}
@@ -1635,7 +1635,7 @@
 		return;
 	}
 
-	for(int level = 0; level < MIPMAP_LEVELS; level++)
+	for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
 	{
 		if(image[level])
 		{
@@ -1652,7 +1652,7 @@
 
 void Texture3D::releaseTexImage()
 {
-	for(int level = 0; level < MIPMAP_LEVELS; level++)
+	for(int level = 0; level < IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
 	{
 		if(image[level])
 		{
@@ -2033,10 +2033,10 @@
 
 egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard)
 {
-	if(width == 0 || height == 0 || height > OUTLINE_RESOLUTION)
+	if(width == 0 || height == 0 || height > sw::OUTLINE_RESOLUTION)
 	{
 		ERR("Invalid parameters: %dx%d", width, height);
-		return 0;
+		return nullptr;
 	}
 
 	bool lockable = true;
diff --git a/src/OpenGL/libGLESv2/Texture.h b/src/OpenGL/libGLESv2/Texture.h
index 603ef5e..8c7c5c8 100644
--- a/src/OpenGL/libGLESv2/Texture.h
+++ b/src/OpenGL/libGLESv2/Texture.h
@@ -38,15 +38,10 @@
 
 enum
 {
-	IMPLEMENTATION_MAX_TEXTURE_LEVELS = MIPMAP_LEVELS,
-    IMPLEMENTATION_MAX_TEXTURE_SIZE = 1 << (MIPMAP_LEVELS - 1),
-    IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE = 1 << (MIPMAP_LEVELS - 1),
-	IMPLEMENTATION_MAX_RENDERBUFFER_SIZE = OUTLINE_RESOLUTION,
-	IMPLEMENTATION_MAX_COLOR_ATTACHMENTS = MAX_COLOR_ATTACHMENTS,
-	IMPLEMENTATION_MAX_DRAW_BUFFERS = 8,
-	IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS,
-	IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS = MAX_UNIFORM_BUFFER_BINDINGS,
-	IMPLEMENTATION_UNIFORM_BUFFER_OFFSET_ALIGNMENT = 1,
+	IMPLEMENTATION_MAX_TEXTURE_LEVELS = sw::MIPMAP_LEVELS,
+    IMPLEMENTATION_MAX_TEXTURE_SIZE = 1 << (IMPLEMENTATION_MAX_TEXTURE_LEVELS - 1),
+    IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE = 1 << (IMPLEMENTATION_MAX_TEXTURE_LEVELS - 1),
+	IMPLEMENTATION_MAX_RENDERBUFFER_SIZE = sw::OUTLINE_RESOLUTION,
 };
 
 class Texture : public egl::Texture
diff --git a/src/OpenGL/libGLESv2/TransformFeedback.h b/src/OpenGL/libGLESv2/TransformFeedback.h
index 4f4302b..4871ee1 100644
--- a/src/OpenGL/libGLESv2/TransformFeedback.h
+++ b/src/OpenGL/libGLESv2/TransformFeedback.h
@@ -15,6 +15,7 @@
 #define LIBGLESV2_TRANSFORM_FEEDBACK_H_
 
 #include "Buffer.h"
+#include "Context.h"
 #include "common/Object.hpp"
 #include "Renderer/Renderer.hpp"
 
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index f6e9b24..44bb5a4 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -22,6 +22,7 @@
 #include "Shader.h"
 #include "Texture.h"
 #include "Query.h"
+#include "TransformFeedback.h"
 #include "common/debug.h"
 #include "Common/Version.h"
 
@@ -2023,7 +2024,7 @@
 			}
 			// fall through
 		case GL_COLOR_ATTACHMENT0:
-			if((attachment - GL_COLOR_ATTACHMENT0) >= es2::IMPLEMENTATION_MAX_COLOR_ATTACHMENTS)
+			if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS)
 			{
 				return error(GL_INVALID_ENUM);
 			}
@@ -2174,7 +2175,7 @@
 			}
 			// fall through
 		case GL_COLOR_ATTACHMENT0:
-			if((attachment - GL_COLOR_ATTACHMENT0) >= es2::IMPLEMENTATION_MAX_COLOR_ATTACHMENTS)
+			if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS)
 			{
 				return error(GL_INVALID_ENUM);
 			}
@@ -2843,7 +2844,7 @@
 			}
 			// fall through
 		case GL_COLOR_ATTACHMENT0:
-			if((attachment - GL_COLOR_ATTACHMENT0) >= es2::IMPLEMENTATION_MAX_COLOR_ATTACHMENTS)
+			if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS)
 			{
 				return error(GL_INVALID_ENUM);
 			}
@@ -6628,7 +6629,7 @@
 			}
 			// fall through
 		case GL_COLOR_ATTACHMENT0:
-			if((attachment - GL_COLOR_ATTACHMENT0) >= es2::IMPLEMENTATION_MAX_COLOR_ATTACHMENTS)
+			if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS)
 			{
 				return error(GL_INVALID_ENUM);
 			}
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index a95908b..1adb45c 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -19,6 +19,7 @@
 #include "Sampler.h"
 #include "Texture.h"
 #include "mathutil.h"
+#include "TransformFeedback.h"
 #include "common/debug.h"
 
 #include <GLES3/gl3.h>
@@ -553,7 +554,7 @@
 		case GL_COLOR_ATTACHMENT31:
 		{
 			GLuint index = (src - GL_COLOR_ATTACHMENT0);
-			if(index >= es2::IMPLEMENTATION_MAX_COLOR_ATTACHMENTS)
+			if(index >= MAX_COLOR_ATTACHMENTS)
 			{
 				return error(GL_INVALID_ENUM);
 			}
@@ -1131,7 +1132,7 @@
 {
 	TRACE("(GLsizei n = %d, const GLenum *bufs = %p)", n, bufs);
 
-	if(n < 0 || n > es2::IMPLEMENTATION_MAX_DRAW_BUFFERS)
+	if(n < 0 || n > MAX_DRAW_BUFFERS)
 	{
 		return error(GL_INVALID_VALUE);
 	}
@@ -1198,7 +1199,7 @@
 			case GL_COLOR_ATTACHMENT31:
 			{
 				GLuint index = (bufs[i] - GL_COLOR_ATTACHMENT0);
-				if(index >= es2::IMPLEMENTATION_MAX_COLOR_ATTACHMENTS)
+				if(index >= MAX_COLOR_ATTACHMENTS)
 				{
 					return error(GL_INVALID_ENUM);
 				}
@@ -1960,7 +1961,7 @@
 		switch(target)
 		{
 		case GL_TRANSFORM_FEEDBACK_BUFFER:
-			if(index >= es2::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS)
+			if(index >= MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS)
 			{
 				return error(GL_INVALID_VALUE);
 			}
@@ -1972,11 +1973,11 @@
 			context->bindGenericTransformFeedbackBuffer(buffer);
 			break;
 		case GL_UNIFORM_BUFFER:
-			if(index >= es2::IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS)
+			if(index >= MAX_UNIFORM_BUFFER_BINDINGS)
 			{
 				return error(GL_INVALID_VALUE);
 			}
-			if(offset % es2::IMPLEMENTATION_UNIFORM_BUFFER_OFFSET_ALIGNMENT != 0)
+			if(offset % UNIFORM_BUFFER_OFFSET_ALIGNMENT != 0)
 			{
 				return error(GL_INVALID_VALUE);
 			}
@@ -2001,7 +2002,7 @@
 		switch(target)
 		{
 		case GL_TRANSFORM_FEEDBACK_BUFFER:
-			if(index >= es2::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS)
+			if(index >= MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS)
 			{
 				return error(GL_INVALID_VALUE);
 			}
@@ -2009,7 +2010,7 @@
 			context->bindGenericTransformFeedbackBuffer(buffer);
 			break;
 		case GL_UNIFORM_BUFFER:
-			if(index >= es2::IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS)
+			if(index >= MAX_UNIFORM_BUFFER_BINDINGS)
 			{
 				return error(GL_INVALID_VALUE);
 			}
@@ -2030,7 +2031,7 @@
 	switch(bufferMode)
 	{
 	case GL_SEPARATE_ATTRIBS:
-		if(count > es2::IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS)
+		if(count > MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS)
 		{
 			return error(GL_INVALID_VALUE);
 		}
@@ -2575,7 +2576,7 @@
 		switch(buffer)
 		{
 		case GL_COLOR:
-			if(drawbuffer < 0 || drawbuffer >= es2::IMPLEMENTATION_MAX_DRAW_BUFFERS)
+			if(drawbuffer < 0 || drawbuffer >= MAX_DRAW_BUFFERS)
 			{
 				return error(GL_INVALID_VALUE);
 			}
@@ -2612,7 +2613,7 @@
 		switch(buffer)
 		{
 		case GL_COLOR:
-			if(drawbuffer < 0 || drawbuffer >= es2::IMPLEMENTATION_MAX_DRAW_BUFFERS)
+			if(drawbuffer < 0 || drawbuffer >= MAX_DRAW_BUFFERS)
 			{
 				return error(GL_INVALID_VALUE);
 			}
@@ -2639,7 +2640,7 @@
 		switch(buffer)
 		{
 		case GL_COLOR:
-			if(drawbuffer < 0 || drawbuffer >= es2::IMPLEMENTATION_MAX_DRAW_BUFFERS)
+			if(drawbuffer < 0 || drawbuffer >= MAX_DRAW_BUFFERS)
 			{
 				return error(GL_INVALID_VALUE);
 			}
@@ -2941,7 +2942,7 @@
 	TRACE("(GLuint program = %d, GLuint uniformBlockIndex = %d, GLuint uniformBlockBinding = %d)",
 	      program, uniformBlockIndex, uniformBlockBinding);
 
-	if(uniformBlockBinding >= es2::IMPLEMENTATION_MAX_UNIFORM_BUFFER_BINDINGS)
+	if(uniformBlockBinding >= MAX_UNIFORM_BUFFER_BINDINGS)
 	{
 		return error(GL_INVALID_VALUE);
 	}
