diff --git a/merrifield/common/buffers/BufferManager.cpp b/merrifield/common/buffers/BufferManager.cpp
index fc460b3..6a939ae 100644
--- a/merrifield/common/buffers/BufferManager.cpp
+++ b/merrifield/common/buffers/BufferManager.cpp
@@ -60,7 +60,7 @@
     if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module)) {
         DEINIT_AND_RETURN_FALSE("failed to get gralloc module");
     }
-    mGrallocModule = (gralloc_module_t*)module;
+    mGrallocModule = (gralloc_module_t const*)module;
 
     gralloc_open(module, &mAllocDev);
     if (!mAllocDev) {
@@ -68,7 +68,7 @@
     }
 
     // create a dummy data buffer
-    mDataBuffer = createDataBuffer(mGrallocModule, 0);
+    mDataBuffer = createDataBuffer(0);
     if (!mDataBuffer) {
         DEINIT_AND_RETURN_FALSE("failed to create data buffer");
     }
@@ -142,7 +142,7 @@
 
 DataBuffer* BufferManager::get(buffer_handle_t handle)
 {
-    return createDataBuffer(mGrallocModule, handle);
+    return createDataBuffer(handle);
 }
 
 void BufferManager::put(DataBuffer *buffer)
@@ -168,7 +168,7 @@
     // create a new buffer mapper and add it to pool
     do {
         VTRACE("new buffer, will add it");
-        mapper = createBufferMapper(mGrallocModule, buffer);
+        mapper = createBufferMapper(buffer);
         if (!mapper) {
             ETRACE("failed to allocate mapper");
             break;
@@ -258,7 +258,7 @@
             break;
         }
 
-        mapper = createBufferMapper(mGrallocModule, *buffer);
+        mapper = createBufferMapper(*buffer);
         if (!mapper) {
             ETRACE("failed to create buffer mapper");
             break;
diff --git a/merrifield/include/BufferManager.h b/merrifield/include/BufferManager.h
index ccc8eaa..6bc98bf 100644
--- a/merrifield/include/BufferManager.h
+++ b/merrifield/include/BufferManager.h
@@ -62,12 +62,10 @@
     virtual bool blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
                       const crop_t& destRect, bool filter, bool async) = 0;
 protected:
-    virtual DataBuffer* createDataBuffer(gralloc_module_t *module,
-                                             buffer_handle_t handle) = 0;
-    virtual BufferMapper* createBufferMapper(gralloc_module_t *module,
-                                                 DataBuffer& buffer) = 0;
+    virtual DataBuffer* createDataBuffer(buffer_handle_t handle) = 0;
+    virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0;
 
-    gralloc_module_t *mGrallocModule;
+    gralloc_module_t const* mGrallocModule;
 private:
     enum {
         // make the buffer pool large enough
diff --git a/merrifield/include/pvr/hal/hal_public.h b/merrifield/include/pvr/hal/hal_public.h
index 5575719..e1053bd 100644
--- a/merrifield/include/pvr/hal/hal_public.h
+++ b/merrifield/include/pvr/hal/hal_public.h
@@ -30,20 +30,6 @@
 
 #undef HAL_PIXEL_FORMAT_NV12
 
-typedef struct _IMG_gralloc_module_
-{
-	IMG_gralloc_module_public_t base;
-	void *(*GetDisplayDevice)(struct _IMG_gralloc_module_ *psGrallocModule);
-	int (*GetDisplayStatus)(struct _IMG_gralloc_module_ *psGrallocModule,
-							buffer_handle_t handle, uint32_t *pui32Status);
-	int (*GetBufferCPUAddresses)(gralloc_module_t const* module,
-								 buffer_handle_t buffer,
-								 void **ppvCpuVirtAddr, size_t *puSize);
-	int (*PutBufferCPUAddresses)(gralloc_module_t const* module,
-								 buffer_handle_t buffer);
-}
-IMG_gralloc_module_t;
-
 #define HAL_PIXEL_FORMAT_UYVY         0x107
 #define HAL_PIXEL_FORMAT_INTEL_ZSL    0x109
 #define HAL_PIXEL_FORMAT_NV12         0x3231564E
@@ -53,6 +39,10 @@
 #define HAL_PIXEL_FORMAT_NV12_VED     0x7FA00E00
 #define HAL_PIXEL_FORMAT_NV12_VEDT    0x7FA00F00
 
+#define GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG 108
+#define GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG 109
+
+#define GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG 1000
 #define GRALLOC_MODULE_GET_DISPLAY_STATUS_IMG 1001
 
 #endif /* __HAL_PUBLIC_H */
diff --git a/merrifield/ips/tangier/TngDisplayContext.cpp b/merrifield/ips/tangier/TngDisplayContext.cpp
index fc759dc..f78f20e 100644
--- a/merrifield/ips/tangier/TngDisplayContext.cpp
+++ b/merrifield/ips/tangier/TngDisplayContext.cpp
@@ -43,17 +43,17 @@
     CTRACE();
 
     // open frame buffer device
-    hw_module_t const* module;
-    int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
+    gralloc_module_t const* module;
+    int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
     if (err) {
         ETRACE("failed to load gralloc module, error = %d", err);
         return false;
     }
 
     // init IMG display device
-    mIMGDisplayDevice = (IMG_display_device_public_t *)(((IMG_gralloc_module_t *)module)->GetDisplayDevice((IMG_gralloc_module_t *)module));
-    if (!mIMGDisplayDevice) {
-        ETRACE("failed to get display device");
+    err = module->perform(module, GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG, (void **)&mIMGDisplayDevice);
+    if (err) {
+        ETRACE("failed to get display device, error = %d", err);
         return false;
     }
 
diff --git a/merrifield/ips/tangier/TngGrallocBufferMapper.cpp b/merrifield/ips/tangier/TngGrallocBufferMapper.cpp
index ed43f25..bee4f5e 100644
--- a/merrifield/ips/tangier/TngGrallocBufferMapper.cpp
+++ b/merrifield/ips/tangier/TngGrallocBufferMapper.cpp
@@ -22,10 +22,10 @@
 namespace android {
 namespace intel {
 
-TngGrallocBufferMapper::TngGrallocBufferMapper(IMG_gralloc_module_public_t& module,
+TngGrallocBufferMapper::TngGrallocBufferMapper(gralloc_module_t const& module,
                                                     DataBuffer& buffer)
     : GrallocBufferMapperBase(buffer),
-      mIMGGrallocModule(reinterpret_cast<IMG_gralloc_module_t&>(module)),
+      mGrallocModule(module),
       mBufferObject(0)
 {
     CTRACE();
@@ -122,8 +122,8 @@
 
     CTRACE();
     // get virtual address
-    err = mIMGGrallocModule.GetBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle,
                                   vaddr,
                                   size);
@@ -162,8 +162,8 @@
         }
     }
 
-    err = mIMGGrallocModule.PutBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle);
     return false;
 }
@@ -184,8 +184,8 @@
         mSize[i] = 0;
     }
 
-    err = mIMGGrallocModule.PutBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle);
     if (err) {
         ETRACE("failed to unmap. err = %d", err);
@@ -239,8 +239,8 @@
     }
 
     // get virtual address
-    err = mIMGGrallocModule.GetBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle,
                                   vaddr,
                                   size);
@@ -254,8 +254,8 @@
 
 void TngGrallocBufferMapper::putFbHandle()
 {
-    int err = mIMGGrallocModule.PutBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    int err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle);
     if (err) {
         ETRACE("failed to unmap. err = %d", err);
diff --git a/merrifield/ips/tangier/TngGrallocBufferMapper.h b/merrifield/ips/tangier/TngGrallocBufferMapper.h
index 8360e02..17f34c2 100644
--- a/merrifield/ips/tangier/TngGrallocBufferMapper.h
+++ b/merrifield/ips/tangier/TngGrallocBufferMapper.h
@@ -26,7 +26,7 @@
 
 class TngGrallocBufferMapper : public GrallocBufferMapperBase {
 public:
-    TngGrallocBufferMapper(IMG_gralloc_module_public_t& module,
+    TngGrallocBufferMapper(gralloc_module_t const& module,
                                DataBuffer& buffer);
     virtual ~TngGrallocBufferMapper();
 public:
@@ -41,7 +41,7 @@
     bool mapKhandle();
 
 private:
-    IMG_gralloc_module_t& mIMGGrallocModule;
+    gralloc_module_t const& mGrallocModule;
     void* mBufferObject;
 	native_handle_t* mClonedHandle;
 };
diff --git a/merrifield/platforms/merrifield/PlatfBufferManager.cpp b/merrifield/platforms/merrifield/PlatfBufferManager.cpp
index 13df1a5..881f79d 100644
--- a/merrifield/platforms/merrifield/PlatfBufferManager.cpp
+++ b/merrifield/platforms/merrifield/PlatfBufferManager.cpp
@@ -43,30 +43,25 @@
     BufferManager::deinitialize();
 }
 
-DataBuffer* PlatfBufferManager::createDataBuffer(gralloc_module_t *module,
-                                                 buffer_handle_t handle)
+DataBuffer* PlatfBufferManager::createDataBuffer(buffer_handle_t handle)
 {
     return new TngGrallocBuffer(handle);
 }
 
-BufferMapper* PlatfBufferManager::createBufferMapper(gralloc_module_t *module,
-                                                        DataBuffer& buffer)
+BufferMapper* PlatfBufferManager::createBufferMapper(DataBuffer& buffer)
 {
-    if (!module)
-        return 0;
-
-    return new TngGrallocBufferMapper(*(IMG_gralloc_module_public_t*)module,
-                                        buffer);
+    return new TngGrallocBufferMapper(*mGrallocModule, buffer);
 }
 
 bool PlatfBufferManager::blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
                               const crop_t& destRect, bool filter, bool async)
 
 {
-    IMG_gralloc_module_public_t *imgGrallocModule = (IMG_gralloc_module_public_t *) mGrallocModule;
     int fenceFd;
 
-    if (imgGrallocModule->Blit(imgGrallocModule, srcHandle,
+    if (mGrallocModule->perform(mGrallocModule,
+                                GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG,
+                                srcHandle,
                                 destHandle,
                                 destRect.w, destRect.h, destRect.x,
                                 destRect.y, 0, -1, &fenceFd)) {
diff --git a/merrifield/platforms/merrifield/PlatfBufferManager.h b/merrifield/platforms/merrifield/PlatfBufferManager.h
index 822f484..b45cef5 100644
--- a/merrifield/platforms/merrifield/PlatfBufferManager.h
+++ b/merrifield/platforms/merrifield/PlatfBufferManager.h
@@ -31,9 +31,8 @@
     void deinitialize();
 
 protected:
-    DataBuffer* createDataBuffer(gralloc_module_t *module, buffer_handle_t handle);
-    BufferMapper* createBufferMapper(gralloc_module_t *module,
-                                        DataBuffer& buffer);
+    DataBuffer* createDataBuffer(buffer_handle_t handle);
+    BufferMapper* createBufferMapper(DataBuffer& buffer);
     bool blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
               const crop_t& destRect, bool filter, bool async);
 };
diff --git a/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp b/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp
index 13df1a5..881f79d 100644
--- a/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp
+++ b/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp
@@ -43,30 +43,25 @@
     BufferManager::deinitialize();
 }
 
-DataBuffer* PlatfBufferManager::createDataBuffer(gralloc_module_t *module,
-                                                 buffer_handle_t handle)
+DataBuffer* PlatfBufferManager::createDataBuffer(buffer_handle_t handle)
 {
     return new TngGrallocBuffer(handle);
 }
 
-BufferMapper* PlatfBufferManager::createBufferMapper(gralloc_module_t *module,
-                                                        DataBuffer& buffer)
+BufferMapper* PlatfBufferManager::createBufferMapper(DataBuffer& buffer)
 {
-    if (!module)
-        return 0;
-
-    return new TngGrallocBufferMapper(*(IMG_gralloc_module_public_t*)module,
-                                        buffer);
+    return new TngGrallocBufferMapper(*mGrallocModule, buffer);
 }
 
 bool PlatfBufferManager::blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
                               const crop_t& destRect, bool filter, bool async)
 
 {
-    IMG_gralloc_module_public_t *imgGrallocModule = (IMG_gralloc_module_public_t *) mGrallocModule;
     int fenceFd;
 
-    if (imgGrallocModule->Blit(imgGrallocModule, srcHandle,
+    if (mGrallocModule->perform(mGrallocModule,
+                                GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG,
+                                srcHandle,
                                 destHandle,
                                 destRect.w, destRect.h, destRect.x,
                                 destRect.y, 0, -1, &fenceFd)) {
diff --git a/merrifield/platforms/merrifield_plus/PlatfBufferManager.h b/merrifield/platforms/merrifield_plus/PlatfBufferManager.h
index 822f484..b45cef5 100644
--- a/merrifield/platforms/merrifield_plus/PlatfBufferManager.h
+++ b/merrifield/platforms/merrifield_plus/PlatfBufferManager.h
@@ -31,9 +31,8 @@
     void deinitialize();
 
 protected:
-    DataBuffer* createDataBuffer(gralloc_module_t *module, buffer_handle_t handle);
-    BufferMapper* createBufferMapper(gralloc_module_t *module,
-                                        DataBuffer& buffer);
+    DataBuffer* createDataBuffer(buffer_handle_t handle);
+    BufferMapper* createBufferMapper(DataBuffer& buffer);
     bool blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
               const crop_t& destRect, bool filter, bool async);
 };
diff --git a/moorefield_hdmi/common/buffers/BufferManager.cpp b/moorefield_hdmi/common/buffers/BufferManager.cpp
index ca0de39..a426c5a 100644
--- a/moorefield_hdmi/common/buffers/BufferManager.cpp
+++ b/moorefield_hdmi/common/buffers/BufferManager.cpp
@@ -60,7 +60,7 @@
     if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module)) {
         DEINIT_AND_RETURN_FALSE("failed to get gralloc module");
     }
-    mGrallocModule = (gralloc_module_t*)module;
+    mGrallocModule = (gralloc_module_t const*)module;
 
     gralloc_open(module, &mAllocDev);
     if (!mAllocDev) {
@@ -68,7 +68,7 @@
     }
 
     // create a dummy data buffer
-    mDataBuffer = createDataBuffer(mGrallocModule, 0);
+    mDataBuffer = createDataBuffer(0);
     if (!mDataBuffer) {
         DEINIT_AND_RETURN_FALSE("failed to create data buffer");
     }
@@ -142,7 +142,7 @@
 
 DataBuffer* BufferManager::get(uint32_t handle)
 {
-    return createDataBuffer(mGrallocModule, handle);
+    return createDataBuffer(handle);
 }
 
 void BufferManager::put(DataBuffer *buffer)
@@ -168,7 +168,7 @@
     // create a new buffer mapper and add it to pool
     do {
         VLOGTRACE("new buffer, will add it");
-        mapper = createBufferMapper(mGrallocModule, buffer);
+        mapper = createBufferMapper(buffer);
         if (!mapper) {
             ELOGTRACE("failed to allocate mapper");
             break;
@@ -258,7 +258,7 @@
             break;
         }
 
-        mapper = createBufferMapper(mGrallocModule, *buffer);
+        mapper = createBufferMapper(*buffer);
         if (!mapper) {
             ELOGTRACE("failed to create buffer mapper");
             break;
diff --git a/moorefield_hdmi/common/planes/DisplayPlane.cpp b/moorefield_hdmi/common/planes/DisplayPlane.cpp
index 1251c29..a748b13 100755
--- a/moorefield_hdmi/common/planes/DisplayPlane.cpp
+++ b/moorefield_hdmi/common/planes/DisplayPlane.cpp
@@ -217,7 +217,10 @@
     if (index < 0) {
         VLOGTRACE("unmapped buffer, mapping...");
         mapper = mapBuffer(buffer);
-        if (!mapper) {
+        // Skip the unsupported format in case that a new gralloc buffer was
+        // created and added into the mapped list, triggered by SoftwareRender
+        // with color conversion from known formats to YV12.
+        if (!mapper || mapper->getFormat() == HAL_PIXEL_FORMAT_YV12) {
             ELOGTRACE("failed to map buffer %#x", handle);
             bm->unlockDataBuffer(buffer);
             return false;
diff --git a/moorefield_hdmi/include/BufferManager.h b/moorefield_hdmi/include/BufferManager.h
index 20dc634..0897310 100755
--- a/moorefield_hdmi/include/BufferManager.h
+++ b/moorefield_hdmi/include/BufferManager.h
@@ -62,12 +62,10 @@
     virtual bool blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandle,
                                   crop_t& srcCrop, uint32_t async) = 0;
 protected:
-    virtual DataBuffer* createDataBuffer(gralloc_module_t *module,
-                                             uint32_t handle) = 0;
-    virtual BufferMapper* createBufferMapper(gralloc_module_t *module,
-                                                 DataBuffer& buffer) = 0;
+    virtual DataBuffer* createDataBuffer(uint32_t handle) = 0;
+    virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0;
 
-    gralloc_module_t *mGrallocModule;
+    gralloc_module_t const* mGrallocModule;
 private:
     enum {
         // make the buffer pool large enough
diff --git a/moorefield_hdmi/include/pvr/hal/hal_public.h b/moorefield_hdmi/include/pvr/hal/hal_public.h
index 5575719..04939a0 100644
--- a/moorefield_hdmi/include/pvr/hal/hal_public.h
+++ b/moorefield_hdmi/include/pvr/hal/hal_public.h
@@ -30,21 +30,8 @@
 
 #undef HAL_PIXEL_FORMAT_NV12
 
-typedef struct _IMG_gralloc_module_
-{
-	IMG_gralloc_module_public_t base;
-	void *(*GetDisplayDevice)(struct _IMG_gralloc_module_ *psGrallocModule);
-	int (*GetDisplayStatus)(struct _IMG_gralloc_module_ *psGrallocModule,
-							buffer_handle_t handle, uint32_t *pui32Status);
-	int (*GetBufferCPUAddresses)(gralloc_module_t const* module,
-								 buffer_handle_t buffer,
-								 void **ppvCpuVirtAddr, size_t *puSize);
-	int (*PutBufferCPUAddresses)(gralloc_module_t const* module,
-								 buffer_handle_t buffer);
-}
-IMG_gralloc_module_t;
-
 #define HAL_PIXEL_FORMAT_UYVY         0x107
+#define HAL_PIXEL_FORMAT_INTEL_YV12   0x108
 #define HAL_PIXEL_FORMAT_INTEL_ZSL    0x109
 #define HAL_PIXEL_FORMAT_NV12         0x3231564E
 #define HAL_PIXEL_FORMAT_NV21         0x3132564E
@@ -53,6 +40,10 @@
 #define HAL_PIXEL_FORMAT_NV12_VED     0x7FA00E00
 #define HAL_PIXEL_FORMAT_NV12_VEDT    0x7FA00F00
 
+#define GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG 108
+#define GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG 109
+
+#define GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG 1000
 #define GRALLOC_MODULE_GET_DISPLAY_STATUS_IMG 1001
 
 #endif /* __HAL_PUBLIC_H */
diff --git a/moorefield_hdmi/ips/anniedale/AnnOverlayPlane.cpp b/moorefield_hdmi/ips/anniedale/AnnOverlayPlane.cpp
index eca4d1e..a3e92a7 100755
--- a/moorefield_hdmi/ips/anniedale/AnnOverlayPlane.cpp
+++ b/moorefield_hdmi/ips/anniedale/AnnOverlayPlane.cpp
@@ -175,19 +175,6 @@
 
     uint32_t format = mapper.getFormat();
     uint32_t gttOffsetInBytes = (mapper.getGttOffsetInPage(0) << 12);
-
-    if (format == HAL_PIXEL_FORMAT_BGRX_8888 ||
-        format == HAL_PIXEL_FORMAT_BGRA_8888) {
-        backBuffer->OCMD = 1 << 10;
-        // by pass YUV->RGB conversion, 8-bit output
-        backBuffer->OCONFIG |= (0x1 << 4) | (0x1 << 3);
-        backBuffer->OSTART_0Y = gttOffsetInBytes;
-        backBuffer->OSTART_1Y = gttOffsetInBytes;
-        backBuffer->OBUF_0Y = 0;
-        backBuffer->OBUF_1Y = 0;
-        return true;
-    }
-
     uint32_t yStride = mapper.getStride().yuv.yStride;
     uint32_t uvStride = mapper.getStride().yuv.uvStride;
     uint32_t h = mapper.getHeight();
@@ -198,6 +185,18 @@
     uint32_t uTileOffsetX, uTileOffsetY;
     uint32_t vTileOffsetX, vTileOffsetY;
 
+    if (format == HAL_PIXEL_FORMAT_BGRX_8888 ||
+        format == HAL_PIXEL_FORMAT_BGRA_8888) {
+        // set source format XRGB
+        backBuffer->OCMD = OVERLAY_FORMAT_PLANAR_XRGB;
+        // by pass YUV->RGB conversion, 8-bit output
+        backBuffer->OCONFIG |= OVERLAY_CONFIG_BYPASS_DISABLE;
+        backBuffer->OSTART_0Y = gttOffsetInBytes;
+        backBuffer->OBUF_0Y = srcX * XRGB_BPP + srcY *
+            mapper.getStride().rgb.stride;
+        return true;
+    }
+
     // clear original format setting
     backBuffer->OCMD &= ~(0xf << 10);
     backBuffer->OCMD &= ~OVERLAY_MEMORY_LAYOUT_TILED;
@@ -226,6 +225,18 @@
         vTileOffsetY = uTileOffsetY;
         backBuffer->OCMD |= OVERLAY_FORMAT_PLANAR_YUV420;
         break;
+    case HAL_PIXEL_FORMAT_INTEL_YV12:    // INTEL_YV12
+        // The height of HAL_PIXEL_FORMAT_INTEL_YV12 gralloc buffer has been aligned with 32 pixels.
+        vSurface = ySurface + yStride * align_to(h, 32);
+        uSurface = vSurface + uvStride * (align_to(h, 32) / 2);
+        yTileOffsetX = srcX;
+        yTileOffsetY = srcY;
+        uTileOffsetX = srcX / 2;
+        uTileOffsetY = srcY / 2;
+        vTileOffsetX = uTileOffsetX;
+        vTileOffsetY = uTileOffsetY;
+        backBuffer->OCMD |= OVERLAY_FORMAT_PLANAR_YUV420;
+        break;
     case HAL_PIXEL_FORMAT_I420:    // I420
         uSurface = ySurface + yStride * h;
         vSurface = uSurface + uvStride * (h / 2);
@@ -339,8 +350,9 @@
 
     backBuffer->SWIDTH = mapper.getCrop().w;
     backBuffer->SHEIGHT = mapper.getCrop().h;
-    backBuffer->SWIDTHSW = calculateSWidthSW(0, mapper.getCrop().w) << 2;
-    backBuffer->OSTRIDE = mapper.getStride().rgb.stride & (~0x3f);
+    backBuffer->OSTRIDE = mapper.getStride().rgb.stride;
+    backBuffer->SWIDTHSW = calculateSWidthSW(backBuffer->OBUF_0Y,
+            backBuffer->OSTRIDE) << 2;
     return true;
 };
 
@@ -404,13 +416,6 @@
     uint32_t dstHeight = h;
     uint32_t format = mapper.getFormat();
 
-    if (format == HAL_PIXEL_FORMAT_BGRX_8888 ||
-        format == HAL_PIXEL_FORMAT_BGRA_8888) {
-        backBuffer->YRGBSCALE = 1 << 15 | 0 << 3 | 0 << 20;
-        backBuffer->UVSCALEV = (1 << 16);
-        return true;
-    }
-
     if (mBobDeinterlace && !mTransform)
         deinterlace_factor = 2;
 
@@ -436,6 +441,10 @@
         srcWidth = tmp;
     }
 
+    if (format == HAL_PIXEL_FORMAT_BGRX_8888 ||
+            format == HAL_PIXEL_FORMAT_BGRA_8888)
+        uvratio = 1;
+
      // Y down-scale factor as a multiple of 4096
     if (srcWidth == dstWidth && srcHeight == dstHeight) {
         xscaleFract = (1 << 12);
diff --git a/moorefield_hdmi/ips/anniedale/PlaneCapabilities.cpp b/moorefield_hdmi/ips/anniedale/PlaneCapabilities.cpp
index 98901e7..54b4aee 100755
--- a/moorefield_hdmi/ips/anniedale/PlaneCapabilities.cpp
+++ b/moorefield_hdmi/ips/anniedale/PlaneCapabilities.cpp
@@ -25,6 +25,9 @@
 #define SPRITE_PLANE_MAX_STRIDE_TILED      16384
 #define SPRITE_PLANE_MAX_STRIDE_LINEAR     16384
 
+#define SPRITE_PLANE_MAX_WIDTH             4096
+#define SPRITE_PLANE_MAX_HEIGHT            4096
+
 #define OVERLAY_PLANE_MAX_STRIDE_PACKED    4096
 #define OVERLAY_PLANE_MAX_STRIDE_LINEAR    8192
 
@@ -58,7 +61,7 @@
                 WLOGTRACE("180 degree rotation is not supported yet");
             }
             return trans ? false : true;
-        case HAL_PIXEL_FORMAT_YV12:
+        case HAL_PIXEL_FORMAT_INTEL_YV12:
             return trans ? false: true;
         case HAL_PIXEL_FORMAT_NV12:
         case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar:
@@ -101,7 +104,7 @@
         }
     } else if (planeType == DisplayPlane::PLANE_OVERLAY) {
         switch (format) {
-        case HAL_PIXEL_FORMAT_YV12:
+        case HAL_PIXEL_FORMAT_INTEL_YV12:
         case HAL_PIXEL_FORMAT_I420:
         case HAL_PIXEL_FORMAT_NV12:
         case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar:
@@ -173,6 +176,14 @@
     dstH = dest.bottom - dest.top;
 
     if (planeType == DisplayPlane::PLANE_SPRITE || planeType == DisplayPlane::PLANE_PRIMARY) {
+        if ((dstW - 1) <= 0 || (dstH - 1) <= 0 ||
+            (dstW - 1) >= SPRITE_PLANE_MAX_WIDTH ||
+            (dstH - 1) >= SPRITE_PLANE_MAX_HEIGHT) {
+            // Should check size in isSizeSupported().
+            DLOGTRACE("invalid destination size: %d x %d, fall back to GLES", dstW, dstH);
+            return false;
+        }
+
         // no scaling is supported
         return ((srcW == dstW) && (srcH == dstH)) ? true : false;
 
diff --git a/moorefield_hdmi/ips/common/GrallocBufferBase.cpp b/moorefield_hdmi/ips/common/GrallocBufferBase.cpp
index ed2452a..346d62f 100644
--- a/moorefield_hdmi/ips/common/GrallocBufferBase.cpp
+++ b/moorefield_hdmi/ips/common/GrallocBufferBase.cpp
@@ -47,6 +47,7 @@
     // setup stride
     switch (mFormat) {
     case HAL_PIXEL_FORMAT_YV12:
+    case HAL_PIXEL_FORMAT_INTEL_YV12:
     case HAL_PIXEL_FORMAT_I420:
         uint32_t yStride_align;
         yStride_align = DisplayQuery::getOverlayLumaStrideAlignment(mFormat);
diff --git a/moorefield_hdmi/ips/common/OverlayHardware.h b/moorefield_hdmi/ips/common/OverlayHardware.h
index a06f304..df5c946 100644
--- a/moorefield_hdmi/ips/common/OverlayHardware.h
+++ b/moorefield_hdmi/ips/common/OverlayHardware.h
@@ -35,6 +35,7 @@
 #define N_VERT_UV_TAPS                  3
 #define N_PHASES                        17
 #define MAX_TAPS                        5
+#define XRGB_BPP                        4
 
 // Filter cutoff frequency limits.
 #define MIN_CUTOFF_FREQ                 1.0
@@ -56,6 +57,7 @@
 
 // overlay register values
 #define OVERLAY_FORMAT_MASK             (0xf << 10)
+#define OVERLAY_FORMAT_PLANAR_XRGB      (0x1 << 10)
 #define OVERLAY_FORMAT_PACKED_YUV422    (0x8 << 10)
 #define OVERLAY_FORMAT_PLANAR_NV12_1    (0x7 << 10)
 #define OVERLAY_FORMAT_PLANAR_NV12_2    (0xb << 10)
@@ -77,6 +79,8 @@
 #define OVERLAY_MIRRORING_VERTIACAL     (0x2 << 17)
 #define OVERLAY_MIRRORING_BOTH          (0x3 << 17)
 
+#define OVERLAY_CONFIG_BYPASS_DISABLE   (0x1 << 4)
+
 #define BUF_TYPE                (0x1<<5)
 #define BUF_TYPE_FRAME          (0x0<<5)
 #define BUF_TYPE_FIELD          (0x1<<5)
diff --git a/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp b/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp
index 5ba55c8..a0dbdba 100755
--- a/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp
+++ b/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp
@@ -378,6 +378,7 @@
         // calculate stride
         switch (format) {
         case HAL_PIXEL_FORMAT_YV12:
+        case HAL_PIXEL_FORMAT_INTEL_YV12:
         case HAL_PIXEL_FORMAT_I420:
             uint32_t yStride_align;
             yStride_align = DisplayQuery::getOverlayLumaStrideAlignment(grallocMapper.getFormat());
@@ -696,6 +697,12 @@
         backBuffer->OBUF_0U = backBuffer->OBUF_0V + (uvStride * (h / 2));
         backBuffer->OCMD |= OVERLAY_FORMAT_PLANAR_YUV420;
         break;
+    case HAL_PIXEL_FORMAT_INTEL_YV12:    // INTEL_YV12
+        backBuffer->OBUF_0Y = 0;
+        backBuffer->OBUF_0V = yStride * align_to(h, 32);
+        backBuffer->OBUF_0U = backBuffer->OBUF_0V + (uvStride * (align_to(h, 32) / 2));
+        backBuffer->OCMD |= OVERLAY_FORMAT_PLANAR_YUV420;
+        break;
     case HAL_PIXEL_FORMAT_I420:    // I420
         backBuffer->OBUF_0Y = 0;
         backBuffer->OBUF_0U = yStride * h;
@@ -800,6 +807,7 @@
 
     switch (format) {
     case HAL_PIXEL_FORMAT_YV12:              // YV12
+    case HAL_PIXEL_FORMAT_INTEL_YV12:        // INTEL_YV12
     case HAL_PIXEL_FORMAT_I420:              // I420
     case HAL_PIXEL_FORMAT_NV12:              // NV12
     case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar:          // NV12
diff --git a/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp b/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp
index 285f408..e755988 100755
--- a/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp
+++ b/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp
@@ -42,17 +42,17 @@
     CTRACE();
 
     // open frame buffer device
-    hw_module_t const* module;
-    int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
+    gralloc_module_t const* module;
+    int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
     if (err) {
         ELOGTRACE("failed to load gralloc module, error = %d", err);
         return false;
     }
 
     // init IMG display device
-    mIMGDisplayDevice = (IMG_display_device_public_t *)(((IMG_gralloc_module_t *)module)->GetDisplayDevice((IMG_gralloc_module_t *)module));
-    if (!mIMGDisplayDevice) {
-        ELOGTRACE("failed to get display device");
+    err = module->perform(module, GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG, (void **)&mIMGDisplayDevice);
+    if (err) {
+        ELOGTRACE("failed to get display device, error = %d", err);
         return false;
     }
 
diff --git a/moorefield_hdmi/ips/tangier/TngDisplayQuery.cpp b/moorefield_hdmi/ips/tangier/TngDisplayQuery.cpp
index 13350aa..1a8adb2 100755
--- a/moorefield_hdmi/ips/tangier/TngDisplayQuery.cpp
+++ b/moorefield_hdmi/ips/tangier/TngDisplayQuery.cpp
@@ -32,7 +32,7 @@
     case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled:
     // Expand format to support the case: Software decoder + HW rendering
     // Only VP9 use this foramt now
-    case HAL_PIXEL_FORMAT_YV12:
+    case HAL_PIXEL_FORMAT_INTEL_YV12:
         return true;
     default:
         return false;
@@ -44,6 +44,7 @@
     // both luma and chroma stride need to be 64-byte aligned for overlay
     switch (format) {
     case HAL_PIXEL_FORMAT_YV12:
+    case HAL_PIXEL_FORMAT_INTEL_YV12:
     case HAL_PIXEL_FORMAT_I420:
         // for these two formats, chroma stride is calculated as half of luma stride
         // so luma stride needs to be 128-byte aligned.
diff --git a/moorefield_hdmi/ips/tangier/TngGrallocBuffer.cpp b/moorefield_hdmi/ips/tangier/TngGrallocBuffer.cpp
index 47d36d4..5984ea5 100644
--- a/moorefield_hdmi/ips/tangier/TngGrallocBuffer.cpp
+++ b/moorefield_hdmi/ips/tangier/TngGrallocBuffer.cpp
@@ -15,6 +15,7 @@
 */
 #include <common/utils/HwcTrace.h>
 #include <ips/tangier/TngGrallocBuffer.h>
+#include <khronos/openmax/OMX_IntelVideoExt.h>
 
 namespace android {
 namespace intel {
@@ -47,7 +48,11 @@
     }
 
     mFormat = grallocHandle->iFormat;
-    mWidth = grallocHandle->iWidth;
+    if (mFormat == OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar ||
+        mFormat == OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled) {
+        mWidth = grallocHandle->aiStride[0];
+    } else
+        mWidth = grallocHandle->iWidth;
     mHeight = grallocHandle->iHeight;
     mUsage = grallocHandle->usage;
     mKey = grallocHandle->ui64Stamp;
diff --git a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp
index 1495379..91e6192 100644
--- a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp
+++ b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp
@@ -22,10 +22,10 @@
 namespace android {
 namespace intel {
 
-TngGrallocBufferMapper::TngGrallocBufferMapper(IMG_gralloc_module_public_t& module,
+TngGrallocBufferMapper::TngGrallocBufferMapper(gralloc_module_t const& module,
                                                     DataBuffer& buffer)
     : GrallocBufferMapperBase(buffer),
-      mIMGGrallocModule(reinterpret_cast<IMG_gralloc_module_t&>(module)),
+      mGrallocModule(module),
       mBufferObject(0)
 {
     CTRACE();
@@ -122,8 +122,8 @@
 
     CTRACE();
     // get virtual address
-    err = mIMGGrallocModule.GetBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle,
                                   vaddr,
                                   size);
@@ -162,8 +162,8 @@
         }
     }
 
-    err = mIMGGrallocModule.PutBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle);
     return false;
 }
@@ -184,8 +184,8 @@
         mSize[i] = 0;
     }
 
-    err = mIMGGrallocModule.PutBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle);
     if (err) {
         ELOGTRACE("failed to unmap. err = %d", err);
@@ -239,8 +239,8 @@
     }
 
     // get virtual address
-    err = mIMGGrallocModule.GetBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle,
                                   vaddr,
                                   size);
@@ -254,8 +254,8 @@
 
 void TngGrallocBufferMapper::putFbHandle()
 {
-    int err = mIMGGrallocModule.PutBufferCPUAddresses(
-                                  (gralloc_module_t const*)&mIMGGrallocModule,
+    int err = mGrallocModule.perform(&mGrallocModule,
+                                  GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
                                   (buffer_handle_t)mClonedHandle);
     if (err) {
         ELOGTRACE("failed to unmap. err = %d", err);
diff --git a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h
index e3c15a8..aaf6d4a 100644
--- a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h
+++ b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h
@@ -25,7 +25,7 @@
 
 class TngGrallocBufferMapper : public GrallocBufferMapperBase {
 public:
-    TngGrallocBufferMapper(IMG_gralloc_module_public_t& module,
+    TngGrallocBufferMapper(gralloc_module_t const& module,
                                DataBuffer& buffer);
     virtual ~TngGrallocBufferMapper();
 public:
@@ -40,7 +40,7 @@
     bool mapKhandle();
 
 private:
-    IMG_gralloc_module_t& mIMGGrallocModule;
+    gralloc_module_t const& mGrallocModule;
     void* mBufferObject;
     native_handle_t* mClonedHandle;
 };
diff --git a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp
index 69a30db..0a506d0 100755
--- a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp
+++ b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp
@@ -43,30 +43,25 @@
     BufferManager::deinitialize();
 }
 
-DataBuffer* PlatfBufferManager::createDataBuffer(gralloc_module_t * /* module */,
-        uint32_t handle)
+DataBuffer* PlatfBufferManager::createDataBuffer(uint32_t handle)
 {
     return new TngGrallocBuffer(handle);
 }
 
-BufferMapper* PlatfBufferManager::createBufferMapper(gralloc_module_t *module,
-                                                        DataBuffer& buffer)
+BufferMapper* PlatfBufferManager::createBufferMapper(DataBuffer& buffer)
 {
-    if (!module)
-        return 0;
-
-    return new TngGrallocBufferMapper(*(IMG_gralloc_module_public_t*)module,
-                                        buffer);
+    return new TngGrallocBufferMapper(*mGrallocModule, buffer);
 }
 
 bool PlatfBufferManager::blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandle,
                                   crop_t& srcCrop, uint32_t async)
 
 {
-    IMG_gralloc_module_public_t *imgGrallocModule = (IMG_gralloc_module_public_t *) mGrallocModule;
     int fenceFd;
 
-    if (imgGrallocModule->Blit(imgGrallocModule, (buffer_handle_t)srcHandle,
+    if (mGrallocModule->perform(mGrallocModule,
+                                GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG,
+                                (buffer_handle_t)srcHandle,
                                 (buffer_handle_t)dstHandle,
                                 srcCrop.w, srcCrop.h, srcCrop.x,
                                 srcCrop.y, 0, -1, &fenceFd)) {
diff --git a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.h b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.h
index 11ff950..d2c21ae 100755
--- a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.h
+++ b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.h
@@ -31,9 +31,8 @@
     void deinitialize();
 
 protected:
-    DataBuffer* createDataBuffer(gralloc_module_t *module, uint32_t handle);
-    BufferMapper* createBufferMapper(gralloc_module_t *module,
-                                        DataBuffer& buffer);
+    DataBuffer* createDataBuffer(uint32_t handle);
+    BufferMapper* createBufferMapper(DataBuffer& buffer);
     bool blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandle,
                                   crop_t& srcCrop, uint32_t async);
 };
