diff --git a/graphics/java/android/renderscript/RSTextureView.java b/graphics/java/android/renderscript/RSTextureView.java
new file mode 100644
index 0000000..f63ae8d
--- /dev/null
+++ b/graphics/java/android/renderscript/RSTextureView.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2011 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.renderscript;
+
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.concurrent.Semaphore;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.os.Handler;
+import android.os.Message;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.TextureView;
+
+/**
+ * The Surface View for a graphics renderscript (RenderScriptGL) to draw on.
+ *
+ * @hide
+ */
+public class RSTextureView extends TextureView implements TextureView.SurfaceTextureListener {
+    private RenderScriptGL mRS;
+    private SurfaceTexture mSurfaceTexture;
+
+    /**
+     * Standard View constructor. In order to render something, you
+     * must call {@link android.opengl.GLSurfaceView#setRenderer} to
+     * register a renderer.
+     */
+    public RSTextureView(Context context) {
+        super(context);
+        init();
+        //Log.v(RenderScript.LOG_TAG, "RSSurfaceView");
+    }
+
+    /**
+     * Standard View constructor. In order to render something, you
+     * must call {@link android.opengl.GLSurfaceView#setRenderer} to
+     * register a renderer.
+     */
+    public RSTextureView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init();
+        //Log.v(RenderScript.LOG_TAG, "RSSurfaceView");
+    }
+
+    private void init() {
+        setSurfaceTextureListener(this);
+        //android.util.Log.e("rs", "getSurfaceTextureListerner " + getSurfaceTextureListener());
+    }
+
+    @Override
+    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
+        //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureAvailable");
+        mSurfaceTexture = surface;
+
+        if (mRS != null) {
+            mRS.setSurfaceTexture(mSurfaceTexture, width, height);
+        }
+    }
+
+    @Override
+    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
+        //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureSizeChanged");
+        mSurfaceTexture = surface;
+
+        if (mRS != null) {
+            mRS.setSurfaceTexture(mSurfaceTexture, width, height);
+        }
+    }
+
+    @Override
+    public void onSurfaceTextureDestroyed(SurfaceTexture surface) {
+        //Log.e(RenderScript.LOG_TAG, "onSurfaceTextureDestroyed");
+        mSurfaceTexture = surface;
+
+        if (mRS != null) {
+            mRS.setSurfaceTexture(null, 0, 0);
+        }
+    }
+
+   /**
+     * Inform the view that the activity is paused. The owner of this view must
+     * call this method when the activity is paused. Calling this method will
+     * pause the rendering thread.
+     * Must not be called before a renderer has been set.
+     */
+    public void pause() {
+        if(mRS != null) {
+            mRS.pause();
+        }
+    }
+
+    /**
+     * Inform the view that the activity is resumed. The owner of this view must
+     * call this method when the activity is resumed. Calling this method will
+     * recreate the OpenGL display and resume the rendering
+     * thread.
+     * Must not be called before a renderer has been set.
+     */
+    public void resume() {
+        if(mRS != null) {
+            mRS.resume();
+        }
+    }
+
+    /**
+     * Create a new RenderScriptGL object and attach it to the
+     * TextureView if present.
+     *
+     *
+     * @param sc The RS surface config to create.
+     *
+     * @return RenderScriptGL The new object created.
+     */
+    public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) {
+        RenderScriptGL rs = new RenderScriptGL(this.getContext(), sc);
+        setRenderScriptGL(rs);
+        if (mSurfaceTexture != null) {
+            mRS.setSurfaceTexture(mSurfaceTexture, getWidth(), getHeight());
+        }
+        return rs;
+    }
+
+    /**
+     * Destroy the RenderScriptGL object associated with this
+     * TextureView.
+     */
+    public void destroyRenderScriptGL() {
+        mRS.destroy();
+        mRS = null;
+    }
+
+    /**
+     * Set a new RenderScriptGL object.  This also will attach the
+     * new object to the TextureView if present.
+     *
+     * @param rs The new RS object.
+     */
+    public void setRenderScriptGL(RenderScriptGL rs) {
+        mRS = rs;
+        if (mSurfaceTexture != null) {
+            mRS.setSurfaceTexture(mSurfaceTexture, getWidth(), getHeight());
+        }
+    }
+
+    /**
+     * Returns the previously set RenderScriptGL object.
+     *
+     * @return RenderScriptGL
+     */
+    public RenderScriptGL getRenderScriptGL() {
+        return mRS;
+    }
+}
+
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 9941827..4856ab6 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -22,6 +22,7 @@
 import android.content.res.AssetManager;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.SurfaceTexture;
 import android.os.Process;
 import android.util.Log;
 import android.view.Surface;
@@ -109,6 +110,11 @@
         validate();
         rsnContextSetSurface(mContext, w, h, sur);
     }
+    native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
+    synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
+        validate();
+        rsnContextSetSurfaceTexture(mContext, w, h, sur);
+    }
     native void rsnContextSetPriority(int con, int p);
     synchronized void nContextSetPriority(int p) {
         validate();
diff --git a/graphics/java/android/renderscript/RenderScriptGL.java b/graphics/java/android/renderscript/RenderScriptGL.java
index 53b6e28..8b14f99 100644
--- a/graphics/java/android/renderscript/RenderScriptGL.java
+++ b/graphics/java/android/renderscript/RenderScriptGL.java
@@ -22,6 +22,7 @@
 import android.graphics.PixelFormat;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.SurfaceTexture;
 import android.util.Log;
 import android.view.Surface;
 import android.view.SurfaceHolder;
@@ -35,7 +36,6 @@
  * the screen.
  **/
 public class RenderScriptGL extends RenderScript {
-    private Surface mSurface;
     int mWidth;
     int mHeight;
 
@@ -160,7 +160,6 @@
         super(ctx);
         mSurfaceConfig = new SurfaceConfig(sc);
 
-        mSurface = null;
         mWidth = 0;
         mHeight = 0;
         mDev = nDeviceCreate();
@@ -189,14 +188,31 @@
      */
     public void setSurface(SurfaceHolder sur, int w, int h) {
         validate();
+        Surface s = null;
         if (sur != null) {
-            mSurface = sur.getSurface();
-        } else {
-            mSurface = null;
+            s = sur.getSurface();
         }
         mWidth = w;
         mHeight = h;
-        nContextSetSurface(w, h, mSurface);
+        nContextSetSurface(w, h, s);
+    }
+
+    /**
+     * Bind an os surface
+     *
+     * @hide
+     *
+     * @param w
+     * @param h
+     * @param sur
+     */
+    public void setSurfaceTexture(SurfaceTexture sur, int w, int h) {
+        validate();
+        //android.util.Log.v("rs", "set surface " + sur + " w=" + w + ", h=" + h);
+
+        mWidth = w;
+        mHeight = h;
+        nContextSetSurfaceTexture(w, h, sur);
     }
 
     /**
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index 7e53cc4..4a85faf 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006 The Android Open Source Project
+ * Copyright (C) 2011 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.
@@ -43,6 +43,9 @@
 
 #include <RenderScript.h>
 #include <RenderScriptEnv.h>
+#include <gui/SurfaceTexture.h>
+#include <gui/SurfaceTextureClient.h>
+#include <android_runtime/android_graphics_SurfaceTexture.h>
 
 //#define LOG_API LOGE
 #define LOG_API(...)
@@ -201,6 +204,23 @@
 }
 
 static void
+nContextSetSurfaceTexture(JNIEnv *_env, jobject _this, RsContext con, jint width, jint height, jobject sur)
+{
+    LOG_API("nContextSetSurfaceTexture, con(%p), width(%i), height(%i), surface(%p)", con, width, height, (Surface *)sur);
+
+    sp<ANativeWindow> window;
+    sp<SurfaceTexture> st;
+    if (sur == 0) {
+
+    } else {
+        st = SurfaceTexture_getSurfaceTexture(_env, sur);
+        window = new SurfaceTextureClient(st);
+    }
+
+    rsContextSetSurface(con, width, height, window.get());
+}
+
+static void
 nContextDestroy(JNIEnv *_env, jobject _this, RsContext con)
 {
     LOG_API("nContextDestroy, con(%p)", con);
@@ -1197,6 +1217,7 @@
 {"rsnContextFinish",                 "(I)V",                                  (void*)nContextFinish },
 {"rsnContextSetPriority",            "(II)V",                                 (void*)nContextSetPriority },
 {"rsnContextSetSurface",             "(IIILandroid/view/Surface;)V",          (void*)nContextSetSurface },
+{"rsnContextSetSurfaceTexture",      "(IIILandroid/graphics/SurfaceTexture;)V", (void*)nContextSetSurfaceTexture },
 {"rsnContextDestroy",                "(I)V",                                  (void*)nContextDestroy },
 {"rsnContextDump",                   "(II)V",                                 (void*)nContextDump },
 {"rsnContextPause",                  "(I)V",                                  (void*)nContextPause },
diff --git a/libs/rs/driver/rsdGL.cpp b/libs/rs/driver/rsdGL.cpp
index 3ff03b4..1f7bb0f 100644
--- a/libs/rs/driver/rsdGL.cpp
+++ b/libs/rs/driver/rsdGL.cpp
@@ -321,8 +321,13 @@
         dc->gl.height = 1;
     }
 
+    if (dc->gl.wndSurface != NULL) {
+        dc->gl.wndSurface->decStrong(NULL);
+    }
+
     dc->gl.wndSurface = (ANativeWindow *)sur;
     if (dc->gl.wndSurface != NULL) {
+        dc->gl.wndSurface->incStrong(NULL);
         dc->gl.width = w;
         dc->gl.height = h;
 
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index 963a6e7..0dea971 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -103,6 +103,7 @@
 	param uint32_t width
 	param uint32_t height
 	param RsNativeWindow sur
+        sync
 	}
 
 ContextDump {
