diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 92ebbe4..a109370 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -407,7 +407,7 @@
     mDitherStateDirty = true;
     mFrontFaceDirty = true;
     mDxUniformsDirty = true;
-    mCachedCurrentProgram = NULL;
+    mCachedCurrentProgramBinary = NULL;
 }
 
 void Context::markDxUniformsDirty()
@@ -983,7 +983,7 @@
 void Context::deleteProgram(GLuint program)
 {
     mResourceManager->deleteProgram(program);
-    mCachedCurrentProgram = NULL;
+    mCachedCurrentProgramBinary = NULL;
 }
 
 void Context::deleteTexture(GLuint texture)
@@ -1147,7 +1147,7 @@
     {
         Program *newProgram = mResourceManager->getProgram(program);
         Program *oldProgram = mResourceManager->getProgram(priorProgram);
-        mCachedCurrentProgram = NULL;
+        mCachedCurrentProgramBinary = NULL;
         mDxUniformsDirty = true;
 
         if (newProgram)
@@ -1324,13 +1324,14 @@
     return mState.elementArrayBuffer.get();
 }
 
-Program *Context::getCurrentProgram()
+ProgramBinary *Context::getCurrentProgramBinary()
 {
-    if (!mCachedCurrentProgram)
+    if (!mCachedCurrentProgramBinary)
     {
-        mCachedCurrentProgram = mResourceManager->getProgram(mState.currentProgram);
+        Program *program = mResourceManager->getProgram(mState.currentProgram);
+        mCachedCurrentProgramBinary = program->getProgramBinary();
     }
-    return mCachedCurrentProgram;
+    return mCachedCurrentProgramBinary;
 }
 
 Texture2D *Context::getTexture2D()
@@ -2016,8 +2017,7 @@
 
     if (mState.currentProgram && mDxUniformsDirty)
     {
-        Program *programObject = getCurrentProgram();
-        ProgramBinary *programBinary = programObject->getProgramBinary();
+        ProgramBinary *programBinary = getCurrentProgramBinary();
 
         GLint halfPixelSize = programBinary->getDxHalfPixelSizeLocation();
         GLfloat xy[2] = {1.0f / viewport.Width, -1.0f / viewport.Height};
@@ -2046,8 +2046,7 @@
 // Applies the fixed-function state (culling, depth test, alpha blending, stenciling, etc) to the Direct3D 9 device
 void Context::applyState(GLenum drawMode)
 {
-    Program *programObject = getCurrentProgram();
-    ProgramBinary *programBinary = programObject->getProgramBinary();
+    ProgramBinary *programBinary = getCurrentProgramBinary();
 
     Framebuffer *framebufferObject = getDrawFramebuffer();
 
@@ -2312,7 +2311,7 @@
         return err;
     }
 
-    ProgramBinary *programBinary = getCurrentProgram()->getProgramBinary();
+    ProgramBinary *programBinary = getCurrentProgramBinary();
     return mVertexDeclarationCache.applyDeclaration(mDevice, attributes, programBinary, instances, repeatDraw);
 }
 
@@ -2336,8 +2335,7 @@
 // Applies the shaders and shader constants to the Direct3D 9 device
 void Context::applyShaders()
 {
-    Program *programObject = getCurrentProgram();
-    ProgramBinary *programBinary = programObject->getProgramBinary();
+    ProgramBinary *programBinary = getCurrentProgramBinary();
 
     if (programBinary->getSerial() != mAppliedProgramBinarySerial)
     {
@@ -2369,8 +2367,7 @@
 // and sets the texture and its addressing/filtering state (or NULL when inactive).
 void Context::applyTextures(SamplerType type)
 {
-    Program *programObject = getCurrentProgram();
-    ProgramBinary *programBinary = programObject->getProgramBinary();
+    ProgramBinary *programBinary = getCurrentProgramBinary();
 
     int samplerCount = (type == SAMPLER_PIXEL) ? MAX_TEXTURE_IMAGE_UNITS : MAX_VERTEX_TEXTURE_IMAGE_UNITS_VTF;   // Range of Direct3D 9 samplers of given sampler type
     unsigned int *appliedTextureSerial = (type == SAMPLER_PIXEL) ? mAppliedTextureSerialPS : mAppliedTextureSerialVS;
@@ -3022,7 +3019,7 @@
     applyShaders();
     applyTextures();
 
-    if (!getCurrentProgram()->getProgramBinary()->validateSamplers(NULL))
+    if (!getCurrentProgramBinary()->validateSamplers(NULL))
     {
         return error(GL_INVALID_OPERATION);
     }
@@ -3112,7 +3109,7 @@
     applyShaders();
     applyTextures();
 
-    if (!getCurrentProgram()->getProgramBinary()->validateSamplers(false))
+    if (!getCurrentProgramBinary()->validateSamplers(false))
     {
         return error(GL_INVALID_OPERATION);
     }
diff --git a/src/libGLESv2/Context.h b/src/libGLESv2/Context.h
index b1acb34..253c489 100644
--- a/src/libGLESv2/Context.h
+++ b/src/libGLESv2/Context.h
@@ -439,7 +439,7 @@
 
     Buffer *getArrayBuffer();
     Buffer *getElementArrayBuffer();
-    Program *getCurrentProgram();
+    ProgramBinary *getCurrentProgramBinary();
     Texture2D *getTexture2D();
     TextureCubeMap *getTextureCubeMap();
     Texture *getSamplerTexture(unsigned int sampler, TextureType type);
@@ -597,7 +597,7 @@
     bool mRenderTargetDescInitialized;
     D3DSURFACE_DESC mRenderTargetDesc;
     bool mDxUniformsDirty;
-    Program *mCachedCurrentProgram;
+    ProgramBinary *mCachedCurrentProgramBinary;
     Framebuffer *mBoundDrawFramebuffer;
 
     bool mSupportsShaderModel3;
diff --git a/src/libGLESv2/VertexDataManager.cpp b/src/libGLESv2/VertexDataManager.cpp
index 70f475f..a95275f 100644
--- a/src/libGLESv2/VertexDataManager.cpp
+++ b/src/libGLESv2/VertexDataManager.cpp
@@ -128,8 +128,7 @@
     }
 
     const VertexAttributeArray &attribs = mContext->getVertexAttributes();
-    Program *program = mContext->getCurrentProgram();
-    ProgramBinary *programBinary = program->getProgramBinary();
+    ProgramBinary *programBinary = mContext->getCurrentProgramBinary();
 
     for (int attributeIndex = 0; attributeIndex < MAX_VERTEX_ATTRIBS; attributeIndex++)
     {
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 9f3e591..5a70a84 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -5953,14 +5953,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6003,14 +5996,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6055,14 +6041,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6107,14 +6086,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6159,14 +6131,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6211,14 +6176,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6263,14 +6221,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6315,14 +6266,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6361,14 +6305,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6407,14 +6344,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
@@ -6453,14 +6383,7 @@
 
         if (context)
         {
-            gl::Program *program = context->getCurrentProgram();
-
-            if (!program)
-            {
-                return error(GL_INVALID_OPERATION);
-            }
-
-            gl::ProgramBinary *programBinary = program->getProgramBinary();
+            gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return error(GL_INVALID_OPERATION);
