diff --git a/java/Film/src/com/android/film/FilmRS.java b/java/Film/src/com/android/film/FilmRS.java
index e2daabe..e26b051 100644
--- a/java/Film/src/com/android/film/FilmRS.java
+++ b/java/Film/src/com/android/film/FilmRS.java
@@ -217,7 +217,6 @@
 
         ScriptC.Builder sb = new ScriptC.Builder(mRS);
         sb.setScript(mRes, R.raw.filmstrip);
-        //sb.setRoot(true);
         //sb.setType(mStripPositionType, "Pos", 1);
         mScriptStrip = sb.create();
         mScriptStrip.setClearColor(0.0f, 0.0f, 0.0f, 1.0f);
diff --git a/rs.spec b/rs.spec
index 2aa12da..4ad25ae 100644
--- a/rs.spec
+++ b/rs.spec
@@ -293,10 +293,6 @@
 	togglePlay
 	}
 
-ScriptSetRoot {
-	param bool isRoot
-	}
-
 ScriptSetVarI {
 	param RsScript s
 	param uint32_t slot
diff --git a/rsScript.cpp b/rsScript.cpp
index 1dd9554..b0bbb22 100644
--- a/rsScript.cpp
+++ b/rsScript.cpp
@@ -97,12 +97,6 @@
     LOGE("rsi_ScriptSetType");
 }
 
-void rsi_ScriptSetInvoke(Context *rsc, const char *name, uint32_t slot)
-{
-    LOGE("rsi_ScriptSetInvoke");
-}
-
-
 void rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot)
 {
     //LOGE("rsi_ScriptInvoke %i", slot);
@@ -177,11 +171,6 @@
 
 }
 
-void rsi_ScriptSetRoot(Context * rsc, bool isRoot)
-{
-    LOGE("rsi_ScriptSetRoot");
-}
-
 void rsi_ScriptSetVarI(Context *rsc, RsScript vs, uint32_t slot, int value)
 {
     Script *s = static_cast<Script *>(vs);
diff --git a/rsScriptC.cpp b/rsScriptC.cpp
index e9ba226..8a60d1e 100644
--- a/rsScriptC.cpp
+++ b/rsScriptC.cpp
@@ -71,6 +71,22 @@
     }
 }
 
+const Allocation *ScriptC::ptrToAllocation(const void *ptr) const
+{
+    if (!ptr) {
+        return NULL;
+    }
+    for (uint32_t ct=0; ct < mEnviroment.mFieldCount; ct++) {
+        if (!mSlots[ct].get())
+            continue;
+        if (mSlots[ct]->getPtr() == ptr) {
+            return mSlots[ct].get();
+        }
+    }
+    LOGE("ScriptC::ptrToAllocation, failed to find %p", ptr);
+    return NULL;
+}
+
 
 uint32_t ScriptC::run(Context *rsc, uint32_t launchIndex)
 {
diff --git a/rsScriptC.h b/rsScriptC.h
index c23fb73..3cb9a0b 100644
--- a/rsScriptC.h
+++ b/rsScriptC.h
@@ -52,6 +52,8 @@
 
     BCCscript*    mBccScript;
 
+    const Allocation *ptrToAllocation(const void *) const;
+
     virtual void setupScript();
     virtual uint32_t run(Context *, uint32_t launchID);
 };
diff --git a/rsScriptC_Lib.cpp b/rsScriptC_Lib.cpp
index 0e09474..19dfaff 100644
--- a/rsScriptC_Lib.cpp
+++ b/rsScriptC_Lib.cpp
@@ -1113,6 +1113,14 @@
     return a / b;
 }
 
+int SC_getAllocation(const void *ptr)
+{
+    GET_TLS();
+    const Allocation *alloc = sc->ptrToAllocation(ptr);
+    return (int)alloc;
+}
+
+
 //////////////////////////////////////////////////////////////////////////////
 // Class implementation
 //////////////////////////////////////////////////////////////////////////////
@@ -1368,6 +1376,8 @@
     { "debugPi", (void *)&SC_debugPi },
 
     { "scriptCall", (void *)&SC_scriptCall },
+    { "rsGetAllocation", (void *)&SC_getAllocation },
+
 
     { NULL, NULL }
 };
diff --git a/scriptc/rs_math.rsh b/scriptc/rs_math.rsh
index 48ab066..1d2f1e4 100644
--- a/scriptc/rs_math.rsh
+++ b/scriptc/rs_math.rsh
@@ -650,4 +650,5 @@
 extern void matrixScale(void *mat, float x, float y, float z);
 extern void matrixTranslate(void *mat, float x, float y, float z);
 
+extern rs_allocation rsGetAllocation(const void *);
 
