diff --git a/exynos4/hal/libhwcomposer/SecHWC.cpp b/exynos4/hal/libhwcomposer/SecHWC.cpp
index d439216..1831125 100644
--- a/exynos4/hal/libhwcomposer/SecHWC.cpp
+++ b/exynos4/hal/libhwcomposer/SecHWC.cpp
@@ -527,40 +527,45 @@
 static int hwc_prepare(hwc_composer_device_1_t *dev, size_t numDisplays, hwc_display_contents_1_t** displays)
 {
 
-    for (uint32_t i = 0; i < numDisplays; i++) {
-        hwc_display_contents_1_t *list = displays[i];  
-        struct hwc_context_t* ctx = (struct hwc_context_t*)dev;
-        int overlay_win_cnt = 0;
-        int compositionType = 0;
-        int ret;
+    struct hwc_context_t* ctx = (struct hwc_context_t*)dev;
+    int overlay_win_cnt = 0;
+    int compositionType = 0;
+    int ret;
+
+    // Compat
+    hwc_display_contents_1_t* list = NULL;
+    if (numDisplays > 0) {
+        list = displays[0];
+    }
+
 #if defined(BOARD_USES_HDMI)
-        android::SecHdmiClient *mHdmiClient = android::SecHdmiClient::getInstance();
-        int hdmi_cable_status = (int)mHdmiClient->getHdmiCableStatus();
-        
-        ctx->hdmi_cable_status = hdmi_cable_status;
+    android::SecHdmiClient *mHdmiClient = android::SecHdmiClient::getInstance();
+    int hdmi_cable_status = (int)mHdmiClient->getHdmiCableStatus();
+
+    ctx->hdmi_cable_status = hdmi_cable_status;
 #endif
         
 #ifdef SKIP_DUMMY_UI_LAY_DRAWING
-        if ((list && (!(list->flags & HWC_GEOMETRY_CHANGED))) &&
-            (ctx->num_of_hwc_layer > 0)) {
-            get_hwc_ui_lay_skipdraw_decision(ctx, list);
-            return 0;
-        }
-        ctx->fb_lay_skip_initialized = 0;
-        ctx->num_of_fb_lay_skip = 0;
+    if ((list && (!(list->flags & HWC_GEOMETRY_CHANGED))) &&
+	(ctx->num_of_hwc_layer > 0)) {
+      get_hwc_ui_lay_skipdraw_decision(ctx, list);
+      return 0;
+    }
+    ctx->fb_lay_skip_initialized = 0;
+    ctx->num_of_fb_lay_skip = 0;
 #ifdef GL_WA_OVLY_ALL
-        ctx->ui_skip_frame_cnt = 0;
+    ctx->ui_skip_frame_cnt = 0;
 #endif
         
-        for (int i = 0; i < NUM_OF_DUMMY_WIN; i++) {
-            ctx->win_virt[i].layer_prev_buf = 0;
-            ctx->win_virt[i].layer_index = -1;
-            ctx->win_virt[i].status = HWC_WIN_FREE;
-        }
+    for (int i = 0; i < NUM_OF_DUMMY_WIN; i++) {
+        ctx->win_virt[i].layer_prev_buf = 0;
+        ctx->win_virt[i].layer_index = -1;
+        ctx->win_virt[i].status = HWC_WIN_FREE;
+    }
 #endif
         
-        //if geometry is not changed, there is no need to do any work here
-        if (!list || (!(list->flags & HWC_GEOMETRY_CHANGED)))
+    //if geometry is not changed, there is no need to do any work here
+    if (!list || (!(list->flags & HWC_GEOMETRY_CHANGED)))
         return 0;
 
     //all the windows are free here....
@@ -656,7 +661,7 @@
             reset_win_rect_info(&ctx->win[i]);
         }
     }
-    }
+
     return 0;
 }
 
@@ -675,8 +680,6 @@
     struct sec_rect src_work_rect;
     struct sec_rect dst_work_rect;
     bool need_swap_buffers = ctx->num_of_fb_layer > 0;
-    for (uint32_t i = 0; i < numDisplays; i++) {
-        hwc_display_contents_1_t* list = displays[i];      
 
     memset(&src_img, 0, sizeof(src_img));
     memset(&dst_img, 0, sizeof(dst_img));
@@ -688,6 +691,9 @@
     int rotVal = 0;
 #endif
 
+    // Only support one display
+    hwc_display_contents_1_t* list = displays[0];
+
     if (!list) {
         //turn off the all windows
         for (int i = 0; i < NUM_OF_WIN; i++) {
@@ -887,7 +893,7 @@
         }
     }
 #endif
-    }
+
     return 0;
 }
 
@@ -1036,12 +1042,22 @@
     }
     return ret;
 }
+
 static int hwc_blank(struct hwc_composer_device_1 *dev, int dpy, int blank)
 {
-    // We're using an older method of screen blanking based on
-    // early_suspend in the kernel.  No need to do anything here.
-    return 0;
-}  
+    struct hwc_context_t* ctx = (struct hwc_context_t*)dev;
+    if (blank) {
+        // release our resources, the screen is turning off
+        // in our case, there is nothing to do.
+        ctx->num_of_fb_layer_prev = 0;
+        return 0;
+    }
+    else {
+        // No need to unblank, will unblank on set()
+        return 0;
+    }
+}
+
 static int hwc_device_open(const struct hw_module_t* module, const char* name,
         struct hw_device_t** device)
 {
