diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index 54ee6ce..0f9c7c5 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -83,7 +83,10 @@
     mConnectedApi(NO_CONNECTED_API),
     mAbandoned(false),
     mFrameCounter(0),
-    mBufferHasBeenQueued(false)
+    mBufferHasBeenQueued(false),
+    mDefaultBufferFormat(0),
+    mConsumerUsageBits(0),
+    mTransformHint(0)
 {
     // Choose a name using the PID and a process-unique ID.
     mConsumerName = String8::format("unnamed-%d-%d", getpid(), createProcessUniqueId());
@@ -128,6 +131,7 @@
         // dequeueBuffer.
 
         mServerBufferCount = bufferCount;
+        mDequeueCondition.broadcast();
     }
     return OK;
 }
@@ -149,6 +153,24 @@
     mFrameAvailableListener = listener;
 }
 
+status_t BufferQueue::setDefaultBufferFormat(uint32_t defaultFormat) {
+    Mutex::Autolock lock(mMutex);
+    mDefaultBufferFormat = defaultFormat;
+    return OK;
+}
+
+status_t BufferQueue::setConsumerUsageBits(uint32_t usage) {
+    Mutex::Autolock lock(mMutex);
+    mConsumerUsageBits = usage;
+    return OK;
+}
+
+status_t BufferQueue::setTransformHint(uint32_t hint) {
+    Mutex::Autolock lock(mMutex);
+    mTransformHint = hint;
+    return OK;
+}
+
 status_t BufferQueue::setBufferCount(int bufferCount) {
     ST_LOGV("setBufferCount: count=%d", bufferCount);
     Mutex::Autolock lock(mMutex);
@@ -263,6 +285,12 @@
     { // Scope for the lock
         Mutex::Autolock lock(mMutex);
 
+        if (format == 0) {
+            format = mDefaultBufferFormat;
+        }
+        // turn on usage bits the consumer requested
+        usage |= mConsumerUsageBits;
+
         int found = -1;
         int foundSync = -1;
         int dequeuedCount = 0;
@@ -563,7 +591,7 @@
 
         *outWidth = mDefaultWidth;
         *outHeight = mDefaultHeight;
-        *outTransform = 0;
+        *outTransform = mTransformHint;
 
         ATRACE_INT(mConsumerName.string(), mQueue.size());
     } // scope for the lock
@@ -846,7 +874,8 @@
         ATRACE_INT(mConsumerName.string(), mQueue.size());
     }
     else {
-        return -EINVAL; //should be a better return code
+        // should be a better return code?
+        return -EINVAL;
     }
 
     return OK;
@@ -880,9 +909,10 @@
 
 status_t BufferQueue::consumerDisconnect() {
     Mutex::Autolock lock(mMutex);
-    // Once the SurfaceTexture disconnects, the BufferQueue
-    // is considered abandoned
+
     mAbandoned = true;
+
+    mQueue.clear();
     freeAllBuffersLocked();
     mDequeueCondition.broadcast();
     return OK;
