diff --git a/compositor/DrmDisplayComposition.cpp b/compositor/DrmDisplayComposition.cpp
index 41589c5..e571b26 100644
--- a/compositor/DrmDisplayComposition.cpp
+++ b/compositor/DrmDisplayComposition.cpp
@@ -32,9 +32,9 @@
 
 namespace android {
 
-DrmDisplayComposition::DrmDisplayComposition(DrmCrtc *crtc, Planner *planner)
-    : crtc_(crtc),  // Can be NULL if we haven't modeset yet
-      planner_(planner) {
+DrmDisplayComposition::DrmDisplayComposition(DrmCrtc *crtc)
+    : crtc_(crtc)  // Can be NULL if we haven't modeset yet
+{
 }
 
 int DrmDisplayComposition::SetLayers(DrmHwcLayer *layers, size_t num_layers) {
@@ -58,10 +58,10 @@
     to_composite.emplace(std::make_pair(i, &layers_[i]));
 
   int ret = 0;
-  std::tie(ret,
-           composition_planes_) = planner_->ProvisionPlanes(to_composite, crtc_,
-                                                            primary_planes,
-                                                            overlay_planes);
+  std::tie(ret, composition_planes_) = Planner::ProvisionPlanes(to_composite,
+                                                                crtc_,
+                                                                primary_planes,
+                                                                overlay_planes);
   if (ret) {
     ALOGV("Planner failed provisioning planes ret=%d", ret);
     return ret;
diff --git a/compositor/DrmDisplayComposition.h b/compositor/DrmDisplayComposition.h
index d077aee..dcfd96e 100644
--- a/compositor/DrmDisplayComposition.h
+++ b/compositor/DrmDisplayComposition.h
@@ -30,7 +30,6 @@
 namespace android {
 
 class Importer;
-class Planner;
 
 constexpr size_t kUndefinedSourceLayer = UINT16_MAX;
 
@@ -59,7 +58,7 @@
 class DrmDisplayComposition {
  public:
   DrmDisplayComposition(const DrmDisplayComposition &) = delete;
-  DrmDisplayComposition(DrmCrtc *crtc, Planner *planner);
+  explicit DrmDisplayComposition(DrmCrtc *crtc);
   ~DrmDisplayComposition() = default;
 
   int SetLayers(DrmHwcLayer *layers, size_t num_layers);
@@ -80,13 +79,8 @@
     return crtc_;
   }
 
-  Planner *planner() const {
-    return planner_;
-  }
-
  private:
   DrmCrtc *crtc_ = nullptr;
-  Planner *planner_ = nullptr;
 
   std::vector<DrmHwcLayer> layers_;
   std::vector<DrmCompositionPlane> composition_planes_;
diff --git a/compositor/DrmDisplayCompositor.cpp b/compositor/DrmDisplayCompositor.cpp
index a26f2df..2c2ec65 100644
--- a/compositor/DrmDisplayCompositor.cpp
+++ b/compositor/DrmDisplayCompositor.cpp
@@ -49,7 +49,6 @@
     ALOGE("Could not find drmdevice for display");
     return -EINVAL;
   }
-  planner_ = Planner::CreateInstance(drm);
 
   initialized_ = true;
   return 0;
@@ -64,7 +63,7 @@
     return std::unique_ptr<DrmDisplayComposition>();
   }
 
-  return std::make_unique<DrmDisplayComposition>(crtc, planner_.get());
+  return std::make_unique<DrmDisplayComposition>(crtc);
 }
 
 // NOLINTNEXTLINE (readability-function-cognitive-complexity): Fixme
diff --git a/compositor/DrmDisplayCompositor.h b/compositor/DrmDisplayCompositor.h
index 41e708f..f3169e8 100644
--- a/compositor/DrmDisplayCompositor.h
+++ b/compositor/DrmDisplayCompositor.h
@@ -28,7 +28,6 @@
 #include <tuple>
 
 #include "DrmDisplayComposition.h"
-#include "Planner.h"
 #include "drm/ResourceManager.h"
 #include "drm/VSyncWorker.h"
 #include "drmhwcomposer.h"
@@ -90,7 +89,6 @@
   }
 
   ResourceManager *resource_manager_ = nullptr;
-  std::unique_ptr<Planner> planner_;
   bool initialized_{};
   int display_ = -1;
 };
diff --git a/compositor/Planner.cpp b/compositor/Planner.cpp
index 2d24499..f43e314 100644
--- a/compositor/Planner.cpp
+++ b/compositor/Planner.cpp
@@ -25,11 +25,6 @@
 
 namespace android {
 
-std::unique_ptr<Planner> Planner::CreateInstance(DrmDevice * /*device*/) {
-  std::unique_ptr<Planner> planner(new Planner);
-  return planner;
-}
-
 std::vector<DrmPlane *> Planner::GetUsablePlanes(
     DrmCrtc *crtc, std::vector<DrmPlane *> *primary_planes,
     std::vector<DrmPlane *> *overlay_planes) {
diff --git a/compositor/Planner.h b/compositor/Planner.h
index af75954..7802d0c 100644
--- a/compositor/Planner.h
+++ b/compositor/Planner.h
@@ -72,9 +72,6 @@
       std::map<size_t, DrmHwcLayer *> &layers, std::vector<DrmPlane *> *planes);
 
  public:
-  // Creates a planner instance
-  static std::unique_ptr<Planner> CreateInstance(DrmDevice *drm);
-
   // Takes a stack of layers and provisions hardware planes for them. If the
   // entire stack can't fit in hardware, FIXME
   //
