diff --git a/exynos4/hal/libhwcomposer/SecHWC.cpp b/exynos4/hal/libhwcomposer/SecHWC.cpp
index 1831125..bb1ae8c 100644
--- a/exynos4/hal/libhwcomposer/SecHWC.cpp
+++ b/exynos4/hal/libhwcomposer/SecHWC.cpp
@@ -710,6 +710,18 @@
 #endif
             return HWC_EGL_ERROR;
         }
+    } else {
+        list->dpy = eglGetCurrentDisplay();
+        list->sur = eglGetCurrentSurface(EGL_DRAW);
+
+        // We still don't support fences, close them all
+        for(uint32_t i = 0; i < list->numHwLayers; i++) {
+            if(list->hwLayers[i].acquireFenceFd >= 0) {
+                close(list->hwLayers[i].acquireFenceFd);
+                list->hwLayers[i].acquireFenceFd = -1;
+            }
+        }
+        list->retireFenceFd = -1;
     }
 
     if(ctx->num_of_hwc_layer > NUM_OF_WIN)
@@ -1058,6 +1070,79 @@
     }
 }
 
+int hwc_getDisplayConfigs(struct hwc_composer_device_1* dev, int disp,
+        uint32_t* configs, size_t* numConfigs) {
+    int status = 0;
+    switch(disp) {
+        case HWC_DISPLAY_PRIMARY:
+            if(*numConfigs > 0) {
+                configs[0] = 0;
+                *numConfigs = 1;
+            }
+            status = 0;
+            break;
+        case HWC_DISPLAY_EXTERNAL:
+            status = -1; //Not connected, this is broken atm
+            break;
+    }
+    return status;
+}
+
+int hwc_getDisplayAttributes(struct hwc_composer_device_1* dev, int disp,
+        uint32_t config, const uint32_t* attributes, int32_t* values) {
+
+    hwc_context_t* ctx = (hwc_context_t*)(dev);
+    if(disp == HWC_DISPLAY_EXTERNAL) {
+        return -1;
+    }
+
+    static const uint32_t DISPLAY_ATTRIBUTES[] = {
+        HWC_DISPLAY_VSYNC_PERIOD,
+        HWC_DISPLAY_WIDTH,
+        HWC_DISPLAY_HEIGHT,
+        HWC_DISPLAY_DPI_X,
+        HWC_DISPLAY_DPI_Y,
+        HWC_DISPLAY_NO_ATTRIBUTE,
+    };
+
+    const int NUM_DISPLAY_ATTRIBUTES = (sizeof(DISPLAY_ATTRIBUTES) /
+            sizeof(DISPLAY_ATTRIBUTES)[0]);
+
+    struct fb_var_screeninfo info = ctx->lcd_info;
+
+    for (size_t i = 0; i < NUM_DISPLAY_ATTRIBUTES - 1; i++) {
+        switch (attributes[i]) {
+        case HWC_DISPLAY_VSYNC_PERIOD:
+            values[i] = (int32_t) (1000000000.0 / 57);
+            ALOGD("My vsync period is %d for %d",values[i],disp);
+            break;
+        case HWC_DISPLAY_WIDTH:
+            values[i] = info.xres;
+            ALOGD("My width is %d for %d",values[i],disp);
+            break;
+        case HWC_DISPLAY_HEIGHT:
+            values[i] = info.yres;
+            ALOGD("My height is %d for %d",values[i],disp);
+            break;
+        case HWC_DISPLAY_DPI_X:
+            values[i] = (int32_t) ((info.xres * 25.4f) / info.width);
+            values[i]*=1000;
+            ALOGD("My hdpi is %d for %d",values[i],disp);
+            break;
+        case HWC_DISPLAY_DPI_Y:
+            values[i] = (int32_t) ((info.yres * 25.4f) / info.height);
+            values[i]*=1000;
+            ALOGD("My vdpi is %d for %d",values[i],disp);
+            break;
+        default:
+            ALOGE("Unknown display attribute %d",
+                    attributes[i]);
+            return -EINVAL;
+        }
+    }
+    return 0;
+}
+
 static int hwc_device_open(const struct hw_module_t* module, const char* name,
         struct hw_device_t** device)
 {
@@ -1076,7 +1161,7 @@
 
     /* initialize the procs */
     dev->device.common.tag           = HARDWARE_DEVICE_TAG;
-    dev->device.common.version       = HWC_DEVICE_API_VERSION_1_0;
+    dev->device.common.version       = HWC_DEVICE_API_VERSION_1_1;
     dev->device.common.module        = const_cast<hw_module_t*>(module);
     dev->device.common.close         = hwc_device_close;
     dev->device.prepare              = hwc_prepare;
@@ -1085,6 +1170,8 @@
     dev->device.blank                = hwc_blank;
     dev->device.query                = hwc_query;
     dev->device.registerProcs        = hwc_registerProcs;
+    dev->device.getDisplayConfigs    = hwc_getDisplayConfigs;
+    dev->device.getDisplayAttributes = hwc_getDisplayAttributes;
     *device = &dev->device.common;
 
     //initializing
