Index: uspace/app/taskbar-cfg/smeedit.c
===================================================================
--- uspace/app/taskbar-cfg/smeedit.c	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/app/taskbar-cfg/smeedit.c	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -36,4 +36,5 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <ui/checkbox.h>
 #include <ui/fixed.h>
 #include <ui/resource.h>
@@ -94,4 +95,5 @@
 	const char *cmd;
 	const char *caption;
+	bool terminal;
 	errno_t rc;
 
@@ -101,7 +103,9 @@
 		cmd = smenu_entry_get_cmd(smentry->entry);
 		caption = smenu_entry_get_caption(smentry->entry);
+		terminal = smenu_entry_get_terminal(smentry->entry);
 	} else {
 		cmd = "";
 		caption = "";
+		terminal = false;
 	}
 
@@ -122,10 +126,10 @@
 		params.rect.p0.y = 0;
 		params.rect.p1.x = 50;
-		params.rect.p1.y = 12;
+		params.rect.p1.y = 13;
 	} else {
 		params.rect.p0.x = 0;
 		params.rect.p0.y = 0;
 		params.rect.p1.x = 370;
-		params.rect.p1.y = 200;
+		params.rect.p1.y = 230;
 	}
 
@@ -255,4 +259,32 @@
 	}
 
+	/* Start in terminal checkbox */
+
+	rc = ui_checkbox_create(res, "Start in terminal", &smee->cbterminal);
+	if (rc != EOK)
+		goto error;
+
+	/* FIXME: Auto layout */
+	if (ui_is_textmode(ui)) {
+		rect.p0.x = 3;
+		rect.p0.y = 8;
+		rect.p1.x = 6;
+		rect.p1.y = 9;
+	} else {
+		rect.p0.x = 10;
+		rect.p0.y = 155;
+		rect.p1.x = 360;
+		rect.p1.y = 170;
+	}
+
+	ui_checkbox_set_rect(smee->cbterminal, &rect);
+	ui_checkbox_set_checked(smee->cbterminal, terminal);
+
+	rc = ui_fixed_add(smee->fixed, ui_checkbox_ctl(smee->cbterminal));
+	if (rc != EOK) {
+		printf("Error adding control to layout.\n");
+		goto error;
+	}
+
 	/* OK button */
 
@@ -264,12 +296,12 @@
 	if (ui_is_textmode(ui)) {
 		rect.p0.x = 23;
-		rect.p0.y = 9;
+		rect.p0.y = 10;
 		rect.p1.x = 35;
-		rect.p1.y = 10;
+		rect.p1.y = 11;
 	} else {
 		rect.p0.x = 190;
-		rect.p0.y = 155;
+		rect.p0.y = 190;
 		rect.p1.x = 270;
-		rect.p1.y = 180;
+		rect.p1.y = 215;
 	}
 
@@ -293,12 +325,12 @@
 	if (ui_is_textmode(ui)) {
 		rect.p0.x = 36;
-		rect.p0.y = 9;
+		rect.p0.y = 10;
 		rect.p1.x = 48;
-		rect.p1.y = 10;
+		rect.p1.y = 11;
 	} else {
 		rect.p0.x = 280;
-		rect.p0.y = 155;
+		rect.p0.y = 190;
 		rect.p1.x = 360;
-		rect.p1.y = 180;
+		rect.p1.y = 215;
 	}
 
@@ -349,4 +381,5 @@
 	const char *cmd;
 	const char *caption;
+	bool terminal;
 	errno_t rc;
 
@@ -356,9 +389,10 @@
 	cmd = ui_entry_get_text(smee->ecmd);
 	caption = ui_entry_get_text(smee->ecaption);
+	terminal = ui_checkbox_get_checked(smee->cbterminal);
 
 	if (smee->smentry == NULL) {
 		/* Create new entry */
 		rc = smenu_entry_create(smee->startmenu->tbarcfg->tbarcfg,
-		    caption, cmd, &entry);
+		    caption, cmd, terminal, &entry);
 		if (rc != EOK)
 			return;
@@ -379,4 +413,8 @@
 			return;
 
+		smenu_entry_set_terminal(smee->smentry->entry, terminal);
+		if (rc != EOK)
+			return;
+
 		(void)smenu_entry_save(smee->smentry->entry);
 		startmenu_entry_update(smee->smentry);
Index: uspace/app/taskbar-cfg/types/smeedit.h
===================================================================
--- uspace/app/taskbar-cfg/types/smeedit.h	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/app/taskbar-cfg/types/smeedit.h	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -37,4 +37,5 @@
 #define TYPES_SMEEDIT_H
 
+#include <ui/checkbox.h>
 #include <ui/fixed.h>
 #include <ui/label.h>
@@ -61,5 +62,7 @@
 	/** Command entry */
 	ui_entry_t *ecmd;
-	/** OK buttion */
+	/** Start in terminal checkbox */
+	ui_checkbox_t *cbterminal;
+	/** OK button */
 	ui_pbutton_t *bok;
 	/** Cancel button */
Index: uspace/app/taskbar/taskbar.sif
===================================================================
--- uspace/app/taskbar/taskbar.sif	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/app/taskbar/taskbar.sif	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,1 +1,1 @@
-[sif](){[entries](){[entry]([caption]=[~N~avigator][cmd]=[/app/terminal -c /app/nav]){}[entry]([caption]=[Text ~E~ditor][cmd]=[/app/terminal -c /app/edit]){}[entry]([caption]=[~T~erminal][cmd]=[/app/terminal]){}[entry]([caption]=[~C~alculator][cmd]=[/app/calculator]){}[entry]([caption]=[~U~I Demo][cmd]=[/app/uidemo]){}[entry]([caption]=[~G~FX Demo][cmd]=[/app/gfxdemo ui]){}}}
+[sif](){[entries](){[entry]([caption]=[~N~avigator][cmd]=[/app/nav][terminal]=[y]){}[entry]([caption]=[Text ~E~ditor][cmd]=[/app/edit][terminal]=[y]){}[entry]([caption]=[~T~erminal][cmd]=[/app/terminal][terminal]=[n]){}[entry]([caption]=[~C~alculator][cmd]=[/app/calculator][terminal]=[n]){}[entry]([caption]=[~U~I Demo][cmd]=[/app/uidemo][terminal]=[n]){}[entry]([caption]=[~G~FX Demo][cmd]=[/app/gfxdemo ui][terminal]=[n]){}}}
Index: uspace/app/taskbar/tbsmenu.c
===================================================================
--- uspace/app/taskbar/tbsmenu.c	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/app/taskbar/tbsmenu.c	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -131,4 +131,5 @@
 	const char *caption;
 	const char *cmd;
+	bool terminal;
 	errno_t rc;
 
@@ -141,6 +142,7 @@
 		caption = smenu_entry_get_caption(sme);
 		cmd = smenu_entry_get_cmd(sme);
-
-		rc = tbsmenu_add(tbsmenu, caption, cmd, &tentry);
+		terminal = smenu_entry_get_terminal(sme);
+
+		rc = tbsmenu_add(tbsmenu, caption, cmd, terminal, &tentry);
 		if (rc != EOK)
 			goto error;
@@ -226,9 +228,10 @@
  * @param caption Caption
  * @param cmd Command to run
+ * @param terminal Start in terminal
  * @param entry Start menu entry
  * @return @c EOK on success or an error code
  */
 errno_t tbsmenu_add(tbsmenu_t *tbsmenu, const char *caption,
-    const char *cmd, tbsmenu_entry_t **rentry)
+    const char *cmd, bool terminal, tbsmenu_entry_t **rentry)
 {
 	errno_t rc;
@@ -250,4 +253,6 @@
 		goto error;
 	}
+
+	entry->terminal = terminal;
 
 	rc = ui_menu_entry_create(tbsmenu->smenu, caption, "", &entry->mentry);
@@ -438,4 +443,6 @@
 	}
 
+	cmd->argv[cnt] = NULL;
+
 	return EOK;
 }
@@ -465,4 +472,8 @@
 	int retval;
 	bool suspended;
+	int i;
+	int cnt;
+	char **cp;
+	const char **targv = NULL;
 	errno_t rc;
 	ui_t *ui;
@@ -482,8 +493,41 @@
 	suspended = true;
 
-	rc = task_spawnv(&id, &wait, cmd.argv[0], (const char *const *)
-	    cmd.argv);
-	if (rc != EOK)
-		goto error;
+	/* Don't start in terminal if not running in a window */
+	if (entry->terminal && !ui_is_fullscreen(ui)) {
+		cnt = 0;
+		cp = cmd.argv;
+		while (*cp != NULL) {
+			++cnt;
+			++cp;
+		}
+
+		targv = calloc(cnt + 3, sizeof(char **));
+		if (targv == NULL)
+			goto error;
+
+		targv[0] = "/app/terminal";
+		targv[1] = "-c";
+
+		for (i = 0; i <= cnt; i++) {
+			if (cmd.argv[i] != NULL)
+				printf(" - '%s'\n", cmd.argv[i]);
+			else
+				printf(" - NULL\n");
+
+			targv[2 + i] = cmd.argv[i];
+		}
+
+		rc = task_spawnv(&id, &wait, targv[0], targv);
+		if (rc != EOK)
+			goto error;
+
+		free(targv);
+		targv = NULL;
+	} else {
+		rc = task_spawnv(&id, &wait, cmd.argv[0], (const char *const *)
+		    cmd.argv);
+		if (rc != EOK)
+			goto error;
+	}
 
 	rc = task_wait(&wait, &texit, &retval);
@@ -499,4 +543,6 @@
 	return EOK;
 error:
+	if (targv != NULL)
+		free(targv);
 	tbsmenu_cmd_fini(&cmd);
 	if (suspended)
Index: uspace/app/taskbar/tbsmenu.h
===================================================================
--- uspace/app/taskbar/tbsmenu.h	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/app/taskbar/tbsmenu.h	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -53,5 +53,5 @@
 extern bool tbsmenu_is_open(tbsmenu_t *);
 extern void tbsmenu_destroy(tbsmenu_t *);
-extern errno_t tbsmenu_add(tbsmenu_t *, const char *, const char *,
+extern errno_t tbsmenu_add(tbsmenu_t *, const char *, const char *, bool,
     tbsmenu_entry_t **);
 extern void tbsmenu_remove(tbsmenu_t *, tbsmenu_entry_t *, bool);
Index: uspace/app/taskbar/types/tbsmenu.h
===================================================================
--- uspace/app/taskbar/types/tbsmenu.h	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/app/taskbar/types/tbsmenu.h	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -46,5 +46,5 @@
 #include <ui/window.h>
 
-/** Taskbar window list entry */
+/** Taskbar start menu entry */
 typedef struct {
 	/** Containing start menu */
@@ -58,4 +58,6 @@
 	/** Command to run */
 	char *cmd;
+	/** Start in terminal */
+	bool terminal;
 } tbsmenu_entry_t;
 
Index: uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h
===================================================================
--- uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -39,4 +39,5 @@
 #include <errno.h>
 #include <sif.h>
+#include <stdbool.h>
 #include <types/tbarcfg/tbarcfg.h>
 
@@ -48,9 +49,11 @@
 extern const char *smenu_entry_get_caption(smenu_entry_t *);
 extern const char *smenu_entry_get_cmd(smenu_entry_t *);
+extern bool smenu_entry_get_terminal(smenu_entry_t *);
 extern errno_t smenu_entry_set_caption(smenu_entry_t *, const char *);
 extern errno_t smenu_entry_set_cmd(smenu_entry_t *, const char *);
+extern void smenu_entry_set_terminal(smenu_entry_t *, bool);
 extern errno_t smenu_entry_save(smenu_entry_t *);
 extern errno_t smenu_entry_create(tbarcfg_t *, const char *, const char *,
-    smenu_entry_t **);
+    bool, smenu_entry_t **);
 extern errno_t smenu_entry_destroy(smenu_entry_t *);
 
Index: uspace/lib/tbarcfg/private/tbarcfg.h
===================================================================
--- uspace/lib/tbarcfg/private/tbarcfg.h	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/lib/tbarcfg/private/tbarcfg.h	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -40,4 +40,5 @@
 #include <adt/list.h>
 #include <sif.h>
+#include <stdbool.h>
 #include <types/tbarcfg/tbarcfg.h>
 
@@ -64,8 +65,10 @@
 	/** Command to run */
 	char *cmd;
+	/** Start in terminal */
+	bool terminal;
 };
 
 extern errno_t smenu_entry_new(tbarcfg_t *, sif_node_t *, const char *,
-    const char *, smenu_entry_t **);
+    const char *, bool, smenu_entry_t **);
 extern void smenu_entry_delete(smenu_entry_t *);
 
Index: uspace/lib/tbarcfg/src/tbarcfg.c
===================================================================
--- uspace/lib/tbarcfg/src/tbarcfg.c	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/lib/tbarcfg/src/tbarcfg.c	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -101,4 +101,5 @@
  * @return EOK on success or an error code
  */
+#include <stdio.h>
 errno_t tbarcfg_open(const char *repopath, tbarcfg_t **rtbcfg)
 {
@@ -110,4 +111,5 @@
 	const char *caption;
 	const char *cmd;
+	const char *terminal = NULL;
 	errno_t rc;
 
@@ -154,5 +156,12 @@
 		}
 
-		rc = smenu_entry_new(tbcfg, nentry, caption, cmd, NULL);
+		terminal = sif_node_get_attr(nentry, "terminal");
+		if (terminal == NULL)
+			terminal = "n";
+
+		printf("terminal=%s\n", terminal);
+
+		rc = smenu_entry_new(tbcfg, nentry, caption, cmd,
+		    str_cmp(terminal, "y") == 0, NULL);
 		if (rc != EOK)
 			goto error;
@@ -233,5 +242,5 @@
 /** Get start menu entry command.
  *
- * @param entr Start menu entry
+ * @param entry Start menu entry
  * @return Command to run
  */
@@ -239,4 +248,14 @@
 {
 	return entry->cmd;
+}
+
+/** Get start menu start in terminal flag.
+ *
+ * @param entry Start menu entry
+ * @return Start in terminal flag
+ */
+bool smenu_entry_get_terminal(smenu_entry_t *entry)
+{
+	return entry->terminal;
 }
 
@@ -285,4 +304,17 @@
 }
 
+/** Set start menu entry start in terminal flag.
+ *
+ * Note: To make the change visible to others and persistent,
+ * you must call @c smenu_entry_save()
+ *
+ * @param entry Start menu entry
+ * @param terminal Start in terminal flag
+ */
+void smenu_entry_set_terminal(smenu_entry_t *entry, bool terminal)
+{
+	entry->terminal = terminal;
+}
+
 /** Save any changes to start menu entry.
  *
@@ -303,4 +335,9 @@
 
 	rc = sif_node_set_attr(trans, entry->nentry, "caption", entry->caption);
+	if (rc != EOK)
+		goto error;
+
+	rc = sif_node_set_attr(trans, entry->nentry, "terminal",
+	    entry->terminal ? "y" : "n");
 	if (rc != EOK)
 		goto error;
@@ -325,8 +362,9 @@
  * @param caption Caption
  * @param cmd Command to run
+ * @param terminal Start in terminal
  * @param rentry Place to store pointer to new entry or @c NULL
  */
 errno_t smenu_entry_new(tbarcfg_t *smenu, sif_node_t *nentry,
-    const char *caption, const char *cmd, smenu_entry_t **rentry)
+    const char *caption, const char *cmd, bool terminal, smenu_entry_t **rentry)
 {
 	smenu_entry_t *entry;
@@ -352,4 +390,6 @@
 		goto error;
 	}
+
+	entry->terminal = terminal;
 
 	entry->smenu = smenu;
@@ -391,8 +431,9 @@
  * @param caption Caption
  * @param cmd Command to run
+ * @param terminal Start in terminal
  * @param rentry Place to store pointer to new entry or @c NULL
  */
 errno_t smenu_entry_create(tbarcfg_t *smenu, const char *caption,
-    const char *cmd, smenu_entry_t **rentry)
+    const char *cmd, bool terminal, smenu_entry_t **rentry)
 {
 	sif_node_t *nentry;
@@ -418,5 +459,10 @@
 		goto error;
 
-	rc = smenu_entry_new(smenu, nentry, caption, cmd, &entry);
+	rc = sif_node_set_attr(trans, nentry, "terminal", terminal ? "y" : "n");
+	if (rc != EOK)
+		goto error;
+
+	rc = smenu_entry_new(smenu, nentry, caption, cmd, terminal ? "y" : "n",
+	    &entry);
 	if (rc != EOK)
 		goto error;
Index: uspace/lib/tbarcfg/test/tbarcfg.c
===================================================================
--- uspace/lib/tbarcfg/test/tbarcfg.c	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/lib/tbarcfg/test/tbarcfg.c	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -76,14 +76,14 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = smenu_entry_create(tbcfg, "A", "a", &e1);
+	rc = smenu_entry_create(tbcfg, "A", "a", false, &e1);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 	PCUT_ASSERT_NOT_NULL(e1);
 
-	rc = smenu_entry_create(tbcfg, "B", "b", &e2);
+	rc = smenu_entry_create(tbcfg, "B", "b", false, &e2);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 	PCUT_ASSERT_NOT_NULL(e2);
 
 	/* Create entry without getting a pointer to it */
-	rc = smenu_entry_create(tbcfg, "C", "c", NULL);
+	rc = smenu_entry_create(tbcfg, "C", "c", false, NULL);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -102,5 +102,5 @@
 
 /** Getting menu entry properties */
-PCUT_TEST(get_caption_cmd)
+PCUT_TEST(get_caption_cmd_term)
 {
 	errno_t rc;
@@ -110,12 +110,13 @@
 	const char *caption;
 	const char *cmd;
-
-	p = tmpnam(fname);
-	PCUT_ASSERT_NOT_NULL(p);
-
-	rc = tbarcfg_create(fname, &tbcfg);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = smenu_entry_create(tbcfg, "A", "a", &e);
+	bool terminal;
+
+	p = tmpnam(fname);
+	PCUT_ASSERT_NOT_NULL(p);
+
+	rc = tbarcfg_create(fname, &tbcfg);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = smenu_entry_create(tbcfg, "A", "a", false, &e);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -124,4 +125,6 @@
 	cmd = smenu_entry_get_cmd(e);
 	PCUT_ASSERT_STR_EQUALS("a", cmd);
+	terminal = smenu_entry_get_terminal(e);
+	PCUT_ASSERT_FALSE(terminal);
 
 	tbarcfg_close(tbcfg);
@@ -130,5 +133,5 @@
 
 /** Setting menu entry properties */
-PCUT_TEST(set_caption_cmd)
+PCUT_TEST(set_caption_cmd_term)
 {
 	errno_t rc;
@@ -138,12 +141,13 @@
 	const char *caption;
 	const char *cmd;
-
-	p = tmpnam(fname);
-	PCUT_ASSERT_NOT_NULL(p);
-
-	rc = tbarcfg_create(fname, &tbcfg);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = smenu_entry_create(tbcfg, "A", "a", &e);
+	bool terminal;
+
+	p = tmpnam(fname);
+	PCUT_ASSERT_NOT_NULL(p);
+
+	rc = tbarcfg_create(fname, &tbcfg);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = smenu_entry_create(tbcfg, "A", "a", false, &e);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -152,4 +156,6 @@
 	cmd = smenu_entry_get_cmd(e);
 	PCUT_ASSERT_STR_EQUALS("a", cmd);
+	terminal = smenu_entry_get_terminal(e);
+	PCUT_ASSERT_FALSE(terminal);
 
 	/* Set properties */
@@ -158,4 +164,5 @@
 	rc = smenu_entry_set_cmd(e, "b");
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	smenu_entry_set_terminal(e, true);
 
 	rc = smenu_entry_save(e);
@@ -167,4 +174,6 @@
 	cmd = smenu_entry_get_cmd(e);
 	PCUT_ASSERT_STR_EQUALS("b", cmd);
+	terminal = smenu_entry_get_terminal(e);
+	PCUT_ASSERT_TRUE(terminal);
 
 	tbarcfg_close(tbcfg);
@@ -197,12 +206,13 @@
 	const char *caption;
 	const char *cmd;
-
-	p = tmpnam(fname);
-	PCUT_ASSERT_NOT_NULL(p);
-
-	rc = tbarcfg_create(fname, &tbcfg);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = smenu_entry_create(tbcfg, "A", "a", &e);
+	bool terminal;
+
+	p = tmpnam(fname);
+	PCUT_ASSERT_NOT_NULL(p);
+
+	rc = tbarcfg_create(fname, &tbcfg);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = smenu_entry_create(tbcfg, "A", "a", false, &e);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 	PCUT_ASSERT_NOT_NULL(e);
@@ -212,4 +222,21 @@
 	cmd = smenu_entry_get_cmd(e);
 	PCUT_ASSERT_STR_EQUALS("a", cmd);
+	terminal = smenu_entry_get_terminal(e);
+	PCUT_ASSERT_FALSE(terminal);
+
+	smenu_entry_destroy(e);
+
+	rc = smenu_entry_create(tbcfg, "B", "b", true, &e);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(e);
+
+	caption = smenu_entry_get_caption(e);
+	PCUT_ASSERT_STR_EQUALS("B", caption);
+	cmd = smenu_entry_get_cmd(e);
+	PCUT_ASSERT_STR_EQUALS("b", cmd);
+	terminal = smenu_entry_get_terminal(e);
+	PCUT_ASSERT_TRUE(terminal);
+
+	smenu_entry_destroy(e);
 
 	tbarcfg_close(tbcfg);
@@ -231,5 +258,5 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = smenu_entry_create(tbcfg, "A", "a", &e);
+	rc = smenu_entry_create(tbcfg, "A", "a", false, &e);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
Index: uspace/lib/ui/include/ui/checkbox.h
===================================================================
--- uspace/lib/ui/include/ui/checkbox.h	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/lib/ui/include/ui/checkbox.h	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2020 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -52,4 +52,6 @@
 extern void ui_checkbox_set_cb(ui_checkbox_t *, ui_checkbox_cb_t *, void *);
 extern void ui_checkbox_set_rect(ui_checkbox_t *, gfx_rect_t *);
+extern bool ui_checkbox_get_checked(ui_checkbox_t *);
+extern void ui_checkbox_set_checked(ui_checkbox_t *, bool);
 extern errno_t ui_checkbox_paint(ui_checkbox_t *);
 extern void ui_checkbox_press(ui_checkbox_t *);
Index: uspace/lib/ui/src/checkbox.c
===================================================================
--- uspace/lib/ui/src/checkbox.c	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/lib/ui/src/checkbox.c	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2022 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -139,12 +139,32 @@
 }
 
-/** Set button rectangle.
- *
- * @param checkbox Button
- * @param rect New button rectangle
+/** Set check box rectangle.
+ *
+ * @param checkbox Check box
+ * @param rect New check box rectangle
  */
 void ui_checkbox_set_rect(ui_checkbox_t *checkbox, gfx_rect_t *rect)
 {
 	checkbox->rect = *rect;
+}
+
+/** Return if check box is checked.
+ *
+ * @param checkbox Check box
+ * @return @c true iff check box is checked
+ */
+bool ui_checkbox_get_checked(ui_checkbox_t *checkbox)
+{
+	return checkbox->checked;
+}
+
+/** Set check box checked state.
+ *
+ * @param checkbox Check box
+ * @param checked @c true iff checkbox should be checked
+ */
+void ui_checkbox_set_checked(ui_checkbox_t *checkbox, bool checked)
+{
+	checkbox->checked = checked;
 }
 
Index: uspace/lib/ui/test/checkbox.c
===================================================================
--- uspace/lib/ui/test/checkbox.c	(revision 74cb66109763c1d227d236094006a779dee50793)
+++ uspace/lib/ui/test/checkbox.c	(revision 806d761fabfa1adf9ffb45256e6afcd7160a1ce0)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2021 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -151,4 +151,38 @@
 }
 
+/** Get check box checked returns internal field */
+PCUT_TEST(get_checked)
+{
+	ui_checkbox_t *checkbox;
+	errno_t rc;
+
+	rc = ui_checkbox_create(NULL, "Hello", &checkbox);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	checkbox->checked = false;
+	PCUT_ASSERT_FALSE(ui_checkbox_get_checked(checkbox));
+	checkbox->checked = true;
+	PCUT_ASSERT_TRUE(ui_checkbox_get_checked(checkbox));
+
+	ui_checkbox_destroy(checkbox);
+}
+
+/** Set check box checked sets internal field */
+PCUT_TEST(set_checked)
+{
+	ui_checkbox_t *checkbox;
+	errno_t rc;
+
+	rc = ui_checkbox_create(NULL, "Hello", &checkbox);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	ui_checkbox_set_checked(checkbox, true);
+	PCUT_ASSERT_TRUE(checkbox->checked);
+	ui_checkbox_set_checked(checkbox, false);
+	PCUT_ASSERT_FALSE(checkbox->checked);
+
+	ui_checkbox_destroy(checkbox);
+}
+
 /** Paint check box in graphics mode */
 PCUT_TEST(paint_gfx)
