diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 11d818a..133ef58 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -166,7 +166,7 @@
 	int min_height, max_height;
 	int no_addfb2;
 
-	struct wl_list sprite_list;
+	struct wl_list plane_list;
 	int sprites_are_broken;
 	int sprites_hidden;
 
@@ -1129,7 +1129,7 @@
 	struct drm_output *output = to_drm_output(output_base);
 	struct drm_backend *backend =
 		to_drm_backend(output->base.compositor);
-	struct drm_plane *s;
+	struct drm_plane *p;
 	struct drm_mode *mode;
 	int ret = 0;
 
@@ -1191,28 +1191,29 @@
 	/*
 	 * Now, update all the sprite surfaces
 	 */
-	wl_list_for_each(s, &backend->sprite_list, link) {
+	wl_list_for_each(p, &backend->plane_list, link) {
 		uint32_t flags = 0, fb_id = 0;
 		drmVBlank vbl = {
 			.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT,
 			.request.sequence = 1,
 		};
 
-		/* XXX: Set output much earlier, so we don't attempt to place
-		 *      planes on entirely the wrong output. */
-		if ((!s->fb_current && !s->fb_pending) ||
-		    !drm_plane_crtc_supported(output, s))
+		if (p->type != WDRM_PLANE_TYPE_OVERLAY)
 			continue;
 
-		if (s->fb_pending && !backend->sprites_hidden)
-			fb_id = s->fb_pending->fb_id;
+		if ((!p->fb_current && !p->fb_pending) ||
+		    !drm_plane_crtc_supported(output, p))
+			continue;
 
-		ret = drmModeSetPlane(backend->drm.fd, s->plane_id,
+		if (p->fb_pending && !backend->sprites_hidden)
+			fb_id = p->fb_pending->fb_id;
+
+		ret = drmModeSetPlane(backend->drm.fd, p->plane_id,
 				      output->crtc_id, fb_id, flags,
-				      s->dest_x, s->dest_y,
-				      s->dest_w, s->dest_h,
-				      s->src_x, s->src_y,
-				      s->src_w, s->src_h);
+				      p->dest_x, p->dest_y,
+				      p->dest_w, p->dest_h,
+				      p->src_x, p->src_y,
+				      p->src_w, p->src_h);
 		if (ret)
 			weston_log("setplane failed: %d: %s\n",
 				ret, strerror(errno));
@@ -1223,17 +1224,17 @@
 		 * Queue a vblank signal so we know when the surface
 		 * becomes active on the display or has been replaced.
 		 */
-		vbl.request.signal = (unsigned long)s;
+		vbl.request.signal = (unsigned long) p;
 		ret = drmWaitVBlank(backend->drm.fd, &vbl);
 		if (ret) {
 			weston_log("vblank event request failed: %d: %s\n",
 				ret, strerror(errno));
 		}
 
-		s->output = output;
-		s->fb_last = s->fb_current;
-		s->fb_current = s->fb_pending;
-		s->fb_pending = NULL;
+		p->output = output;
+		p->fb_last = p->fb_current;
+		p->fb_current = p->fb_pending;
+		p->fb_pending = NULL;
 		output->vblank_pending++;
 	}
 
@@ -1489,7 +1490,10 @@
 	if (ev->alpha != 1.0f)
 		return NULL;
 
-	wl_list_for_each(p, &b->sprite_list, link) {
+	wl_list_for_each(p, &b->plane_list, link) {
+		if (p->type != WDRM_PLANE_TYPE_OVERLAY)
+			continue;
+
 		if (!drm_plane_crtc_supported(output, p))
 			continue;
 
@@ -2171,7 +2175,7 @@
 	drmModeFreeObjectProperties(props);
 
 	weston_plane_init(&plane->base, b->compositor, 0, 0);
-	wl_list_insert(&b->sprite_list, &plane->link);
+	wl_list_insert(&b->plane_list, &plane->link);
 
 	return plane;
 }
@@ -2232,14 +2236,10 @@
 		if (!drm_plane)
 			continue;
 
-		/* Ignore non-overlay planes for now. */
-		if (drm_plane->type != WDRM_PLANE_TYPE_OVERLAY) {
-			drm_plane_destroy(drm_plane);
-			continue;
-		}
-
-		weston_compositor_stack_plane(b->compositor, &drm_plane->base,
-					      &b->compositor->primary_plane);
+		if (drm_plane->type == WDRM_PLANE_TYPE_OVERLAY)
+			weston_compositor_stack_plane(b->compositor,
+						      &drm_plane->base,
+						      &b->compositor->primary_plane);
 	}
 
 	drmModeFreePlaneResources(kplane_res);
@@ -2257,7 +2257,7 @@
 {
 	struct drm_plane *plane, *next;
 
-	wl_list_for_each_safe(plane, next, &b->sprite_list, link)
+	wl_list_for_each_safe(plane, next, &b->plane_list, link)
 		drm_plane_destroy(plane);
 }
 
@@ -3490,7 +3490,7 @@
 {
 	struct weston_compositor *compositor = data;
 	struct drm_backend *b = to_drm_backend(compositor);
-	struct drm_plane *sprite;
+	struct drm_plane *plane;
 	struct drm_output *output;
 
 	if (compositor->session_active) {
@@ -3524,12 +3524,16 @@
 		output = container_of(compositor->output_list.next,
 				      struct drm_output, base.link);
 
-		wl_list_for_each(sprite, &b->sprite_list, link)
+		wl_list_for_each(plane, &b->plane_list, link) {
+			if (plane->type != WDRM_PLANE_TYPE_OVERLAY)
+				continue;
+
 			drmModeSetPlane(b->drm.fd,
-					sprite->plane_id,
+					plane->plane_id,
 					output->crtc_id, 0, 0,
 					0, 0, 0, 0, 0, 0, 0, 0);
-	};
+		}
+	}
 }
 
 /**
@@ -3950,7 +3954,7 @@
 
 	weston_setup_vt_switch_bindings(compositor);
 
-	wl_list_init(&b->sprite_list);
+	wl_list_init(&b->plane_list);
 	create_sprites(b);
 
 	if (udev_input_init(&b->input,
