diff --git a/cpu_ref/rsCpuScript.cpp b/cpu_ref/rsCpuScript.cpp
index b182efb..0b8dff7 100644
--- a/cpu_ref/rsCpuScript.cpp
+++ b/cpu_ref/rsCpuScript.cpp
@@ -359,14 +359,12 @@
                 mForEachSignatures[i] = tmpSig;
                 mForEachFunctions[i] =
                         (ForEachFunc_t) dlsym(mScriptSO, tmpName);
-                if (mForEachFunctions[i] == NULL) {
-                    ALOGE("Failed to find forEach function address for %s: %s",
-                          tmpName, dlerror());
+                if (i != 0 && mForEachFunctions[i] == NULL) {
                     // Ignore missing root.expand functions.
                     // root() is always specified at location 0.
-                    if (i != 0) {
-                        goto error;
-                    }
+                    ALOGE("Failed to find forEach function address for %s: %s",
+                          tmpName, dlerror());
+                    goto error;
                 }
                 else {
                     //ALOGE("Found forEach %s at %p", tmpName, mForEachFunctions[i]);
diff --git a/driver/rsdAllocation.cpp b/driver/rsdAllocation.cpp
index 231ce12..28b71ce 100644
--- a/driver/rsdAllocation.cpp
+++ b/driver/rsdAllocation.cpp
@@ -256,20 +256,20 @@
 #ifndef RS_SERVER
     switch(yuv) {
     case HAL_PIXEL_FORMAT_YV12:
-        state->lod[1].dimX = state->lod[0].dimX / 2;
-        state->lod[1].dimY = state->lod[0].dimY / 2;
-        state->lod[1].stride = rsRound(state->lod[0].stride >> 1, 16);
-        state->lod[1].mallocPtr = ((uint8_t *)state->lod[0].mallocPtr) +
+        state->lod[2].dimX = state->lod[0].dimX / 2;
+        state->lod[2].dimY = state->lod[0].dimY / 2;
+        state->lod[2].stride = rsRound(state->lod[0].stride >> 1, 16);
+        state->lod[2].mallocPtr = ((uint8_t *)state->lod[0].mallocPtr) +
                 (state->lod[0].stride * state->lod[0].dimY);
-        uvSize += state->lod[1].stride * state->lod[1].dimY;
-
-        state->lod[2].dimX = state->lod[1].dimX;
-        state->lod[2].dimY = state->lod[1].dimY;
-        state->lod[2].stride = state->lod[1].stride;
-        state->lod[2].mallocPtr = ((uint8_t *)state->lod[1].mallocPtr) +
-                (state->lod[1].stride * state->lod[1].dimY);
         uvSize += state->lod[2].stride * state->lod[2].dimY;
 
+        state->lod[1].dimX = state->lod[2].dimX;
+        state->lod[1].dimY = state->lod[2].dimY;
+        state->lod[1].stride = state->lod[2].stride;
+        state->lod[1].mallocPtr = ((uint8_t *)state->lod[2].mallocPtr) +
+                (state->lod[2].stride * state->lod[2].dimY);
+        uvSize += state->lod[1].stride * state->lod[2].dimY;
+
         state->lodCount = 3;
         break;
     case HAL_PIXEL_FORMAT_YCrCb_420_SP:  // NV21
@@ -612,6 +612,13 @@
     drv->uploadDeferred = true;
 }
 
+#ifndef RS_COMPATIBILITY_LIB
+void DrvAllocation::NewBufferListener::onFrameAvailable() {
+    intptr_t ip = (intptr_t)alloc;
+    rsc->sendMessageToClient(NULL, RS_MESSAGE_TO_CLIENT_NEW_BUFFER, ip, 0, true);
+}
+#endif
+
 void* rsdAllocationGetSurface(const Context *rsc, const Allocation *alloc) {
 #ifndef RS_COMPATIBILITY_LIB
     DrvAllocation *drv = (DrvAllocation *)alloc->mHal.drv;
@@ -620,6 +627,13 @@
     drv->cpuConsumer = new CpuConsumer(2, false);
     sp<IGraphicBufferProducer> bp = drv->cpuConsumer->getProducerInterface();
     bp->incStrong(NULL);
+
+    drv->mBufferListener = new DrvAllocation::NewBufferListener();
+    drv->mBufferListener->rsc = rsc;
+    drv->mBufferListener->alloc = alloc;
+
+    drv->cpuConsumer->setFrameAvailableListener(drv->mBufferListener);
+
     return bp.get();
 #else
     return NULL;
diff --git a/driver/rsdAllocation.h b/driver/rsdAllocation.h
index a3f62a1..97e0d6a 100644
--- a/driver/rsdAllocation.h
+++ b/driver/rsdAllocation.h
@@ -48,6 +48,16 @@
     uint32_t renderTargetID;
 
 #ifndef RS_COMPATIBILITY_LIB
+    class NewBufferListener : public android::ConsumerBase::FrameAvailableListener {
+    public:
+        const android::renderscript::Context *rsc;
+        const android::renderscript::Allocation *alloc;
+
+        virtual void onFrameAvailable();
+    };
+    android::sp<NewBufferListener> mBufferListener;
+
+
     GLenum glTarget;
     GLenum glType;
     GLenum glFormat;
diff --git a/driver/rsdGL.cpp b/driver/rsdGL.cpp
index 58c52e2..0a23a44 100644
--- a/driver/rsdGL.cpp
+++ b/driver/rsdGL.cpp
@@ -267,8 +267,6 @@
         }
     }
 
-    eglSwapInterval(dc->gl.egl.display, 0);
-
     if (numConfigs) {
         EGLConfig* const configs = new EGLConfig[numConfigs];
 
diff --git a/rsContext.cpp b/rsContext.cpp
index eec2dcd..749973a 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -48,6 +48,7 @@
 using namespace android::renderscript;
 
 pthread_mutex_t Context::gInitMutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t Context::gMessageMutex = PTHREAD_MUTEX_INITIALIZER;
 pthread_mutex_t Context::gLibMutex = PTHREAD_MUTEX_INITIALIZER;
 
 bool Context::initGLThread() {
@@ -732,7 +733,10 @@
 bool Context::sendMessageToClient(const void *data, RsMessageToClientType cmdID,
                                   uint32_t subID, size_t len, bool waitForSpace) const {
 
-    return mIO.sendToClient(cmdID, subID, data, len, waitForSpace);
+    pthread_mutex_lock(&gMessageMutex);
+    bool ret = mIO.sendToClient(cmdID, subID, data, len, waitForSpace);
+    pthread_mutex_unlock(&gMessageMutex);
+    return ret;
 }
 
 void Context::initToClient() {
diff --git a/rsContext.h b/rsContext.h
index df10d33..5b1f50c 100644
--- a/rsContext.h
+++ b/rsContext.h
@@ -75,6 +75,7 @@
     static Context * createContextLite();
     ~Context();
 
+    static pthread_mutex_t gMessageMutex;
     static pthread_mutex_t gInitMutex;
     // Library mutex (for providing thread-safe calls from the runtime)
     static pthread_mutex_t gLibMutex;
diff --git a/rsDefines.h b/rsDefines.h
index 52f7d83..242d649 100644
--- a/rsDefines.h
+++ b/rsDefines.h
@@ -101,7 +101,8 @@
     RS_MESSAGE_TO_CLIENT_EXCEPTION = 1,
     RS_MESSAGE_TO_CLIENT_RESIZE = 2,
     RS_MESSAGE_TO_CLIENT_ERROR = 3,
-    RS_MESSAGE_TO_CLIENT_USER = 4
+    RS_MESSAGE_TO_CLIENT_USER = 4,
+    RS_MESSAGE_TO_CLIENT_NEW_BUFFER = 5
 };
 
 enum RsAllocationUsageType {
