diff --git a/src/phosh.c b/src/phosh.c
index 0bbadc7eddf3bd4d3d606e9c23e989363259abca..fac7c2c3d5b984a46b97fbb4cecb86c28152d4e3 100644
--- a/src/phosh.c
+++ b/src/phosh.c
@@ -239,12 +239,21 @@ lockscreen_create (PhoshShell *self)
   gdk_wayland_window_set_use_custom_surface (gdk_window);
 
   lockscreen->wl_surface = gdk_wayland_window_get_wl_surface (gdk_window);
-
-#if 0
-  phosh_mobile_shell_set_lock_surface(priv->mshell,
-                                      lockscreen->wl_surface);
-#endif
-  gtk_widget_show_all (lockscreen->window);
+  lockscreen->layer_surface = zwlr_layer_shell_v1_get_layer_surface(priv->layer_shell,
+                                                                    lockscreen->wl_surface,
+                                                                    priv->output,
+                                                                    ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY,
+                                                                    "lockscreen");
+  zwlr_layer_surface_v1_set_exclusive_zone(lockscreen->layer_surface, -1);
+  zwlr_layer_surface_v1_set_size(lockscreen->layer_surface, 0, 0);
+  zwlr_layer_surface_v1_set_anchor(lockscreen->layer_surface,
+                                   ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP |
+                                   ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM |
+                                   ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT |
+                                   ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT);
+  zwlr_layer_surface_v1_set_keyboard_interactivity(lockscreen->layer_surface, TRUE);
+  zwlr_layer_surface_v1_add_listener(lockscreen->layer_surface, &layer_surface_listener, lockscreen);
+  wl_surface_commit(lockscreen->wl_surface);
   priv->lockscreen = lockscreen;
 
   priv->unlock_handler_id = g_signal_connect_swapped (