diff --git a/dwl.c b/dwl.c
index 981c7e4..f762b1d 100644
--- a/dwl.c
+++ b/dwl.c
@@ -403,9 +403,6 @@ createnotify(struct wl_listener *listener, void *data)
 	Client *c = xdg_surface->data = calloc(1, sizeof(*c));
 	c->xdg_surface = xdg_surface;
 	c->bw = borderpx;
-	wlr_xdg_surface_get_geometry(c->xdg_surface, &c->geom);
-	c->geom.width += 2 * c->bw;
-	c->geom.height += 2 * c->bw;
 
 	/* Tell the client not to try anything fancy */
 	wlr_xdg_toplevel_set_tiled(c->xdg_surface, true);
@@ -658,6 +655,9 @@ maprequest(struct wl_listener *listener, void *data)
 	/* Called when the surface is mapped, or ready to display on-screen. */
 	Client *c = wl_container_of(listener, c, map);
 	/* XXX Apply client rules here */
+	wlr_xdg_surface_get_geometry(c->xdg_surface, &c->geom);
+	c->geom.width += 2 * c->bw;
+	c->geom.height += 2 * c->bw;
 	/* Insert this client into the list and put it on selmon. */
 	wl_list_insert(&clients, &c->link);
 	wl_list_insert(&fstack, &c->flink);