Index: uspace/lib/tbarcfg/src/tbarcfg.c
===================================================================
--- uspace/lib/tbarcfg/src/tbarcfg.c	(revision 95fc53875f15bdcac192800f4c03f0faf5c46efb)
+++ uspace/lib/tbarcfg/src/tbarcfg.c	(revision 5e758e4edd4c6f54a07739ae94e5b26a912ab7a3)
@@ -71,4 +71,6 @@
 		goto error;
 
+	tbcfg->repo = repo;
+
 	rnode = sif_get_root(repo);
 	nentries = sif_node_first_child(rnode);
@@ -99,5 +101,5 @@
 		}
 
-		rc = smenu_entry_create(tbcfg, caption, cmd);
+		rc = smenu_entry_create(tbcfg, nentry, caption, cmd);
 		if (rc != EOK)
 			goto error;
@@ -122,4 +124,5 @@
 void tbarcfg_close(tbarcfg_t *tbcfg)
 {
+	(void)sif_close(tbcfg->repo);
 }
 
@@ -176,4 +179,80 @@
 }
 
+/** Set start menu entry caption.
+ *
+ * Note: To make the change visible to others and persistent,
+ * you must call @c smenu_entry_save()
+ *
+ * @param entry Start menu entry
+ * @param caption New caption
+ * @return EOK on success, ENOMEM if out of memory
+ */
+errno_t smenu_entry_set_caption(smenu_entry_t *entry, const char *caption)
+{
+	char *dcap;
+
+	dcap = str_dup(caption);
+	if (dcap == NULL)
+		return ENOMEM;
+
+	free(entry->caption);
+	entry->caption = dcap;
+	return EOK;
+}
+
+/** Set start menu entry command.
+ *
+ * Note: To make the change visible to others and persistent,
+ * you must call @c smenu_entry_save()
+ *
+ * @param entry Start menu entry
+ * @param cmd New command
+ * @return EOK on success, ENOMEM if out of memory
+ */
+errno_t smenu_entry_set_cmd(smenu_entry_t *entry, const char *cmd)
+{
+	char *dcmd;
+
+	dcmd = str_dup(cmd);
+	if (dcmd == NULL)
+		return ENOMEM;
+
+	free(entry->cmd);
+	entry->cmd = dcmd;
+	return EOK;
+}
+
+/** Save any changes to start menu entry.
+ *
+ * @param entry Start menu entry
+ */
+errno_t smenu_entry_save(smenu_entry_t *entry)
+{
+	sif_trans_t *trans;
+	errno_t rc;
+
+	rc = sif_trans_begin(entry->smenu->repo, &trans);
+	if (rc != EOK)
+		goto error;
+
+	rc = sif_node_set_attr(trans, entry->nentry, "cmd", entry->cmd);
+	if (rc != EOK)
+		goto error;
+
+	rc = sif_node_set_attr(trans, entry->nentry, "caption", entry->caption);
+	if (rc != EOK)
+		goto error;
+
+	rc = sif_trans_end(trans);
+	if (rc != EOK)
+		goto error;
+
+	return EOK;
+error:
+	if (trans != NULL)
+		sif_trans_abort(trans);
+	return rc;
+}
+
 /** Create a start menu entry and append it to the start menu (internal).
  *
@@ -181,9 +260,10 @@
  *
  * @param smenu Start menu
+ * @param nentry Backing SIF node
  * @param caption Caption
  * @param cmd Command to run
  */
-errno_t smenu_entry_create(tbarcfg_t *smenu, const char *caption,
-    const char *cmd)
+errno_t smenu_entry_create(tbarcfg_t *smenu, sif_node_t *nentry,
+    const char *caption, const char *cmd)
 {
 	smenu_entry_t *entry;
@@ -195,4 +275,6 @@
 		goto error;
 	}
+
+	entry->nentry = nentry;
 
 	entry->caption = str_dup(caption);
