diff --git a/graphics/java/android/renderscript/RSSurfaceView.java b/graphics/java/android/renderscript/RSSurfaceView.java
index 3d6acc9..b46a749 100644
--- a/graphics/java/android/renderscript/RSSurfaceView.java
+++ b/graphics/java/android/renderscript/RSSurfaceView.java
@@ -36,6 +36,7 @@
  **/
 public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
     private SurfaceHolder mSurfaceHolder;
+    private RenderScript mRS;
 
     /**
      * Standard View constructor. In order to render something, you
@@ -97,6 +98,9 @@
      * Must not be called before a renderer has been set.
      */
     public void onPause() {
+        if(mRS != null) {
+            mRS.pause();
+        }
         Log.v(RenderScript.LOG_TAG, "onPause");
     }
 
@@ -108,6 +112,9 @@
      * Must not be called before a renderer has been set.
      */
     public void onResume() {
+        if(mRS != null) {
+            mRS.resume();
+        }
         Log.v(RenderScript.LOG_TAG, "onResume");
     }
 
@@ -138,8 +145,8 @@
         while ((sur == null) || (mSurfaceHolder == null)) {
             sur = getHolder().getSurface();
         }
-        RenderScript rs = new RenderScript(sur, useDepth, forceSW);
-        return rs;
+        mRS = new RenderScript(sur, useDepth, forceSW);
+        return mRS;
     }
 
     public RenderScript createRenderScript(boolean useDepth) {
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index b7cd21b..f815f52 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -73,6 +73,8 @@
     native void nContextBindProgramRaster(int pr);
     native void nContextAddDefineI32(String name, int value);
     native void nContextAddDefineF(String name, float value);
+    native void nContextPause();
+    native void nContextResume();
 
     native void nAssignName(int obj, byte[] name);
     native void nObjDestroy(int id);
@@ -217,6 +219,14 @@
         mDev = 0;
     }
 
+    void pause() {
+        nContextPause();
+    }
+
+    void resume() {
+        nContextResume();
+    }
+
     //////////////////////////////////////////////////////////////////////////////////
     // File
 
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index f86d86a..9054b65 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -179,6 +179,22 @@
 
 
 static void
+nContextPause(JNIEnv *_env, jobject _this)
+{
+    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+    LOG_API("nContextPause, con(%p)", con);
+    rsContextPause(con);
+}
+
+static void
+nContextResume(JNIEnv *_env, jobject _this)
+{
+    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+    LOG_API("nContextResume, con(%p)", con);
+    rsContextResume(con);
+}
+
+static void
 nElementBegin(JNIEnv *_env, jobject _this)
 {
     RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
@@ -1282,6 +1298,8 @@
 {"nDeviceSetConfig",               "(III)V",                               (void*)nDeviceSetConfig },
 {"nContextCreate",                 "(ILandroid/view/Surface;IZ)I",         (void*)nContextCreate },
 {"nContextDestroy",                "(I)V",                                 (void*)nContextDestroy },
+{"nContextPause",                  "()V",                                  (void*)nContextPause },
+{"nContextResume",                 "()V",                                  (void*)nContextResume },
 {"nAssignName",                    "(I[B)V",                               (void*)nAssignName },
 {"nObjDestroy",                    "(I)V",                                 (void*)nObjDestroy },
 {"nObjDestroyOOB",                 "(I)V",                                 (void*)nObjDestroyOOB },
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index 8cdf2b7..a393e2f 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -30,6 +30,12 @@
     param int32_t value
     }
 
+ContextPause {
+	}
+
+ContextResume {
+	}
+
 AssignName {
 	param void *obj
 	param const char *name
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index e3236c4..2fe762c 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -251,7 +251,7 @@
          mDraw &= (rsc->mRootScript.get() != NULL);
 
          if (mDraw) {
-             mDraw = rsc->runRootScript();
+             mDraw = rsc->runRootScript() && !rsc->mPaused;
              if (rsc->logTimes) {
                  rsc->timerSet(RS_TIMER_CLEAR_SWAP);
              }
@@ -285,6 +285,7 @@
     mRunning = false;
     mExit = false;
     mUseDepth = useDepth;
+    mPaused = false;
 
     int status;
     pthread_attr_t threadAttr;
@@ -328,6 +329,7 @@
 {
     LOGV("Context::~Context");
     mExit = true;
+    mPaused = false;
     void *res;
 
     mIO.shutdown();
@@ -342,6 +344,16 @@
     objDestroyOOBDestroy();
 }
 
+void Context::pause()
+{
+    mPaused = true;
+}
+
+void Context::resume()
+{
+    mPaused = false;
+}
+
 void Context::setRootScript(Script *s)
 {
     mRootScript.set(s);
@@ -578,6 +590,16 @@
     rsc->addFloatDefine(name, value);
 }
 
+void rsi_ContextPause(Context *rsc)
+{
+    rsc->pause();
+}
+
+void rsi_ContextResume(Context *rsc)
+{
+    rsc->resume();
+}
+
 }
 }
 
diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h
index 8cabf87..0a886cd 100644
--- a/libs/rs/rsContext.h
+++ b/libs/rs/rsContext.h
@@ -88,6 +88,9 @@
     void setupCheck();
     void allocationCheck(const Allocation *);
 
+    void pause();
+    void resume();
+
     void assignName(ObjectBase *obj, const char *name, uint32_t len);
     void removeName(ObjectBase *obj);
     ObjectBase * lookupName(const char *name) const;
@@ -171,6 +174,7 @@
     bool mRunning;
     bool mExit;
     bool mUseDepth;
+    bool mPaused;
 
     pthread_t mThreadId;
 
