diff --git a/libcopybit/copybit_c2d.cpp b/libcopybit/copybit_c2d.cpp
index 2fa55cd..c186242 100644
--- a/libcopybit/copybit_c2d.cpp
+++ b/libcopybit/copybit_c2d.cpp
@@ -600,7 +600,13 @@
         ctx->blit_list[i].next = &(ctx->blit_list[i+1]);
     }
     ctx->blit_list[ctx->blit_count-1].next = NULL;
-    if(LINK_c2dDraw(target,ctx->trg_transform, 0x0, 0, 0, ctx->blit_list,
+    uint32_t target_transform = ctx->trg_transform;
+    if (ctx->c2d_driver_info.capabilities_mask &
+        C2D_DRIVER_SUPPORTS_OVERRIDE_TARGET_ROTATE_OP) {
+        // For A3xx - set 0x0 as the transform is set in the config_mask
+        target_transform = 0x0;
+    }
+    if(LINK_c2dDraw(target, target_transform, 0x0, 0, 0, ctx->blit_list,
                     ctx->blit_count)) {
         ALOGE("%s: LINK_c2dDraw ERROR", __FUNCTION__);
         return COPYBIT_FAILURE;
@@ -784,17 +790,15 @@
                 }
             }
 
-            if (transform != ctx->trg_transform) {
-                if (ctx->c2d_driver_info.capabilities_mask &
-                    C2D_DRIVER_SUPPORTS_OVERRIDE_TARGET_ROTATE_OP) {
-                    ctx->config_mask |= config_mask;
-                } else {
-                    // The transform for this surface does not match the current
-                    // target transform. Draw all previous surfaces. This will be
-                    // changed once we have a new mechanism to send different
-                    // target rotations to c2d.
-                    finish_copybit(dev);
-                }
+            if (ctx->c2d_driver_info.capabilities_mask &
+                C2D_DRIVER_SUPPORTS_OVERRIDE_TARGET_ROTATE_OP) {
+                ctx->config_mask |= config_mask;
+            } else {
+                // The transform for this surface does not match the current
+                // target transform. Draw all previous surfaces. This will be
+                // changed once we have a new mechanism to send different
+                // target rotations to c2d.
+                finish_copybit(dev);
             }
             ctx->trg_transform = transform;
         }
diff --git a/libhwcomposer/hwc.cpp b/libhwcomposer/hwc.cpp
index 519126f..c2688b5 100644
--- a/libhwcomposer/hwc.cpp
+++ b/libhwcomposer/hwc.cpp
@@ -343,9 +343,11 @@
         }
         if (ctx->mFbDev->post(ctx->mFbDev, fbLayer->handle)) {
             ALOGE("%s: ctx->mFbDev->post fail!", __FUNCTION__);
-            return -1;
+            ret = -1;
         }
     }
+
+    closeAcquireFds(list);
     return ret;
 }
 
@@ -382,9 +384,11 @@
         }
         if (!ctx->mExtDisplay->post()) {
             ALOGE("%s: ctx->mExtDisplay->post fail!", __FUNCTION__);
-            return -1;
+            ret = -1;
         }
     }
+
+    closeAcquireFds(list);
     return ret;
 }
 
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 3504066..82ab25c 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -368,6 +368,17 @@
     return ctx->dpyAttr[HWC_DISPLAY_EXTERNAL].isActive;
 }
 
+void closeAcquireFds(hwc_display_contents_1_t* list) {
+    for(uint32_t i = 0; list && i < list->numHwLayers; i++) {
+        //Close the acquireFenceFds
+        //HWC_FRAMEBUFFER are -1 already by SF, rest we close.
+        if(list->hwLayers[i].acquireFenceFd >= 0) {
+            close(list->hwLayers[i].acquireFenceFd);
+            list->hwLayers[i].acquireFenceFd = -1;
+        }
+    }
+}
+
 int hwc_sync(hwc_context_t *ctx, hwc_display_contents_1_t* list, int dpy,
                                                         int fd) {
     int ret = 0;
@@ -419,22 +430,15 @@
         ALOGD_IF(HWC_UTILS_DEBUG, "%s: time taken for MSMFB_BUFFER_SYNC IOCTL = %d",
                             __FUNCTION__, (size_t) ns2ms(systemTime() - start));
     }
+
     if(ret < 0) {
         ALOGE("ioctl MSMFB_BUFFER_SYNC failed, err=%s",
                 strerror(errno));
     }
+
     for(uint32_t i = 0; i < list->numHwLayers; i++) {
         if(list->hwLayers[i].compositionType == HWC_OVERLAY ||
            list->hwLayers[i].compositionType == HWC_FRAMEBUFFER_TARGET) {
-            //Close the acquireFenceFds
-            if(list->hwLayers[i].acquireFenceFd >= 0) {
-                close(list->hwLayers[i].acquireFenceFd);
-                list->hwLayers[i].acquireFenceFd = -1;
-            }
-            if(fd >= 0) {
-                close(fd);
-                fd = -1;
-            }
             //Populate releaseFenceFds.
             if(UNLIKELY(swapzero))
                 list->hwLayers[i].releaseFenceFd = -1;
@@ -442,12 +446,19 @@
                 list->hwLayers[i].releaseFenceFd = dup(releaseFd);
         }
     }
+
+    if(fd >= 0) {
+        close(fd);
+        fd = -1;
+    }
+
     if(UNLIKELY(swapzero)){
         list->retireFenceFd = -1;
         close(releaseFd);
     } else {
         list->retireFenceFd = releaseFd;
     }
+
     return ret;
 }
 
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index 36d4f14..671fbba 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -144,6 +144,9 @@
 void getActionSafePosition(hwc_context_t *ctx, int dpy, uint32_t& x,
                                         uint32_t& y, uint32_t& w, uint32_t& h);
 
+//Close acquireFenceFds of all layers of incoming list
+void closeAcquireFds(hwc_display_contents_1_t* list);
+
 //Sync point impl.
 int hwc_sync(hwc_context_t *ctx, hwc_display_contents_1_t* list, int dpy,
                                                     int fd);
