Index: uspace/lib/display/include/types/display/wndparams.h
===================================================================
--- uspace/lib/display/include/types/display/wndparams.h	(revision 4b72e81f444c2a9e4b2a217241ce15cc068a7084)
+++ uspace/lib/display/include/types/display/wndparams.h	(revision 1bebc9068cc17a7b97d059f342fc64f90c7b2627)
@@ -41,5 +41,7 @@
 typedef enum {
 	/** Popup window (capture events, no focus) */
-	wndf_popup = 0x1
+	wndf_popup = 0x1,
+	/** Set specific initial window position */
+	wndf_setpos = 0x2
 } display_wnd_flags_t;
 
@@ -56,4 +58,6 @@
 	/** Minimum size (when being resized) */
 	gfx_coord2_t min_size;
+	/** Initial position (if flag wndf_setpos is set) */
+	gfx_coord2_t pos;
 	/** Flags */
 	display_wnd_flags_t flags;
Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision 4b72e81f444c2a9e4b2a217241ce15cc068a7084)
+++ uspace/lib/ui/src/window.c	(revision 1bebc9068cc17a7b97d059f342fc64f90c7b2627)
@@ -109,14 +109,22 @@
 }
 
-static errno_t ui_window_place(ui_window_t *window, display_t *display,
-    display_info_t *info, ui_wnd_params_t *params)
-{
-	gfx_coord2_t pos;
-	errno_t rc;
-
+/** Compute where window should be placed on the screen.
+ *
+ * This only applies to windows that do not use default placement.
+ *
+ * @param window Window
+ * @param display Display
+ * @param info Display info
+ * @param params Window parameters
+ * @param pos Place to store position of top-left corner
+ */
+static void ui_window_place(ui_window_t *window, display_t *display,
+    display_info_t *info, ui_wnd_params_t *params, gfx_coord2_t *pos)
+{
 	assert(params->placement != ui_wnd_place_default);
 
-	pos.x = 0;
-	pos.y = 0;
+	pos->x = 0;
+	pos->y = 0;
+
 	switch (params->placement) {
 	case ui_wnd_place_default:
@@ -124,33 +132,25 @@
 	case ui_wnd_place_top_left:
 	case ui_wnd_place_full_screen:
-		pos.x = info->rect.p0.x - params->rect.p0.x;
-		pos.y = info->rect.p0.y - params->rect.p0.y;
+		pos->x = info->rect.p0.x - params->rect.p0.x;
+		pos->y = info->rect.p0.y - params->rect.p0.y;
 		break;
 	case ui_wnd_place_top_right:
-		pos.x = info->rect.p1.x - params->rect.p1.x;
-		pos.y = info->rect.p0.y - params->rect.p0.y;
+		pos->x = info->rect.p1.x - params->rect.p1.x;
+		pos->y = info->rect.p0.y - params->rect.p0.y;
 		break;
 	case ui_wnd_place_bottom_left:
-		pos.x = info->rect.p0.x - params->rect.p0.x;
-		pos.y = info->rect.p1.y - params->rect.p1.y;
+		pos->x = info->rect.p0.x - params->rect.p0.x;
+		pos->y = info->rect.p1.y - params->rect.p1.y;
 		break;
 	case ui_wnd_place_bottom_right:
-		pos.x = info->rect.p1.x - params->rect.p1.x;
-		pos.y = info->rect.p1.y - params->rect.p1.y;
+		pos->x = info->rect.p1.x - params->rect.p1.x;
+		pos->y = info->rect.p1.y - params->rect.p1.y;
 		break;
 	case ui_wnd_place_popup:
 		/* Place popup window below parent rectangle */
-		pos.x = params->prect.p0.x;
-		pos.y = params->prect.p1.y;
+		pos->x = params->prect.p0.x;
+		pos->y = params->prect.p1.y;
 		break;
 	}
-
-	rc = display_window_move(window->dwindow, &pos);
-	if (rc != EOK)
-		goto error;
-
-	return EOK;
-error:
-	return rc;
 }
 
@@ -205,15 +205,16 @@
 		}
 
+		if (params->placement != ui_wnd_place_default) {
+			/* Set initial display window position */
+			ui_window_place(window, ui->display, &info,
+			    params, &dparams.pos);
+
+			dparams.flags |= wndf_setpos;
+		}
+
 		rc = display_window_create(ui->display, &dparams, &dwnd_cb,
 		    (void *) window, &window->dwindow);
 		if (rc != EOK)
 			goto error;
-
-		if (params->placement != ui_wnd_place_default) {
-			rc = ui_window_place(window, ui->display, &info,
-			    params);
-			if (rc != EOK)
-				goto error;
-		}
 
 		rc = display_window_get_gc(window->dwindow, &gc);
Index: uspace/srv/hid/display/window.c
===================================================================
--- uspace/srv/hid/display/window.c	(revision 4b72e81f444c2a9e4b2a217241ce15cc068a7084)
+++ uspace/srv/hid/display/window.c	(revision 1bebc9068cc17a7b97d059f342fc64f90c7b2627)
@@ -119,6 +119,12 @@
 	wnd->flags = params->flags;
 
-	wnd->dpos.x = ((wnd->id - 1) & 1) * 400;
-	wnd->dpos.y = ((wnd->id - 1) & 2) / 2 * 300;
+	if ((params->flags & wndf_setpos) != 0) {
+		/* Specific window position */
+		wnd->dpos = params->pos;
+	} else {
+		/* Automatic window placement */
+		wnd->dpos.x = ((wnd->id - 1) & 1) * 400;
+		wnd->dpos.y = ((wnd->id - 1) & 2) / 2 * 300;
+	}
 
 	seat = ds_display_first_seat(client->display);
