diff --git a/drmdisplaycomposition.cpp b/drmdisplaycomposition.cpp
index d2b6211..d5450ff 100644
--- a/drmdisplaycomposition.cpp
+++ b/drmdisplaycomposition.cpp
@@ -186,6 +186,11 @@
   return out;
 }
 
+int DrmDisplayComposition::AddPlaneComposition(DrmCompositionPlane plane) {
+  composition_planes_.emplace_back(std::move(plane));
+  return 0;
+}
+
 void DrmDisplayComposition::SeparateLayers(size_t *used_layers,
                                            size_t num_used_layers,
                                            DrmHwcRect<int> *exclude_rects,
@@ -484,6 +489,10 @@
                             overlay_planes);
   }
 
+  return FinalizeComposition();
+}
+
+int DrmDisplayComposition::FinalizeComposition() {
   return CreateAndAssignReleaseFences();
 }
 
diff --git a/drmdisplaycomposition.h b/drmdisplaycomposition.h
index 2b24231..6c52664 100644
--- a/drmdisplaycomposition.h
+++ b/drmdisplaycomposition.h
@@ -109,6 +109,7 @@
            uint64_t frame_no);
 
   int SetLayers(DrmHwcLayer *layers, size_t num_layers, bool geometry_changed);
+  int AddPlaneComposition(DrmCompositionPlane plane);
   int AddPlaneDisable(DrmPlane *plane);
   int SetDpmsMode(uint32_t dpms_mode);
   int SetDisplayMode(const DrmMode &display_mode);
@@ -116,6 +117,8 @@
   int Plan(SquashState *squash, std::vector<DrmPlane *> *primary_planes,
            std::vector<DrmPlane *> *overlay_planes);
 
+  int FinalizeComposition();
+
   int CreateNextTimelineFence();
   int SignalSquashDone() {
     return IncreaseTimelineToPoint(timeline_squash_done_);
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index acd5436..10a1ffc 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -1054,8 +1054,8 @@
     return ret;
   }
 
-  std::vector<DrmPlane *> primary_planes;
-  std::vector<DrmPlane *> fake_overlay_planes;
+  DrmCompositionPlane squashed_comp(DrmCompositionPlane::Type::kPrecomp, NULL,
+                                    src->crtc());
   std::vector<DrmHwcLayer> dst_layers;
   for (DrmCompositionPlane &comp_plane : src_planes) {
     // Composition planes without DRM planes should never happen
@@ -1082,11 +1082,12 @@
       // filling the OutputFds.
       layer.release_fence = OutputFd();
       dst_layers.emplace_back(std::move(layer));
+      squashed_comp.source_layers().push_back(
+          squashed_comp.source_layers().size());
     }
 
-    if (comp_plane.plane()->type() == DRM_PLANE_TYPE_PRIMARY &&
-        primary_planes.size() == 0)
-      primary_planes.push_back(comp_plane.plane());
+    if (comp_plane.plane()->type() == DRM_PLANE_TYPE_PRIMARY)
+      squashed_comp.set_plane(comp_plane.plane());
     else
       dst->AddPlaneDisable(comp_plane.plane());
   }
@@ -1097,8 +1098,13 @@
     goto move_layers_back;
   }
 
-  ret =
-      dst->Plan(NULL /* SquashState */, &primary_planes, &fake_overlay_planes);
+  ret = dst->AddPlaneComposition(std::move(squashed_comp));
+  if (ret) {
+    ALOGE("Failed to add squashed plane composition %d", ret);
+    goto move_layers_back;
+  }
+
+  ret = dst->FinalizeComposition();
   if (ret) {
     ALOGE("Failed to plan for squash all composition %d", ret);
     goto move_layers_back;
