diff --git a/libhwcomposer/hwc.cpp b/libhwcomposer/hwc.cpp
index 1f97db4..2158611 100644
--- a/libhwcomposer/hwc.cpp
+++ b/libhwcomposer/hwc.cpp
@@ -140,12 +140,12 @@
         hwc_layer_1_t *fbLayer = &list->hwLayers[last];
         if(fbLayer->handle) {
             setListStats(ctx, list, dpy);
-            int fbZOrder = ctx->mMDPComp[dpy]->prepare(ctx, list);
-            if(fbZOrder >= 0)
-                ctx->mFBUpdate[dpy]->prepare(ctx, list, fbZOrder);
-
+            if(ctx->mMDPComp[dpy]->prepare(ctx, list) < 0) {
+                const int fbZ = 0;
+                ctx->mFBUpdate[dpy]->prepare(ctx, list, fbZ);
+            }
             if (ctx->mMDP.version < qdutils::MDP_V4_0) {
-                if((fbZOrder >= 0) && ctx->mCopyBit[dpy])
+                if(ctx->mCopyBit[dpy])
                     ctx->mCopyBit[dpy]->prepare(ctx, list, dpy);
             }
         }
@@ -168,9 +168,10 @@
             if(fbLayer->handle) {
                 ctx->mExtDispConfiguring = false;
                 setListStats(ctx, list, dpy);
-                int fbZOrder = ctx->mMDPComp[dpy]->prepare(ctx, list);
-                if(fbZOrder >= 0)
-                    ctx->mFBUpdate[dpy]->prepare(ctx, list, fbZOrder);
+                if(ctx->mMDPComp[dpy]->prepare(ctx, list) < 0) {
+                    const int fbZ = 0;
+                    ctx->mFBUpdate[dpy]->prepare(ctx, list, fbZ);
+                }
 
                 /* Temporarily commenting out C2D until we support partial
                    copybit composition for mixed mode MDP
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index 2ab9491..0f34cd4 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -22,6 +22,7 @@
 #include "external.h"
 #include "qdMetaData.h"
 #include "mdp_version.h"
+#include "hwc_fbupdate.h"
 #include <overlayRotator.h>
 
 using namespace overlay;
@@ -137,6 +138,12 @@
     return true;
 }
 
+void MDPComp::reset(const int& numLayers, hwc_display_contents_1_t* list) {
+    mCurrentFrame.reset(numLayers);
+    mCachedFrame.cacheAll(list);
+    mCachedFrame.updateCounts(mCurrentFrame);
+}
+
 void MDPComp::timeout_handler(void *udata) {
     struct hwc_context_t* ctx = (struct hwc_context_t*)(udata);
 
@@ -748,7 +755,6 @@
 }
 
 int MDPComp::prepare(hwc_context_t *ctx, hwc_display_contents_1_t* list) {
-
     const int numLayers = ctx->listStats[mDpy].numAppLayers;
 
     { //LOCK SCOPE BEGIN
@@ -763,26 +769,33 @@
             mCachedFrame.updateCounts(mCurrentFrame);
             ALOGD_IF(isDebug(), "%s: Number of App layers exceeded the limit ",
                                     __FUNCTION__);
-            return 0;
+            return -1;
         }
 
         //Hard conditions, if not met, cannot do MDP comp
         if(!isFrameDoable(ctx)) {
             ALOGD_IF( isDebug(),"%s: MDP Comp not possible for this frame",
                                     __FUNCTION__);
-            mCurrentFrame.reset(numLayers);
-            mCachedFrame.cacheAll(list);
-            mCachedFrame.updateCounts(mCurrentFrame);
-            return 0;
+            reset(numLayers, list);
+            return -1;
         }
 
         //Check whether layers marked for MDP Composition is actually doable.
         if(isFullFrameDoable(ctx, list)){
             mCurrentFrame.map();
+            //Configure framebuffer first if applicable
+            if(mCurrentFrame.fbZ >= 0) {
+                if(!ctx->mFBUpdate[mDpy]->prepare(ctx, list,
+                        mCurrentFrame.fbZ)) {
+                    ALOGE("%s configure framebuffer failed", __func__);
+                    reset(numLayers, list);
+                    return -1;
+                }
+            }
             //Acquire and Program MDP pipes
             if(!programMDP(ctx, list)) {
-                mCurrentFrame.reset(numLayers);
-                mCachedFrame.cacheAll(list);
+                reset(numLayers, list);
+                return -1;
             } else { //Success
                 //Any change in composition types needs an FB refresh
                 mCurrentFrame.needsRedraw = false;
@@ -807,13 +820,22 @@
                 mCurrentFrame.fbZ = mCurrentFrame.mdpCount;
 
             mCurrentFrame.map();
+
+            //Configure framebuffer first if applicable
+            if(mCurrentFrame.fbZ >= 0) {
+                if(!ctx->mFBUpdate[mDpy]->prepare(ctx, list, mCurrentFrame.fbZ)) {
+                    ALOGE("%s configure framebuffer failed", __func__);
+                    reset(numLayers, list);
+                    return -1;
+                }
+            }
             if(!programYUV(ctx, list)) {
-                mCurrentFrame.reset(numLayers);
-                mCachedFrame.cacheAll(list);
+                reset(numLayers, list);
+                return -1;
             }
         } else {
-            mCurrentFrame.reset(numLayers);
-            mCachedFrame.cacheAll(list);
+            reset(numLayers, list);
+            return -1;
         }
 
         //UpdateLayerFlags
@@ -829,7 +851,7 @@
         ALOGE("%s",sDump.string());
     }
 
-    return mCurrentFrame.fbZ;
+    return 0;
 }
 
 //=============MDPCompLowRes===================================================
diff --git a/libhwcomposer/hwc_mdpcomp.h b/libhwcomposer/hwc_mdpcomp.h
index ea7c7b1..cc4b76a 100644
--- a/libhwcomposer/hwc_mdpcomp.h
+++ b/libhwcomposer/hwc_mdpcomp.h
@@ -164,6 +164,7 @@
     void updateYUV(hwc_context_t* ctx, hwc_display_contents_1_t* list);
     bool programMDP(hwc_context_t *ctx, hwc_display_contents_1_t* list);
     bool programYUV(hwc_context_t *ctx, hwc_display_contents_1_t* list);
+    void reset(const int& numAppLayers, hwc_display_contents_1_t* list);
 
     int mDpy;
     static bool sEnabled;
@@ -227,5 +228,6 @@
 
     virtual int pipesNeeded(hwc_context_t *ctx, hwc_display_contents_1_t* list);
 };
+
 }; //namespace
 #endif
