diff --git a/libhwcomposer/hwc_copybit.cpp b/libhwcomposer/hwc_copybit.cpp
index 24fd771..8164fd3 100644
--- a/libhwcomposer/hwc_copybit.cpp
+++ b/libhwcomposer/hwc_copybit.cpp
@@ -597,6 +597,21 @@
     for(int j = 0; j < ptorInfo->count; j++) {
         int ovlapIndex = ptorInfo->layerIndex[j];
         hwc_rect_t overlap = list->hwLayers[ovlapIndex].displayFrame;
+        if(j) {
+            /**
+             * It's possible that 2 PTOR layers might have overlapping.
+             * In such case, remove the intersection(again if peripheral)
+             * from the lower PTOR layer to avoid overlapping.
+             * If intersection is not on peripheral then compromise
+             * by reducing number of PTOR layers.
+             **/
+            int prevOvlapIndex = ptorInfo->layerIndex[0];
+            hwc_rect_t prevOvlap = list->hwLayers[prevOvlapIndex].displayFrame;
+            hwc_rect_t commonRect = getIntersection(prevOvlap, overlap);
+            if(isValidRect(commonRect)) {
+                overlap = deductRect(overlap, commonRect);
+            }
+        }
 
         // Draw overlapped content of layers on render buffer
         for (int i = 0; i <= ovlapIndex; i++) {
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index 6084d8d..26cf27d 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -874,28 +874,10 @@
         }
     }
 
-    if(isValidRect(getIntersection(overlapRect[0], overlapRect[1]))) {
-        ALOGD_IF(isDebug(), "%s: Ignore Rect2 its intersects with Rect1",
-                 __FUNCTION__);
-        // reset second minLayerIndex[1];
-        minLayerIndex[1] = -1;
-        numPTORLayersFound--;
-    }
-
     // No overlap layers
     if (!numPTORLayersFound)
         return false;
 
-    ctx->mPtorInfo.count = numPTORLayersFound;
-    for(int i = 0; i < MAX_PTOR_LAYERS; i++) {
-        ctx->mPtorInfo.layerIndex[i] = minLayerIndex[i];
-    }
-
-    if (!ctx->mCopyBit[mDpy]->prepareOverlap(ctx, list)) {
-        // reset PTOR
-        ctx->mPtorInfo.count = 0;
-        return false;
-    }
     // Store the displayFrame and the sourceCrops of the layers
     hwc_rect_t displayFrame[numAppLayers];
     hwc_rect_t sourceCrop[numAppLayers];
@@ -905,6 +887,35 @@
         sourceCrop[i] = integerizeSourceCrop(layer->sourceCropf);
     }
 
+    /**
+     * It's possible that 2 PTOR layers might have overlapping.
+     * In such case, remove the intersection(again if peripheral)
+     * from the lower PTOR layer to avoid overlapping.
+     * If intersection is not on peripheral then compromise
+     * by reducing number of PTOR layers.
+     **/
+    hwc_rect_t commonRect = getIntersection(overlapRect[0], overlapRect[1]);
+    if(isValidRect(commonRect)) {
+        overlapRect[1] = deductRect(overlapRect[1], commonRect);
+        list->hwLayers[minLayerIndex[1]].displayFrame = overlapRect[1];
+    }
+
+    ctx->mPtorInfo.count = numPTORLayersFound;
+    for(int i = 0; i < MAX_PTOR_LAYERS; i++) {
+        ctx->mPtorInfo.layerIndex[i] = minLayerIndex[i];
+    }
+
+    if (!ctx->mCopyBit[mDpy]->prepareOverlap(ctx, list)) {
+        // reset PTOR
+        ctx->mPtorInfo.count = 0;
+        if(isValidRect(commonRect)) {
+            // If PTORs are intersecting restore displayframe of PTOR[1]
+            // before returning, as we have modified it above.
+            list->hwLayers[minLayerIndex[1]].displayFrame =
+                    displayFrame[minLayerIndex[1]];
+        }
+        return false;
+    }
     private_handle_t *renderBuf = ctx->mCopyBit[mDpy]->getCurrentRenderBuffer();
     Whf layerWhf[numPTORLayersFound]; // To store w,h,f of PTOR layers
 
