diff --git a/src/shell.c b/src/shell.c
index f995f03..95b010d 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -92,7 +92,7 @@
 	bool locked;
 	bool prepare_event_sent;
 
-	struct shell_surface *lock_surface;
+	struct weston_surface *lock_surface;
 	struct wl_listener lock_surface_listener;
 
 	struct {
@@ -129,7 +129,6 @@
 enum shell_surface_type {
 	SHELL_SURFACE_NONE,
 
-	SHELL_SURFACE_LOCK,
 	SHELL_SURFACE_SCREENSAVER,
 	SHELL_SURFACE_INPUT_PANEL,
 
@@ -1228,7 +1227,6 @@
 		wl_list_init(&surface->link);
 		break;
 	case SHELL_SURFACE_SCREENSAVER:
-	case SHELL_SURFACE_LOCK:
 		wl_resource_post_error(&surface->resource,
 				       WL_DISPLAY_ERROR_INVALID_METHOD,
 				       "cannot reassign surface type");
@@ -1858,7 +1856,7 @@
 	struct wl_list *list;
 
 	if (shell->lock_surface)
-		list = &shell->lock_surface->surface->layer_link;
+		list = &shell->lock_surface->layer_link;
 	else
 		list = &shell->lock_layer.surface_list;
 
@@ -1991,6 +1989,21 @@
 }
 
 static void
+lock_surface_configure(struct weston_surface *surface, int32_t sx, int32_t sy)
+{
+	struct desktop_shell *shell = surface->private;
+
+	center_on_output(surface, get_default_output(shell->compositor));
+
+	if (!weston_surface_is_mapped(surface)) {
+		wl_list_insert(&shell->lock_layer.surface_list,
+			       &surface->layer_link);
+		weston_surface_assign_output(surface);
+		weston_compositor_wake(shell->compositor);
+	}
+}
+
+static void
 handle_lock_surface_destroy(struct wl_listener *listener, void *data)
 {
 	struct desktop_shell *shell =
@@ -2006,7 +2019,7 @@
 			       struct wl_resource *surface_resource)
 {
 	struct desktop_shell *shell = resource->data;
-	struct shell_surface *surface = surface_resource->data;
+	struct weston_surface *surface = surface_resource->data;
 
 	shell->prepare_event_sent = false;
 
@@ -2019,7 +2032,8 @@
 	wl_signal_add(&surface_resource->destroy_signal,
 		      &shell->lock_surface_listener);
 
-	shell->lock_surface->next_type = SHELL_SURFACE_LOCK;
+	surface->configure = lock_surface_configure;
+	surface->private = shell;
 }
 
 static void
@@ -2445,7 +2459,6 @@
 	weston_surface_activate(es, seat);
 
 	switch (get_shell_surface_type(es)) {
-	case SHELL_SURFACE_LOCK:
 	case SHELL_SURFACE_INPUT_PANEL:
 		break;
 
@@ -2453,7 +2466,7 @@
 		/* always below lock surface */
 		if (shell->lock_surface)
 			weston_surface_restack(es,
-					       &shell->lock_surface->surface->layer_link);
+					       &shell->lock_surface->layer_link);
 		break;
 	case SHELL_SURFACE_FULLSCREEN:
 		/* should on top of panels */
@@ -2504,6 +2517,7 @@
 	switch (get_shell_surface_type(focus)) {
 		case SHELL_SURFACE_SCREENSAVER:
 		case SHELL_SURFACE_INPUT_PANEL:
+		case SHELL_SURFACE_NONE:
 			return;
 		default:
 			break;
@@ -2616,10 +2630,12 @@
 center_on_output(struct weston_surface *surface, struct weston_output *output)
 {
 	struct weston_mode *mode = output->current;
-	GLfloat x = (mode->width - surface->geometry.width) / 2;
-	GLfloat y = (mode->height - surface->geometry.height) / 2;
+	GLfloat x = (mode->width - surface->buffer->width) / 2;
+	GLfloat y = (mode->height - surface->buffer->height) / 2;
 
-	weston_surface_set_position(surface, output->x + x, output->y + y);
+	weston_surface_configure(surface, output->x + x, output->y + y,
+				 surface->buffer->width,
+				 surface->buffer->height);
 }
 
 
@@ -2667,9 +2683,6 @@
 		weston_surface_set_position(surface, surface->output->x,
 					    surface->output->y + panel_height);
 		break;
-	case SHELL_SURFACE_LOCK:
-		center_on_output(surface, get_default_output(compositor));
-		break;
 	case SHELL_SURFACE_INPUT_PANEL:
 		bottom_center_on_output(surface, get_default_output(compositor));
 		/* Don't map the input panel here, wait for
@@ -2688,12 +2701,6 @@
 
 	/* surface stacking order, see also activate() */
 	switch (surface_type) {
-	case SHELL_SURFACE_LOCK:
-		/* lock surface always visible, on top */
-		wl_list_insert(&shell->lock_layer.surface_list,
-			       &surface->layer_link);
-		weston_compositor_wake(compositor);
-		break;
 	case SHELL_SURFACE_SCREENSAVER:
 		/* If locked, show it. */
 		if (shell->locked) {
