diff --git a/libs/rs/java/Fountain/res/raw/fountain.c b/libs/rs/java/Fountain/res/raw/fountain.c
index afb2fb3..e7920fd 100644
--- a/libs/rs/java/Fountain/res/raw/fountain.c
+++ b/libs/rs/java/Fountain/res/raw/fountain.c
@@ -37,7 +37,7 @@
 
     //contextBindProgramFragment(con, loadI32(con, 0, 7));
     drawRect(con, 0, 256, 0, 512);
-    contextBindProgramFragment(con, loadI32(con, 0, 6));
+    contextBindProgramFragment(con, NAMED_PgmFragParts);
 
     if (touch) {
         newPart = loadI32(con, 2, 0);
@@ -106,6 +106,6 @@
         }
     }
 
-    drawTriangleArray(con, loadI32(con, 0, 5), drawCount);
+    drawTriangleArray(con, NAMED_PartBuffer, drawCount);
     return 1;
 }
diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java
index f8b488a..46f6fca 100644
--- a/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java
+++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainView.java
@@ -68,6 +68,7 @@
 
         mIntAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, 10);
         mPartAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, partCount * 3 * 3);
+        mPartAlloc.setName("PartBuffer");
         mVertAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, partCount * 5 + 1);
 
         {
@@ -97,7 +98,6 @@
         mRS.programFragmentBegin(null, null);
         mPF = mRS.programFragmentCreate();
         mPF.setName("PgmFragParts");
-        //mRS.contextBindProgramFragment(mPF);
 
         mRS.programFragmentBegin(null, null);
         mRS.programFragmentSetTexEnable(0, true);
@@ -113,8 +113,6 @@
         mParams[3] = 0;
         mParams[4] = 0;
         mParams[5] = mPartAlloc.getID();
-        mParams[6] = mPF.getID();
-        mParams[7] = mPF2.getID();
         mIntAlloc.data(mParams);
 
         int t2[] = new int[partCount * 4*3];
diff --git a/libs/rs/jni/RenderScript_jni.cpp b/libs/rs/jni/RenderScript_jni.cpp
index dcd6e2f..fd19d88 100644
--- a/libs/rs/jni/RenderScript_jni.cpp
+++ b/libs/rs/jni/RenderScript_jni.cpp
@@ -70,7 +70,7 @@
 
     jint len = _env->GetArrayLength(str);
     jbyte * cptr = (jbyte *) _env->GetPrimitiveArrayCritical(str, 0);
-    rsAssignName((void *)obj, (const char *)cptr);
+    rsAssignName((void *)obj, (const char *)cptr, len);
     _env->ReleasePrimitiveArrayCritical(str, cptr, JNI_ABORT);
 }
 
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index b7eaed1..74445d3 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -19,6 +19,7 @@
 AssignName {
 	param void *obj
 	param const char *name
+	param size_t len
 	}
 
 ElementBegin {
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index ffd03d5..266c455 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -17,7 +17,7 @@
 #include "rsDevice.h"
 #include "rsContext.h"
 #include "rsThreadIO.h"
-
+#include "utils/String8.h"
 
 using namespace android;
 using namespace android::renderscript;
@@ -246,10 +246,10 @@
     pv->setupGL();
 }
 
-void Context::assignName(ObjectBase *obj, const char *name)
+void Context::assignName(ObjectBase *obj, const char *name, uint32_t len)
 {
     rsAssert(!obj->getName());
-    obj->setName(name);
+    obj->setName(name, len);
     mNames.add(obj);
 }
 
@@ -273,6 +273,19 @@
     return NULL;
 }
 
+void Context::appendNameDefines(String8 *str) const
+{
+    char buf[256];
+    for (size_t ct=0; ct < mNames.size(); ct++) {
+        str->append("#define NAMED_");
+        str->append(mNames[ct]->getName());
+        str->append(" ");
+        sprintf(buf, "%i\n", (int)mNames[ct]);
+        str->append(buf);
+    }
+}
+
+
 ///////////////////////////////////////////////////////////////////////////////////////////
 //
 
@@ -316,10 +329,10 @@
     rsc->setVertex(pv);
 }
 
-void rsi_AssignName(Context *rsc, void * obj, const char *name)
+void rsi_AssignName(Context *rsc, void * obj, const char *name, uint32_t len)
 {
     ObjectBase *ob = static_cast<ObjectBase *>(obj);
-    rsc->assignName(ob, name);
+    rsc->assignName(ob, name, len);
 }
 
 
diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h
index 184740f..21ae8c5 100644
--- a/libs/rs/rsContext.h
+++ b/libs/rs/rsContext.h
@@ -76,9 +76,10 @@
 
     void setupCheck();
 
-    void assignName(ObjectBase *obj, const char *name);
+    void assignName(ObjectBase *obj, const char *name, uint32_t len);
     void removeName(ObjectBase *obj);
     ObjectBase * lookupName(const char *name) const;
+    void appendNameDefines(String8 *str) const;
 
 protected:
     Device *mDev;
diff --git a/libs/rs/rsObjectBase.cpp b/libs/rs/rsObjectBase.cpp
index 8660818..8f5232a 100644
--- a/libs/rs/rsObjectBase.cpp
+++ b/libs/rs/rsObjectBase.cpp
@@ -56,3 +56,15 @@
         strcpy(mName, name);
     }
 }
+
+void ObjectBase::setName(const char *name, uint32_t len)
+{
+    delete mName;
+    mName = NULL;
+    if (name) {
+        mName = new char[len + 1];
+        memcpy(mName, name, len);
+        mName[len] = 0;
+    }
+}
+
diff --git a/libs/rs/rsObjectBase.h b/libs/rs/rsObjectBase.h
index 4c52e9c..b2c3338 100644
--- a/libs/rs/rsObjectBase.h
+++ b/libs/rs/rsObjectBase.h
@@ -37,6 +37,7 @@
         return mName;
     }
     void setName(const char *);
+    void setName(const char *, uint32_t len);
 
 private:
     char * mName;
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index ae58e5f..d29eb9f 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -19,6 +19,7 @@
 #include "rsMatrix.h"
 
 #include "acc/acc.h"
+#include "utils/String8.h"
 
 using namespace android;
 using namespace android::renderscript;
@@ -433,17 +434,22 @@
 
 }
 
+
 void ScriptCState::runCompiler(Context *rsc)
 {
     mAccScript = accCreateScript();
+    String8 tmp;
 
-    const char* scriptSource[] = {mProgram.mScriptText};
-    int scriptLength[] = {mProgram.mScriptTextLength} ;
-    accScriptSource(mAccScript, 1, scriptSource, scriptLength);
+    rsc->appendNameDefines(&tmp);
+
+    const char* scriptSource[] = {tmp.string(), mProgram.mScriptText};
+    int scriptLength[] = {tmp.length(), mProgram.mScriptTextLength} ;
+    accScriptSource(mAccScript, sizeof(scriptLength) / sizeof(int), scriptSource, scriptLength);
     accCompileScript(mAccScript);
     accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript);
     rsAssert(mProgram.mScript);
 
+
     if (mProgram.mScript) {
         const static int pragmaMax = 16;
         ACCsizei pragmaCount;
