diff --git a/include/utils/threads.h b/include/utils/threads.h
index 8d8d46a..b320915 100644
--- a/include/utils/threads.h
+++ b/include/utils/threads.h
@@ -79,6 +79,13 @@
     ANDROID_PRIORITY_LESS_FAVORABLE = +1,
 };
 
+enum {
+    ANDROID_TGROUP_DEFAULT          = 0,
+    ANDROID_TGROUP_BG_NONINTERACT   = 1,
+    ANDROID_TGROUP_FG_BOOST         = 2,
+    ANDROID_TGROUP_MAX              = ANDROID_TGROUP_FG_BOOST,
+};
+
 // Create and run a new thread.
 extern int androidCreateThread(android_thread_func_t, void *);
 
diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp
index 6fc0fed..5ed3ecc 100644
--- a/opengl/libs/EGL/egl.cpp
+++ b/opengl/libs/EGL/egl.cpp
@@ -273,6 +273,8 @@
 static __attribute__((noinline))
 void *load_driver(const char* driver, gl_hooks_t* hooks)
 {
+    //LOGD("%s", driver);
+    char scrap[256];
     void* dso = dlopen(driver, RTLD_NOW | RTLD_LOCAL);
     LOGE_IF(!dso,
             "couldn't load <%s> library (%s)",
@@ -310,7 +312,7 @@
             *curr++ = f;
             api++;
         }
-        
+
         gl_hooks_t::gl_t* gl = &hooks->gl;
         curr = (__eglMustCastToProperFunctionPointerType*)gl;
         api = gl_names;
@@ -321,10 +323,32 @@
             if (f == NULL) {
                 // couldn't find the entry-point, use eglGetProcAddress()
                 f = getProcAddress(name);
-                if (f == NULL) {
-                    f = (__eglMustCastToProperFunctionPointerType)gl_unimplemented;
+            }
+            if (f == NULL) {
+                // Try without the OES postfix
+                ssize_t index = ssize_t(strlen(name)) - 3;
+                if ((index>0 && (index<255)) && (!strcmp(name+index, "OES"))) {
+                    strncpy(scrap, name, index);
+                    scrap[index] = 0;
+                    f = (__eglMustCastToProperFunctionPointerType)dlsym(dso, scrap);
+                    //LOGD_IF(f, "found <%s> instead", scrap);
                 }
             }
+            if (f == NULL) {
+                // Try with the OES postfix
+                ssize_t index = ssize_t(strlen(name)) - 3;
+                if ((index>0 && (index<252)) && (strcmp(name+index, "OES"))) {
+                    strncpy(scrap, name, index);
+                    scrap[index] = 0;
+                    strcat(scrap, "OES");
+                    f = (__eglMustCastToProperFunctionPointerType)dlsym(dso, scrap);
+                    //LOGD_IF(f, "found <%s> instead", scrap);
+                }
+            }
+            if (f == NULL) {
+                //LOGD("%s", name);
+                f = (__eglMustCastToProperFunctionPointerType)gl_unimplemented;
+            }
             *curr++ = f;
             api++;
         }
diff --git a/opengl/tools/glgen/specs/gles11/checks.spec b/opengl/tools/glgen/specs/gles11/checks.spec
index 9ff1205..97dac2e 100644
--- a/opengl/tools/glgen/specs/gles11/checks.spec
+++ b/opengl/tools/glgen/specs/gles11/checks.spec
@@ -59,87 +59,3 @@
 glTexGeni unsupported
 glTexGenx unsupported
 glWeightPointerOES unsupported
-// Lots of unsupported
-glAlphaFuncxOES unsupported
-glBlendEquationOES unsupported
-glBlendEquationSeparateOES unsupported
-glBlendFuncSeparateOES unsupported
-glClearColorxOES unsupported
-glClearDepthfOES unsupported
-glClearDepthxOES unsupported
-glClipPlanefOES unsupported
-glClipPlanefOES unsupported
-glClipPlanexOES unsupported
-glClipPlanexOES unsupported
-glColor4xOES unsupported
-glDepthRangefOES unsupported
-glDepthRangexOES unsupported
-glEGLImageTargetRenderbufferStorageOES unsupported
-glEGLImageTargetTexture2DOES unsupported
-glFogxOES unsupported
-glFogxvOES unsupported
-glFogxvOES unsupported
-glFrustumfOES unsupported
-glFrustumxOES unsupported
-glGetClipPlanefOES unsupported
-glGetClipPlanefOES unsupported
-glGetClipPlanexOES unsupported
-glGetClipPlanexOES unsupported
-glGetFixedvOES unsupported
-glGetFixedvOES unsupported
-glGetLightxvOES unsupported
-glGetLightxvOES unsupported
-glGetMaterialxvOES unsupported
-glGetMaterialxvOES unsupported
-glGetTexEnvxvOES unsupported
-glGetTexEnvxvOES unsupported
-glGetTexGenfvOES unsupported
-glGetTexGenfvOES unsupported
-glGetTexGenivOES unsupported
-glGetTexGenivOES unsupported
-glGetTexGenxvOES unsupported
-glGetTexGenxvOES unsupported
-glGetTexParameterxvOES unsupported
-glGetTexParameterxvOES unsupported
-glLightModelxOES unsupported
-glLightModelxvOES unsupported
-glLightModelxvOES unsupported
-glLightxOES unsupported
-glLightxvOES unsupported
-glLightxvOES unsupported
-glLineWidthxOES unsupported
-glLoadMatrixxOES unsupported
-glLoadMatrixxOES unsupported
-glMaterialxOES unsupported
-glMaterialxvOES unsupported
-glMaterialxvOES unsupported
-glMultMatrixxOES unsupported
-glMultMatrixxOES unsupported
-glMultiTexCoord4xOES unsupported
-glNormal3xOES unsupported
-glOrthofOES unsupported
-glOrthoxOES unsupported
-glPointParameterxOES unsupported
-glPointParameterxvOES unsupported
-glPointParameterxvOES unsupported
-glPointSizexOES unsupported
-glPolygonOffsetxOES unsupported
-glRotatexOES unsupported
-glSampleCoveragexOES unsupported
-glScalexOES unsupported
-glTexEnvxOES unsupported
-glTexEnvxvOES unsupported
-glTexEnvxvOES unsupported
-glTexGenfOES unsupported
-glTexGenfvOES unsupported
-glTexGenfvOES unsupported
-glTexGeniOES unsupported
-glTexGenivOES unsupported
-glTexGenivOES unsupported
-glTexGenxOES unsupported
-glTexGenxvOES unsupported
-glTexGenxvOES unsupported
-glTexParameterxOES unsupported
-glTexParameterxvOES unsupported
-glTexParameterxvOES unsupported
-glTranslatexOES unsupported
\ No newline at end of file
diff --git a/opengl/tools/glgen/stubs/gles11/glGetString.java b/opengl/tools/glgen/stubs/gles11/glGetString.java
index 8c7881c..fba249b 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetString.java
+++ b/opengl/tools/glgen/stubs/gles11/glGetString.java
@@ -1,16 +1,5 @@
     // C function const GLubyte * glGetString ( GLenum name )
 
-    public native String _glGetString(
+    public static native String glGetString(
         int name
     );
-
-    public String glGetString(
-        int name
-    ) {
-        String returnValue;
-        returnValue = _glGetString(
-            name
-        );
-        return returnValue;
-    }
-
diff --git a/opengl/tools/glgen/stubs/gles11/glGetString.nativeReg b/opengl/tools/glgen/stubs/gles11/glGetString.nativeReg
index e64187c..a4af31f 100644
--- a/opengl/tools/glgen/stubs/gles11/glGetString.nativeReg
+++ b/opengl/tools/glgen/stubs/gles11/glGetString.nativeReg
@@ -1 +1 @@
-{"_glGetString", "(I)Ljava/lang/String;", (void *) android_glGetString },
+{"glGetString", "(I)Ljava/lang/String;", (void *) android_glGetString },
