diff --git a/drmplane.h b/drmplane.h
new file mode 100644
index 0000000..96cd85c
--- /dev/null
+++ b/drmplane.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_DRM_PLANE_H_
+#define ANDROID_DRM_PLANE_H_
+
+#include "drmcrtc.h"
+#include "drmproperty.h"
+
+#include <stdint.h>
+#include <xf86drmMode.h>
+#include <vector>
+
+namespace android {
+
+class DrmResources;
+
+class DrmPlane {
+ public:
+  DrmPlane(DrmResources *drm, drmModePlanePtr p);
+  ~DrmPlane();
+
+  int Init();
+
+  uint32_t id() const;
+
+  bool GetCrtcSupported(const DrmCrtc &crtc) const;
+
+  uint32_t type() const;
+
+  const DrmProperty &crtc_property() const;
+  const DrmProperty &fb_property() const;
+  const DrmProperty &crtc_x_property() const;
+  const DrmProperty &crtc_y_property() const;
+  const DrmProperty &crtc_w_property() const;
+  const DrmProperty &crtc_h_property() const;
+  const DrmProperty &src_x_property() const;
+  const DrmProperty &src_y_property() const;
+  const DrmProperty &src_w_property() const;
+  const DrmProperty &src_h_property() const;
+
+ private:
+  DrmPlane(const DrmPlane &);
+
+  DrmResources *drm_;
+  uint32_t id_;
+
+  uint32_t possible_crtc_mask_;
+
+  uint32_t type_;
+
+  DrmProperty crtc_property_;
+  DrmProperty fb_property_;
+  DrmProperty crtc_x_property_;
+  DrmProperty crtc_y_property_;
+  DrmProperty crtc_w_property_;
+  DrmProperty crtc_h_property_;
+  DrmProperty src_x_property_;
+  DrmProperty src_y_property_;
+  DrmProperty src_w_property_;
+  DrmProperty src_h_property_;
+};
+}
+
+#endif  // ANDROID_DRM_PLANE_H_
