diff --git a/libs/rs/RenderScript.h b/libs/rs/RenderScript.h
index 12ae6e1..44ff901 100644
--- a/libs/rs/RenderScript.h
+++ b/libs/rs/RenderScript.h
@@ -167,6 +167,7 @@
     RS_PROGRAM_PARAM_INPUT,
     RS_PROGRAM_PARAM_OUTPUT,
     RS_PROGRAM_PARAM_CONSTANT,
+    RS_PROGRAM_PARAM_TEXTURE_COUNT,
 };
 
 enum RsPrimitive {
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index 6ce6b35..5de76b25 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -406,6 +406,14 @@
 	ret RsProgramFragment
 	}
 
+ProgramFragmentCreate2 {
+	param const char * shaderText
+	param uint32_t shaderLength
+	param const uint32_t * params
+	param uint32_t paramLength
+	ret RsProgramFragment
+	}
+
 ProgramVertexCreate {
 	param bool texMat
 	ret RsProgramVertex
@@ -416,7 +424,7 @@
 	param uint32_t shaderLength
 	param const uint32_t * params
 	param uint32_t paramLength
-	ret RsProgramFragment
+	ret RsProgramVertex
 	}
 
 LightBegin {
diff --git a/libs/rs/rsProgram.cpp b/libs/rs/rsProgram.cpp
index ba27fd4..bcda5fb 100644
--- a/libs/rs/rsProgram.cpp
+++ b/libs/rs/rsProgram.cpp
@@ -51,6 +51,7 @@
     mShaderID = 0;
     mAttribCount = 0;
     mUniformCount = 0;
+    mTextureCount = 0;
 
     mInputCount = 0;
     mOutputCount = 0;
@@ -66,6 +67,9 @@
         if (params[ct] == RS_PROGRAM_PARAM_CONSTANT) {
             mConstantCount++;
         }
+        if (params[ct] == RS_PROGRAM_PARAM_TEXTURE_COUNT) {
+            mTextureCount = params[ct+1];
+        }
     }
 
     mInputElements = new ObjectBaseRef<Element>[mInputCount];
diff --git a/libs/rs/rsProgram.h b/libs/rs/rsProgram.h
index 01b4c8861..e9837b7 100644
--- a/libs/rs/rsProgram.h
+++ b/libs/rs/rsProgram.h
@@ -66,6 +66,7 @@
     String8 mUserShader;
     uint32_t mShaderID;
 
+    uint32_t mTextureCount;
     uint32_t mAttribCount;
     uint32_t mUniformCount;
     String8 mAttribNames[MAX_ATTRIBS];
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index 3ddaa37..2d18c42 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -40,6 +40,19 @@
     mEnvModes[1] = RS_TEX_ENV_MODE_DECAL;
 }
 
+ProgramFragment::ProgramFragment(Context *rsc, const char * shaderText,
+                                 uint32_t shaderLength, const uint32_t * params,
+                                 uint32_t paramLength) :
+    Program(rsc, shaderText, shaderLength, params, paramLength)
+{
+    mAllocFile = __FILE__;
+    mAllocLine = __LINE__;
+
+    init(rsc);
+    mTextureEnableMask = (1 << mTextureCount) -1;
+}
+
+
 ProgramFragment::~ProgramFragment()
 {
 }
@@ -158,58 +171,68 @@
     mShader.append("varying vec4 varColor;\n");
     mShader.append("varying vec4 varTex0;\n");
 
-    uint32_t mask = mTextureEnableMask;
-    uint32_t texNum = 0;
-    while (mask) {
-        if (mask & 1) {
-            char buf[64];
-            mShader.append("uniform sampler2D uni_Tex");
-            sprintf(buf, "%i", texNum);
+    if (mUserShader.length() > 1) {
+        for (uint32_t ct=0; ct < mTextureCount; ct++) {
+            char buf[256];
+            sprintf(buf, "uniform sampler2D uni_Tex%i;\n", ct);
             mShader.append(buf);
-            mShader.append(";\n");
         }
-        mask >>= 1;
-        texNum++;
-    }
 
-
-    mShader.append("void main() {\n");
-    mShader.append("  vec4 col = varColor;\n");
-
-    if (mTextureEnableMask) {
-        if (mPointSpriteEnable) {
-            mShader.append("  vec2 tex0 = gl_PointCoord;\n");
-        } else {
-            mShader.append("  vec2 tex0 = varTex0.xy;\n");
-        }
-    }
-
-    mask = mTextureEnableMask;
-    texNum = 0;
-    while (mask) {
-        if (mask & 1) {
-            switch(mEnvModes[texNum]) {
-            case RS_TEX_ENV_MODE_REPLACE:
-                mShader.append("  col = texture2D(uni_Tex0, tex0);\n");
-                break;
-            case RS_TEX_ENV_MODE_MODULATE:
-                mShader.append("  col *= texture2D(uni_Tex0, tex0);\n");
-                break;
-            case RS_TEX_ENV_MODE_DECAL:
-                mShader.append("  col = texture2D(uni_Tex0, tex0);\n");
-                break;
+        mShader.append(mUserShader);
+    } else {
+        uint32_t mask = mTextureEnableMask;
+        uint32_t texNum = 0;
+        while (mask) {
+            if (mask & 1) {
+                char buf[64];
+                mShader.append("uniform sampler2D uni_Tex");
+                sprintf(buf, "%i", texNum);
+                mShader.append(buf);
+                mShader.append(";\n");
             }
-
+            mask >>= 1;
+            texNum++;
         }
-        mask >>= 1;
-        texNum++;
+
+
+        mShader.append("void main() {\n");
+        mShader.append("  vec4 col = varColor;\n");
+
+        if (mTextureEnableMask) {
+            if (mPointSpriteEnable) {
+                mShader.append("  vec2 tex0 = gl_PointCoord;\n");
+            } else {
+                mShader.append("  vec2 tex0 = varTex0.xy;\n");
+            }
+        }
+
+        mask = mTextureEnableMask;
+        texNum = 0;
+        while (mask) {
+            if (mask & 1) {
+                switch(mEnvModes[texNum]) {
+                case RS_TEX_ENV_MODE_REPLACE:
+                    mShader.append("  col = texture2D(uni_Tex0, tex0);\n");
+                    break;
+                case RS_TEX_ENV_MODE_MODULATE:
+                    mShader.append("  col *= texture2D(uni_Tex0, tex0);\n");
+                    break;
+                case RS_TEX_ENV_MODE_DECAL:
+                    mShader.append("  col = texture2D(uni_Tex0, tex0);\n");
+                    break;
+                }
+
+            }
+            mask >>= 1;
+            texNum++;
+        }
+
+        //mShader.append("  col.a = 1.0;\n");
+        //mShader.append("  col.r = 0.5;\n");
+
+        mShader.append("  gl_FragColor = col;\n");
+        mShader.append("}\n");
     }
-
-    //mShader.append("  col.a = 1.0;\n");
-    //mShader.append("  col.r = 0.5;\n");
-
-    mShader.append("  gl_FragColor = col;\n");
-    mShader.append("}\n");
 }
 
 void ProgramFragment::bindTexture(uint32_t slot, Allocation *a)
@@ -361,6 +384,14 @@
     return pf;
 }
 
+RsProgramFragment rsi_ProgramFragmentCreate2(Context *rsc, const char * shaderText,
+                             uint32_t shaderLength, const uint32_t * params,
+                             uint32_t paramLength)
+{
+    ProgramFragment *pf = new ProgramFragment(rsc, shaderText, shaderLength, params, paramLength);
+    pf->incUserRef();
+    return pf;
+}
 
 }
 }
diff --git a/libs/rs/rsProgramFragment.h b/libs/rs/rsProgramFragment.h
index 6fc852e..1f548ad 100644
--- a/libs/rs/rsProgramFragment.h
+++ b/libs/rs/rsProgramFragment.h
@@ -33,6 +33,9 @@
 
 
     ProgramFragment(Context *, Element *in, Element *out, bool pointSpriteEnable);
+    ProgramFragment(Context *rsc, const char * shaderText,
+                             uint32_t shaderLength, const uint32_t * params,
+                             uint32_t paramLength);
     virtual ~ProgramFragment();
 
     virtual void setupGL(const Context *, ProgramFragmentState *);
