diff --git a/src/Common/Version.h b/src/Common/Version.h
index eae755d..72bd15d 100644
--- a/src/Common/Version.h
+++ b/src/Common/Version.h
@@ -15,7 +15,7 @@
 #define MAJOR_VERSION 4
 #define MINOR_VERSION 1
 #define BUILD_VERSION 0
-#define BUILD_REVISION 1
+#define BUILD_REVISION 2
 
 #define STRINGIFY(x) #x
 #define MACRO_STRINGIFY(x) STRINGIFY(x)
diff --git a/src/OpenGL/libEGL/Display.cpp b/src/OpenGL/libEGL/Display.cpp
index 0b2c6dd..5821ba9 100644
--- a/src/OpenGL/libEGL/Display.cpp
+++ b/src/OpenGL/libEGL/Display.cpp
@@ -284,7 +284,7 @@
 	return true;
 }
 
-EGLSurface Display::createWindowSurface(EGLNativeWindowType window, EGLConfig config, const EGLint *attribList)
+EGLSurface Display::createWindowSurface(EGLNativeWindowType window, EGLConfig config, const EGLAttrib *attribList)
 {
 	const Config *configuration = mConfigSet.get(config);
 
diff --git a/src/OpenGL/libEGL/Display.h b/src/OpenGL/libEGL/Display.h
index 30f01b9..ddef14a 100644
--- a/src/OpenGL/libEGL/Display.h
+++ b/src/OpenGL/libEGL/Display.h
@@ -59,7 +59,7 @@
 		bool getConfigs(EGLConfig *configs, const EGLint *attribList, EGLint configSize, EGLint *numConfig);
 		bool getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value);
 
-		EGLSurface createWindowSurface(EGLNativeWindowType window, EGLConfig config, const EGLint *attribList);
+		EGLSurface createWindowSurface(EGLNativeWindowType window, EGLConfig config, const EGLAttrib *attribList);
 		EGLSurface createPBufferSurface(EGLConfig config, const EGLint *attribList, EGLClientBuffer clientBuffer = nullptr);
 		EGLContext createContext(EGLConfig configHandle, const Context *shareContext, EGLint clientVersion);
 		EGLSyncKHR createSync(Context *context);
diff --git a/src/OpenGL/libEGL/libEGL.cpp b/src/OpenGL/libEGL/libEGL.cpp
index 952fb88..c76f52b 100644
--- a/src/OpenGL/libEGL/libEGL.cpp
+++ b/src/OpenGL/libEGL/libEGL.cpp
@@ -30,11 +30,14 @@
 #endif
 
 #include <algorithm>
+#include <vector>
 #include <string.h>
 
-using namespace egl;
-
-static bool validateDisplay(egl::Display *display)
+namespace egl
+{
+namespace
+{
+bool validateDisplay(egl::Display *display)
 {
 	if(display == EGL_NO_DISPLAY)
 	{
@@ -49,7 +52,7 @@
 	return true;
 }
 
-static bool validateConfig(egl::Display *display, EGLConfig config)
+bool validateConfig(egl::Display *display, EGLConfig config)
 {
 	if(!validateDisplay(display))
 	{
@@ -64,7 +67,7 @@
 	return true;
 }
 
-static bool validateContext(egl::Display *display, egl::Context *context)
+bool validateContext(egl::Display *display, egl::Context *context)
 {
 	if(!validateDisplay(display))
 	{
@@ -79,7 +82,7 @@
 	return true;
 }
 
-static bool validateSurface(egl::Display *display, egl::Surface *surface)
+bool validateSurface(egl::Display *display, egl::Surface *surface)
 {
 	if(!validateDisplay(display))
 	{
@@ -94,8 +97,34 @@
 	return true;
 }
 
-namespace egl
+// Class to facilitate conversion from EGLint to EGLAttrib lists.
+class EGLAttribs
 {
+public:
+	explicit EGLAttribs(const EGLint *attrib_list)
+	{
+		if(attrib_list)
+		{
+			while(*attrib_list != EGL_NONE)
+			{
+				attrib.push_back(static_cast<EGLAttrib>(*attrib_list));
+				attrib_list++;
+			}
+		}
+
+		attrib.push_back(EGL_NONE);
+	}
+
+	operator const EGLAttrib*() const
+	{
+		return &attrib[0];
+	}
+
+private:
+	std::vector<EGLAttrib> attrib;
+};
+}
+
 EGLint GetError(void)
 {
 	TRACE("()");
@@ -301,10 +330,10 @@
 	return success(EGL_TRUE);
 }
 
-EGLSurface CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list)
+EGLSurface CreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list)
 {
-	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, EGLNativeWindowType win = %p, "
-	      "const EGLint *attrib_list = %p)", dpy, config, window, attrib_list);
+	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, void *native_window = %p, "
+	      "const EGLint *attrib_list = %p)", dpy, config, native_window, attrib_list);
 
 	egl::Display *display = egl::Display::get(dpy);
 
@@ -313,12 +342,30 @@
 		return EGL_NO_SURFACE;
 	}
 
-	if(!display->isValidWindow(window))
+	if(!display->isValidWindow((EGLNativeWindowType)native_window))
 	{
 		return error(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE);
 	}
 
-	return display->createWindowSurface(window, config, attrib_list);
+	return display->createWindowSurface((EGLNativeWindowType)native_window, config, attrib_list);
+}
+
+EGLSurface CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list)
+{
+	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, void *native_window = %p, "
+	      "const EGLint *attrib_list = %p)", dpy, config, native_window, attrib_list);
+
+	EGLAttribs attribs(attrib_list);
+	return CreatePlatformWindowSurface(dpy, config, native_window, attribs);
+}
+
+EGLSurface CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list)
+{
+	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, EGLNativeWindowType window = %p, "
+	      "const EGLint *attrib_list = %p)", dpy, config, window, attrib_list);
+
+	EGLAttribs attribs(attrib_list);
+	return CreatePlatformWindowSurface(dpy, config, (void*)window, attribs);
 }
 
 EGLSurface CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
@@ -336,10 +383,10 @@
 	return display->createPBufferSurface(config, attrib_list);
 }
 
-EGLSurface CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)
+EGLSurface CreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list)
 {
-	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, EGLNativePixmapType pixmap = %p, "
-	      "const EGLint *attrib_list = %p)", dpy, config, pixmap, attrib_list);
+	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, void *native_pixmap = %p, "
+	      "const EGLint *attrib_list = %p)", dpy, config, native_pixmap, attrib_list);
 
 	egl::Display *display = egl::Display::get(dpy);
 
@@ -353,6 +400,24 @@
 	return success(EGL_NO_SURFACE);
 }
 
+EGLSurface CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list)
+{
+	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, void *native_pixmap = %p, "
+	      "const EGLint *attrib_list = %p)", dpy, config, native_pixmap, attrib_list);
+
+	EGLAttribs attribs(attrib_list);
+	return CreatePlatformPixmapSurface(dpy, config, native_pixmap, attribs);
+}
+
+EGLSurface CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)
+{
+	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, EGLNativePixmapType pixmap = %p, "
+	      "const EGLint *attrib_list = %p)", dpy, config, pixmap, attrib_list);
+
+	EGLAttribs attribs(attrib_list);
+	return CreatePlatformPixmapSurface(dpy, config, (void*)pixmap, attribs);
+}
+
 EGLBoolean DestroySurface(EGLDisplay dpy, EGLSurface surface)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSurface surface = %p)", dpy, surface);
@@ -1062,9 +1127,9 @@
 	return success(EGL_FALSE);
 }
 
-EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
+EGLImage CreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list)
 {
-	TRACE("(EGLDisplay dpy = %p, EGLContext ctx = %p, EGLenum target = 0x%X, buffer = %p, const EGLint attrib_list = %p)", dpy, ctx, target, buffer, attrib_list);
+	TRACE("(EGLDisplay dpy = %p, EGLContext ctx = %p, EGLenum target = 0x%X, buffer = %p, const EGLAttrib *attrib_list = %p)", dpy, ctx, target, buffer, attrib_list);
 
 	egl::Display *display = egl::Display::get(dpy);
 	egl::Context *context = static_cast<egl::Context*>(ctx);
@@ -1083,15 +1148,15 @@
 	GLuint textureLevel = 0;
 	if(attrib_list)
 	{
-		for(const EGLint *attribute = attrib_list; attribute[0] != EGL_NONE; attribute += 2)
+		for(const EGLAttrib *attribute = attrib_list; attribute[0] != EGL_NONE; attribute += 2)
 		{
 			if(attribute[0] == EGL_IMAGE_PRESERVED_KHR)
 			{
-				imagePreserved = attribute[1];
+				imagePreserved = static_cast<EGLenum>(attribute[1]);
 			}
 			else if(attribute[0] == EGL_GL_TEXTURE_LEVEL_KHR)
 			{
-				textureLevel = attribute[1];
+				textureLevel = static_cast<GLuint>(attribute[1]);
 			}
 			else
 			{
@@ -1144,11 +1209,19 @@
 		return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
 	}
 
-	EGLImageKHR eglImage = display->createSharedImage(image);
+	EGLImage eglImage = display->createSharedImage(image);
 
 	return success(eglImage);
 }
 
+EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
+{
+	TRACE("(EGLDisplay dpy = %p, EGLContext ctx = %p, EGLenum target = 0x%X, buffer = %p, const EGLint attrib_list = %p)", dpy, ctx, target, buffer, attrib_list);
+
+	EGLAttribs attribs(attrib_list);
+	return CreateImage(dpy, ctx, target, buffer, attribs);
+}
+
 EGLBoolean DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLImageKHR image = %p)", dpy, image);
@@ -1168,32 +1241,21 @@
 	return success(EGL_TRUE);
 }
 
-EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list)
+EGLDisplay GetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list)
 {
-	TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLint *attrib_list = %p)", platform, native_display, attrib_list);
+	TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLAttrib *attrib_list = %p)", platform, native_display, attrib_list);
 
 	#if defined(__linux__) && !defined(__ANDROID__)
 		switch(platform)
 		{
-		#if defined(USE_X11)
-		case EGL_PLATFORM_X11_EXT: break;
-		#endif
-		case EGL_PLATFORM_GBM_KHR: break;
+		case EGL_PLATFORM_X11_EXT:
+		case EGL_PLATFORM_GBM_KHR:
+			break;
 		default:
 			return error(EGL_BAD_PARAMETER, EGL_NO_DISPLAY);
 		}
 
-		if(platform == EGL_PLATFORM_GBM_KHR)
-		{
-			if(native_display != (void*)EGL_DEFAULT_DISPLAY || attrib_list != NULL)
-			{
-				return error(EGL_BAD_ATTRIBUTE, EGL_NO_DISPLAY);   // Unimplemented
-			}
-
-			return success(HEADLESS_DISPLAY);
-		}
-		#if defined(USE_X11)
-		else if(platform == EGL_PLATFORM_X11_EXT)
+		if(platform == EGL_PLATFORM_X11_EXT)
 		{
 			if(!libX11)
 			{
@@ -1205,7 +1267,15 @@
 				return error(EGL_BAD_ATTRIBUTE, EGL_NO_DISPLAY);   // Unimplemented
 			}
 		}
-		#endif
+		else if(platform == EGL_PLATFORM_GBM_KHR)
+		{
+			if(native_display != (void*)EGL_DEFAULT_DISPLAY || attrib_list != NULL)
+			{
+				return error(EGL_BAD_ATTRIBUTE, EGL_NO_DISPLAY);   // Unimplemented
+			}
+
+			return success(HEADLESS_DISPLAY);
+		}
 
 		return success(PRIMARY_DISPLAY);   // We only support the default display
 	#else
@@ -1213,19 +1283,17 @@
 	#endif
 }
 
-EGLSurface CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list)
+EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list)
 {
-	return CreateWindowSurface(dpy, config, (EGLNativeWindowType)native_window, attrib_list);
+	TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLint *attrib_list = %p)", platform, native_display, attrib_list);
+
+	EGLAttribs attribs(attrib_list);
+	return GetPlatformDisplay(platform, native_display, attribs);
 }
 
-EGLSurface CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list)
+EGLSync CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
 {
-	return CreatePixmapSurface(dpy, config, (EGLNativePixmapType)native_pixmap, attrib_list);
-}
-
-EGLSyncKHR CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
-{
-	TRACE("(EGLDisplay dpy = %p, EGLunum type = %x, EGLint *attrib_list=%p)", dpy, type, attrib_list);
+	TRACE("(EGLDisplay dpy = %p, EGLunum type = %x, EGLAttrib *attrib_list=%p)", dpy, type, attrib_list);
 
 	egl::Display *display = egl::Display::get(dpy);
 
@@ -1256,6 +1324,14 @@
 	return success(sync);
 }
 
+EGLSyncKHR CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
+{
+	TRACE("(EGLDisplay dpy = %p, EGLunum type = %x, EGLint *attrib_list=%p)", dpy, type, attrib_list);
+
+	EGLAttribs attribs(attrib_list);
+	return CreateSync(dpy, type, attribs);
+}
+
 EGLBoolean DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSyncKHR sync = %p)", dpy, sync);
@@ -1306,9 +1382,9 @@
 	return success(EGL_CONDITION_SATISFIED_KHR);
 }
 
-EGLBoolean GetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
+EGLBoolean GetSyncAttrib(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLAttrib *value)
 {
-	TRACE("(EGLDisplay dpy = %p, EGLSyncKHR sync = %p, EGLint attribute = %x, EGLint *value = %p)", dpy, sync, attribute, value);
+	TRACE("(EGLDisplay dpy = %p, EGLSyncKHR sync = %p, EGLint attribute = %x, EGLAttrib *value = %p)", dpy, sync, attribute, value);
 
 	egl::Display *display = egl::Display::get(dpy);
 	FenceSync *eglSync = static_cast<FenceSync*>(sync);
@@ -1340,6 +1416,14 @@
 	}
 }
 
+EGLBoolean GetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
+{
+	EGLAttrib attrib_value;
+	EGLBoolean result = GetSyncAttrib(dpy, sync, attribute, &attrib_value);
+	*value = static_cast<EGLint>(attrib_value);
+	return result;
+}
+
 __eglMustCastToProperFunctionPointerType GetProcAddress(const char *procname)
 {
 	TRACE("(const char *procname = \"%s\")", procname);
@@ -1367,20 +1451,27 @@
 		FUNCTION(eglBindAPI),
 		FUNCTION(eglBindTexImage),
 		FUNCTION(eglChooseConfig),
+		FUNCTION(eglClientWaitSync),
 		FUNCTION(eglClientWaitSyncKHR),
 		FUNCTION(eglCopyBuffers),
 		FUNCTION(eglCreateContext),
+		FUNCTION(eglCreateImage),
 		FUNCTION(eglCreateImageKHR),
 		FUNCTION(eglCreatePbufferFromClientBuffer),
 		FUNCTION(eglCreatePbufferSurface),
 		FUNCTION(eglCreatePixmapSurface),
+		FUNCTION(eglCreatePlatformPixmapSurface),
 		FUNCTION(eglCreatePlatformPixmapSurfaceEXT),
+		FUNCTION(eglCreatePlatformWindowSurface),
 		FUNCTION(eglCreatePlatformWindowSurfaceEXT),
+		FUNCTION(eglCreateSync),
 		FUNCTION(eglCreateSyncKHR),
 		FUNCTION(eglCreateWindowSurface),
 		FUNCTION(eglDestroyContext),
+		FUNCTION(eglDestroyImage),
 		FUNCTION(eglDestroyImageKHR),
 		FUNCTION(eglDestroySurface),
+		FUNCTION(eglDestroySync),
 		FUNCTION(eglDestroySyncKHR),
 		FUNCTION(eglGetConfigAttrib),
 		FUNCTION(eglGetConfigs),
@@ -1389,8 +1480,10 @@
 		FUNCTION(eglGetCurrentSurface),
 		FUNCTION(eglGetDisplay),
 		FUNCTION(eglGetError),
+		FUNCTION(eglGetPlatformDisplay),
 		FUNCTION(eglGetPlatformDisplayEXT),
 		FUNCTION(eglGetProcAddress),
+		FUNCTION(eglGetSyncAttrib),
 		FUNCTION(eglGetSyncAttribKHR),
 		FUNCTION(eglInitialize),
 		FUNCTION(eglMakeCurrent),
@@ -1407,6 +1500,8 @@
 		FUNCTION(eglWaitClient),
 		FUNCTION(eglWaitGL),
 		FUNCTION(eglWaitNative),
+		FUNCTION(eglWaitSync),
+		FUNCTION(eglWaitSyncKHR),
 
 		#undef FUNCTION
 	};
diff --git a/src/OpenGL/libEGL/libEGL.lds b/src/OpenGL/libEGL/libEGL.lds
index 7a2a479..5252a30 100644
--- a/src/OpenGL/libEGL/libEGL.lds
+++ b/src/OpenGL/libEGL/libEGL.lds
@@ -4,14 +4,21 @@
 	eglBindAPI;
 	eglBindTexImage;
 	eglChooseConfig;
+	eglClientWaitSync;
 	eglCopyBuffers;
 	eglCreateContext;
+	eglCreateImage;
 	eglCreatePbufferFromClientBuffer;
 	eglCreatePbufferSurface;
 	eglCreatePixmapSurface;
+	eglCreatePlatformPixmapSurface;
+	eglCreatePlatformWindowSurface;
+	eglCreateSync;
 	eglCreateWindowSurface;
 	eglDestroyContext;
+	eglDestroyImage;
 	eglDestroySurface;
+	eglDestroySync;
 	eglGetConfigAttrib;
 	eglGetConfigs;
 	eglGetCurrentContext;
@@ -19,7 +26,9 @@
 	eglGetCurrentSurface;
 	eglGetDisplay;
 	eglGetError;
+	eglGetPlatformDisplay;
 	eglGetProcAddress;
+	eglGetSyncAttrib;
 	eglInitialize;
 	eglMakeCurrent;
 	eglQueryAPI;
@@ -35,6 +44,7 @@
 	eglWaitClient;
 	eglWaitGL;
 	eglWaitNative;
+	eglWaitSync;
 
 	# Extensions
 	eglCreateImageKHR;
@@ -56,4 +66,4 @@
 
 local:
 	*;
-};
\ No newline at end of file
+};
diff --git a/src/OpenGL/libEGL/main.cpp b/src/OpenGL/libEGL/main.cpp
index a1ff6f1..c6c5630 100644
--- a/src/OpenGL/libEGL/main.cpp
+++ b/src/OpenGL/libEGL/main.cpp
@@ -368,14 +368,20 @@
 EGLBoolean SwapBuffers(EGLDisplay dpy, EGLSurface surface);
 EGLBoolean CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
 EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
+EGLImageKHR CreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
 EGLBoolean DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image);
 EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list);
+EGLDisplay GetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
 EGLSurface CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
+EGLSurface CreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
 EGLSurface CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
+EGLSurface CreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
 EGLSyncKHR CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+EGLSyncKHR CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
 EGLBoolean DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync);
 EGLint ClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
 EGLBoolean GetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
+EGLBoolean GetSyncAttrib(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLAttrib *value);
 __eglMustCastToProperFunctionPointerType GetProcAddress(const char *procname);
 }
 
@@ -551,46 +557,101 @@
 	return egl::CreateImageKHR(dpy, ctx, target, buffer, attrib_list);
 }
 
+EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list)
+{
+	return egl::CreateImage(dpy, ctx, target, buffer, attrib_list);
+}
+
 EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
 {
 	return egl::DestroyImageKHR(dpy, image);
 }
 
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage(EGLDisplay dpy, EGLImageKHR image)
+{
+	return egl::DestroyImageKHR(dpy, image);
+}
+
 EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list)
 {
 	return egl::GetPlatformDisplayEXT(platform, native_display, attrib_list);
 }
 
+EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list)
+{
+	return egl::GetPlatformDisplay(platform, native_display, attrib_list);
+}
+
 EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list)
 {
 	return egl::CreatePlatformWindowSurfaceEXT(dpy, config, native_window, attrib_list);
 }
 
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list)
+{
+	return egl::CreatePlatformWindowSurface(dpy, config, native_window, attrib_list);
+}
+
 EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list)
 {
 	return egl::CreatePlatformPixmapSurfaceEXT(dpy, config, native_pixmap, attrib_list);
 }
 
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list)
+{
+	return egl::CreatePlatformPixmapSurface(dpy, config, native_pixmap, attrib_list);
+}
+
 EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
 {
 	return egl::CreateSyncKHR(dpy, type, attrib_list);
 }
 
+EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
+{
+	return egl::CreateSync(dpy, type, attrib_list);
+}
+
 EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
 {
 	return egl::DestroySyncKHR(dpy, sync);
 }
 
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync(EGLDisplay dpy, EGLSyncKHR sync)
+{
+	return egl::DestroySyncKHR(dpy, sync);
+}
+
 EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
 {
 	return egl::ClientWaitSyncKHR(dpy, sync, flags, timeout);
 }
 
+EGLAPI EGLint EGLAPIENTRY eglClientWaitSync(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
+{
+	return egl::ClientWaitSyncKHR(dpy, sync, flags, timeout);
+}
+
 EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
 {
 	return egl::GetSyncAttribKHR(dpy, sync, attribute, value);
 }
 
+EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLAttrib *value)
+{
+	return egl::GetSyncAttrib(dpy, sync, attribute, value);
+}
+
+EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags)
+{
+	return egl::ClientWaitSyncKHR(dpy, sync, flags, EGL_FOREVER_KHR);
+}
+
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
+{
+	return egl::ClientWaitSyncKHR(dpy, sync, flags, EGL_FOREVER_KHR);
+}
+
 EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const char *procname)
 {
 	return egl::GetProcAddress(procname);
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index b7ae2c5..789b0c8 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -6280,16 +6280,6 @@
 		__eglMustCastToProperFunctionPointerType address;
 	};
 
-	struct CompareFunctor
-	{
-		bool operator()(const Function &a, const Function &b) const
-		{
-			return strcmp(a.name, b.name) < 0;
-		}
-	};
-
-	// This array must be kept sorted with respect to strcmp(), so that binary search works correctly.
-	// The Unix command "LC_COLLATE=C sort" will generate the correct order.
 	static const Function glFunctions[] =
 	{
 		#define FUNCTION(name) {#name, (__eglMustCastToProperFunctionPointerType)name}
@@ -6593,12 +6583,29 @@
 	static const size_t numFunctions = sizeof glFunctions / sizeof(Function);
 	static const Function *const glFunctionsEnd = glFunctions + numFunctions;
 
-	Function needle;
-	needle.name = procname;
+	// The array must be kept sorted with respect to strcmp(), so that binary search works correctly.
+	// The Unix command "LC_COLLATE=C sort" will generate the correct order.
+	#ifndef NDEBUG
+		for(size_t i = 0; i < numFunctions - 1; i++)
+		{
+			ASSERT(strcmp(glFunctions[i].name, glFunctions[i + 1].name) < 0);
+		}
+	#endif
 
 	if(procname && strncmp("gl", procname, 2) == 0)
 	{
+		struct CompareFunctor
+		{
+			bool operator()(const Function &a, const Function &b) const
+			{
+				return strcmp(a.name, b.name) < 0;
+			}
+		};
+
+		Function needle;
+		needle.name = procname;
 		const Function *result = std::lower_bound(glFunctions, glFunctionsEnd, needle, CompareFunctor());
+
 		if(result != glFunctionsEnd && strcmp(procname, result->name) == 0)
 		{
 			return (__eglMustCastToProperFunctionPointerType)result->address;
