diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 983914e..e5225ce 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -300,7 +300,7 @@
     markAllStateDirty();
 }
 
-EGLint Context::getClientVersion()
+EGLint Context::getClientVersion() const
 {
 	return clientVersion;
 }
@@ -4125,11 +4125,8 @@
 
 }
 
-// Exported functions for use by EGL
-extern "C"
+egl::Context *es2CreateContext(const egl::Config *config, const egl::Context *shareContext, int clientVersion)
 {
-	es2::Context *glCreateContext(const egl::Config *config, const es2::Context *shareContext, int clientVersion)
-	{
-		return new es2::Context(config, shareContext, clientVersion);
-	}
+	ASSERT(!shareContext || shareContext->getClientVersion() == clientVersion);   // Should be checked by eglCreateContext
+	return new es2::Context(config, static_cast<const es2::Context*>(shareContext), clientVersion);
 }
diff --git a/src/OpenGL/libGLESv2/Context.h b/src/OpenGL/libGLESv2/Context.h
index 4da5a75..995015a 100644
--- a/src/OpenGL/libGLESv2/Context.h
+++ b/src/OpenGL/libGLESv2/Context.h
@@ -353,7 +353,7 @@
     Context(const egl::Config *config, const Context *shareContext, EGLint clientVersion);
 
 	virtual void makeCurrent(egl::Surface *surface);
-	virtual EGLint getClientVersion();
+	virtual EGLint getClientVersion() const;
 
     void markAllStateDirty();
 
diff --git a/src/OpenGL/libGLESv2/Texture.cpp b/src/OpenGL/libGLESv2/Texture.cpp
index 3d84215..a9002a2 100644
--- a/src/OpenGL/libGLESv2/Texture.cpp
+++ b/src/OpenGL/libGLESv2/Texture.cpp
@@ -1797,60 +1797,57 @@
 
 }
 
-// Exported functions for use by EGL
-extern "C"
+egl::Image *createBackBuffer(int width, int height, const egl::Config *config)
 {
-	egl::Image *createBackBuffer(int width, int height, const egl::Config *config)
+	if(config)
 	{
-		if(config)
-		{
-			return new es2::Image(0, width, height, config->mAlphaSize ? GL_RGBA : GL_RGB, GL_UNSIGNED_BYTE);
-		}
+		return new es2::Image(0, width, height, config->mAlphaSize ? GL_RGBA : GL_RGB, GL_UNSIGNED_BYTE);
+	}
 
+	return 0;
+}
+
+egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard)
+{
+	if(width == 0 || height == 0 || height > OUTLINE_RESOLUTION)
+	{
+		ERR("Invalid parameters");
+		return 0;
+	}
+		
+	bool lockable = true;
+
+	switch(format)
+	{
+//	case sw::FORMAT_D15S1:
+	case sw::FORMAT_D24S8:
+	case sw::FORMAT_D24X8:
+//	case sw::FORMAT_D24X4S4:
+	case sw::FORMAT_D24FS8:
+	case sw::FORMAT_D32:
+	case sw::FORMAT_D16:
+		lockable = false;
+		break;
+//	case sw::FORMAT_S8_LOCKABLE:
+//	case sw::FORMAT_D16_LOCKABLE:
+	case sw::FORMAT_D32F_LOCKABLE:
+//	case sw::FORMAT_D32_LOCKABLE:
+	case sw::FORMAT_DF24S8:
+	case sw::FORMAT_DF16S8:
+		lockable = true;
+		break;
+	default:
+		UNREACHABLE();
+	}
+
+	es2::Image *surface = new es2::Image(0, width, height, format, multiSampleDepth, lockable, true);
+
+	if(!surface)
+	{
+		ERR("Out of memory");
 		return 0;
 	}
 
-	egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard)
-	{
-		if(width == 0 || height == 0 || height > OUTLINE_RESOLUTION)
-		{
-			ERR("Invalid parameters");
-			return 0;
-		}
-		
-		bool lockable = true;
-
-		switch(format)
-		{
-	//	case sw::FORMAT_D15S1:
-		case sw::FORMAT_D24S8:
-		case sw::FORMAT_D24X8:
-	//	case sw::FORMAT_D24X4S4:
-		case sw::FORMAT_D24FS8:
-		case sw::FORMAT_D32:
-		case sw::FORMAT_D16:
-			lockable = false;
-			break;
-	//	case sw::FORMAT_S8_LOCKABLE:
-	//	case sw::FORMAT_D16_LOCKABLE:
-		case sw::FORMAT_D32F_LOCKABLE:
-	//	case sw::FORMAT_D32_LOCKABLE:
-		case sw::FORMAT_DF24S8:
-		case sw::FORMAT_DF16S8:
-			lockable = true;
-			break;
-		default:
-			UNREACHABLE();
-		}
-
-		es2::Image *surface = new es2::Image(0, width, height, format, multiSampleDepth, lockable, true);
-
-		if(!surface)
-		{
-			ERR("Out of memory");
-			return 0;
-		}
-
-		return surface;
-	}
+	return surface;
 }
+
diff --git a/src/OpenGL/libGLESv2/exports.map b/src/OpenGL/libGLESv2/exports.map
index cab96a0..4670a61 100644
--- a/src/OpenGL/libGLESv2/exports.map
+++ b/src/OpenGL/libGLESv2/exports.map
@@ -168,13 +168,7 @@
 	glEGLImageTargetTexture2DOES;
 	glEGLImageTargetRenderbufferStorageOES;
 
-    # EGL dependencies
-    glCreateContext;
-    glGetProcAddress;
-
-	createFrameBuffer;
-	createBackBuffer;
-	createDepthStencil;
+    libGLESv2exports;
 
 	Register;
 
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cbp b/src/OpenGL/libGLESv2/libGLESv2.cbp
index 4615472..18b8ab6 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cbp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cbp
@@ -372,6 +372,7 @@
 		<Unit filename="VertexDataManager.h" />
 		<Unit filename="exports.map" />
 		<Unit filename="libGLESv2.cpp" />
+		<Unit filename="libGLESv2.hpp" />
 		<Unit filename="main.cpp" />
 		<Unit filename="main.h" />
 		<Unit filename="mathutil.h" />
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index 13f6f6d..3277120 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -37,6 +37,8 @@
 #include <cutils/log.h>
 #endif
 
+using namespace es2;
+
 typedef std::pair<GLenum, GLenum> InternalFormatTypePair;
 typedef std::map<InternalFormatTypePair, GLenum> FormatMap;
 
@@ -6690,8 +6692,7 @@
 {
 	if(egl::getClientVersion() == 1)
 	{
-		static auto glEGLImageTargetTexture2DOES = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)es1::getProcAddress("glEGLImageTargetTexture2DOES");
-		return glEGLImageTargetTexture2DOES(target, image);
+		return libGLES_CM->glEGLImageTargetTexture2DOES(target, image);
 	}
 
 	TRACE("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);
@@ -6741,7 +6742,7 @@
 	UNIMPLEMENTED();
 }
 
-__eglMustCastToProperFunctionPointerType glGetProcAddress(const char *procname)
+__eglMustCastToProperFunctionPointerType es2GetProcAddress(const char *procname)
 {
 	struct Extension
 	{
diff --git a/src/OpenGL/libGLESv2/libGLESv2.def b/src/OpenGL/libGLESv2/libGLESv2.def
index 9b42766..0ce826c 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.def
+++ b/src/OpenGL/libGLESv2/libGLESv2.def
@@ -274,12 +274,6 @@
     glTexStorage3D                  @304
     glGetInternalformativ           @308
 
-    ; EGL dependencies
-    glCreateContext
-    glGetProcAddress
-
-	createFrameBuffer
-	createBackBuffer
-	createDepthStencil
+    libGLESv2exports
 
 	Register
\ No newline at end of file
diff --git a/src/OpenGL/libGLESv2/libGLESv2.hpp b/src/OpenGL/libGLESv2/libGLESv2.hpp
new file mode 100644
index 0000000..15f6528
--- /dev/null
+++ b/src/OpenGL/libGLESv2/libGLESv2.hpp
@@ -0,0 +1,93 @@
+#ifndef libGLESv2_hpp
+#define libGLESv2_hpp
+
+#define GL_API
+#include <GLES/gl.h>
+#define GL_GLEXT_PROTOTYPES
+#include <GLES/glext.h>
+#define EGLAPI
+#include <EGL/egl.h>
+
+#include "Common/SharedLibrary.hpp"
+
+namespace sw
+{
+class FrameBuffer;
+enum Format : unsigned char;
+}
+
+namespace egl
+{
+class Context;
+class Image;
+class Config;
+}
+
+class LibGLESv2exports
+{
+public:
+	LibGLESv2exports();
+
+	egl::Context *(*es2CreateContext)(const egl::Config *config, const egl::Context *shareContext, int clientVersion);
+	__eglMustCastToProperFunctionPointerType (*es2GetProcAddress)(const char *procname);
+	egl::Image *(*createBackBuffer)(int width, int height, const egl::Config *config);
+	egl::Image *(*createDepthStencil)(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);
+	sw::FrameBuffer *(*createFrameBuffer)(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);
+};
+
+class LibGLESv2
+{
+public:
+	LibGLESv2()
+	{
+		libGLESv2 = nullptr;
+		libGLESv2exports = nullptr;
+	}
+
+	~LibGLESv2()
+	{
+		freeLibrary(libGLESv2);
+	}
+
+	operator bool()
+	{
+		return loadExports();
+	}
+
+	LibGLESv2exports *operator->()
+	{
+		return loadExports();
+	}
+
+private:
+	LibGLESv2exports *loadExports()
+	{
+		if(!libGLESv2)
+		{
+			#if defined(_WIN32)
+			const char *libGLESv2_lib[] = {"libGLESv2.dll", "libGLES_V2_translator.dll"};
+			#elif defined(__ANDROID__)
+			const char *libGLESv2_lib[] = {"/vendor/lib/egl/libGLESv2_swiftshader.so"};
+			#elif defined(__LP64__)
+			const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
+			#else
+			const char *libGLESv2_lib[] = {"libGLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
+			#endif
+
+			libGLESv2 = loadLibrary(libGLESv2_lib);
+
+			if(libGLESv2)
+			{
+				auto libGLESv2exportsProc = (LibGLESv2exports *(*)())getProcAddress(libGLESv2, "libGLESv2exports");
+				libGLESv2exports = libGLESv2exportsProc();
+			}
+		}
+
+		return libGLESv2exports;
+	}
+
+	void *libGLESv2;
+	LibGLESv2exports *libGLESv2exports;
+};
+
+#endif   // libGLESv2_hpp
diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
index f47b891..7bba1e6 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
@@ -355,6 +355,7 @@
     <ClInclude Include="Framebuffer.h" />
     <ClInclude Include="Image.hpp" />
     <ClInclude Include="IndexDataManager.h" />
+    <ClInclude Include="libGLESv2.hpp" />
     <ClInclude Include="main.h" />
     <ClInclude Include="mathutil.h" />
     <ClInclude Include="Program.h" />
diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
index 683b67a..fa96948 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
@@ -160,6 +160,9 @@
     <ClInclude Include="VertexArray.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="libGLESv2.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="libGLESv2.rc" />
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index 469bbe4..05f2468 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -23,6 +23,8 @@
 #include <GLES3/gl3.h>
 #include <GLES2/gl2ext.h>
 
+using namespace es2;
+
 typedef std::pair<GLenum, GLenum> InternalFormatTypePair;
 typedef std::map<InternalFormatTypePair, GLenum> FormatMap;
 
diff --git a/src/OpenGL/libGLESv2/main.cpp b/src/OpenGL/libGLESv2/main.cpp
index f185bee..d77b784 100644
--- a/src/OpenGL/libGLESv2/main.cpp
+++ b/src/OpenGL/libGLESv2/main.cpp
@@ -13,7 +13,9 @@
 
 #include "main.h"
 
+#include "libGLESv2.hpp"
 #include "Framebuffer.h"
+#include "libEGL/main.h"
 #include "libEGL/Surface.h"
 #include "Common/Thread.hpp"
 #include "Common/SharedLibrary.hpp"
@@ -37,40 +39,11 @@
     TRACE("()");
 }
 
-CONSTRUCTOR static bool glAttachProcess()
+CONSTRUCTOR static void glAttachProcess()
 {
     TRACE("()");
 
     glAttachThread();
-
-	#if defined(_WIN32)
-	const char *libEGL_lib[] = {"libEGL.dll", "libEGL_translator.dll"};
-	#elif defined(__ANDROID__)
-	const char *libEGL_lib[] = {"/vendor/lib/egl/libEGL_swiftshader.so"};
-	#elif defined(__LP64__)
-	const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
-	#else
-	const char *libEGL_lib[] = {"libEGL_translator.so", "libEGL.so.1", "libEGL.so"};
-	#endif
-
-	libEGL = loadLibrary(libEGL_lib);
-	egl::getCurrentContext = (egl::Context *(*)())getProcAddress(libEGL, "clientGetCurrentContext");
-	egl::getCurrentDisplay = (egl::Display *(*)())getProcAddress(libEGL, "clientGetCurrentDisplay");
-
-	#if defined(_WIN32)
-	const char *libGLES_CM_lib[] = {"libGLES_CM.dll", "libGLES_CM_translator.dll"};
-	#elif defined(__ANDROID__)
-	const char *libGLES_CM_lib[] = {"/vendor/lib/egl/libGLESv1_CM_swiftshader.so"};
-	#elif defined(__LP64__)
-	const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
-	#else
-	const char *libGLES_CM_lib[] = {"libGLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
-	#endif
-
-	libGLES_CM = loadLibrary(libGLES_CM_lib);
-	es1::getProcAddress = (__eglMustCastToProperFunctionPointerType (*)(const char*))getProcAddress(libGLES_CM, "glGetProcAddress");
-
-    return libEGL != 0;
 }
 
 DESTRUCTOR static void glDetachProcess()
@@ -78,8 +51,6 @@
     TRACE("()");
 
 	glDetachThread();
-	freeLibrary(libEGL);
-	freeLibrary(libGLES_CM);
 }
 
 #if defined(_WIN32)
@@ -88,7 +59,7 @@
     switch(reason)
     {
     case DLL_PROCESS_ATTACH:
-        return glAttachProcess();
+        glAttachProcess();
         break;
     case DLL_THREAD_ATTACH:
         glAttachThread();
@@ -111,7 +82,7 @@
 {
 es2::Context *getContext()
 {
-	egl::Context *context = egl::getCurrentContext();
+	egl::Context *context = libEGL->clientGetCurrentContext();
 
 	if(context && (context->getClientVersion() == 2 ||
 	               context->getClientVersion() == 3))
@@ -124,7 +95,7 @@
 
 egl::Display *getDisplay()
 {
-    return egl::getCurrentDisplay();
+    return libEGL->clientGetCurrentDisplay();
 }
 
 Device *getDevice()
@@ -133,17 +104,6 @@
 
     return context ? context->getDevice() : 0;
 }
-}
-
-namespace egl
-{
-GLint getClientVersion()
-{
-	Context *context = egl::getCurrentContext();
-
-    return context ? context->getClientVersion() : 0;
-}
-}
 
 // Records an error code
 void error(GLenum errorCode)
@@ -178,17 +138,38 @@
         }
     }
 }
+}
 
 namespace egl
 {
-	egl::Context *(*getCurrentContext)() = 0;
-	egl::Display *(*getCurrentDisplay)() = 0;
-}
-
-namespace es1
+GLint getClientVersion()
 {
-	__eglMustCastToProperFunctionPointerType (*getProcAddress)(const char *procname) = 0;
+	Context *context = libEGL->clientGetCurrentContext();
+
+    return context ? context->getClientVersion() : 0;
+}
 }
 
-void *libEGL = 0;   // Handle to the libEGL module
-void *libGLES_CM = 0;   // Handle to the libGLES_CM module
+egl::Context *es2CreateContext(const egl::Config *config, const egl::Context *shareContext, int clientVersion);
+extern "C" __eglMustCastToProperFunctionPointerType es2GetProcAddress(const char *procname);
+egl::Image *createBackBuffer(int width, int height, const egl::Config *config);
+egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);
+sw::FrameBuffer *createFrameBuffer(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);
+
+LibGLESv2exports::LibGLESv2exports()
+{
+	this->es2CreateContext = ::es2CreateContext;
+	this->es2GetProcAddress = ::es2GetProcAddress;
+	this->createBackBuffer = ::createBackBuffer;
+	this->createDepthStencil = ::createDepthStencil;
+	this->createFrameBuffer = ::createFrameBuffer;
+}
+
+extern "C" LibGLESv2exports *libGLESv2exports()
+{
+	static LibGLESv2exports libGLESv2;
+	return &libGLESv2;
+}
+
+LibEGL libEGL;
+LibGLES_CM libGLES_CM;
\ No newline at end of file
diff --git a/src/OpenGL/libGLESv2/main.h b/src/OpenGL/libGLESv2/main.h
index 09ffb88..de5a2c4 100644
--- a/src/OpenGL/libGLESv2/main.h
+++ b/src/OpenGL/libGLESv2/main.h
@@ -17,7 +17,9 @@
 #include "Context.h"
 #include "Device.hpp"
 #include "common/debug.h"
+#include "libEGL/libEGL.hpp"
 #include "libEGL/Display.h"
+#include "libGLES_CM/libGLES_CM.hpp"
 
 #define GL_APICALL
 #include <GLES2/gl2.h>
@@ -29,6 +31,16 @@
 	Context *getContext();
 	egl::Display *getDisplay();
 	Device *getDevice();
+
+	void error(GLenum errorCode);
+
+	template<class T>
+	const T &error(GLenum errorCode, const T &returnValue)
+	{
+		error(errorCode);
+
+		return returnValue;
+	}
 }
 
 namespace egl
@@ -36,30 +48,7 @@
 	GLint getClientVersion();
 }
 
-void error(GLenum errorCode);
-
-template<class T>
-const T &error(GLenum errorCode, const T &returnValue)
-{
-    error(errorCode);
-
-    return returnValue;
-}
-
-// libEGL dependencies
-namespace egl
-{
-	extern egl::Context *(*getCurrentContext)();
-	extern egl::Display *(*getCurrentDisplay)();
-}
-
-// libGLES_CM dependencies
-namespace es1
-{
-	extern __eglMustCastToProperFunctionPointerType (*getProcAddress)(const char *procname);
-}
-
-extern void *libEGL;       // Handle to the libEGL module
-extern void *libGLES_CM;   // Handle to the libGLES_CM module
+extern LibEGL libEGL;
+extern LibGLES_CM libGLES_CM;
 
 #endif   // LIBGLESV2_MAIN_H_
