diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 1a961389799dec666f23135aa6bbc2be02dc96f7..ea2c6991cffc3858d7611f57fe4cbdb8b427cc06 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -3364,8 +3364,6 @@ create_output_for_connector(struct drm_backend *b,
 
 	weston_output_init(&output->base, b->compositor);
 
-	wl_list_init(&output->base.mode_list);
-
 	for (i = 0; i < output->connector->count_modes; i++) {
 		drm_mode = drm_output_add_mode(output, &output->connector->modes[i]);
 		if (!drm_mode) {
diff --git a/libweston/compositor-fbdev.c b/libweston/compositor-fbdev.c
index 6a3053856f9fa168ac889812e97174176ee3b39e..b3ce0588a4d28724564f0048f34938d5b5f6dbee 100644
--- a/libweston/compositor-fbdev.c
+++ b/libweston/compositor-fbdev.c
@@ -523,7 +523,6 @@ fbdev_output_create(struct fbdev_backend *backend,
 	output->mode.width = output->fb_info.x_resolution;
 	output->mode.height = output->fb_info.y_resolution;
 	output->mode.refresh = output->fb_info.refresh_rate;
-	wl_list_init(&output->base.mode_list);
 	wl_list_insert(&output->base.mode_list, &output->mode.link);
 
 	output->base.current_mode = &output->mode;
diff --git a/libweston/compositor-headless.c b/libweston/compositor-headless.c
index 9e42e7f62e6366c0723b09541cec164a687d98b4..5425ad5bc146c9618e3927e31b8705c39c89568e 100644
--- a/libweston/compositor-headless.c
+++ b/libweston/compositor-headless.c
@@ -201,7 +201,6 @@ headless_output_set_size(struct weston_output *base,
 	output->mode.width = output_width;
 	output->mode.height = output_height;
 	output->mode.refresh = 60000;
-	wl_list_init(&output->base.mode_list);
 	wl_list_insert(&output->base.mode_list, &output->mode.link);
 
 	output->base.current_mode = &output->mode;
diff --git a/libweston/compositor-rdp.c b/libweston/compositor-rdp.c
index 091472b0894f4abc1e42622ec0b52778f27759f3..6886038b35e49cde95aa8f67e893681653cfc8a4 100644
--- a/libweston/compositor-rdp.c
+++ b/libweston/compositor-rdp.c
@@ -484,7 +484,6 @@ rdp_output_set_size(struct weston_output *base,
 	assert(!output->base.current_mode);
 
 	wl_list_init(&output->peers);
-	wl_list_init(&output->base.mode_list);
 
 	initMode.flags = WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED;
 	initMode.width = width;
diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c
index 77a736896088c354cdd2328b5c29f413873d329d..625a352c776c8d93b78270157a2a6e138e11dd0e 100644
--- a/libweston/compositor-wayland.c
+++ b/libweston/compositor-wayland.c
@@ -1323,7 +1323,6 @@ wayland_output_set_size(struct weston_output *base, int width, int height)
 	output->mode.height = output_height;
 	output->mode.refresh = 60000;
 	output->scale = output->base.scale;
-	wl_list_init(&output->base.mode_list);
 	wl_list_insert(&output->base.mode_list, &output->mode.link);
 
 	output->base.current_mode = &output->mode;
@@ -1374,7 +1373,6 @@ wayland_output_create_for_parent_output(struct wayland_backend *b,
 	output->base.make = poutput->physical.make;
 	output->base.model = poutput->physical.model;
 
-	wl_list_init(&output->base.mode_list);
 	wl_list_insert_list(&output->base.mode_list, &poutput->mode_list);
 	wl_list_init(&poutput->mode_list);
 
diff --git a/libweston/compositor-x11.c b/libweston/compositor-x11.c
index 02cdf3eaf580b8f236e5d448f7413b3dab8ba88c..8cf512febf837b09f65c7eef51c382a8436a92aa 100644
--- a/libweston/compositor-x11.c
+++ b/libweston/compositor-x11.c
@@ -999,7 +999,6 @@ x11_output_set_size(struct weston_output *base, int width, int height)
 	output->mode.height = output_height;
 	output->mode.refresh = 60000;
 	output->scale = output->base.scale;
-	wl_list_init(&output->base.mode_list);
 	wl_list_insert(&output->base.mode_list, &output->mode.link);
 
 	output->base.current_mode = &output->mode;
diff --git a/libweston/compositor.c b/libweston/compositor.c
index 813b6634038d0e58c574bc1cf4f036ab2716d8c7..ae839b87d2123a72144ae6bd16da3bef678ff83f 100644
--- a/libweston/compositor.c
+++ b/libweston/compositor.c
@@ -4711,6 +4711,7 @@ weston_output_init(struct weston_output *output,
 
 	pixman_region32_init(&output->previous_damage);
 	pixman_region32_init(&output->region);
+	wl_list_init(&output->mode_list);
 }
 
 /** Adds weston_output object to pending output list.