Index: uspace/app/uidemo/uidemo.c
===================================================================
--- uspace/app/uidemo/uidemo.c	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/app/uidemo/uidemo.c	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -46,4 +46,5 @@
 #include <ui/menuentry.h>
 #include <ui/menu.h>
+#include <ui/msgdialog.h>
 #include <ui/pbutton.h>
 #include <ui/resource.h>
@@ -84,5 +85,14 @@
 };
 
+static void uidemo_file_message(ui_menu_entry_t *, void *);
 static void uidemo_file_exit(ui_menu_entry_t *, void *);
+
+static void msg_dialog_button(ui_msg_dialog_t *, void *, unsigned);
+static void msg_dialog_close(ui_msg_dialog_t *, void *);
+
+static ui_msg_dialog_cb_t msg_dialog_cb = {
+	.button = msg_dialog_button,
+	.close = msg_dialog_close
+};
 
 /** Window close button was clicked.
@@ -190,9 +200,35 @@
 }
 
-/** File/exit menu entry selected.
+/** File/message menu entry selected.
  *
  * @param mentry Menu entry
  * @param arg Argument (demo)
  */
+static void uidemo_file_message(ui_menu_entry_t *mentry, void *arg)
+{
+	ui_demo_t *demo = (ui_demo_t *) arg;
+	ui_msg_dialog_params_t mdparams;
+	ui_msg_dialog_t *dialog;
+	errno_t rc;
+
+	ui_msg_dialog_params_init(&mdparams);
+	mdparams.caption = "Message For You";
+	mdparams.text = "Hello, world!";
+
+	rc = ui_msg_dialog_create(demo->ui, &mdparams, &dialog);
+	if (rc != EOK) {
+		printf("Error creating message dialog.\n");
+		return;
+	}
+
+	ui_msg_dialog_set_cb(dialog, &msg_dialog_cb, &demo);
+
+}
+
+/** File/exit menu entry selected.
+ *
+ * @param mentry Menu entry
+ * @param arg Argument (demo)
+ */
 static void uidemo_file_exit(ui_menu_entry_t *mentry, void *arg)
 {
@@ -200,4 +236,32 @@
 
 	ui_quit(demo->ui);
+}
+
+/** Message dialog button press.
+ *
+ * @param dialog Message dialog
+ * @param arg Argument (ui_demo_t *)
+ * @param bnum Button number
+ */
+static void msg_dialog_button(ui_msg_dialog_t *dialog, void *arg,
+    unsigned bnum)
+{
+	ui_demo_t *demo = (ui_demo_t *) arg;
+
+	(void) demo;
+	ui_msg_dialog_destroy(dialog);
+}
+
+/** Message dialog close request.
+ *
+ * @param dialog Message dialog
+ * @param arg Argument (ui_demo_t *)
+ */
+static void msg_dialog_close(ui_msg_dialog_t *dialog, void *arg)
+{
+	ui_demo_t *demo = (ui_demo_t *) arg;
+
+	(void) demo;
+	ui_msg_dialog_destroy(dialog);
 }
 
@@ -215,4 +279,5 @@
 	gfx_bitmap_t *bitmap;
 	gfx_coord2_t off;
+	ui_menu_entry_t *mmsg;
 	ui_menu_entry_t *mfoo;
 	ui_menu_entry_t *mbar;
@@ -228,14 +293,23 @@
 	}
 
+	memset((void *) &demo, 0, sizeof(demo));
+	demo.ui = ui;
+
 	ui_wnd_params_init(&params);
 	params.caption = "UI Demo";
 	params.style |= ui_wds_resizable;
-	params.rect.p0.x = 0;
-	params.rect.p0.y = 0;
-	params.rect.p1.x = 220;
-	params.rect.p1.y = 350;
-
-	memset((void *) &demo, 0, sizeof(demo));
-	demo.ui = ui;
+
+	/* FIXME: Auto layout */
+	if (ui_is_textmode(ui)) {
+		params.rect.p0.x = 0;
+		params.rect.p0.y = 0;
+		params.rect.p1.x = 80;
+		params.rect.p1.y = 25;
+	} else {
+		params.rect.p0.x = 0;
+		params.rect.p0.y = 0;
+		params.rect.p1.x = 220;
+		params.rect.p1.y = 350;
+	}
 
 	rc = ui_window_create(ui, &params, &window);
@@ -269,4 +343,12 @@
 	}
 
+	rc = ui_menu_entry_create(demo.mfile, "Message", "", &mmsg);
+	if (rc != EOK) {
+		printf("Error creating menu.\n");
+		return rc;
+	}
+
+	ui_menu_entry_set_cb(mmsg, uidemo_file_message, (void *) &demo);
+
 	rc = ui_menu_entry_create(demo.mfile, "Foo", "Ctrl-Alt-Del", &mfoo);
 	if (rc != EOK) {
@@ -325,8 +407,16 @@
 	}
 
-	rect.p0.x = 4;
-	rect.p0.y = 30;
-	rect.p1.x = 216;
-	rect.p1.y = 52;
+	/* FIXME: Auto layout */
+	if (ui_is_textmode(ui)) {
+		rect.p0.x = 1;
+		rect.p0.y = 2;
+		rect.p1.x = 79;
+		rect.p1.y = 3;
+	} else {
+		rect.p0.x = 4;
+		rect.p0.y = 30;
+		rect.p1.x = 216;
+		rect.p1.y = 52;
+	}
 	ui_menu_bar_set_rect(demo.mbar, &rect);
 
Index: uspace/lib/ui/include/ui/ui.h
===================================================================
--- uspace/lib/ui/include/ui/ui.h	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/include/ui/ui.h	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -49,5 +49,7 @@
 extern void ui_quit(ui_t *);
 extern void ui_run(ui_t *);
+extern errno_t ui_paint(ui_t *);
 extern bool ui_is_textmode(ui_t *);
+extern bool ui_is_fullscreen(ui_t *);
 
 #endif
Index: uspace/lib/ui/include/ui/wdecor.h
===================================================================
--- uspace/lib/ui/include/ui/wdecor.h	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/include/ui/wdecor.h	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -41,4 +41,5 @@
 #include <io/pos_event.h>
 #include <stdbool.h>
+#include <types/ui/event.h>
 #include <types/ui/resource.h>
 #include <types/ui/wdecor.h>
@@ -51,5 +52,5 @@
 extern void ui_wdecor_set_active(ui_wdecor_t *, bool);
 extern errno_t ui_wdecor_paint(ui_wdecor_t *);
-extern void ui_wdecor_pos_event(ui_wdecor_t *, pos_event_t *);
+extern ui_evclaim_t ui_wdecor_pos_event(ui_wdecor_t *, pos_event_t *);
 extern void ui_wdecor_rect_from_app(ui_wdecor_style_t, gfx_rect_t *,
     gfx_rect_t *);
Index: uspace/lib/ui/include/ui/window.h
===================================================================
--- uspace/lib/ui/include/ui/window.h	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/include/ui/window.h	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -53,4 +53,5 @@
 extern void ui_window_add(ui_window_t *, ui_control_t *);
 extern void ui_window_remove(ui_window_t *, ui_control_t *);
+extern ui_window_t *ui_window_get_active(ui_t *);
 extern errno_t ui_window_resize(ui_window_t *, gfx_rect_t *);
 extern ui_resource_t *ui_window_get_res(ui_window_t *);
Index: uspace/lib/ui/private/ui.h
===================================================================
--- uspace/lib/ui/private/ui.h	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/private/ui.h	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -38,4 +38,5 @@
 #define _UI_PRIVATE_UI_H
 
+#include <adt/list.h>
 #include <display.h>
 #include <io/console.h>
@@ -49,4 +50,6 @@
 	/** Console */
 	console_ctrl_t *console;
+	/** Console GC */
+	struct console_gc *cgc;
 	/** Display */
 	display_t *display;
@@ -55,6 +58,6 @@
 	/** @c true if terminating */
 	bool quit;
-	/** Root window (in fullscreen/console mode) */
-	struct ui_window *root_wnd;
+	/** Windows (in stacking order, ui_window_t) */
+	list_t windows;
 };
 
Index: uspace/lib/ui/private/window.h
===================================================================
--- uspace/lib/ui/private/window.h	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/private/window.h	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -38,4 +38,5 @@
 #define _UI_PRIVATE_WINDOW_H
 
+#include <adt/list.h>
 #include <errno.h>
 #include <congfx/console.h>
@@ -55,4 +56,6 @@
 	/** Containing user interface */
 	struct ui *ui;
+	/** Link to @c ui->windows */
+	link_t lwindows;
 	/** Callbacks */
 	struct ui_window_cb *cb;
@@ -61,6 +64,4 @@
 	/** Display window */
 	display_window_t *dwindow;
-	/** Console GC */
-	console_gc_t *cgc;
 	/** Window GC */
 	gfx_context_t *gc;
Index: uspace/lib/ui/src/msgdialog.c
===================================================================
--- uspace/lib/ui/src/msgdialog.c	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/src/msgdialog.c	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -42,4 +42,5 @@
 #include <ui/pbutton.h>
 #include <ui/resource.h>
+#include <ui/ui.h>
 #include <ui/window.h>
 #include "../private/msgdialog.h"
@@ -97,8 +98,17 @@
 	ui_wnd_params_init(&wparams);
 	wparams.caption = params->caption;
-	wparams.rect.p0.x = 0;
-	wparams.rect.p0.y = 0;
-	wparams.rect.p1.x = 200;
-	wparams.rect.p1.y = 110;
+
+	/* FIXME: Auto layout */
+	if (ui_is_textmode(ui)) {
+		wparams.rect.p0.x = 0;
+		wparams.rect.p0.y = 0;
+		wparams.rect.p1.x = 20;
+		wparams.rect.p1.y = 7;
+	} else {
+		wparams.rect.p0.x = 0;
+		wparams.rect.p0.y = 0;
+		wparams.rect.p1.x = 200;
+		wparams.rect.p1.y = 110;
+	}
 
 	rc = ui_window_create(ui, &wparams, &window);
@@ -118,8 +128,17 @@
 		goto error;
 
-	rect.p0.x = 10;
-	rect.p0.y = 35;
-	rect.p1.x = 190;
-	rect.p1.y = 50;
+	/* FIXME: Auto layout */
+	if (ui_is_textmode(ui)) {
+		rect.p0.x = 3;
+		rect.p0.y = 2;
+		rect.p1.x = 17;
+		rect.p1.y = 3;
+	} else {
+		rect.p0.x = 10;
+		rect.p0.y = 35;
+		rect.p1.x = 190;
+		rect.p1.y = 50;
+	}
+
 	ui_label_set_rect(label, &rect);
 	ui_label_set_halign(label, gfx_halign_center);
@@ -137,8 +156,17 @@
 	ui_pbutton_set_cb(bok, &ui_msg_dialog_btn_cb, dialog);
 
-	rect.p0.x = 55;
-	rect.p0.y = 60;
-	rect.p1.x = 145;
-	rect.p1.y = 88;
+	/* FIXME: Auto layout */
+	if (ui_is_textmode(ui)) {
+		rect.p0.x = 8;
+		rect.p0.y = 4;
+		rect.p1.x = 12;
+		rect.p1.y = 5;
+	} else {
+		rect.p0.x = 55;
+		rect.p0.y = 60;
+		rect.p1.x = 145;
+		rect.p1.y = 88;
+	}
+
 	ui_pbutton_set_rect(bok, &rect);
 
Index: uspace/lib/ui/src/ui.c
===================================================================
--- uspace/lib/ui/src/ui.c	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/src/ui.c	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -34,4 +34,5 @@
  */
 
+#include <adt/list.h>
 #include <ctype.h>
 #include <display.h>
@@ -45,4 +46,5 @@
 #include <ui/ui.h>
 #include <ui/wdecor.h>
+#include <ui/window.h>
 #include "../private/window.h"
 #include "../private/ui.h"
@@ -104,4 +106,5 @@
 	display_t *display;
 	console_ctrl_t *console;
+	console_gc_t *cgc;
 	ui_winsys_t ws;
 	const char *osvc;
@@ -131,4 +134,13 @@
 			return rc;
 		}
+
+		rc = console_gc_create(console, NULL, &cgc);
+		if (rc != EOK) {
+			ui_destroy(ui);
+			console_done(console);
+			return rc;
+		}
+
+		ui->cgc = cgc;
 	} else {
 		return EINVAL;
@@ -154,4 +166,5 @@
 
 	ui->console = console;
+	list_initialize(&ui->windows);
 	*rui = ui;
 	return EOK;
@@ -173,4 +186,5 @@
 
 	ui->display = disp;
+	list_initialize(&ui->windows);
 	*rui = ui;
 	return EOK;
@@ -187,4 +201,6 @@
 
 	if (ui->myoutput) {
+		if (ui->cgc != NULL)
+			console_gc_delete(ui->cgc);
 		if (ui->console != NULL)
 			console_done(ui->console);
@@ -198,14 +214,20 @@
 static void ui_cons_event_process(ui_t *ui, cons_event_t *event)
 {
-	if (ui->root_wnd == NULL)
+	ui_window_t *awnd;
+	ui_evclaim_t claim;
+
+	awnd = ui_window_get_active(ui);
+	if (awnd == NULL)
 		return;
 
 	switch (event->type) {
 	case CEV_KEY:
-		ui_window_send_kbd(ui->root_wnd, &event->ev.key);
+		ui_window_send_kbd(awnd, &event->ev.key);
 		break;
 	case CEV_POS:
-		ui_wdecor_pos_event(ui->root_wnd->wdecor, &event->ev.pos);
-		ui_window_send_pos(ui->root_wnd, &event->ev.pos);
+		claim = ui_wdecor_pos_event(awnd->wdecor, &event->ev.pos);
+		/* Note: If event is claimed, awnd might not be valid anymore */
+		if (claim == ui_unclaimed)
+			ui_window_send_pos(awnd, &event->ev.pos);
 		break;
 	}
@@ -248,4 +270,28 @@
 }
 
+/** Repaint UI (only used in fullscreen mode).
+ *
+ * This is used when an area is exposed in fullscreen mode.
+ *
+ * @param ui UI
+ * @return @c EOK on success or an error code
+ */
+errno_t ui_paint(ui_t *ui)
+{
+	errno_t rc;
+	ui_window_t *awnd;
+
+	/* XXX Should repaint all windows */
+	awnd = ui_window_get_active(ui);
+	if (awnd == NULL)
+		return EOK;
+
+	rc = ui_wdecor_paint(awnd->wdecor);
+	if (rc != EOK)
+		return rc;
+
+	return ui_window_paint(awnd);
+}
+
 /** Terminate user interface.
  *
@@ -275,4 +321,14 @@
 }
 
+/** Determine if we are emulating windows.
+ *
+ * @param ui User interface
+ * @return @c true iff we are running in text mode
+ */
+bool ui_is_fullscreen(ui_t *ui)
+{
+	return (ui->display == NULL);
+}
+
 /** @}
  */
Index: uspace/lib/ui/src/wdecor.c
===================================================================
--- uspace/lib/ui/src/wdecor.c	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/src/wdecor.c	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -556,6 +556,7 @@
  * @param wdecor Window decoration
  * @param pos_event Position event
- */
-void ui_wdecor_pos_event(ui_wdecor_t *wdecor, pos_event_t *event)
+ * @return @c ui_claimed iff event was claimed
+ */
+ui_evclaim_t ui_wdecor_pos_event(ui_wdecor_t *wdecor, pos_event_t *event)
 {
 	gfx_coord2_t pos;
@@ -571,14 +572,18 @@
 		claim = ui_pbutton_pos_event(wdecor->btn_close, event);
 		if (claim == ui_claimed)
-			return;
+			return ui_claimed;
 	}
 
 	ui_wdecor_frame_pos_event(wdecor, event);
 
-	if ((wdecor->style & ui_wds_titlebar) != 0)  {
+	if ((wdecor->style & ui_wds_titlebar) != 0) {
 		if (event->type == POS_PRESS &&
-		    gfx_pix_inside_rect(&pos, &geom.title_bar_rect))
+		    gfx_pix_inside_rect(&pos, &geom.title_bar_rect)) {
 			ui_wdecor_move(wdecor, &pos);
-	}
+			return ui_claimed;
+		}
+	}
+
+	return ui_unclaimed;
 }
 
Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/src/window.c	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -133,9 +133,5 @@
 	gfx_bitmap_t *bmp = NULL;
 	mem_gc_t *memgc = NULL;
-	console_gc_t *cgc = NULL;
 	errno_t rc;
-
-	if (ui->root_wnd != NULL)
-		return EEXIST;
 
 	window = calloc(1, sizeof(ui_window_t));
@@ -202,9 +198,5 @@
 			goto error;
 	} else if (ui->console != NULL) {
-		rc = console_gc_create(ui->console, NULL, &cgc);
-		if (rc != EOK)
-			goto error;
-
-		gc = console_gc_get_ctx(cgc);
+		gc = console_gc_get_ctx(ui->cgc);
 	} else {
 		/* Needed for unit tests */
@@ -257,5 +249,4 @@
 	window->gc = gc;
 #endif
-	window->cgc = cgc;
 
 	rc = ui_resource_create(window->gc, ui_is_textmode(ui), &res);
@@ -282,5 +273,5 @@
 	*rwindow = window;
 
-	ui->root_wnd = window;
+	list_append(&window->lwindows, &ui->windows);
 	return EOK;
 error:
@@ -295,6 +286,4 @@
 	if (dgc != NULL)
 		dummygc_destroy(dgc);
-	if (cgc != NULL)
-		console_gc_delete(cgc);
 	if (dwindow != NULL)
 		display_window_destroy(dwindow);
@@ -309,7 +298,12 @@
 void ui_window_destroy(ui_window_t *window)
 {
+	ui_t *ui;
+
 	if (window == NULL)
 		return;
 
+	ui = window->ui;
+
+	list_remove(&window->lwindows);
 	ui_control_destroy(window->control);
 	ui_wdecor_destroy(window->wdecor);
@@ -328,7 +322,11 @@
 	if (window->dwindow != NULL)
 		display_window_destroy(window->dwindow);
-	if (window->cgc != NULL)
-		console_gc_delete(window->cgc);
+
 	free(window);
+
+	/* Need to repaint if windows are emulated */
+	if (ui_is_fullscreen(ui)) {
+		ui_paint(ui);
+	}
 }
 
@@ -362,4 +360,20 @@
 	window->control = NULL;
 	control->elemp = NULL;
+}
+
+/** Get active window (only valid in fullscreen mode).
+ *
+ * @param ui User interface
+ * @return Active window
+ */
+ui_window_t *ui_window_get_active(ui_t *ui)
+{
+	link_t *link;
+
+	link = list_last(&ui->windows);
+	if (link == NULL)
+		return NULL;
+
+	return list_get_instance(link, ui_window_t, lwindows);
 }
 
Index: uspace/lib/ui/test/ui.c
===================================================================
--- uspace/lib/ui/test/ui.c	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/test/ui.c	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -35,6 +35,6 @@
 PCUT_TEST_SUITE(ui);
 
-/** Create and destroy UI */
-PCUT_TEST(create_destroy)
+/** Create and destroy UI with display */
+PCUT_TEST(create_disp_destroy)
 {
 	ui_t *ui = NULL;
@@ -49,4 +49,18 @@
 }
 
+/** Create and destroy UI with console */
+PCUT_TEST(create_cons_destroy)
+{
+	ui_t *ui = NULL;
+	errno_t rc;
+
+	rc = ui_create_cons(NULL, &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ui);
+	PCUT_ASSERT_NULL(ui->console);
+
+	ui_destroy(ui);
+}
+
 /** ui_destroy() can take NULL argument (no-op) */
 PCUT_TEST(destroy_null)
@@ -55,3 +69,85 @@
 }
 
+/** ui_run() / ui_quit() */
+PCUT_TEST(run_quit)
+{
+	ui_t *ui = NULL;
+	errno_t rc;
+
+	rc = ui_create_disp(NULL, &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ui);
+
+	/* Set exit flag */
+	ui_quit(ui);
+
+	/* ui_run() should return immediately */
+	ui_run(ui);
+
+	ui_destroy(ui);
+}
+
+/** ui_paint() */
+PCUT_TEST(paint)
+{
+	ui_t *ui = NULL;
+	errno_t rc;
+
+	rc = ui_create_cons(NULL, &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ui);
+
+	/* In absence of windows ui_paint() should just return EOK */
+	rc = ui_paint(ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	ui_destroy(ui);
+}
+
+/** ui_is_textmode() */
+PCUT_TEST(is_textmode)
+{
+	ui_t *ui = NULL;
+	errno_t rc;
+
+	rc = ui_create_disp((display_t *)(-1), &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ui);
+
+	PCUT_ASSERT_FALSE(ui_is_textmode(ui));
+
+	ui_destroy(ui);
+
+	rc = ui_create_cons((console_ctrl_t *)(-1), &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ui);
+
+	PCUT_ASSERT_TRUE(ui_is_textmode(ui));
+
+	ui_destroy(ui);
+}
+
+/** ui_is_fullscreen() */
+PCUT_TEST(is_fullscreen)
+{
+	ui_t *ui = NULL;
+	errno_t rc;
+
+	rc = ui_create_disp((display_t *)(-1), &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ui);
+
+	PCUT_ASSERT_FALSE(ui_is_fullscreen(ui));
+
+	ui_destroy(ui);
+
+	rc = ui_create_cons((console_ctrl_t *)(-1), &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ui);
+
+	PCUT_ASSERT_TRUE(ui_is_fullscreen(ui));
+
+	ui_destroy(ui);
+}
+
 PCUT_EXPORT(ui);
Index: uspace/lib/ui/test/window.c
===================================================================
--- uspace/lib/ui/test/window.c	(revision de227abadf3d5757d374f93d6822275c5b090446)
+++ uspace/lib/ui/test/window.c	(revision 252d03cdce4fb131247f5dd8f472481f4b7c3417)
@@ -178,4 +178,50 @@
 }
 
+/** ui_window_get_active */
+PCUT_TEST(get_active)
+{
+	errno_t rc;
+	ui_t *ui = NULL;
+	ui_wnd_params_t params;
+	ui_window_t *window1 = NULL;
+	ui_window_t *window2 = NULL;
+	ui_window_t *awnd;
+
+	rc = ui_create_cons(NULL, &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	awnd = ui_window_get_active(ui);
+	PCUT_ASSERT_NULL(awnd);
+
+	ui_wnd_params_init(&params);
+	params.caption = "Hello";
+
+	rc = ui_window_create(ui, &params, &window1);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(window1);
+
+	awnd = ui_window_get_active(ui);
+	PCUT_ASSERT_EQUALS(window1, awnd);
+
+	rc = ui_window_create(ui, &params, &window2);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(window2);
+
+	awnd = ui_window_get_active(ui);
+	PCUT_ASSERT_EQUALS(window2, awnd);
+
+	ui_window_destroy(window2);
+
+	awnd = ui_window_get_active(ui);
+	PCUT_ASSERT_EQUALS(window1, awnd);
+
+	ui_window_destroy(window1);
+
+	awnd = ui_window_get_active(ui);
+	PCUT_ASSERT_NULL(awnd);
+
+	ui_destroy(ui);
+}
+
 /** ui_window_resize */
 PCUT_TEST(resize)
