Index: uspace/lib/ui/src/ui.c
===================================================================
--- uspace/lib/ui/src/ui.c	(revision 6d172f6f942ee586753c1ddcb2112db4d6e11b55)
+++ uspace/lib/ui/src/ui.c	(revision d097daca0b4477f4950c6da8f56adc0b0d6990d3)
@@ -55,6 +55,6 @@
  *
  * Output specification has the form <proto>@<service> where proto is
- * eiher 'disp' for display service or 'cons' for console. Service
- * is a location ID service name (e.g. hid/display).
+ * eiher 'disp' for display service, 'cons' for console, 'null'
+ * for dummy output. Service is a location ID service name (e.g. hid/display).
  *
  * @param ospec Output specification
@@ -82,4 +82,6 @@
 		} else if (str_lcmp(ospec, "cons@", str_length("cons@")) == 0) {
 			*ws = ui_ws_console;
+		} else if (str_lcmp(ospec, "null@", str_length("null@")) == 0) {
+			*ws = ui_ws_null;
 		} else {
 			*ws = ui_ws_unknown;
@@ -99,5 +101,7 @@
  *
  * @param ospec Output specification or @c UI_DISPLAY_DEFAULT to use
- *              the default output
+ *              the default display service, UI_CONSOLE_DEFAULT to use
+ *		the default console service, UI_DISPLAY_NULL to use
+ *		dummy output.
  * @param rui Place to store pointer to new UI
  * @return EOK on success or an error code
@@ -161,4 +165,8 @@
 
 		(void) ui_paint(ui);
+	} else if (ws == ui_ws_null) {
+		rc = ui_create_disp(NULL, &ui);
+		if (rc != EOK)
+			return rc;
 	} else {
 		return EINVAL;
Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision 6d172f6f942ee586753c1ddcb2112db4d6e11b55)
+++ uspace/lib/ui/src/window.c	(revision d097daca0b4477f4950c6da8f56adc0b0d6990d3)
@@ -601,4 +601,14 @@
 }
 
+/** Get window's containing UI.
+ *
+ * @param window Window
+ * @return Containing UI
+ */
+ui_t *ui_window_get_ui(ui_window_t *window)
+{
+	return window->ui;
+}
+
 /** Get UI resource from window.
  *
