diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 0a633f0..8438159 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -57,12 +57,12 @@
 // can just use the v1.0 pointer without branches or casts.
 
 #if HWC_REMOVE_DEPRECATED_VERSIONS
-// We need complete types with to satisfy semantic checks, even though the
-// code paths that use these won't get executed at runtime (and will likely be
-// dead-code-eliminated). When we remove the code to support v0.3 we can remove
+// We need complete types to satisfy semantic checks, even though the code
+// paths that use these won't get executed at runtime (and will likely be dead-
+// code-eliminated). When we remove the code to support v0.3 we can remove
 // these as well.
 typedef hwc_layer_1_t hwc_layer_t;
-typedef hwc_layer_list_1_t hwc_layer_list_t;
+typedef hwc_display_contents_1_t hwc_layer_list_t;
 typedef hwc_composer_device_1_t hwc_composer_device_t;
 #endif
 
@@ -80,7 +80,7 @@
 static size_t sizeofHwcLayerList(const hwc_composer_device_1_t* hwc,
         size_t numLayers) {
     if (hwcHasVersion(hwc, HWC_DEVICE_API_VERSION_1_0)) {
-        return sizeof(hwc_layer_list_1_t) + numLayers*sizeof(hwc_layer_1_t);
+        return sizeof(hwc_display_contents_1_t) + numLayers*sizeof(hwc_layer_1_t);
     } else {
         return sizeof(hwc_layer_list_t) + numLayers*sizeof(hwc_layer_t);
     }
@@ -136,11 +136,17 @@
         }
 
         if (mHwc) {
-            if (hwcHasVersion(mHwc, HWC_DEVICE_API_VERSION_0_3)) {
-                // always turn vsync off when we start
-                mHwc->methods->eventControl(mHwc, HWC_EVENT_VSYNC, 0);
-                needVSyncThread = false;
+            // always turn vsync off when we start
+            needVSyncThread = false;
+            if (hwcHasVersion(mHwc, HWC_DEVICE_API_VERSION_1_0)) {
+                mHwc->methods->eventControl(mHwc, 0, HWC_EVENT_VSYNC, 0);
+            } else if (hwcHasVersion(mHwc, HWC_DEVICE_API_VERSION_0_3)) {
+                hwc_composer_device_t* hwc0 = (hwc_composer_device_t*)mHwc;
+                err = hwc0->methods->eventControl(hwc0, HWC_EVENT_VSYNC, 0);
+            } else {
+                needVSyncThread = true;
             }
+
             if (mHwc->registerProcs) {
                 mCBContext->hwc = this;
                 mCBContext->procs.invalidate = &hook_invalidate;
@@ -194,7 +200,12 @@
     status_t err = NO_ERROR;
     if (mHwc && mHwc->common.version >= HWC_DEVICE_API_VERSION_0_3) {
         if (!mDebugForceFakeVSync) {
-            err = mHwc->methods->eventControl(mHwc, event, enabled);
+            if (hwcHasVersion(mHwc, HWC_DEVICE_API_VERSION_1_0)) {
+                err = mHwc->methods->eventControl(mHwc, 0, event, enabled);
+            } else {
+                hwc_composer_device_t* hwc0 = (hwc_composer_device_t*)mHwc;
+                err = hwc0->methods->eventControl(hwc0, event, enabled);
+            }
             // error here should not happen -- not sure what we should
             // do if it does.
             ALOGE_IF(err, "eventControl(%d, %d) failed %s",
@@ -217,8 +228,9 @@
         if (!mList || mCapacity < numLayers) {
             free(mList);
             size_t size = sizeofHwcLayerList(mHwc, numLayers);
-            mList = (hwc_layer_list_1_t*)malloc(size);
+            mList = (hwc_display_contents_1_t*)malloc(size);
             mCapacity = numLayers;
+            mList->flipFenceFd = -1;
         }
         mList->flags = HWC_GEOMETRY_CHANGED;
         mList->numHwLayers = numLayers;
@@ -227,7 +239,8 @@
 }
 
 status_t HWComposer::prepare() const {
-    int err = mHwc->prepare(mHwc, mList);
+    int err = mHwc->prepare(mHwc, 1,
+            const_cast<hwc_display_contents_1_t**>(&mList));
     if (err == NO_ERROR) {
         size_t numOVLayers = 0;
         size_t numFBLayers = 0;
@@ -273,9 +286,17 @@
 status_t HWComposer::commit() const {
     int err = NO_ERROR;
     if (mHwc) {
-        err = mHwc->set(mHwc, mDpy, mSur, mList);
+        if (mList) {
+            mList->dpy = mDpy;
+            mList->sur = mSur;
+        }
+        err = mHwc->set(mHwc, 1, const_cast<hwc_display_contents_1_t**>(&mList));
         if (mList) {
             mList->flags &= ~HWC_GEOMETRY_CHANGED;
+            if (mList->flipFenceFd != -1) {
+                close(mList->flipFenceFd);
+                mList->flipFenceFd = -1;
+            }
         }
     } else {
         eglSwapBuffers(mDpy, mSur);
@@ -285,17 +306,20 @@
 
 status_t HWComposer::release() const {
     if (mHwc) {
-        if (hwcHasVersion(mHwc, HWC_DEVICE_API_VERSION_0_3)) {
-            mHwc->methods->eventControl(mHwc, HWC_EVENT_VSYNC, 0);
+        if (hwcHasVersion(mHwc, HWC_DEVICE_API_VERSION_1_0)) {
+            mHwc->methods->eventControl(mHwc, 0, HWC_EVENT_VSYNC, 0);
+        } else if (hwcHasVersion(mHwc, HWC_DEVICE_API_VERSION_0_3)) {
+            hwc_composer_device_t* hwc0 = (hwc_composer_device_t*)mHwc;
+            hwc0->methods->eventControl(hwc0, HWC_EVENT_VSYNC, 0);
         }
-        int err = mHwc->set(mHwc, NULL, NULL, NULL);
+        int err = mHwc->set(mHwc, 0, NULL);
         if (err < 0) {
             return (status_t)err;
         }
 
         if (hwcHasVersion(mHwc, HWC_DEVICE_API_VERSION_1_0)) {
             if (mHwc->methods && mHwc->methods->blank) {
-                err = mHwc->methods->blank(mHwc, 1);
+                err = mHwc->methods->blank(mHwc, 0, 1);
             }
         }
         return (status_t)err;
@@ -307,7 +331,7 @@
     if (mHwc) {
         if (hwcHasVersion(mHwc, HWC_DEVICE_API_VERSION_1_0)) {
             if (mHwc->methods && mHwc->methods->blank) {
-                int err = mHwc->methods->blank(mHwc, 0);
+                int err = mHwc->methods->blank(mHwc, 0, 0);
                 return (status_t)err;
             }
         }
@@ -320,7 +344,7 @@
     if (mHwc) {
         free(mList);
         mList = NULL;
-        int err = mHwc->prepare(mHwc, NULL);
+        int err = mHwc->prepare(mHwc, 0, NULL);
         return (status_t)err;
     }
     return NO_ERROR;
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index c2fff4f..8771109 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -36,7 +36,7 @@
                            struct timespec *remain);
 
 struct hwc_composer_device_1;
-struct hwc_layer_list_1;
+struct hwc_display_contents_1;
 struct hwc_procs;
 
 namespace android {
@@ -230,7 +230,7 @@
     sp<SurfaceFlinger>              mFlinger;
     hw_module_t const*              mModule;
     struct hwc_composer_device_1*   mHwc;
-    struct hwc_layer_list_1*        mList;
+    struct hwc_display_contents_1*  mList;
     size_t                          mCapacity;
     mutable size_t                  mNumOVLayers;
     mutable size_t                  mNumFBLayers;
