diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java b/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java
index 2088a04..153019d 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/BaseObj.java
@@ -51,12 +51,6 @@
      */
     int getID(RenderScript rs) {
         mRS.validate();
-        if (rs.isNative) {
-            RenderScriptThunker rst = (RenderScriptThunker)rs;
-            if (getNObj() != null) {
-                return getNObj().hashCode();
-            }
-        }
         if (mDestroyed) {
             throw new RSInvalidStateException("using a destroyed object.");
         }
@@ -150,6 +144,10 @@
             return false;
         }
 
+        if (mRS.isNative) {
+            return ((RenderScriptThunker)mRS).equals((Object)this, obj);
+        }
+
         BaseObj b = (BaseObj) obj;
         return mID == b.mID;
     }
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
index eb51076..ffdb66f 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPacker.java
@@ -29,14 +29,14 @@
  *
  **/
 public class FieldPacker {
-    private android.renderscript.FieldPacker mN;
+    private FieldPackerThunker mN;
 
     public FieldPacker(int len) {
         mPos = 0;
         mLen = len;
         mData = new byte[len];
         if (RenderScript.shouldThunk()) {
-            mN = new android.renderscript.FieldPacker(len);
+            mN = new FieldPackerThunker(len);
         }
     }
 
@@ -209,11 +209,7 @@
 
     public void addObj(BaseObj obj) {
         if (RenderScript.shouldThunk()) {
-            if (obj != null) {
-                mN.addObj(obj.getNObj());
-            } else {
-                mN.addObj(null);
-            }
+            mN.addObj(obj);
             return;
         }
         if (obj != null) {
@@ -225,7 +221,7 @@
 
     public void addF32(Float2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF32(new android.renderscript.Float2(v.x, v.y));
+            mN.addF32(v);
             return;
         }
         addF32(v.x);
@@ -233,7 +229,7 @@
     }
     public void addF32(Float3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF32(new android.renderscript.Float3(v.x, v.y, v.z));
+            mN.addF32(v);
             return;
         }
         addF32(v.x);
@@ -242,7 +238,7 @@
     }
     public void addF32(Float4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF32(new android.renderscript.Float4(v.x, v.y, v.z, v.w));
+            mN.addF32(v);
             return;
         }
         addF32(v.x);
@@ -253,7 +249,7 @@
 
     public void addF64(Double2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF64(new android.renderscript.Double2(v.x, v.y));
+            mN.addF64(v);
             return;
         }
         addF64(v.x);
@@ -261,7 +257,7 @@
     }
     public void addF64(Double3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF64(new android.renderscript.Double3(v.x, v.y, v.z));
+            mN.addF64(v);
             return;
         }
         addF64(v.x);
@@ -270,7 +266,7 @@
     }
     public void addF64(Double4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addF64(new android.renderscript.Double4(v.x, v.y, v.z, v.w));
+            mN.addF64(v);
             return;
         }
         addF64(v.x);
@@ -281,7 +277,7 @@
 
     public void addI8(Byte2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI8(new android.renderscript.Byte2(v.x, v.y));
+            mN.addI8(v);
             return;
         }
         addI8(v.x);
@@ -289,7 +285,7 @@
     }
     public void addI8(Byte3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI8(new android.renderscript.Byte3(v.x, v.y, v.z));
+            mN.addI8(v);
             return;
         }
         addI8(v.x);
@@ -298,7 +294,7 @@
     }
     public void addI8(Byte4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI8(new android.renderscript.Byte4(v.x, v.y, v.z, v.w));
+            mN.addI8(v);
             return;
         }
         addI8(v.x);
@@ -309,7 +305,7 @@
 
     public void addU8(Short2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU8(new android.renderscript.Short2(v.x, v.y));
+            mN.addU8(v);
             return;
         }
         addU8(v.x);
@@ -317,7 +313,7 @@
     }
     public void addU8(Short3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU8(new android.renderscript.Short3(v.x, v.y, v.z));
+            mN.addU8(v);
             return;
         }
         addU8(v.x);
@@ -326,7 +322,7 @@
     }
     public void addU8(Short4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU8(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+            mN.addU8(v);
             return;
         }
         addU8(v.x);
@@ -337,7 +333,7 @@
 
     public void addI16(Short2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI16(new android.renderscript.Short2(v.x, v.y));
+            mN.addI16(v);
             return;
         }
         addI16(v.x);
@@ -345,7 +341,7 @@
     }
     public void addI16(Short3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI16(new android.renderscript.Short3(v.x, v.y, v.z));
+            mN.addI16(v);
             return;
         }
         addI16(v.x);
@@ -354,7 +350,7 @@
     }
     public void addI16(Short4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI16(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+            mN.addI16(v);
             return;
         }
         addI16(v.x);
@@ -365,7 +361,7 @@
 
     public void addU16(Int2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU16(new android.renderscript.Int2(v.x, v.y));
+            mN.addU16(v);
             return;
         }
         addU16(v.x);
@@ -373,7 +369,7 @@
     }
     public void addU16(Int3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU16(new android.renderscript.Int3(v.x, v.y, v.z));
+            mN.addU16(v);
             return;
         }
         addU16(v.x);
@@ -382,7 +378,7 @@
     }
     public void addU16(Int4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU16(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+            mN.addU16(v);
             return;
         }
         addU16(v.x);
@@ -393,7 +389,7 @@
 
     public void addI32(Int2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI32(new android.renderscript.Int2(v.x, v.y));
+            mN.addI32(v);
             return;
         }
         addI32(v.x);
@@ -401,7 +397,7 @@
     }
     public void addI32(Int3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI32(new android.renderscript.Int3(v.x, v.y, v.z));
+            mN.addI32(v);
             return;
         }
         addI32(v.x);
@@ -410,7 +406,7 @@
     }
     public void addI32(Int4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI32(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+            mN.addI32(v);
             return;
         }
         addI32(v.x);
@@ -421,7 +417,7 @@
 
     public void addU32(Long2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU32(new android.renderscript.Long2(v.x, v.y));
+            mN.addU32(v);
             return;
         }
         addU32(v.x);
@@ -429,7 +425,7 @@
     }
     public void addU32(Long3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU32(new android.renderscript.Long3(v.x, v.y, v.z));
+            mN.addU32(v);
             return;
         }
         addU32(v.x);
@@ -438,7 +434,7 @@
     }
     public void addU32(Long4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU32(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+            mN.addU32(v);
             return;
         }
         addU32(v.x);
@@ -449,7 +445,7 @@
 
     public void addI64(Long2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI64(new android.renderscript.Long2(v.x, v.y));
+            mN.addI64(v);
             return;
         }
         addI64(v.x);
@@ -457,7 +453,7 @@
     }
     public void addI64(Long3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI64(new android.renderscript.Long3(v.x, v.y, v.z));
+            mN.addI64(v);
             return;
         }
         addI64(v.x);
@@ -466,7 +462,7 @@
     }
     public void addI64(Long4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addI64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+            mN.addI64(v);
             return;
         }
         addI64(v.x);
@@ -477,7 +473,7 @@
 
     public void addU64(Long2 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU64(new android.renderscript.Long2(v.x, v.y));
+            mN.addU64(v);
             return;
         }
         addU64(v.x);
@@ -485,7 +481,7 @@
     }
     public void addU64(Long3 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU64(new android.renderscript.Long3(v.x, v.y, v.z));
+            mN.addU64(v);
             return;
         }
         addU64(v.x);
@@ -494,7 +490,7 @@
     }
     public void addU64(Long4 v) {
         if (RenderScript.shouldThunk()) {
-            mN.addU64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+            mN.addU64(v);
             return;
         }
         addU64(v.x);
@@ -505,7 +501,7 @@
 
     public void addMatrix(Matrix4f v) {
         if (RenderScript.shouldThunk()) {
-            mN.addMatrix(new android.renderscript.Matrix4f(v.getArray()));
+            mN.addMatrix(v);
             return;
         }
         for (int i=0; i < v.mMat.length; i++) {
@@ -515,7 +511,7 @@
 
     public void addMatrix(Matrix3f v) {
         if (RenderScript.shouldThunk()) {
-            mN.addMatrix(new android.renderscript.Matrix3f(v.getArray()));
+            mN.addMatrix(v);
             return;
         }
         for (int i=0; i < v.mMat.length; i++) {
@@ -525,7 +521,7 @@
 
     public void addMatrix(Matrix2f v) {
         if (RenderScript.shouldThunk()) {
-            mN.addMatrix(new android.renderscript.Matrix2f(v.getArray()));
+            mN.addMatrix(v);
             return;
         }
         for (int i=0; i < v.mMat.length; i++) {
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java
new file mode 100644
index 0000000..3e990f6
--- /dev/null
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/FieldPackerThunker.java
@@ -0,0 +1,223 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v8.renderscript;
+
+import android.os.SystemProperties;
+import android.support.v8.renderscript.RenderScript;
+
+/**
+ * Utility class for packing arguments and structures from Android system objects to
+ * RenderScript objects.
+ *
+ * This class is only intended to be used to support the
+ * reflected code generated by the RS tool chain.  It should not
+ * be called directly.
+ *
+ **/
+public class FieldPackerThunker {
+    private android.renderscript.FieldPacker mN;
+
+    public FieldPackerThunker(int len) {
+        mN = new android.renderscript.FieldPacker(len);
+    }
+
+    void align(int v) {
+        mN.align(v);
+    }
+
+    void reset() {
+        mN.reset();
+    }
+
+    void reset(int i) {
+        mN.reset(i);
+    }
+
+    public void skip(int i) {
+        mN.skip(i);
+    }
+
+    public void addI8(byte v) {
+        mN.addI8(v);
+    }
+
+    public void addI16(short v) {
+        mN.addI16(v);
+    }
+
+    public void addI32(int v) {
+        mN.addI32(v);
+    }
+
+    public void addI64(long v) {
+        mN.addI64(v);
+    }
+
+    public void addU8(short v) {
+        mN.addU8(v);
+    }
+
+    public void addU16(int v) {
+        mN.addU16(v);
+    }
+
+    public void addU32(long v) {
+        mN.addU32(v);
+    }
+
+    public void addU64(long v) {
+        mN.addU64(v);
+    }
+
+    public void addF32(float v) {
+        mN.addF32(v);
+    }
+
+    public void addF64(double v) {
+        mN.addF64(v);
+    }
+
+    public void addObj(BaseObj obj) {
+        if (obj != null) {
+            mN.addObj(obj.getNObj());
+        } else {
+            mN.addObj(null);
+        }
+    }
+
+    public void addF32(Float2 v) {
+        mN.addF32(new android.renderscript.Float2(v.x, v.y));
+    }
+    public void addF32(Float3 v) {
+        mN.addF32(new android.renderscript.Float3(v.x, v.y, v.z));
+    }
+    public void addF32(Float4 v) {
+        mN.addF32(new android.renderscript.Float4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addF64(Double2 v) {
+        mN.addF64(new android.renderscript.Double2(v.x, v.y));
+    }
+    public void addF64(Double3 v) {
+        mN.addF64(new android.renderscript.Double3(v.x, v.y, v.z));
+    }
+    public void addF64(Double4 v) {
+        mN.addF64(new android.renderscript.Double4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addI8(Byte2 v) {
+        mN.addI8(new android.renderscript.Byte2(v.x, v.y));
+    }
+    public void addI8(Byte3 v) {
+        mN.addI8(new android.renderscript.Byte3(v.x, v.y, v.z));
+    }
+    public void addI8(Byte4 v) {
+        mN.addI8(new android.renderscript.Byte4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addU8(Short2 v) {
+        mN.addU8(new android.renderscript.Short2(v.x, v.y));
+    }
+    public void addU8(Short3 v) {
+        mN.addU8(new android.renderscript.Short3(v.x, v.y, v.z));
+    }
+    public void addU8(Short4 v) {
+        mN.addU8(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addI16(Short2 v) {
+        mN.addI16(new android.renderscript.Short2(v.x, v.y));
+    }
+    public void addI16(Short3 v) {
+        mN.addI16(new android.renderscript.Short3(v.x, v.y, v.z));
+    }
+    public void addI16(Short4 v) {
+        mN.addI16(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addU16(Int2 v) {
+        mN.addU16(new android.renderscript.Int2(v.x, v.y));
+    }
+    public void addU16(Int3 v) {
+        mN.addU16(new android.renderscript.Int3(v.x, v.y, v.z));
+    }
+    public void addU16(Int4 v) {
+        mN.addU16(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addI32(Int2 v) {
+        mN.addI32(new android.renderscript.Int2(v.x, v.y));
+    }
+    public void addI32(Int3 v) {
+        mN.addI32(new android.renderscript.Int3(v.x, v.y, v.z));
+    }
+    public void addI32(Int4 v) {
+        mN.addI32(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addU32(Long2 v) {
+        mN.addU32(new android.renderscript.Long2(v.x, v.y));
+    }
+    public void addU32(Long3 v) {
+        mN.addU32(new android.renderscript.Long3(v.x, v.y, v.z));
+    }
+    public void addU32(Long4 v) {
+        mN.addU32(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addI64(Long2 v) {
+        mN.addI64(new android.renderscript.Long2(v.x, v.y));
+    }
+    public void addI64(Long3 v) {
+        mN.addI64(new android.renderscript.Long3(v.x, v.y, v.z));
+    }
+    public void addI64(Long4 v) {
+        mN.addI64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addU64(Long2 v) {
+        mN.addU64(new android.renderscript.Long2(v.x, v.y));
+    }
+    public void addU64(Long3 v) {
+        mN.addU64(new android.renderscript.Long3(v.x, v.y, v.z));
+    }
+    public void addU64(Long4 v) {
+        mN.addU64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
+    }
+
+    public void addMatrix(Matrix4f v) {
+        mN.addMatrix(new android.renderscript.Matrix4f(v.getArray()));
+    }
+
+    public void addMatrix(Matrix3f v) {
+        mN.addMatrix(new android.renderscript.Matrix3f(v.getArray()));
+    }
+
+    public void addMatrix(Matrix2f v) {
+        mN.addMatrix(new android.renderscript.Matrix2f(v.getArray()));
+    }
+
+    public void addBoolean(boolean v) {
+        mN.addBoolean(v);
+    }
+
+    public final byte[] getData() {
+        return mN.getData();
+    }
+}
+
+
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java b/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java
index ae67db1..7efbed2 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/RenderScript.java
@@ -768,16 +768,7 @@
         mMessageCallback = msg;
         if (isNative) {
             RenderScriptThunker rst = (RenderScriptThunker) this;
-            android.renderscript.RenderScript.RSMessageHandler newmsg =
-                new android.renderscript.RenderScript.RSMessageHandler() {
-                    public void run()  {
-                        mMessageCallback.mData = mData;
-                        mMessageCallback.mID = mID;
-                        mMessageCallback.mLength = mLength;
-                        mMessageCallback.run();
-                    }
-                };
-            rst.mN.setMessageHandler(newmsg);
+            rst.setMessageHandler(msg);
         }
     }
     public RSMessageHandler getMessageHandler() {
@@ -823,15 +814,7 @@
         mErrorCallback = msg;
         if (isNative) {
             RenderScriptThunker rst = (RenderScriptThunker) this;
-            android.renderscript.RenderScript.RSErrorHandler newmsg =
-                new android.renderscript.RenderScript.RSErrorHandler() {
-                    public void run()  {
-                        mErrorCallback.mErrorMessage = mErrorMessage;
-                        mErrorCallback.mErrorNum = mErrorNum;
-                        mErrorCallback.run();
-                    }
-                };
-            rst.mN.setErrorHandler(newmsg);
+            rst.setErrorHandler(msg);
         }
     }
     public RSErrorHandler getErrorHandler() {
diff --git a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScriptThunker.java b/v8/renderscript/java/src/android/support/v8/renderscript/RenderScriptThunker.java
index daf0b26..aa787c0a 100644
--- a/v8/renderscript/java/src/android/support/v8/renderscript/RenderScriptThunker.java
+++ b/v8/renderscript/java/src/android/support/v8/renderscript/RenderScriptThunker.java
@@ -85,4 +85,11 @@
         }
 
     }
+
+    boolean equals(Object obj1, Object obj2) {
+        if (obj2 instanceof android.support.v8.renderscript.BaseObj) {
+            return ((android.renderscript.BaseObj)obj1).equals(((android.support.v8.renderscript.BaseObj)obj2).getNObj());
+        }
+        return false;
+    }
 }
