diff --git a/exynos4/hal/include/gralloc_priv.h b/exynos4/hal/include/gralloc_priv.h
index 871a84f..8ffd161 100644
--- a/exynos4/hal/include/gralloc_priv.h
+++ b/exynos4/hal/include/gralloc_priv.h
@@ -47,17 +47,6 @@
 
 #define GRALLOC_ARM_UMP_MODULE 1
 
-enum {
-    /* SEC Private usage , for HWC to set HDMI S3D format */
-    /* HDMI should display this buffer as S3D SBS LR/RL*/
-    GRALLOC_USAGE_PRIVATE_SBS_LR        = 0x00400000,
-    GRALLOC_USAGE_PRIVATE_SBS_RL        = 0x00200000,
-
-    /* HDMI should display this buffer as 3D TB LR/RL*/
-    GRALLOC_USAGE_PRIVATE_TB_LR         = 0x00100000,
-    GRALLOC_USAGE_PRIVATE_TB_RL         = 0x00080000,
-};
-
 struct private_handle_t;
 
 struct private_module_t {
diff --git a/exynos4/hal/libgralloc_ump/Android.mk b/exynos4/hal/libgralloc_ump/Android.mk
index 005c817..9fa7352 100644
--- a/exynos4/hal/libgralloc_ump/Android.mk
+++ b/exynos4/hal/libgralloc_ump/Android.mk
@@ -26,7 +26,7 @@
 include $(CLEAR_VARS)
 LOCAL_PRELINK_MODULE := false
 LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw 
-LOCAL_SHARED_LIBRARIES := liblog libcutils libUMP libGLESv1_CM libsamsungion
+LOCAL_SHARED_LIBRARIES := liblog libcutils libUMP libGLESv1_CM libsecion
 
 # Include the UMP header files
 LOCAL_C_INCLUDES += $(LOCAL_PATH)/../include
@@ -36,8 +36,9 @@
 	alloc_device.cpp \
 	framebuffer_device.cpp
 
-LOCAL_MODULE_TAGS := eng
-LOCAL_MODULE := gralloc.$(TARGET_DEVICE)
+LOCAL_MODULE := gralloc.$(TARGET_BOARD_PLATFORM)
+LOCAL_MODULE_TAGS := optional
+
 LOCAL_CFLAGS:= -DLOG_TAG=\"gralloc\" -DGRALLOC_32_BITS -DSTANDARD_LINUX_SCREEN
 #LOCAL_CFLAGS+= -DMALI_VSYNC_EVENT_REPORT_ENABLE
 
diff --git a/exynos4/hal/libgralloc_ump/alloc_device.cpp b/exynos4/hal/libgralloc_ump/alloc_device.cpp
index 953f017..42a14e7 100644
--- a/exynos4/hal/libgralloc_ump/alloc_device.cpp
+++ b/exynos4/hal/libgralloc_ump/alloc_device.cpp
@@ -80,6 +80,9 @@
 #define OMX_COLOR_FormatYUV420SemiPlanar 0x15
 #endif
 
+#define PFX_NODE_MEM   "/dev/exynos-mem"
+static int gMemfd = 0;
+
 bool ion_dev_open = true;
 static pthread_mutex_t l_surface= PTHREAD_MUTEX_INITIALIZER;
 static int buffer_offset = 0;
@@ -152,6 +155,19 @@
         hnd->voffset = (EXYNOS4_ALIGN((EXYNOS4_ALIGN((hnd->width >> 1), 16) * EXYNOS4_ALIGN((hnd->height >> 1), 16)), 4096));
         buffer_offset += size;
 
+        if (gMemfd == 0) {
+            gMemfd = open(PFX_NODE_MEM, O_RDWR);
+            if (gMemfd < 0) {
+                ALOGE("%s:: %s exynos-mem open error\n", __func__, PFX_NODE_MEM);
+                return false;
+            }
+        }
+
+        size_t size = FIMC1_RESERVED_SIZE * 1024;
+
+        void *mappedAddress = mmap(0, size,
+               PROT_READ|PROT_WRITE, MAP_SHARED, gMemfd, (hnd->paddr - hnd->offset));
+        hnd->base = intptr_t(mappedAddress) + hnd->offset;
         return 0;
     } else {
         ion_buffer ion_fd = 0;
@@ -229,8 +245,13 @@
                         hnd->height = h;
                         hnd->bpp = bpp;
                         hnd->stride = stride;
-                        hnd->uoffset = ((EXYNOS4_ALIGN(hnd->width, 16) * EXYNOS4_ALIGN(hnd->height, 16)));
-                        hnd->voffset = ((EXYNOS4_ALIGN((hnd->width >> 1), 16) * EXYNOS4_ALIGN((hnd->height >> 1), 16)));
+                        if(hnd->format == HAL_PIXEL_FORMAT_YV12) {
+                            hnd->uoffset = ((EXYNOS4_ALIGN(hnd->width, 16) * hnd->height));
+                            hnd->voffset = ((EXYNOS4_ALIGN((hnd->width >> 1), 16) * (hnd->height >> 1)));
+                        } else {
+                            hnd->uoffset = ((EXYNOS4_ALIGN(hnd->width, 16) * EXYNOS4_ALIGN(hnd->height, 16)));
+                            hnd->voffset = ((EXYNOS4_ALIGN((hnd->width >> 1), 16) * EXYNOS4_ALIGN((hnd->height >> 1), 16)));
+                        }
                         return 0;
                     } else {
                         ALOGE("gralloc_alloc_buffer() failed to allocate handle");
@@ -355,7 +376,7 @@
         case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED:
         case OMX_COLOR_FormatYUV420Planar:
         case OMX_COLOR_FormatYUV420SemiPlanar:
-            size = stride * vstride * 2;
+            size = stride * vstride + EXYNOS4_ALIGN((w / 2), 16) * EXYNOS4_ALIGN((h / 2), 16) * 2;
             if(usage & GRALLOC_USAGE_HW_FIMC1)
                 size += PAGE_SIZE * 2;
             break;
@@ -424,6 +445,15 @@
         int index = (hnd->base - m->framebuffer->base) / bufferSize;
         m->bufferMask &= ~(1<<index);
         close(hnd->fd);
+    } else if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_IOCTL) {
+        void* base = (void*)(intptr_t(hnd->base) - hnd->offset);
+        size_t size = FIMC1_RESERVED_SIZE * 1024;
+        if (munmap(base, size) < 0)
+            ALOGE("Could not unmap %s", strerror(errno));
+        if (0 < gMemfd) {
+            close(gMemfd);
+            gMemfd = 0;
+        }
     } else if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_UMP) {
 #ifdef USE_PARTIAL_FLUSH
         if (!release_rect((int)hnd->ump_id))
diff --git a/exynos4/hal/libgralloc_ump/framebuffer_device.cpp b/exynos4/hal/libgralloc_ump/framebuffer_device.cpp
index 03c2606..2059af8 100644
--- a/exynos4/hal/libgralloc_ump/framebuffer_device.cpp
+++ b/exynos4/hal/libgralloc_ump/framebuffer_device.cpp
@@ -418,18 +418,28 @@
 
     alloc_device_t* gralloc_device;
     status = gralloc_open(module, &gralloc_device);
-    if (status < 0)
-        return status;
-
-    private_module_t* m = (private_module_t*)module;
-    status = init_frame_buffer(m);
     if (status < 0) {
-        gralloc_close(gralloc_device);
+        ALOGE("Fail to Open gralloc device");
         return status;
     }
 
     /* initialize our state here */
-    framebuffer_device_t *dev = new framebuffer_device_t;
+    framebuffer_device_t *dev = (framebuffer_device_t *)malloc(sizeof(framebuffer_device_t));
+    if (dev == NULL) {
+        ALOGE("Failed to allocate memory for dev");
+        gralloc_close(gralloc_device);
+        return status;
+    }    
+
+    private_module_t* m = (private_module_t*)module;
+    status = init_frame_buffer(m);
+    if (status < 0) {
+        ALOGE("Fail to init framebuffer");
+        free(dev);
+        gralloc_close(gralloc_device);
+        return status;
+    }
+
     memset(dev, 0, sizeof(*dev));
 
     /* initialize the procs */
diff --git a/exynos4/hal/libgralloc_ump/gralloc_module.cpp b/exynos4/hal/libgralloc_ump/gralloc_module.cpp
index 16fe2ec..f448f7b 100644
--- a/exynos4/hal/libgralloc_ump/gralloc_module.cpp
+++ b/exynos4/hal/libgralloc_ump/gralloc_module.cpp
@@ -335,6 +335,10 @@
                 gralloc_unmap(module, handle);
 
             pthread_mutex_unlock(&s_map_lock);
+            if (0 < gMemfd) {
+                close(gMemfd);
+                gMemfd = 0;
+            }
             return 0;
         } else if (hnd->flags & private_handle_t::PRIV_FLAGS_USES_ION) {
             ump_mapped_pointer_release((ump_handle)hnd->ump_mem_handle);
