Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision 4034954cea3faa7e7a1a926e6bd2cfc10d48f1f3)
+++ uspace/lib/ui/src/window.c	(revision e54de59820fcb74a3567090960136c7c1512bf11)
@@ -178,4 +178,6 @@
 {
 	gfx_coord2_t dims;
+	gfx_coord2_t below_pos;
+	gfx_rect_t below_rect;
 
 	assert(params->placement != ui_wnd_place_default ||
@@ -211,7 +213,20 @@
 		break;
 	case ui_wnd_place_popup:
-		/* Place popup window below parent rectangle */
-		pos->x = params->prect.p0.x;
-		pos->y = params->prect.p1.y;
+		/* Compute rectangle when placed below */
+		below_pos.x = params->prect.p0.x;
+		below_pos.y = params->prect.p1.y;
+		gfx_rect_translate(&below_pos, &params->rect, &below_rect);
+
+		/* Does below_rect fit within the display? */
+		if (gfx_rect_is_inside(&below_rect, drect)) {
+			/* Place popup window below parent rectangle */
+			pos->x = params->prect.p0.x - params->rect.p0.x;
+			pos->y = params->prect.p1.y - params->rect.p0.y;
+		} else {
+			/* Place popup window above parent rectangle */
+			pos->x = params->prect.p0.x;
+			pos->y = params->prect.p0.y -
+			    (params->rect.p1.y - params->rect.p0.y);
+		}
 		break;
 	}
