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 71307541fd5ee1f557ff938fd3f52195abde393b)
@@ -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 71307541fd5ee1f557ff938fd3f52195abde393b)
@@ -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 71307541fd5ee1f557ff938fd3f52195abde393b)
@@ -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 71307541fd5ee1f557ff938fd3f52195abde393b)
@@ -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);
