diff --git a/libhwcomposer/hwc_fbupdate.cpp b/libhwcomposer/hwc_fbupdate.cpp
index a8ad8fe..e370ecb 100644
--- a/libhwcomposer/hwc_fbupdate.cpp
+++ b/libhwcomposer/hwc_fbupdate.cpp
@@ -21,6 +21,7 @@
 #define DEBUG_FBUPDATE 0
 #include <gralloc_priv.h>
 #include "hwc_fbupdate.h"
+#include "hwc_video.h"
 
 namespace qhwc {
 
@@ -78,11 +79,20 @@
         mDest = dest;
 
         ovutils::eMdpFlags mdpFlags = ovutils::OV_MDP_FLAGS_NONE;
+        // If any of the layers has pre-multiplied alpha, set Pre multiplied
+        // Flag as the compositied output is alpha pre-multiplied.
+        if(ctx->listStats[mDpy].preMultipliedAlpha == true)
+               ovutils::setMdpFlags(mdpFlags, ovutils::OV_MDP_BLEND_FG_PREMULT);
+
+        ovutils::eZorder z_order =
+              ctx->mVidOv[mDpy]->isModeOn()?ovutils::ZORDER_1:ovutils::ZORDER_0;
+        ovutils::eIsFg is_fg =
+           ctx->mVidOv[mDpy]->isModeOn()? ovutils::IS_FG_OFF:ovutils::IS_FG_SET;
 
         ovutils::PipeArgs parg(mdpFlags,
                 info,
-                ovutils::ZORDER_0,
-                ovutils::IS_FG_SET,
+                z_order,
+                is_fg,
                 ovutils::ROT_FLAGS_NONE);
         ov.setSource(parg, dest);
 
@@ -181,11 +191,20 @@
         mDestRight = destR;
 
         ovutils::eMdpFlags mdpFlagsL = ovutils::OV_MDP_FLAGS_NONE;
+        //If any layer has pre-multiplied alpha, set Pre multiplied
+        //Flag as the compositied output is alpha pre-multiplied.
+        if(ctx->listStats[mDpy].preMultipliedAlpha == true)
+            ovutils::setMdpFlags(mdpFlagsL, ovutils::OV_MDP_BLEND_FG_PREMULT);
+
+        ovutils::eZorder z_order =
+              ctx->mVidOv[mDpy]->isModeOn()?ovutils::ZORDER_1:ovutils::ZORDER_0;
+        ovutils::eIsFg is_fg =
+           ctx->mVidOv[mDpy]->isModeOn()? ovutils::IS_FG_OFF:ovutils::IS_FG_SET;
 
         ovutils::PipeArgs pargL(mdpFlagsL,
                 info,
-                ovutils::ZORDER_0,
-                ovutils::IS_FG_SET,
+                z_order,
+                is_fg,
                 ovutils::ROT_FLAGS_NONE);
         ov.setSource(pargL, destL);
 
@@ -193,8 +212,8 @@
         ovutils::setMdpFlags(mdpFlagsR, ovutils::OV_MDSS_MDP_RIGHT_MIXER);
         ovutils::PipeArgs pargR(mdpFlagsR,
                 info,
-                ovutils::ZORDER_0,
-                ovutils::IS_FG_SET,
+                z_order,
+                is_fg,
                 ovutils::ROT_FLAGS_NONE);
         ov.setSource(pargR, destR);
 
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 12a543b..3245889 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -311,6 +311,7 @@
     ctx->listStats[dpy].fbLayerIndex = list->numHwLayers - 1;
     ctx->listStats[dpy].skipCount = 0;
     ctx->listStats[dpy].needsAlphaScale = false;
+    ctx->listStats[dpy].preMultipliedAlpha = false;
     ctx->listStats[dpy].yuvCount = 0;
 
     for (size_t i = 0; i < list->numHwLayers; i++) {
@@ -333,6 +334,8 @@
             if(layer->transform & HWC_TRANSFORM_ROT_90)
                 ctx->mNeedsRotator = true;
         }
+        if(layer->blending == HWC_BLENDING_PREMULT)
+            ctx->listStats[dpy].preMultipliedAlpha = true;
 
         if(!ctx->listStats[dpy].needsAlphaScale)
             ctx->listStats[dpy].needsAlphaScale = isAlphaScaled(layer);
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index 254903e..e1f0995 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -92,6 +92,7 @@
     int yuvCount;
     int yuvIndices[MAX_NUM_LAYERS];
     bool needsAlphaScale;
+    bool preMultipliedAlpha;
 };
 
 struct LayerProp {
diff --git a/libhwcomposer/hwc_video.cpp b/libhwcomposer/hwc_video.cpp
index f09cc35..f95456b 100644
--- a/libhwcomposer/hwc_video.cpp
+++ b/libhwcomposer/hwc_video.cpp
@@ -132,7 +132,7 @@
 
     mDest = dest;
     ovutils::eMdpFlags mdpFlags = ovutils::OV_MDP_FLAGS_NONE;
-    ovutils::eZorder zOrder = ovutils::ZORDER_1;
+    ovutils::eZorder zOrder = ovutils::ZORDER_0;
     ovutils::eIsFg isFg = ovutils::IS_FG_OFF;
     if (ctx->listStats[mDpy].numAppLayers == 1) {
         isFg = ovutils::IS_FG_SET;
@@ -176,6 +176,10 @@
     return true;
 }
 
+bool VideoOverlayLowRes::isModeOn() {
+    return mModeOn;
+}
+
 //===========VideoOverlayHighRes=========================
 
 VideoOverlayHighRes::VideoOverlayHighRes(const int& dpy): IVideoOverlay(dpy) {}
@@ -244,7 +248,7 @@
     }
 
     ovutils::eMdpFlags mdpFlags = ovutils::OV_MDP_FLAGS_NONE;
-    ovutils::eZorder zOrder = ovutils::ZORDER_1;
+    ovutils::eZorder zOrder = ovutils::ZORDER_0;
     ovutils::eIsFg isFg = ovutils::IS_FG_OFF;
     if (ctx->listStats[mDpy].numAppLayers == 1) {
         isFg = ovutils::IS_FG_SET;
@@ -299,5 +303,8 @@
     return true;
 }
 
+bool VideoOverlayHighRes::isModeOn() {
+    return mModeOn;
+}
 
 }; //namespace qhwc
diff --git a/libhwcomposer/hwc_video.h b/libhwcomposer/hwc_video.h
index 4acde9d..80a47f1 100644
--- a/libhwcomposer/hwc_video.h
+++ b/libhwcomposer/hwc_video.h
@@ -40,8 +40,10 @@
     virtual bool draw(hwc_context_t *ctx,
             hwc_display_contents_1_t *list) = 0;
     virtual void reset() = 0;
+    virtual bool isModeOn() = 0;
     //Factory method that returns a low-res or high-res version
     static IVideoOverlay *getObject(const int& width, const int& dpy);
+
 protected:
     const int mDpy; // display to update
     bool mModeOn; // if prepare happened
@@ -55,6 +57,7 @@
     bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list);
     bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list);
     void reset();
+    bool isModeOn();
 private:
     //Configures overlay for video prim and ext
     bool configure(hwc_context_t *ctx, hwc_layer_1_t *yuvlayer);
@@ -72,6 +75,7 @@
     bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list);
     bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list);
     void reset();
+    bool isModeOn();
 private:
     //Configures overlay for video prim and ext
     bool configure(hwc_context_t *ctx, hwc_layer_1_t *yuvlayer);
