Index: uspace/app/taskbar-cfg/smeedit.c
===================================================================
--- uspace/app/taskbar-cfg/smeedit.c	(revision f87ff8e62c7a8a010413c60997320386cd62f9a8)
+++ uspace/app/taskbar-cfg/smeedit.c	(revision 550ed86a100fb4728016cb62e62b9e732cbb19b2)
@@ -116,6 +116,6 @@
 
 	ui_wnd_params_init(&params);
-	params.caption = smentry != NULL ? "Edit Start Menu Entry"
-	    : "Create Start Menu Entry";
+	params.caption = smentry != NULL ? "Edit Start Menu Entry" :
+	    "Create Start Menu Entry";
 	if (ui_is_textmode(ui)) {
 		params.rect.p0.x = 0;
@@ -345,4 +345,6 @@
 {
 	smeedit_t *smee;
+	smenu_entry_t *entry;
+	startmenu_entry_t *smentry;
 	const char *cmd;
 	const char *caption;
@@ -358,11 +360,15 @@
 		/* Create new entry */
 		rc = smenu_entry_create(smee->startmenu->tbarcfg->tbarcfg,
-		    caption, cmd);
+		    caption, cmd, &entry);
 		if (rc != EOK)
 			return;
+
+		rc = startmenu_insert(smee->startmenu, entry, &smentry);
+		if (rc != EOK)
+			return;
+
+		startmenu_repaint(smee->startmenu);
 	} else {
 		/* Edit existing entry */
-
-
 		rc = smenu_entry_set_cmd(smee->smentry->entry, cmd);
 		if (rc != EOK)
Index: uspace/app/taskbar-cfg/startmenu.c
===================================================================
--- uspace/app/taskbar-cfg/startmenu.c	(revision f87ff8e62c7a8a010413c60997320386cd62f9a8)
+++ uspace/app/taskbar-cfg/startmenu.c	(revision 550ed86a100fb4728016cb62e62b9e732cbb19b2)
@@ -429,4 +429,16 @@
 }
 
+/** Repaint start menu entry list.
+ *
+ * When editing an entry the entry's label might change. We need
+ * to update the list entry caption to reflect that.
+ *
+ * @param smenu Start menu
+ */
+void startmenu_repaint(startmenu_t *smenu)
+{
+	(void) ui_control_paint(ui_list_ctl(smenu->entries_list));
+}
+
 /** Entry in entry list is selected.
  *
Index: uspace/app/taskbar-cfg/startmenu.h
===================================================================
--- uspace/app/taskbar-cfg/startmenu.h	(revision f87ff8e62c7a8a010413c60997320386cd62f9a8)
+++ uspace/app/taskbar-cfg/startmenu.h	(revision 550ed86a100fb4728016cb62e62b9e732cbb19b2)
@@ -50,4 +50,5 @@
 extern void startmenu_edit(startmenu_t *);
 extern errno_t startmenu_entry_update(startmenu_entry_t *);
+extern void startmenu_repaint(startmenu_t *);
 
 #endif
Index: uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h
===================================================================
--- uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h	(revision f87ff8e62c7a8a010413c60997320386cd62f9a8)
+++ uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h	(revision 550ed86a100fb4728016cb62e62b9e732cbb19b2)
@@ -51,5 +51,6 @@
 extern errno_t smenu_entry_set_cmd(smenu_entry_t *, const char *);
 extern errno_t smenu_entry_save(smenu_entry_t *);
-extern errno_t smenu_entry_create(tbarcfg_t *, const char *, const char *);
+extern errno_t smenu_entry_create(tbarcfg_t *, const char *, const char *,
+    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 f87ff8e62c7a8a010413c60997320386cd62f9a8)
+++ uspace/lib/tbarcfg/private/tbarcfg.h	(revision 550ed86a100fb4728016cb62e62b9e732cbb19b2)
@@ -67,5 +67,5 @@
 
 extern errno_t smenu_entry_new(tbarcfg_t *, sif_node_t *, const char *,
-    const char *);
+    const char *, 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 f87ff8e62c7a8a010413c60997320386cd62f9a8)
+++ uspace/lib/tbarcfg/src/tbarcfg.c	(revision 550ed86a100fb4728016cb62e62b9e732cbb19b2)
@@ -154,5 +154,5 @@
 		}
 
-		rc = smenu_entry_new(tbcfg, nentry, caption, cmd);
+		rc = smenu_entry_new(tbcfg, nentry, caption, cmd, NULL);
 		if (rc != EOK)
 			goto error;
@@ -325,7 +325,8 @@
  * @param caption Caption
  * @param cmd Command to run
+ * @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)
+    const char *caption, const char *cmd, smenu_entry_t **rentry)
 {
 	smenu_entry_t *entry;
@@ -354,4 +355,6 @@
 	entry->smenu = smenu;
 	list_append(&entry->lentries, &smenu->entries);
+	if (rentry != NULL)
+		*rentry = entry;
 	return EOK;
 error:
@@ -388,9 +391,11 @@
  * @param caption Caption
  * @param cmd Command to run
+ * @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)
+    const char *cmd, smenu_entry_t **rentry)
 {
 	sif_node_t *nentry;
+	smenu_entry_t *entry;
 	errno_t rc;
 	sif_trans_t *trans = NULL;
@@ -413,5 +418,5 @@
 		goto error;
 
-	rc = smenu_entry_new(smenu, nentry, caption, cmd);
+	rc = smenu_entry_new(smenu, nentry, caption, cmd, &entry);
 	if (rc != EOK)
 		goto error;
@@ -421,4 +426,6 @@
 		goto error;
 
+	if (rentry != NULL)
+		*rentry = entry;
 	return EOK;
 error:
Index: uspace/lib/tbarcfg/test/tbarcfg.c
===================================================================
--- uspace/lib/tbarcfg/test/tbarcfg.c	(revision f87ff8e62c7a8a010413c60997320386cd62f9a8)
+++ uspace/lib/tbarcfg/test/tbarcfg.c	(revision 550ed86a100fb4728016cb62e62b9e732cbb19b2)
@@ -67,20 +67,29 @@
 	tbarcfg_t *tbcfg;
 	char fname[L_tmpnam], *p;
-	smenu_entry_t *e;
-
-	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");
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = smenu_entry_create(tbcfg, "B", "b");
+	smenu_entry_t *e1 = NULL, *e2 = NULL;
+	smenu_entry_t *e;
+
+	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", &e1);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(e1);
+
+	rc = smenu_entry_create(tbcfg, "B", "b", &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);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
 	e = tbarcfg_smenu_first(tbcfg);
-	PCUT_ASSERT_NOT_NULL(e);
+	PCUT_ASSERT_EQUALS(e1, e);
+	e = tbarcfg_smenu_next(e);
+	PCUT_ASSERT_EQUALS(e2, e);
 	e = tbarcfg_smenu_next(e);
 	PCUT_ASSERT_NOT_NULL(e);
@@ -108,5 +117,60 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = smenu_entry_create(tbcfg, "A", "a");
+	rc = smenu_entry_create(tbcfg, "A", "a", &e);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	caption = smenu_entry_get_caption(e);
+	PCUT_ASSERT_STR_EQUALS("A", caption);
+	cmd = smenu_entry_get_cmd(e);
+	PCUT_ASSERT_STR_EQUALS("a", cmd);
+
+	tbarcfg_close(tbcfg);
+	remove(fname);
+}
+
+/** Setting menu entry properties */
+PCUT_TEST(set_caption_cmd)
+{
+	errno_t rc;
+	tbarcfg_t *tbcfg;
+	char fname[L_tmpnam], *p;
+	smenu_entry_t *e;
+	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);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	caption = smenu_entry_get_caption(e);
+	PCUT_ASSERT_STR_EQUALS("A", caption);
+	cmd = smenu_entry_get_cmd(e);
+	PCUT_ASSERT_STR_EQUALS("a", cmd);
+
+	/* Set properties */
+	rc = smenu_entry_set_caption(e, "B");
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	rc = smenu_entry_set_cmd(e, "b");
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = smenu_entry_save(e);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	/* Check that properties have been set */
+	caption = smenu_entry_get_caption(e);
+	PCUT_ASSERT_STR_EQUALS("B", caption);
+	cmd = smenu_entry_get_cmd(e);
+	PCUT_ASSERT_STR_EQUALS("b", cmd);
+
+	tbarcfg_close(tbcfg);
+
+	/* Re-open repository */
+
+	rc = tbarcfg_open(fname, &tbcfg);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -114,15 +178,16 @@
 	PCUT_ASSERT_NOT_NULL(e);
 
-	caption = smenu_entry_get_caption(e);
-	PCUT_ASSERT_STR_EQUALS("A", caption);
-	cmd = smenu_entry_get_cmd(e);
-	PCUT_ASSERT_STR_EQUALS("a", cmd);
-
-	tbarcfg_close(tbcfg);
-	remove(fname);
-}
-
-/** Setting menu entry properties */
-PCUT_TEST(set_caption_cmd)
+	/* Check that new values of properties have persisted */
+	caption = smenu_entry_get_caption(e);
+	PCUT_ASSERT_STR_EQUALS("B", caption);
+	cmd = smenu_entry_get_cmd(e);
+	PCUT_ASSERT_STR_EQUALS("b", cmd);
+
+	tbarcfg_close(tbcfg);
+	remove(fname);
+}
+
+/** Create start menu entry */
+PCUT_TEST(entry_create)
 {
 	errno_t rc;
@@ -139,70 +204,6 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = smenu_entry_create(tbcfg, "A", "a");
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	e = tbarcfg_smenu_first(tbcfg);
-	PCUT_ASSERT_NOT_NULL(e);
-
-	caption = smenu_entry_get_caption(e);
-	PCUT_ASSERT_STR_EQUALS("A", caption);
-	cmd = smenu_entry_get_cmd(e);
-	PCUT_ASSERT_STR_EQUALS("a", cmd);
-
-	/* Set properties */
-	rc = smenu_entry_set_caption(e, "B");
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-	rc = smenu_entry_set_cmd(e, "b");
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = smenu_entry_save(e);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	/* Check that properties have been set */
-	caption = smenu_entry_get_caption(e);
-	PCUT_ASSERT_STR_EQUALS("B", caption);
-	cmd = smenu_entry_get_cmd(e);
-	PCUT_ASSERT_STR_EQUALS("b", cmd);
-
-	tbarcfg_close(tbcfg);
-
-	/* Re-open repository */
-
-	rc = tbarcfg_open(fname, &tbcfg);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	e = tbarcfg_smenu_first(tbcfg);
-	PCUT_ASSERT_NOT_NULL(e);
-
-	/* Check that new values of properties have persisted */
-	caption = smenu_entry_get_caption(e);
-	PCUT_ASSERT_STR_EQUALS("B", caption);
-	cmd = smenu_entry_get_cmd(e);
-	PCUT_ASSERT_STR_EQUALS("b", cmd);
-
-	tbarcfg_close(tbcfg);
-	remove(fname);
-}
-
-/** Create start menu entry */
-PCUT_TEST(entry_create)
-{
-	errno_t rc;
-	tbarcfg_t *tbcfg;
-	char fname[L_tmpnam], *p;
-	smenu_entry_t *e;
-	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");
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	e = tbarcfg_smenu_first(tbcfg);
+	rc = smenu_entry_create(tbcfg, "A", "a", &e);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 	PCUT_ASSERT_NOT_NULL(e);
 
@@ -222,23 +223,23 @@
 	tbarcfg_t *tbcfg;
 	char fname[L_tmpnam], *p;
-	smenu_entry_t *e;
-
-	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");
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	e = tbarcfg_smenu_first(tbcfg);
-	PCUT_ASSERT_NOT_NULL(e);
+	smenu_entry_t *e, *f;
+
+	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);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	f = tbarcfg_smenu_first(tbcfg);
+	PCUT_ASSERT_EQUALS(e, f);
 
 	rc = smenu_entry_destroy(e);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	e = tbarcfg_smenu_first(tbcfg);
-	PCUT_ASSERT_NULL(e);
+	f = tbarcfg_smenu_first(tbcfg);
+	PCUT_ASSERT_NULL(f);
 
 	tbarcfg_close(tbcfg);
