diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index 2d042c8..84ccb3f 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -69,13 +69,16 @@
     return android_atomic_inc(&globalCounter);
 }
 
-BufferQueue::BufferQueue( bool allowSynchronousMode ) :
+BufferQueue::BufferQueue(  bool allowSynchronousMode, int bufferCount ) :
     mDefaultWidth(1),
     mDefaultHeight(1),
     mPixelFormat(PIXEL_FORMAT_RGBA_8888),
-    mBufferCount(MIN_ASYNC_BUFFER_SLOTS),
+    mMinUndequeuedBuffers(bufferCount),
+    mMinAsyncBufferSlots(bufferCount + 1),
+    mMinSyncBufferSlots(bufferCount),
+    mBufferCount(mMinAsyncBufferSlots),
     mClientBufferCount(0),
-    mServerBufferCount(MIN_ASYNC_BUFFER_SLOTS),
+    mServerBufferCount(mMinAsyncBufferSlots),
     mSynchronousMode(false),
     mAllowSynchronousMode(allowSynchronousMode),
     mConnectedApi(NO_CONNECTED_API),
@@ -92,6 +95,9 @@
     ST_LOGV("BufferQueue");
     sp<ISurfaceComposer> composer(ComposerService::getComposerService());
     mGraphicBufferAlloc = composer->createGraphicBufferAlloc();
+    if (mGraphicBufferAlloc == 0) {
+        ST_LOGE("createGraphicBufferAlloc() failed in BufferQueue()");
+    }
 }
 
 BufferQueue::~BufferQueue() {
@@ -186,7 +192,7 @@
         }
 
         const int minBufferSlots = mSynchronousMode ?
-                MIN_SYNC_BUFFER_SLOTS : MIN_ASYNC_BUFFER_SLOTS;
+            mMinSyncBufferSlots : mMinAsyncBufferSlots;
         if (bufferCount == 0) {
             mClientBufferCount = 0;
             bufferCount = (mServerBufferCount >= minBufferSlots) ?
@@ -241,7 +247,7 @@
         break;
     case NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS:
         value = mSynchronousMode ?
-                (MIN_UNDEQUEUED_BUFFERS-1) : MIN_UNDEQUEUED_BUFFERS;
+                (mMinUndequeuedBuffers-1) : mMinUndequeuedBuffers;
         break;
     default:
         return BAD_VALUE;
@@ -317,7 +323,7 @@
             // wait on mDequeueCondition.
 
             const int minBufferCountNeeded = mSynchronousMode ?
-                    MIN_SYNC_BUFFER_SLOTS : MIN_ASYNC_BUFFER_SLOTS;
+                    mMinSyncBufferSlots : mMinAsyncBufferSlots;
 
             const bool numberOfBuffersNeedsToChange = !mClientBufferCount &&
                     ((mServerBufferCount != mBufferCount) ||
@@ -384,15 +390,15 @@
 
             // See whether a buffer has been queued since the last
             // setBufferCount so we know whether to perform the
-            // MIN_UNDEQUEUED_BUFFERS check below.
+            // mMinUndequeuedBuffers check below.
             if (mBufferHasBeenQueued) {
                 // make sure the client is not trying to dequeue more buffers
                 // than allowed.
                 const int avail = mBufferCount - (dequeuedCount+1);
-                if (avail < (MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode))) {
-                    ST_LOGE("dequeueBuffer: MIN_UNDEQUEUED_BUFFERS=%d exceeded "
+                if (avail < (mMinUndequeuedBuffers-int(mSynchronousMode))) {
+                    ST_LOGE("dequeueBuffer: mMinUndequeuedBuffers=%d exceeded "
                             "(dequeued=%d)",
-                            MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode),
+                            mMinUndequeuedBuffers-int(mSynchronousMode),
                             dequeuedCount);
                     return -EBUSY;
                 }
