Index: uspace/app/barber/barber.c
===================================================================
--- uspace/app/barber/barber.c	(revision ddb844e7f3c7c26ca821db9add6e4c048aaf9a7b)
+++ uspace/app/barber/barber.c	(revision fc4abcaefa9a26ceb2de3a504ef4a4ef4e39e201)
@@ -40,4 +40,5 @@
 #include <loc.h>
 #include <stats.h>
+#include <str.h>
 #include <fibril_synch.h>
 #include <io/pixel.h>
@@ -247,9 +248,30 @@
 }
 
+static void print_syntax(void)
+{
+	printf("Syntax: %s [-d <display>]\n", NAME);
+}
+
 int main(int argc, char *argv[])
 {
-	if (argc < 2) {
-		printf("Compositor server not specified.\n");
-		return 1;
+	const char *display_svc = DISPLAY_DEFAULT;
+	int i;
+
+	i = 1;
+	while (i < argc) {
+		if (str_cmp(argv[i], "-d") == 0) {
+			++i;
+			if (i >= argc) {
+				printf("Argument missing.\n");
+				print_syntax();
+				return 1;
+			}
+
+			display_svc = argv[i++];
+		} else {
+			printf("Invalid option '%s'.\n", argv[i]);
+			print_syntax();
+			return 1;
+		}
 	}
 
@@ -277,5 +299,5 @@
 
 	winreg = argv[1];
-	window_t *main_window = window_open(argv[1], NULL,
+	window_t *main_window = window_open(display_svc, NULL,
 	    WINDOW_MAIN | WINDOW_DECORATED, "barber");
 	if (!main_window) {
Index: uspace/app/fontviewer/fontviewer.c
===================================================================
--- uspace/app/fontviewer/fontviewer.c	(revision ddb844e7f3c7c26ca821db9add6e4c048aaf9a7b)
+++ uspace/app/fontviewer/fontviewer.c	(revision fc4abcaefa9a26ceb2de3a504ef4a4ef4e39e201)
@@ -38,4 +38,5 @@
 #include <stdlib.h>
 #include <stdbool.h>
+#include <str.h>
 #include <str_error.h>
 #include <window.h>
@@ -245,18 +246,39 @@
 }
 
+static void print_syntax(void)
+{
+	printf("Syntax: %s [-d <display>]\n", NAME);
+}
+
 int main(int argc, char *argv[])
 {
-	if (argc < 2) {
-		printf("Compositor server not specified.\n");
-		return 1;
-	}
-
-	if (argc < 3) {
+	const char *display_svc = DISPLAY_DEFAULT;
+	int i;
+
+	i = 1;
+	while (i < argc) {
+		if (str_cmp(argv[i], "-d") == 0) {
+			++i;
+			if (i >= argc) {
+				printf("Argument missing.\n");
+				print_syntax();
+				return 1;
+			}
+
+			display_svc = argv[i++];
+		} else {
+			printf("Invalid option '%s'.\n", argv[i]);
+			print_syntax();
+			return 1;
+		}
+	}
+
+	if (i < argc) {
 		font_path = NULL;
 	} else {
-		font_path = argv[2];
-	}
-
-	main_window = window_open(argv[1], NULL, WINDOW_MAIN, "fontviewer");
+		font_path = argv[i];
+	}
+
+	main_window = window_open(display_svc, NULL, WINDOW_MAIN, "fontviewer");
 	if (!main_window) {
 		printf("Cannot open main window.\n");
Index: uspace/app/gfxdemo/gfxdemo.c
===================================================================
--- uspace/app/gfxdemo/gfxdemo.c	(revision ddb844e7f3c7c26ca821db9add6e4c048aaf9a7b)
+++ uspace/app/gfxdemo/gfxdemo.c	(revision fc4abcaefa9a26ceb2de3a504ef4a4ef4e39e201)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2019 Jiri Svoboda
+ * Copyright (c) 2020 Jiri Svoboda
  * All rights reserved.
  *
@@ -487,5 +487,5 @@
 
 /** Run demo on canvas. */
-static errno_t demo_canvas(void)
+static errno_t demo_canvas(const char *display_svc)
 {
 	canvas_gc_t *cgc = NULL;
@@ -500,5 +500,5 @@
 	printf("Init canvas..\n");
 
-	window = window_open(DISPLAY_DEFAULT, NULL,
+	window = window_open(display_svc, NULL,
 	    WINDOW_MAIN | WINDOW_DECORATED, "GFX Demo");
 	if (window == NULL) {
@@ -553,5 +553,5 @@
 
 /** Run demo on display server. */
-static errno_t demo_display(void)
+static errno_t demo_display(const char *display_svc)
 {
 	display_t *display = NULL;
@@ -563,5 +563,5 @@
 	printf("Init display..\n");
 
-	rc = display_open(DISPLAY_DEFAULT, &display);
+	rc = display_open(display_svc, &display);
 	if (rc != EOK) {
 		printf("Error opening display.\n");
@@ -618,5 +618,5 @@
 static void print_syntax(void)
 {
-	printf("syntax: gfxdemo {canvas|console|display}\n");
+	printf("Syntax: gfxdemo [-d <display>] {canvas|console|display}\n");
 }
 
@@ -624,15 +624,35 @@
 {
 	errno_t rc;
-
-	if (argc < 2 || str_cmp(argv[1], "display") == 0) {
-		rc = demo_display();
-		if (rc != EOK)
+	const char *display_svc = DISPLAY_DEFAULT;
+	int i;
+
+	i = 1;
+	while (i < argc && argv[i][0] == '-') {
+		if (str_cmp(argv[i], "-d") == 0) {
+			++i;
+			if (i >= argc) {
+				printf("Argument missing.\n");
+				print_syntax();
+				return 1;
+			}
+
+			display_svc = argv[i++];
+		} else {
+			printf("Invalid option '%s'.\n", argv[i]);
+			print_syntax();
 			return 1;
-	} else if (str_cmp(argv[1], "console") == 0) {
+		}
+	}
+
+	if (i >= argc || str_cmp(argv[i], "display") == 0) {
+		rc = demo_display(display_svc);
+		if (rc != EOK)
+			return 1;
+	} else if (str_cmp(argv[i], "console") == 0) {
 		rc = demo_console();
 		if (rc != EOK)
 			return 1;
-	} else if (str_cmp(argv[1], "canvas") == 0) {
-		rc = demo_canvas();
+	} else if (str_cmp(argv[i], "canvas") == 0) {
+		rc = demo_canvas(display_svc);
 		if (rc != EOK)
 			return 1;
Index: uspace/app/init/init.c
===================================================================
--- uspace/app/init/init.c	(revision ddb844e7f3c7c26ca821db9add6e4c048aaf9a7b)
+++ uspace/app/init/init.c	(revision fc4abcaefa9a26ceb2de3a504ef4a4ef4e39e201)
@@ -69,5 +69,4 @@
 
 #define SRV_DISPLAY  "/srv/hid/display"
-#define DISPLAY_SVC  "hid/display"
 
 #define HID_INPUT              "hid/input"
@@ -278,5 +277,5 @@
 }
 
-static int gui_start(const char *app, const char *display_svc)
+static int app_start(const char *app)
 {
 	printf("%s: Spawning %s\n", NAME, app);
@@ -284,5 +283,5 @@
 	task_id_t id;
 	task_wait_t wait;
-	errno_t rc = task_spawnl(&id, &wait, app, app, display_svc, NULL);
+	errno_t rc = task_spawnl(&id, &wait, app, app, NULL);
 	if (rc != EOK) {
 		oom_check(rc, app);
@@ -472,7 +471,7 @@
 		rc = display_server();
 		if (rc == EOK) {
-			gui_start("/app/barber", DISPLAY_SVC);
-			gui_start("/app/vlaunch", DISPLAY_SVC);
-			gui_start("/app/vterm", DISPLAY_SVC);
+			app_start("/app/barber");
+			app_start("/app/vlaunch");
+			app_start("/app/vterm");
 		}
 	}
Index: uspace/app/vcalc/vcalc.c
===================================================================
--- uspace/app/vcalc/vcalc.c	(revision ddb844e7f3c7c26ca821db9add6e4c048aaf9a7b)
+++ uspace/app/vcalc/vcalc.c	(revision fc4abcaefa9a26ceb2de3a504ef4a4ef4e39e201)
@@ -468,12 +468,33 @@
 }
 
+static void print_syntax(void)
+{
+	printf("Syntax: %s [-d <display>]\n", NAME);
+}
+
 int main(int argc, char *argv[])
 {
-	if (argc < 2) {
-		printf("%s: Compositor server not specified.\n", NAME);
-		return 1;
-	}
-
-	window_t *main_window = window_open(argv[1], NULL,
+	const char *display_svc = DISPLAY_DEFAULT;
+	int i;
+
+	i = 1;
+	while (i < argc) {
+		if (str_cmp(argv[i], "-d") == 0) {
+			++i;
+			if (i >= argc) {
+				printf("Argument missing.\n");
+				print_syntax();
+				return 1;
+			}
+
+			display_svc = argv[i++];
+		} else {
+			printf("Invalid option '%s'.\n", argv[i]);
+			print_syntax();
+			return 1;
+		}
+	}
+
+	window_t *main_window = window_open(display_svc, NULL,
 	    WINDOW_MAIN | WINDOW_DECORATED | WINDOW_RESIZEABLE, NAME);
 	if (!main_window) {
Index: uspace/app/vdemo/vdemo.c
===================================================================
--- uspace/app/vdemo/vdemo.c	(revision ddb844e7f3c7c26ca821db9add6e4c048aaf9a7b)
+++ uspace/app/vdemo/vdemo.c	(revision fc4abcaefa9a26ceb2de3a504ef4a4ef4e39e201)
@@ -1,3 +1,4 @@
 /*
+ * Copyright (c) 2020 Jiri Svoboda
  * Copyright (c) 2012 Petr Koupy
  * All rights reserved.
@@ -36,4 +37,5 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <str.h>
 #include <io/pixel.h>
 #include <task.h>
@@ -107,60 +109,81 @@
 }
 
+static void print_syntax(void)
+{
+	printf("Syntax: %s [-d <display>]\n", NAME);
+}
+
 int main(int argc, char *argv[])
 {
-	if (argc >= 2) {
-		window_t *main_window = window_open(argv[1], NULL,
-		    WINDOW_MAIN | WINDOW_DECORATED | WINDOW_RESIZEABLE, "vdemo");
-		if (!main_window) {
-			printf("Cannot open main window.\n");
+	const char *disp_svc = DISPLAY_DEFAULT;
+	int i;
+
+	i = 1;
+	while (i < argc) {
+		if (str_cmp(argv[i], "-d") == 0) {
+			++i;
+			if (i >= argc) {
+				printf("Argument missing.\n");
+				print_syntax();
+				return 1;
+			}
+
+			disp_svc = argv[i++];
+		} else {
+			printf("Invalid option '%s'.\n", argv[i]);
+			print_syntax();
 			return 1;
 		}
+	}
 
-		pixel_t grd_bg = PIXEL(255, 240, 240, 240);
-
-		pixel_t btn_bg = PIXEL(255, 240, 240, 240);
-		pixel_t btn_fg = PIXEL(255, 186, 186, 186);
-		pixel_t btn_text = PIXEL(255, 0, 0, 0);
-
-		pixel_t lbl_bg = PIXEL(255, 240, 240, 240);
-		pixel_t lbl_text = PIXEL(255, 0, 0, 0);
-
-		my_label_t *lbl_action = create_my_label(NULL, "Hello there!", 16,
-		    lbl_bg, lbl_text);
-		button_t *btn_confirm = create_button(NULL, NULL, "Confirm", 16,
-		    btn_bg, btn_fg, btn_text);
-		button_t *btn_cancel = create_button(NULL, NULL, "Cancel", 16,
-		    btn_bg, btn_fg, btn_text);
-		grid_t *grid = create_grid(window_root(main_window), NULL, 2, 2,
-		    grd_bg);
-		if (!lbl_action || !btn_confirm || !btn_cancel || !grid) {
-			window_close(main_window);
-			printf("Cannot create widgets.\n");
-			return 1;
-		}
-
-		sig_connect(
-		    &btn_confirm->clicked,
-		    &lbl_action->label.widget,
-		    lbl_action->confirm);
-		sig_connect(
-		    &btn_cancel->clicked,
-		    &lbl_action->label.widget,
-		    lbl_action->cancel);
-
-		grid->add(grid, &lbl_action->label.widget, 0, 0, 2, 1);
-		grid->add(grid, &btn_confirm->widget, 0, 1, 1, 1);
-		grid->add(grid, &btn_cancel->widget, 1, 1, 1, 1);
-		window_resize(main_window, 0, 0, 200, 76,
-		    WINDOW_PLACEMENT_CENTER);
-
-		window_exec(main_window);
-		task_retval(0);
-		async_manager();
-		return 1;
-	} else {
-		printf("Compositor server not specified.\n");
+	window_t *main_window = window_open(disp_svc, NULL,
+	    WINDOW_MAIN | WINDOW_DECORATED | WINDOW_RESIZEABLE, "vdemo");
+	if (!main_window) {
+		printf("Cannot open main window.\n");
 		return 1;
 	}
+
+	pixel_t grd_bg = PIXEL(255, 240, 240, 240);
+
+	pixel_t btn_bg = PIXEL(255, 240, 240, 240);
+	pixel_t btn_fg = PIXEL(255, 186, 186, 186);
+	pixel_t btn_text = PIXEL(255, 0, 0, 0);
+
+	pixel_t lbl_bg = PIXEL(255, 240, 240, 240);
+	pixel_t lbl_text = PIXEL(255, 0, 0, 0);
+
+	my_label_t *lbl_action = create_my_label(NULL, "Hello there!", 16,
+	    lbl_bg, lbl_text);
+	button_t *btn_confirm = create_button(NULL, NULL, "Confirm", 16,
+	    btn_bg, btn_fg, btn_text);
+	button_t *btn_cancel = create_button(NULL, NULL, "Cancel", 16,
+	    btn_bg, btn_fg, btn_text);
+	grid_t *grid = create_grid(window_root(main_window), NULL, 2, 2,
+	    grd_bg);
+	if (!lbl_action || !btn_confirm || !btn_cancel || !grid) {
+		window_close(main_window);
+		printf("Cannot create widgets.\n");
+		return 1;
+	}
+
+	sig_connect(
+	    &btn_confirm->clicked,
+	    &lbl_action->label.widget,
+	    lbl_action->confirm);
+	sig_connect(
+	    &btn_cancel->clicked,
+	    &lbl_action->label.widget,
+	    lbl_action->cancel);
+
+	grid->add(grid, &lbl_action->label.widget, 0, 0, 2, 1);
+	grid->add(grid, &btn_confirm->widget, 0, 1, 1, 1);
+	grid->add(grid, &btn_cancel->widget, 1, 1, 1, 1);
+	window_resize(main_window, 0, 0, 200, 76,
+	    WINDOW_PLACEMENT_CENTER);
+
+	window_exec(main_window);
+	task_retval(0);
+	async_manager();
+	return 0;
 }
 
Index: uspace/app/viewer/viewer.c
===================================================================
--- uspace/app/viewer/viewer.c	(revision ddb844e7f3c7c26ca821db9add6e4c048aaf9a7b)
+++ uspace/app/viewer/viewer.c	(revision fc4abcaefa9a26ceb2de3a504ef4a4ef4e39e201)
@@ -176,6 +176,12 @@
 }
 
+static void print_syntax(void)
+{
+	printf("Syntax: %s [-d <display>] <image-file>...\n", NAME);
+}
+
 int main(int argc, char *argv[])
 {
+	const char *display_svc = DISPLAY_DEFAULT;
 	window_flags_t flags;
 	surface_t *lsface;
@@ -183,16 +189,31 @@
 	sysarg_t dwidth;
 	sysarg_t dheight;
-
-	if (argc < 2) {
-		printf("Compositor server not specified.\n");
+	int i;
+
+	i = 1;
+	while (i < argc && argv[i][0] == '-') {
+		if (str_cmp(argv[i], "-d") == 0) {
+			++i;
+			if (i >= argc) {
+				printf("Argument missing.\n");
+				print_syntax();
+				return 1;
+			}
+
+			display_svc = argv[i++];
+		} else {
+			printf("Invalid option '%s'.\n", argv[i]);
+			print_syntax();
+			return 1;
+		}
+	}
+
+	if (i >= argc) {
+		printf("No image files specified.\n");
+		print_syntax();
 		return 1;
 	}
 
-	if (argc < 3) {
-		printf("No image files specified.\n");
-		return 1;
-	}
-
-	imgs_count = argc - 2;
+	imgs_count = argc - i;
 	imgs = calloc(imgs_count, sizeof(char *));
 	if (imgs == NULL) {
@@ -201,7 +222,7 @@
 	}
 
-	for (int i = 0; i < argc - 2; i++) {
-		imgs[i] = str_dup(argv[i + 2]);
-		if (imgs[i] == NULL) {
+	for (int j = 0; j < argc - i; j++) {
+		imgs[j] = str_dup(argv[i + j]);
+		if (imgs[j] == NULL) {
 			printf("Out of memory.\n");
 			return 3;
@@ -221,5 +242,5 @@
 		flags |= WINDOW_DECORATED;
 
-	main_window = window_open(argv[1], NULL, flags, "viewer");
+	main_window = window_open(display_svc, NULL, flags, "viewer");
 	if (!main_window) {
 		printf("Cannot open main window.\n");
Index: uspace/app/vlaunch/vlaunch.c
===================================================================
--- uspace/app/vlaunch/vlaunch.c	(revision ddb844e7f3c7c26ca821db9add6e4c048aaf9a7b)
+++ uspace/app/vlaunch/vlaunch.c	(revision fc4abcaefa9a26ceb2de3a504ef4a4ef4e39e201)
@@ -37,4 +37,5 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <str.h>
 #include <task.h>
 #include <str_error.h>
@@ -58,16 +59,24 @@
 #define LOGO_HEIGHT  66
 
-static char *winreg = NULL;
+static char *display_svc = DISPLAY_DEFAULT;
 
 static int app_launch(const char *app)
 {
-	printf("%s: Spawning %s %s \n", NAME, app, winreg);
-
+	errno_t rc;
 	task_id_t id;
 	task_wait_t wait;
-	errno_t rc = task_spawnl(&id, &wait, app, app, winreg, NULL);
+
+	if (display_svc != DISPLAY_DEFAULT) {
+		printf("%s: Spawning %s -d %s\n", NAME, app, display_svc);
+		rc = task_spawnl(&id, &wait, app, app, "-d", display_svc, NULL);
+	} else {
+		printf("%s: Spawning %s\n", NAME, app);
+		rc = task_spawnl(&id, &wait, app, app, NULL);
+	}
+
 	if (rc != EOK) {
 		printf("%s: Error spawning %s %s (%s)\n", NAME, app,
-		    winreg, str_error(rc));
+		    display_svc != DISPLAY_DEFAULT ? display_svc :
+		    "<default>", str_error(rc));
 		return -1;
 	}
@@ -91,9 +100,29 @@
 }
 
+static void print_syntax(void)
+{
+	printf("Syntax: %s [-d <display>]\n", NAME);
+}
+
 int main(int argc, char *argv[])
 {
-	if (argc < 2) {
-		printf("Compositor server not specified.\n");
-		return 1;
+	int i;
+
+	i = 1;
+	while (i < argc) {
+		if (str_cmp(argv[i], "-d") == 0) {
+			++i;
+			if (i >= argc) {
+				printf("Argument missing.\n");
+				print_syntax();
+				return 1;
+			}
+
+			display_svc = argv[i++];
+		} else {
+			printf("Invalid option '%s'.\n", argv[i]);
+			print_syntax();
+			return 1;
+		}
 	}
 
@@ -104,6 +133,5 @@
 	}
 
-	winreg = argv[1];
-	window_t *main_window = window_open(argv[1], NULL,
+	window_t *main_window = window_open(display_svc, NULL,
 	    WINDOW_MAIN | WINDOW_DECORATED | WINDOW_RESIZEABLE, "vlaunch");
 	if (!main_window) {
Index: uspace/app/vterm/vterm.c
===================================================================
--- uspace/app/vterm/vterm.c	(revision ddb844e7f3c7c26ca821db9add6e4c048aaf9a7b)
+++ uspace/app/vterm/vterm.c	(revision fc4abcaefa9a26ceb2de3a504ef4a4ef4e39e201)
@@ -1,3 +1,4 @@
 /*
+ * Copyright (c) 2020 Jiri Svoboda
  * Copyright (c) 2012 Petr Koupy
  * All rights reserved.
@@ -42,12 +43,33 @@
 #define NAME  "vterm"
 
+static void print_syntax(void)
+{
+	printf("Syntax: %s [-d <display>]\n", NAME);
+}
+
 int main(int argc, char *argv[])
 {
-	if (argc < 2) {
-		printf("%s: Compositor server not specified.\n", NAME);
-		return 1;
+	const char *display_svc = DISPLAY_DEFAULT;
+	int i;
+
+	i = 1;
+	while (i < argc) {
+		if (str_cmp(argv[i], "-d") == 0) {
+			++i;
+			if (i >= argc) {
+				printf("Argument missing.\n");
+				print_syntax();
+				return 1;
+			}
+
+			display_svc = argv[i++];
+		} else {
+			printf("Invalid option '%s'.\n", argv[i]);
+			print_syntax();
+			return 1;
+		}
 	}
 
-	window_t *main_window = window_open(argv[1], NULL,
+	window_t *main_window = window_open(display_svc, NULL,
 	    WINDOW_MAIN | WINDOW_DECORATED, "vterm");
 	if (!main_window) {
