Index: uspace/lib/ui/private/window.h
===================================================================
--- uspace/lib/ui/private/window.h	(revision 08fcaf2e9fc8c8f800c122f335594e981d2a53bd)
+++ uspace/lib/ui/private/window.h	(revision a927af7a94bc0a231b58cf501c89c9a899350c71)
@@ -50,4 +50,10 @@
 #include <types/ui/cursor.h>
 #include <types/ui/window.h>
+
+/** UI window flags. */
+typedef enum {
+	/** Window is maximized */
+	uiwf_maximized = 0x1
+} ui_window_flags_t;
 
 /** Actual structure of window.
@@ -112,4 +118,6 @@
 	/** Window placement */
 	ui_wnd_placement_t placement;
+	/** Window flags */
+	ui_wnd_flags_t flags;
 };
 
Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision 08fcaf2e9fc8c8f800c122f335594e981d2a53bd)
+++ uspace/lib/ui/src/window.c	(revision a927af7a94bc0a231b58cf501c89c9a899350c71)
@@ -555,13 +555,7 @@
 void ui_window_update_placement(ui_window_t *window)
 {
-	gfx_coord2_t dpos;
-
-	if (window->placement != ui_wnd_place_popup) {
-		ui_window_place(window, &window->ui->rect, &window->rect,
-		    NULL, window->placement, &window->dpos);
-		ui_window_set_dpos(window, &dpos);
-	}
-
-	if (window->placement == ui_wnd_place_full_screen) {
+	if (window->placement == ui_wnd_place_full_screen ||
+	    (window->flags & uiwf_maximized) != 0) {
+		/* Update size of fullscreen or maximized window. */
 		(void)ui_window_resize(window, &window->ui->rect);
 		ui_window_send_resize(window);
@@ -850,4 +844,15 @@
 		(void)ui_paint(window->ui);
 
+	switch (scop) {
+	case ui_wsc_resize:
+		break;
+	case ui_wsc_maximize:
+		window->flags |= uiwf_maximized;
+		break;
+	case ui_wsc_unmaximize:
+		window->flags &= ~uiwf_maximized;
+		break;
+	}
+
 	return EOK;
 error:
