Index: uspace/lib/ui/private/window.h
===================================================================
--- uspace/lib/ui/private/window.h	(revision 26edcd6aa923eff290454e36cfe942db61f931e6)
+++ uspace/lib/ui/private/window.h	(revision 39f67f157a66addf10fa7890f6808b158395c215)
@@ -82,4 +82,6 @@
 	/** Display position (if fullscreen mode) */
 	gfx_coord2_t dpos;
+	/** Normal display position when not maximized (if fullscreen mode) */
+	gfx_coord2_t normal_dpos;
 	/** Application area bitmap */
 	gfx_bitmap_t *app_bmp;
Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision 26edcd6aa923eff290454e36cfe942db61f931e6)
+++ uspace/lib/ui/src/window.c	(revision 39f67f157a66addf10fa7890f6808b158395c215)
@@ -239,4 +239,11 @@
 }
 
+static void ui_window_set_dpos(ui_window_t *window, gfx_coord2_t *dpos)
+{
+	window->dpos = *dpos;
+	if (window->xgc != NULL)
+		xlate_gc_set_off(window->xgc, &window->dpos);
+}
+
 /** Create window's system menu.
  *
@@ -338,4 +345,5 @@
 	mem_gc_t *memgc = NULL;
 	xlate_gc_t *xgc = NULL;
+	gfx_coord2_t dpos;
 	errno_t rc;
 
@@ -482,8 +490,6 @@
 	if (ui->display == NULL) {
 		ui_window_place(window, &ui->rect, &params->rect, &params->prect,
-		    params->placement, &window->dpos);
-
-		if (window->xgc != NULL)
-			xlate_gc_set_off(window->xgc, &window->dpos);
+		    params->placement, &dpos);
+		ui_window_set_dpos(window, &dpos);
 	}
 
@@ -549,10 +555,11 @@
 void ui_window_update_placement(ui_window_t *window)
 {
-	if (window->placement != ui_wnd_place_popup)
+	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);
-
-	if (window->xgc != NULL)
-		xlate_gc_set_off(window->xgc, &window->dpos);
+		ui_window_set_dpos(window, &dpos);
+	}
 
 	if (window->placement == ui_wnd_place_full_screen) {
@@ -596,5 +603,5 @@
 	/* Need to repaint if windows are emulated */
 	if (ui_is_fullscreen(ui)) {
-		ui_paint(ui);
+		(void)ui_paint(ui);
 		/* Send focus event to newly active window */
 		nwindow = ui_window_get_active(ui);
@@ -709,4 +716,5 @@
 	gfx_bitmap_alloc_t app_alloc;
 	gfx_bitmap_alloc_t win_alloc;
+	gfx_coord2_t dpos;
 	errno_t rc;
 
@@ -784,4 +792,19 @@
 			break;
 		}
+	} else {
+		/* fullscreen mode or unit tests */
+		switch (scop) {
+		case ui_wsc_resize:
+			break;
+		case ui_wsc_maximize:
+			window->normal_dpos = window->dpos;
+			dpos.x = 0;
+			dpos.y = 0;
+			ui_window_set_dpos(window, &dpos);
+			break;
+		case ui_wsc_unmaximize:
+			ui_window_set_dpos(window, &window->normal_dpos);
+			break;
+		}
 	}
 
@@ -822,4 +845,8 @@
 		window->app_bmp = app_bmp;
 	}
+
+	/* Need to repaint UI if windows are emulated */
+	if (ui_is_fullscreen(window->ui))
+		(void)ui_paint(window->ui);
 
 	return EOK;
