diff --git a/compositor/main.c b/compositor/main.c
index 55be7cdd8ae17965f85dd6c8137048d9284a0631..b21bd467467cfd5c946e4dd6d6554a7141bf7544 100644
--- a/compositor/main.c
+++ b/compositor/main.c
@@ -1537,10 +1537,9 @@ out:
 	return ret;
 }
 
-static void
-x11_backend_output_configure(struct wl_listener *listener, void *data)
+static int
+x11_backend_output_configure(struct weston_output *output)
 {
-	struct weston_output *output = data;
 	struct wet_output_config defaults = {
 		.width = 1024,
 		.height = 600,
@@ -1548,10 +1547,7 @@ x11_backend_output_configure(struct wl_listener *listener, void *data)
 		.transform = WL_OUTPUT_TRANSFORM_NORMAL
 	};
 
-	if (wet_configure_windowed_output_from_config(output, &defaults) < 0)
-		weston_log("Cannot configure output \"%s\".\n", output->name);
-
-	weston_output_enable(output);
+	return wet_configure_windowed_output_from_config(output, &defaults);
 }
 
 static int
@@ -1587,6 +1583,8 @@ load_x11_backend(struct weston_compositor *c,
 	config.base.struct_version = WESTON_X11_BACKEND_CONFIG_VERSION;
 	config.base.struct_size = sizeof(struct weston_x11_backend_config);
 
+	wet_set_simple_head_configurator(c, x11_backend_output_configure);
+
 	/* load the actual backend and configure it */
 	ret = weston_compositor_load_backend(c, WESTON_BACKEND_X11,
 					     &config.base);
@@ -1594,8 +1592,6 @@ load_x11_backend(struct weston_compositor *c,
 	if (ret < 0)
 		return ret;
 
-	wet_set_pending_output_handler(c, x11_backend_output_configure);
-
 	api = weston_windowed_output_get_api(c);
 
 	if (!api) {