diff --git a/camera/IProCameraUser.cpp b/camera/IProCameraUser.cpp
index cd7bf5c..e60cfe5 100644
--- a/camera/IProCameraUser.cpp
+++ b/camera/IProCameraUser.cpp
@@ -219,7 +219,7 @@
     }
 
     virtual status_t createStream(int width, int height, int format,
-                          const sp<Surface>& surface,
+                          const sp<IGraphicBufferProducer>& bufferProducer,
                           /*out*/
                           int* streamId)
     {
@@ -229,7 +229,9 @@
         data.writeInt32(height);
         data.writeInt32(format);
 
-        Surface::writeToParcel(surface, &data);
+        sp<IBinder> b(bufferProducer->asBinder());
+        data.writeStrongBinder(b);
+
         remote()->transact(CREATE_STREAM, data, &reply);
 
         int sId = reply.readInt32();
@@ -340,11 +342,12 @@
             height = data.readInt32();
             format = data.readInt32();
 
-            sp<Surface> surface = Surface::readFromParcel(data);
+            sp<IGraphicBufferProducer> bp =
+               interface_cast<IGraphicBufferProducer>(data.readStrongBinder());
 
             int streamId = -1;
             status_t ret;
-            ret = createStream(width, height, format, surface, &streamId);
+            ret = createStream(width, height, format, bp, &streamId);
 
             reply->writeInt32(streamId);
             reply->writeInt32(ret);
diff --git a/camera/ProCamera.cpp b/camera/ProCamera.cpp
index 92ec9d6..8fd08f4 100644
--- a/camera/ProCamera.cpp
+++ b/camera/ProCamera.cpp
@@ -278,7 +278,8 @@
     sp <IProCameraUser> c = mCamera;
     if (c == 0) return NO_INIT;
 
-    return c->createStream(width, height, format, surface, streamId);
+    return c->createStream(width, height, format, surface->getIGraphicBufferProducer(),
+                           streamId);
 }
 
 status_t ProCamera::createStream(int width, int height, int format,
@@ -293,10 +294,10 @@
     status_t stat = INVALID_OPERATION;
 
     if (bufferProducer != 0) {
-        binder = bufferProducer->asBinder();
+        sp <IProCameraUser> c = mCamera;
+        if (c == 0) return NO_INIT;
 
-        ALOGV("%s: createStreamT END (%d), StreamID = %d", __FUNCTION__, stat,
-                                                                    *streamId);
+        return c->createStream(width, height, format, bufferProducer, streamId);
     }
     else {
         *streamId = -1;
diff --git a/include/camera/IProCameraUser.h b/include/camera/IProCameraUser.h
index 3ef4676..a141769 100644
--- a/include/camera/IProCameraUser.h
+++ b/include/camera/IProCameraUser.h
@@ -63,10 +63,11 @@
 
     virtual status_t        requestStream(int streamId) = 0;
     virtual status_t        cancelStream(int streamId) = 0;
-    virtual status_t        createStream(int width, int height, int format,
-                                         const sp<Surface>& surface,
-                                         /*out*/
-                                         int* streamId) = 0;
+    virtual status_t        createStream(
+                                      int width, int height, int format,
+                                      const sp<IGraphicBufferProducer>& bufferProducer,
+                                      /*out*/
+                                      int* streamId) = 0;
 
     // Create a request object from a template.
     virtual status_t        createDefaultRequest(int templateId,
diff --git a/services/camera/libcameraservice/ProCamera2Client.cpp b/services/camera/libcameraservice/ProCamera2Client.cpp
index 5ebe713..aa02f10 100644
--- a/services/camera/libcameraservice/ProCamera2Client.cpp
+++ b/services/camera/libcameraservice/ProCamera2Client.cpp
@@ -238,7 +238,7 @@
 }
 
 status_t ProCamera2Client::createStream(int width, int height, int format,
-                      const sp<Surface>& surface,
+                      const sp<IGraphicBufferProducer>& bufferProducer,
                       /*out*/
                       int* streamId)
 {
@@ -254,7 +254,15 @@
 
     Mutex::Autolock icl(mIProCameraUserLock);
 
-    return mDevice->createStream(surface, width, height, format, /*size*/1, streamId);
+    sp<IBinder> binder;
+    sp<ANativeWindow> window;
+    if (bufferProducer != 0) {
+        binder = bufferProducer->asBinder();
+        window = new Surface(bufferProducer);
+    }
+
+    return mDevice->createStream(window, width, height, format, /*size*/1,
+                                 streamId);
 }
 
 // Create a request object from a template.
diff --git a/services/camera/libcameraservice/ProCamera2Client.h b/services/camera/libcameraservice/ProCamera2Client.h
index ed42e22..b72fd63 100644
--- a/services/camera/libcameraservice/ProCamera2Client.h
+++ b/services/camera/libcameraservice/ProCamera2Client.h
@@ -53,9 +53,9 @@
     virtual status_t      cancelStream(int streamId);
 
     virtual status_t      createStream(int width, int height, int format,
-                                       const sp<Surface>& surface,
-                                       /*out*/
-                                       int* streamId);
+                                      const sp<IGraphicBufferProducer>& bufferProducer,
+                                      /*out*/
+                                      int* streamId);
 
     // Create a request object from a template.
     // -- Caller owns the newly allocated metadata
