Index: uspace/app/taskbar-cfg/smeedit.c
===================================================================
--- uspace/app/taskbar-cfg/smeedit.c	(revision e8a6279ff3841e7471155ab4bf21d5249a85c4e6)
+++ uspace/app/taskbar-cfg/smeedit.c	(revision 5e758e4edd4c6f54a07739ae94e5b26a912ab7a3)
@@ -41,4 +41,5 @@
 #include "taskbar-cfg.h"
 #include "smeedit.h"
+#include "startmenu.h"
 
 static void wnd_close(ui_window_t *, void *);
@@ -111,4 +112,5 @@
 	}
 
+	smee->startmenu = smenu;
 	smee->smentry = smentry;
 
@@ -361,5 +363,5 @@
 
 	(void)smenu_entry_save(smee->smentry->entry);
-
+	startmenu_entry_update(smee->smentry);
 	smeedit_destroy(smee);
 }
Index: uspace/app/taskbar-cfg/startmenu.c
===================================================================
--- uspace/app/taskbar-cfg/startmenu.c	(revision e8a6279ff3841e7471155ab4bf21d5249a85c4e6)
+++ uspace/app/taskbar-cfg/startmenu.c	(revision 5e758e4edd4c6f54a07739ae94e5b26a912ab7a3)
@@ -398,4 +398,17 @@
 }
 
+/** Update start menu entry caption.
+ *
+ * When editing an entry the entry's label might change. We need
+ * to update the list entry caption to reflect that.
+ *
+ * @param entry Start menu entry
+ */
+errno_t startmenu_entry_update(startmenu_entry_t *entry)
+{
+	return ui_list_entry_set_caption(entry->lentry,
+	    smenu_entry_get_caption(entry->entry));
+}
+
 /** Entry in entry list is selected.
  *
Index: uspace/app/taskbar-cfg/startmenu.h
===================================================================
--- uspace/app/taskbar-cfg/startmenu.h	(revision e8a6279ff3841e7471155ab4bf21d5249a85c4e6)
+++ uspace/app/taskbar-cfg/startmenu.h	(revision 5e758e4edd4c6f54a07739ae94e5b26a912ab7a3)
@@ -48,4 +48,5 @@
 extern startmenu_entry_t *startmenu_get_selected(startmenu_t *);
 extern void startmenu_edit(startmenu_t *);
+extern errno_t startmenu_entry_update(startmenu_entry_t *);
 
 #endif
Index: uspace/lib/ui/include/ui/list.h
===================================================================
--- uspace/lib/ui/include/ui/list.h	(revision e8a6279ff3841e7471155ab4bf21d5249a85c4e6)
+++ uspace/lib/ui/include/ui/list.h	(revision 5e758e4edd4c6f54a07739ae94e5b26a912ab7a3)
@@ -60,4 +60,5 @@
 extern void *ui_list_entry_get_arg(ui_list_entry_t *);
 extern ui_list_t *ui_list_entry_get_list(ui_list_entry_t *);
+extern errno_t ui_list_entry_set_caption(ui_list_entry_t *, const char *);
 extern size_t ui_list_entries_cnt(ui_list_t *);
 extern errno_t ui_list_sort(ui_list_t *);
Index: uspace/lib/ui/src/list.c
===================================================================
--- uspace/lib/ui/src/list.c	(revision e8a6279ff3841e7471155ab4bf21d5249a85c4e6)
+++ uspace/lib/ui/src/list.c	(revision 5e758e4edd4c6f54a07739ae94e5b26a912ab7a3)
@@ -800,4 +800,26 @@
 }
 
+/** Change list entry caption.
+ *
+ * @param entry UI list entry
+ * @param caption New caption
+ *
+ * @return EOK on success, ENOMEM if out of memory
+ */
+errno_t ui_list_entry_set_caption(ui_list_entry_t *entry, const char *caption)
+{
+	char *dcaption;
+
+	dcaption = str_dup(caption);
+	if (dcaption == NULL)
+		return ENOMEM;
+
+	free(entry->caption);
+	entry->caption = dcaption;
+
+	(void)ui_list_entry_paint(entry, ui_list_entry_get_idx(entry));
+	return EOK;
+}
+
 /** Clear UI list entry list.
  *
Index: uspace/lib/ui/test/list.c
===================================================================
--- uspace/lib/ui/test/list.c	(revision e8a6279ff3841e7471155ab4bf21d5249a85c4e6)
+++ uspace/lib/ui/test/list.c	(revision 5e758e4edd4c6f54a07739ae94e5b26a912ab7a3)
@@ -1039,4 +1039,47 @@
 }
 
+/** ui_list_entry_set_caption() sets entry captino */
+PCUT_TEST(entry_set_caption)
+{
+	ui_t *ui;
+	ui_window_t *window;
+	ui_wnd_params_t params;
+	ui_list_t *list;
+	ui_list_entry_attr_t attr;
+	ui_list_entry_t *entry;
+	errno_t rc;
+
+	rc = ui_create_disp(NULL, &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	ui_wnd_params_init(&params);
+	params.caption = "Test";
+
+	rc = ui_window_create(ui, &params, &window);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ui_list_create(window, true, &list);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	ui_list_entry_attr_init(&attr);
+
+	/* Append entry and get pointer to it */
+	attr.caption = "a";
+	attr.arg = (void *)1;
+	entry = NULL;
+	rc = ui_list_entry_append(list, &attr, &entry);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(entry);
+
+	/* Change caption */
+	rc = ui_list_entry_set_caption(entry, "b");
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_STR_EQUALS("b", entry->caption);
+
+	ui_list_destroy(list);
+	ui_window_destroy(window);
+	ui_destroy(ui);
+}
+
 /** ui_list_entries_cnt() returns the number of entries */
 PCUT_TEST(entries_cnt)
