diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index 96c289e..8f56efa 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -239,7 +239,7 @@
 void Context::setupCheck()
 {
     if (checkVersion2_0()) {
-        mShaderCache.lookup(mVertex.get(), mFragment.get());
+        mShaderCache.lookup(this, mVertex.get(), mFragment.get());
 
         mFragmentStore->setupGL2(this, &mStateFragmentStore);
         mFragment->setupGL2(this, &mStateFragment, &mShaderCache);
@@ -272,6 +272,7 @@
      rsc->props.mLogTimes = getProp("debug.rs.profile");
      rsc->props.mLogScripts = getProp("debug.rs.script");
      rsc->props.mLogObjects = getProp("debug.rs.objects");
+     rsc->props.mLogShaders = getProp("debug.rs.shaders");
 
      ScriptTLSStruct *tlsStruct = new ScriptTLSStruct;
      if (!tlsStruct) {
diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h
index 790aca6..dd0423e 100644
--- a/libs/rs/rsContext.h
+++ b/libs/rs/rsContext.h
@@ -164,6 +164,7 @@
         bool mLogTimes;
         bool mLogScripts;
         bool mLogObjects;
+        bool mLogShaders;
     } props;
 
     void dumpDebug() const;
diff --git a/libs/rs/rsProgram.cpp b/libs/rs/rsProgram.cpp
index bcda5fb..e6d1e36 100644
--- a/libs/rs/rsProgram.cpp
+++ b/libs/rs/rsProgram.cpp
@@ -125,13 +125,15 @@
 {
 }
 
-bool Program::loadShader(uint32_t type)
+bool Program::loadShader(Context *rsc, uint32_t type)
 {
     mShaderID = glCreateShader(type);
     rsAssert(mShaderID);
 
-    LOGV("Loading shader type %x, ID %i", type, mShaderID);
-    LOGE(mShader.string());
+    if (rsc->props.mLogShaders) {
+        LOGV("Loading shader type %x, ID %i", type, mShaderID);
+        LOGV(mShader.string());
+    }
 
     if (mShaderID) {
         const char * ss = mShader.string();
@@ -156,7 +158,10 @@
             }
         }
     }
-    LOGV("--Shader load result %x ", glGetError());
+
+    if (rsc->props.mLogShaders) {
+        LOGV("--Shader load result %x ", glGetError());
+    }
     return true;
 }
 
diff --git a/libs/rs/rsProgram.h b/libs/rs/rsProgram.h
index e9837b7..003498e 100644
--- a/libs/rs/rsProgram.h
+++ b/libs/rs/rsProgram.h
@@ -72,7 +72,7 @@
     String8 mAttribNames[MAX_ATTRIBS];
     String8 mUniformNames[MAX_UNIFORMS];
 
-    bool loadShader(uint32_t type);
+    bool loadShader(Context *, uint32_t type);
 
 public:
     void forceDirty() const {mDirty = true;}
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index 2d18c42..c353301 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -161,8 +161,8 @@
     //LOGE("sgl2 frag2 %x", glGetError());
 }
 
-void ProgramFragment::loadShader() {
-    Program::loadShader(GL_FRAGMENT_SHADER);
+void ProgramFragment::loadShader(Context *rsc) {
+    Program::loadShader(rsc, GL_FRAGMENT_SHADER);
 }
 
 void ProgramFragment::createShader()
diff --git a/libs/rs/rsProgramFragment.h b/libs/rs/rsProgramFragment.h
index 1f548ad..14b4ec3 100644
--- a/libs/rs/rsProgramFragment.h
+++ b/libs/rs/rsProgramFragment.h
@@ -50,7 +50,7 @@
     void setTexEnable(uint32_t slot, bool);
 
     virtual void createShader();
-    virtual void loadShader();
+    virtual void loadShader(Context *rsc);
     virtual void init(Context *rsc);
 
 
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index 9a2edfc..058cd73 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -108,8 +108,8 @@
     mDirty = false;
 }
 
-void ProgramVertex::loadShader() {
-    Program::loadShader(GL_VERTEX_SHADER);
+void ProgramVertex::loadShader(Context *rsc) {
+    Program::loadShader(rsc, GL_VERTEX_SHADER);
 }
 
 void ProgramVertex::createShader()
diff --git a/libs/rs/rsProgramVertex.h b/libs/rs/rsProgramVertex.h
index b3115a3..4748acc 100644
--- a/libs/rs/rsProgramVertex.h
+++ b/libs/rs/rsProgramVertex.h
@@ -49,7 +49,7 @@
     void transformToScreen(const Context *, float *v4out, const float *v3in) const;
 
     virtual void createShader();
-    virtual void loadShader();
+    virtual void loadShader(Context *);
     virtual void init(Context *);
 
 
diff --git a/libs/rs/rsShaderCache.cpp b/libs/rs/rsShaderCache.cpp
index 4b16677..8e2af34 100644
--- a/libs/rs/rsShaderCache.cpp
+++ b/libs/rs/rsShaderCache.cpp
@@ -41,13 +41,13 @@
     free(mEntries);
 }
 
-bool ShaderCache::lookup(ProgramVertex *vtx, ProgramFragment *frag)
+bool ShaderCache::lookup(Context *rsc, ProgramVertex *vtx, ProgramFragment *frag)
 {
     if (!vtx->getShaderID()) {
-        vtx->loadShader();
+        vtx->loadShader(rsc);
     }
     if (!frag->getShaderID()) {
-        frag->loadShader();
+        frag->loadShader(rsc);
     }
     //LOGV("ShaderCache lookup  vtx %i, frag %i", vtx->getShaderID(), frag->getShaderID());
 
@@ -115,15 +115,21 @@
         }
         for (uint32_t ct=0; ct < vtx->getAttribCount(); ct++) {
             e->mVtxAttribSlots[ct] = glGetAttribLocation(pgm, vtx->getAttribName(ct));
-            LOGV("vtx A, %s = %d\n", vtx->getAttribName(ct).string(), e->mVtxAttribSlots[ct]);
+            if (rsc->props.mLogShaders) {
+                LOGV("vtx A, %s = %d\n", vtx->getAttribName(ct).string(), e->mVtxAttribSlots[ct]);
+            }
         }
         for (uint32_t ct=0; ct < vtx->getUniformCount(); ct++) {
             e->mVtxUniformSlots[ct] = glGetUniformLocation(pgm, vtx->getUniformName(ct));
-            LOGV("vtx U, %s = %d\n", vtx->getUniformName(ct).string(), e->mVtxUniformSlots[ct]);
+            if (rsc->props.mLogShaders) {
+                LOGV("vtx U, %s = %d\n", vtx->getUniformName(ct).string(), e->mVtxUniformSlots[ct]);
+            }
         }
         for (uint32_t ct=0; ct < vtx->getUniformCount(); ct++) {
             e->mFragUniformSlots[ct] = glGetUniformLocation(pgm, frag->getUniformName(ct));
-            LOGV("frag U, %s = %d\n", frag->getUniformName(ct).string(), e->mFragUniformSlots[ct]);
+            if (rsc->props.mLogShaders) {
+                LOGV("frag U, %s = %d\n", frag->getUniformName(ct).string(), e->mFragUniformSlots[ct]);
+            }
         }
     }
 
diff --git a/libs/rs/rsShaderCache.h b/libs/rs/rsShaderCache.h
index 4d9f8ec..ede3734 100644
--- a/libs/rs/rsShaderCache.h
+++ b/libs/rs/rsShaderCache.h
@@ -33,7 +33,7 @@
     ShaderCache();
     virtual ~ShaderCache();
 
-    bool lookup(ProgramVertex *, ProgramFragment *);
+    bool lookup(Context *rsc, ProgramVertex *, ProgramFragment *);
 
     void cleanupVertex(uint32_t id);
     void cleanupFragment(uint32_t id);
