Index: uspace/app/calculator/calculator.c
===================================================================
--- uspace/app/calculator/calculator.c	(revision ec8a1bf729633d598cbbcad31d55f267ed2c6237)
+++ uspace/app/calculator/calculator.c	(revision 552b69f240ec8edc47b2b988d0b23e54621bbde0)
@@ -787,5 +787,5 @@
 int main(int argc, char *argv[])
 {
-	const char *display_spec = UI_DISPLAY_DEFAULT;
+	const char *display_spec = UI_ANY_DEFAULT;
 	ui_t *ui;
 	ui_resource_t *ui_res;
Index: uspace/app/hello/hello.c
===================================================================
--- uspace/app/hello/hello.c	(revision ec8a1bf729633d598cbbcad31d55f267ed2c6237)
+++ uspace/app/hello/hello.c	(revision 552b69f240ec8edc47b2b988d0b23e54621bbde0)
@@ -152,5 +152,5 @@
 int main(int argc, char *argv[])
 {
-	const char *display_spec = UI_DISPLAY_DEFAULT;
+	const char *display_spec = UI_ANY_DEFAULT;
 	errno_t rc;
 	int i;
Index: uspace/app/launcher/launcher.c
===================================================================
--- uspace/app/launcher/launcher.c	(revision ec8a1bf729633d598cbbcad31d55f267ed2c6237)
+++ uspace/app/launcher/launcher.c	(revision 552b69f240ec8edc47b2b988d0b23e54621bbde0)
@@ -56,5 +56,5 @@
 #define NAME  "launcher"
 
-static char *display_spec = UI_DISPLAY_DEFAULT;
+static const char *display_spec = UI_DISPLAY_DEFAULT;
 
 static void wnd_close(ui_window_t *, void *);
@@ -137,5 +137,5 @@
 	*argp++ = app;
 
-	if (display_spec != UI_DISPLAY_DEFAULT) {
+	if (str_cmp(display_spec, UI_DISPLAY_DEFAULT) != 0) {
 		*argp++ = "-d";
 		*argp++ = display_spec;
Index: uspace/app/uidemo/uidemo.c
===================================================================
--- uspace/app/uidemo/uidemo.c	(revision ec8a1bf729633d598cbbcad31d55f267ed2c6237)
+++ uspace/app/uidemo/uidemo.c	(revision 552b69f240ec8edc47b2b988d0b23e54621bbde0)
@@ -1019,5 +1019,5 @@
 int main(int argc, char *argv[])
 {
-	const char *display_spec = UI_DISPLAY_DEFAULT;
+	const char *display_spec = UI_ANY_DEFAULT;
 	errno_t rc;
 	int i;
Index: uspace/lib/display/src/display.c
===================================================================
--- uspace/lib/display/src/display.c	(revision ec8a1bf729633d598cbbcad31d55f267ed2c6237)
+++ uspace/lib/display/src/display.c	(revision 552b69f240ec8edc47b2b988d0b23e54621bbde0)
@@ -68,5 +68,5 @@
 		dsname = SERVICE_NAME_DISPLAY;
 
-	rc = loc_service_get_id(dsname, &display_svc, IPC_FLAG_BLOCKING);
+	rc = loc_service_get_id(dsname, &display_svc, 0);
 	if (rc != EOK) {
 		free(display);
@@ -75,5 +75,5 @@
 
 	display->sess = loc_service_connect(display_svc, INTERFACE_DISPLAY,
-	    IPC_FLAG_BLOCKING);
+	    0);
 	if (display->sess == NULL) {
 		free(display);
Index: uspace/lib/ui/include/types/ui/ui.h
===================================================================
--- uspace/lib/ui/include/types/ui/ui.h	(revision ec8a1bf729633d598cbbcad31d55f267ed2c6237)
+++ uspace/lib/ui/include/types/ui/ui.h	(revision 552b69f240ec8edc47b2b988d0b23e54621bbde0)
@@ -43,7 +43,9 @@
 
 /** Use the default display service (argument to ui_create()) */
-#define UI_DISPLAY_DEFAULT NULL
+#define UI_DISPLAY_DEFAULT "disp@"
 /** Use the default console service (argument to ui_create()) */
 #define UI_CONSOLE_DEFAULT "cons@"
+/** Use any available service (argument to ui_create()) */
+#define UI_ANY_DEFAULT "@"
 /** Use dummy output (argument to ui_create()) */
 #define UI_DISPLAY_NULL "null@"
@@ -57,4 +59,6 @@
 	/** Console */
 	ui_ws_console,
+	/** Any non-dummy output backend */
+	ui_ws_any,
 	/** Dummy output */
 	ui_ws_null
Index: uspace/lib/ui/src/ui.c
===================================================================
--- uspace/lib/ui/src/ui.c	(revision ec8a1bf729633d598cbbcad31d55f267ed2c6237)
+++ uspace/lib/ui/src/ui.c	(revision 552b69f240ec8edc47b2b988d0b23e54621bbde0)
@@ -69,10 +69,4 @@
 	const char *cp;
 
-	if (ospec == UI_DISPLAY_DEFAULT) {
-		*ws = ui_ws_display;
-		*osvc = DISPLAY_DEFAULT;
-		return;
-	}
-
 	cp = ospec;
 	while (isalpha(*cp))
@@ -86,4 +80,6 @@
 		} else if (str_lcmp(ospec, "null@", str_length("null@")) == 0) {
 			*ws = ui_ws_null;
+		} else if (str_lcmp(ospec, "@", str_length("@")) == 0) {
+			*ws = ui_ws_any;
 		} else {
 			*ws = ui_ws_unknown;
@@ -123,23 +119,31 @@
 	ui_ospec_parse(ospec, &ws, &osvc);
 
-	if (ws == ui_ws_display) {
-		rc = display_open(osvc, &display);
+	if (ws == ui_ws_display || ws == ui_ws_any) {
+		rc = display_open(osvc != NULL ? osvc : DISPLAY_DEFAULT,
+		    &display);
 		if (rc != EOK)
-			return rc;
+			goto disp_fail;
 
 		rc = ui_create_disp(display, &ui);
 		if (rc != EOK) {
 			display_close(display);
-			return rc;
-		}
-	} else if (ws == ui_ws_console) {
+			goto disp_fail;
+		}
+
+		ui->myoutput = true;
+		*rui = ui;
+		return EOK;
+	}
+
+disp_fail:
+	if (ws == ui_ws_console || ws == ui_ws_any) {
 		console = console_init(stdin, stdout);
 		if (console == NULL)
-			return EIO;
+			goto cons_fail;
 
 		rc = console_get_size(console, &cols, &rows);
 		if (rc != EOK) {
 			console_done(console);
-			return rc;
+			goto cons_fail;
 		}
 
@@ -150,5 +154,5 @@
 		if (rc != EOK) {
 			console_done(console);
-			return rc;
+			goto cons_fail;
 		}
 
@@ -157,5 +161,5 @@
 			ui_destroy(ui);
 			console_done(console);
-			return rc;
+			goto cons_fail;
 		}
 
@@ -167,15 +171,21 @@
 
 		(void) ui_paint(ui);
-	} else if (ws == ui_ws_null) {
+		ui->myoutput = true;
+		*rui = ui;
+		return EOK;
+	}
+
+cons_fail:
+	if (ws == ui_ws_null) {
 		rc = ui_create_disp(NULL, &ui);
 		if (rc != EOK)
 			return rc;
-	} else {
-		return EINVAL;
-	}
-
-	ui->myoutput = true;
-	*rui = ui;
-	return EOK;
+
+		ui->myoutput = true;
+		*rui = ui;
+		return EOK;
+	}
+
+	return EINVAL;
 }
 
