Index: abi/include/abi/ipc/interfaces.h
===================================================================
--- abi/include/abi/ipc/interfaces.h	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ abi/include/abi/ipc/interfaces.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * Copyright (c) 2014 Martin Decky
  * All rights reserved.
@@ -201,4 +201,6 @@
 	INTERFACE_WNDMGT_CB =
 	    FOURCC_COMPACT('w', 'm', 'g', 't') | IFACE_EXCHANGE_SERIALIZE | IFACE_MOD_CALLBACK,
+	INTERFACE_TBARCFG_NOTIFY =
+	    FOURCC_COMPACT('t', 'b', 'c', 'f') | IFACE_EXCHANGE_SERIALIZE
 } iface_t;
 
Index: uspace/app/taskbar-cfg/smeedit.c
===================================================================
--- uspace/app/taskbar-cfg/smeedit.c	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/app/taskbar-cfg/smeedit.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -403,4 +403,5 @@
 
 		startmenu_repaint(smee->startmenu);
+		(void)tbarcfg_notify(TBARCFG_NOTIFY_DEFAULT);
 	} else {
 		/* Edit existing entry */
@@ -419,4 +420,5 @@
 		(void)smenu_entry_save(smee->smentry->entry);
 		startmenu_entry_update(smee->smentry);
+		(void)tbarcfg_notify(TBARCFG_NOTIFY_DEFAULT);
 	}
 
Index: uspace/app/taskbar-cfg/startmenu.c
===================================================================
--- uspace/app/taskbar-cfg/startmenu.c	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/app/taskbar-cfg/startmenu.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -515,4 +515,5 @@
 
 	(void)smee;
+	(void)tbarcfg_notify(TBARCFG_NOTIFY_DEFAULT);
 }
 
@@ -533,4 +534,5 @@
 	(void)startmenu_insert(smenu, entry, &smentry);
 	(void)ui_control_paint(ui_list_ctl(smenu->entries_list));
+	(void)tbarcfg_notify(TBARCFG_NOTIFY_DEFAULT);
 }
 
@@ -633,4 +635,5 @@
 	free(smentry);
 	(void)ui_control_paint(ui_list_ctl(smenu->entries_list));
+	(void)tbarcfg_notify(TBARCFG_NOTIFY_DEFAULT);
 }
 
@@ -685,4 +688,5 @@
 
 	(void)ui_control_paint(ui_list_ctl(smenu->entries_list));
+	(void)tbarcfg_notify(TBARCFG_NOTIFY_DEFAULT);
 }
 
@@ -711,4 +715,5 @@
 
 	(void)ui_control_paint(ui_list_ctl(smenu->entries_list));
+	(void)tbarcfg_notify(TBARCFG_NOTIFY_DEFAULT);
 }
 
Index: uspace/app/taskbar/taskbar.c
===================================================================
--- uspace/app/taskbar/taskbar.c	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/app/taskbar/taskbar.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -48,7 +48,10 @@
 #include "wndlist.h"
 
+#define TASKBAR_CONFIG_FILE "/cfg/taskbar.sif"
+
 static void taskbar_wnd_close(ui_window_t *, void *);
 static void taskbar_wnd_kbd(ui_window_t *, void *, kbd_event_t *);
 static void taskbar_wnd_pos(ui_window_t *, void *, pos_event_t *);
+static void taskbar_notif_cb(void *);
 
 static ui_window_cb_t window_cb = {
@@ -201,8 +204,14 @@
 	}
 
-	rc = tbsmenu_load(taskbar->tbsmenu, "/cfg/taskbar.sif");
+	rc = tbsmenu_load(taskbar->tbsmenu, TASKBAR_CONFIG_FILE);
 	if (rc != EOK) {
 		printf("Error loading start menu from '%s'.\n",
-		    "/cfg/taskbar.sif");
+		    TASKBAR_CONFIG_FILE);
+	}
+
+	rc = tbarcfg_listener_create(TBARCFG_NOTIFY_DEFAULT,
+	    taskbar_notif_cb, (void *)taskbar, &taskbar->lst);
+	if (rc != EOK) {
+		printf("Error listening for configuration changes.\n");
 	}
 
@@ -287,4 +296,6 @@
 	return EOK;
 error:
+	if (taskbar->lst != NULL)
+		tbarcfg_listener_destroy(taskbar->lst);
 	if (taskbar->clock != NULL)
 		taskbar_clock_destroy(taskbar->clock);
@@ -304,4 +315,6 @@
 void taskbar_destroy(taskbar_t *taskbar)
 {
+	if (taskbar->lst != NULL)
+		tbarcfg_listener_destroy(taskbar->lst);
 	ui_fixed_remove(taskbar->fixed, taskbar_clock_ctl(taskbar->clock));
 	taskbar_clock_destroy(taskbar->clock);
@@ -312,4 +325,19 @@
 }
 
+/** Configuration change notification callback.
+ *
+ * Called when configuration changed.
+ *
+ * @param arg Argument (taskbar_t *)
+ */
+static void taskbar_notif_cb(void *arg)
+{
+	taskbar_t *taskbar = (taskbar_t *)arg;
+
+	ui_lock(taskbar->ui);
+	tbsmenu_reload(taskbar->tbsmenu);
+	ui_unlock(taskbar->ui);
+}
+
 /** @}
  */
Index: uspace/app/taskbar/tbsmenu.c
===================================================================
--- uspace/app/taskbar/tbsmenu.c	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/app/taskbar/tbsmenu.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -135,4 +135,18 @@
 	errno_t rc;
 
+	if (tbsmenu->repopath != NULL)
+		free(tbsmenu->repopath);
+
+	tbsmenu->repopath = str_dup(repopath);
+	if (tbsmenu->repopath == NULL)
+		return ENOMEM;
+
+	/* Remove existing entries */
+	tentry = tbsmenu_first(tbsmenu);
+	while (tentry != NULL) {
+		tbsmenu_remove(tbsmenu, tentry, false);
+		tentry = tbsmenu_first(tbsmenu);
+	}
+
 	rc = tbarcfg_open(repopath, &tbcfg);
 	if (rc != EOK)
@@ -170,4 +184,16 @@
 }
 
+/** Reload start menu from repository (or schedule reload).
+ *
+ * @param tbsmenu Start menu
+ */
+void tbsmenu_reload(tbsmenu_t *tbsmenu)
+{
+	if (!tbsmenu_is_open(tbsmenu))
+		(void) tbsmenu_load(tbsmenu, tbsmenu->repopath);
+	else
+		tbsmenu->needs_reload = true;
+}
+
 /** Set start menu rectangle.
  *
@@ -198,4 +224,7 @@
 {
 	ui_menu_close(tbsmenu->smenu);
+
+	if (tbsmenu->needs_reload)
+		(void) tbsmenu_load(tbsmenu, tbsmenu->repopath);
 }
 
Index: uspace/app/taskbar/tbsmenu.h
===================================================================
--- uspace/app/taskbar/tbsmenu.h	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/app/taskbar/tbsmenu.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -48,4 +48,5 @@
 extern errno_t tbsmenu_create(ui_window_t *, ui_fixed_t *, tbsmenu_t **);
 extern errno_t tbsmenu_load(tbsmenu_t *, const char *);
+extern void tbsmenu_reload(tbsmenu_t *);
 extern void tbsmenu_set_rect(tbsmenu_t *, gfx_rect_t *);
 extern void tbsmenu_open(tbsmenu_t *);
Index: uspace/app/taskbar/types/taskbar.h
===================================================================
--- uspace/app/taskbar/types/taskbar.h	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/app/taskbar/types/taskbar.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -60,4 +60,6 @@
 	/** Clock */
 	taskbar_clock_t *clock;
+	/** Configuration change listener */
+	tbarcfg_listener_t *lst;
 } taskbar_t;
 
Index: uspace/app/taskbar/types/tbsmenu.h
===================================================================
--- uspace/app/taskbar/types/tbsmenu.h	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/app/taskbar/types/tbsmenu.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -40,4 +40,5 @@
 #include <gfx/coord.h>
 #include <stdbool.h>
+#include <tbarcfg/tbarcfg.h>
 #include <ui/pbutton.h>
 #include <ui/fixed.h>
@@ -84,4 +85,10 @@
 	/** Device ID of last input event */
 	sysarg_t ev_idev_id;
+
+	/** Repository path name */
+	char *repopath;
+
+	/** Need to reload menu when possible */
+	bool needs_reload;
 } tbsmenu_t;
 
Index: uspace/lib/tbarcfg/include/ipc/tbarcfg.h
===================================================================
--- uspace/lib/tbarcfg/include/ipc/tbarcfg.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
+++ uspace/lib/tbarcfg/include/ipc/tbarcfg.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2024 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libtbarcfg
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBTBARCFG_IPC_TBARCFG_H
+#define LIBTBARCFG_IPC_TBARCFG_H
+
+#include <ipc/common.h>
+
+typedef enum {
+	TBARCFG_NOTIFY_NOTIFY = IPC_FIRST_USER_METHOD
+} tbarcfg_notify_request_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h
===================================================================
--- uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/lib/tbarcfg/include/tbarcfg/tbarcfg.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -42,4 +42,6 @@
 #include <types/tbarcfg/tbarcfg.h>
 
+#define TBARCFG_NOTIFY_DEFAULT "tbarcfg-notif"
+
 extern errno_t tbarcfg_create(const char *, tbarcfg_t **);
 extern errno_t tbarcfg_open(const char *, tbarcfg_t **);
@@ -63,4 +65,8 @@
 extern errno_t smenu_entry_move_up(smenu_entry_t *);
 extern errno_t smenu_entry_move_down(smenu_entry_t *);
+extern errno_t tbarcfg_listener_create(const char *, void (*)(void *),
+    void *, tbarcfg_listener_t **);
+extern void tbarcfg_listener_destroy(tbarcfg_listener_t *);
+extern errno_t tbarcfg_notify(const char *);
 
 #endif
Index: uspace/lib/tbarcfg/include/types/tbarcfg/tbarcfg.h
===================================================================
--- uspace/lib/tbarcfg/include/types/tbarcfg/tbarcfg.h	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/lib/tbarcfg/include/types/tbarcfg/tbarcfg.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -43,4 +43,7 @@
 typedef struct smenu_entry smenu_entry_t;
 
+struct tbarcfg_listener;
+typedef struct tbarcfg_listener tbarcfg_listener_t;
+
 #endif
 
Index: uspace/lib/tbarcfg/private/tbarcfg.h
===================================================================
--- uspace/lib/tbarcfg/private/tbarcfg.h	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/lib/tbarcfg/private/tbarcfg.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -71,4 +71,12 @@
 };
 
+/** Taskbar configuration listener */
+typedef struct tbarcfg_listener {
+	/** Notification callback */
+	void (*cb)(void *);
+	/** Callback argument */
+	void *arg;
+} tbarcfg_listener_t;
+
 extern errno_t smenu_entry_new(tbarcfg_t *, sif_node_t *, const char *,
     const char *, bool, smenu_entry_t **);
Index: uspace/lib/tbarcfg/src/tbarcfg.c
===================================================================
--- uspace/lib/tbarcfg/src/tbarcfg.c	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/lib/tbarcfg/src/tbarcfg.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -34,10 +34,17 @@
  */
 
+#include <async.h>
 #include <errno.h>
 #include <sif.h>
+#include <ipc/tbarcfg.h>
+#include <loc.h>
+#include <task.h>
 #include <tbarcfg/tbarcfg.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <str.h>
 #include "../private/tbarcfg.h"
+
+static void tbarcfg_notify_conn(ipc_call_t *, void *);
 
 /** Create taskbar configuration.
@@ -784,4 +791,176 @@
 }
 
+/** Create taskbar configuration listener.
+ *
+ * Listens for taskbar configuration change notifications.
+ *
+ * @param nchan Notification channel (TBARCFG_NOTIFY_DEFAULT)
+ * @param rlst Place to store pointer to new listener
+ * @return EOK on success or an error code
+ */
+errno_t tbarcfg_listener_create(const char *nchan, void (*cb)(void *),
+    void *arg, tbarcfg_listener_t **rlst)
+{
+	tbarcfg_listener_t *lst;
+	service_id_t svcid = 0;
+	loc_srv_t *srv = NULL;
+	task_id_t taskid;
+	char *svcname = NULL;
+	category_id_t catid;
+	port_id_t port;
+	int rv;
+	errno_t rc;
+
+	lst = calloc(1, sizeof(tbarcfg_listener_t));
+	if (lst == NULL)
+		return ENOMEM;
+
+	lst->cb = cb;
+	lst->arg = arg;
+
+	rc = async_create_port(INTERFACE_TBARCFG_NOTIFY,
+	    tbarcfg_notify_conn, (void *)lst, &port);
+	if (rc != EOK)
+		goto error;
+
+	rc = loc_server_register("tbarcfg-listener", &srv);
+	if (rc != EOK)
+		goto error;
+
+	taskid = task_get_id();
+
+	rv = asprintf(&svcname, "tbarcfg/%u", (unsigned)taskid);
+	if (rv < 0) {
+		rc = ENOMEM;
+		goto error;
+	}
+
+	rc = loc_service_register(srv, svcname, &svcid);
+	if (rc != EOK)
+		goto error;
+
+	rc = loc_category_get_id(nchan, &catid, 0);
+	if (rc != EOK)
+		goto error;
+
+	rc = loc_service_add_to_cat(srv, svcid, catid);
+	if (rc != EOK)
+		goto error;
+
+	*rlst = lst;
+	return EOK;
+error:
+	if (svcid != 0)
+		loc_service_unregister(srv, svcid);
+	if (srv != NULL)
+		loc_server_unregister(srv);
+	if (svcname != NULL)
+		free(svcname);
+	return rc;
+}
+
+/** Destroy taskbar configuration listener.
+ *
+ * @param lst Listener
+ */
+void tbarcfg_listener_destroy(tbarcfg_listener_t *lst)
+{
+	free(lst);
+}
+
+/** Send taskbar configuration notification to a particular service ID.
+ *
+ * @param svcid Service ID
+ * @return EOK on success or an error code
+ */
+static errno_t tbarcfg_notify_svc(service_id_t svcid)
+{
+	async_sess_t *sess;
+	async_exch_t *exch;
+	errno_t rc;
+
+	sess = loc_service_connect(svcid, INTERFACE_TBARCFG_NOTIFY, 0);
+	if (sess == NULL)
+		return EIO;
+
+	exch = async_exchange_begin(sess);
+	rc = async_req_0_0(exch, TBARCFG_NOTIFY_NOTIFY);
+	if (rc != EOK) {
+		async_exchange_end(exch);
+		async_hangup(sess);
+		return rc;
+	}
+
+	async_exchange_end(exch);
+	async_hangup(sess);
+	return EOK;
+}
+
+/** Send taskbar configuration change notification.
+ *
+ * @param nchan Notification channel (TBARCFG_NOTIFY_DEFAULT)
+ */
+errno_t tbarcfg_notify(const char *nchan)
+{
+	errno_t rc;
+	category_id_t catid;
+	service_id_t *svcs = NULL;
+	size_t count, i;
+
+	rc = loc_category_get_id(nchan, &catid, 0);
+	if (rc != EOK)
+		return rc;
+
+	rc = loc_category_get_svcs(catid, &svcs, &count);
+	if (rc != EOK)
+		return rc;
+
+	for (i = 0; i < count; i++) {
+		rc = tbarcfg_notify_svc(svcs[i]);
+		if (rc != EOK)
+			goto error;
+	}
+
+	free(svcs);
+	return EOK;
+error:
+	free(svcs);
+	return rc;
+}
+
+/** Taskbar configuration connection handler.
+ *
+ * @param icall Initial call
+ * @param arg Argument (tbarcfg_listener_t *)
+ */
+static void tbarcfg_notify_conn(ipc_call_t *icall, void *arg)
+{
+	tbarcfg_listener_t *lst = (tbarcfg_listener_t *)arg;
+
+	/* Accept the connection */
+	async_accept_0(icall);
+
+	while (true) {
+		ipc_call_t call;
+		async_get_call(&call);
+		sysarg_t method = ipc_get_imethod(&call);
+
+		if (!method) {
+			/* The other side has hung up */
+			async_answer_0(&call, EOK);
+			return;
+		}
+
+		switch (method) {
+		case TBARCFG_NOTIFY_NOTIFY:
+			lst->cb(lst->arg);
+			async_answer_0(&call, EOK);
+			break;
+		default:
+			async_answer_0(&call, EINVAL);
+		}
+	}
+}
+
 /** @}
  */
Index: uspace/lib/tbarcfg/test/tbarcfg.c
===================================================================
--- uspace/lib/tbarcfg/test/tbarcfg.c	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/lib/tbarcfg/test/tbarcfg.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -30,4 +30,5 @@
 #include <pcut/pcut.h>
 #include <tbarcfg/tbarcfg.h>
+#include <stdbool.h>
 #include <stdio.h>
 
@@ -35,4 +36,10 @@
 
 PCUT_TEST_SUITE(tbarcfg);
+
+typedef struct {
+	bool notified;
+} tbarcfg_test_resp_t;
+
+static void test_cb(void *);
 
 /** Creating, opening and closing taskbar configuration */
@@ -554,3 +561,32 @@
 }
 
+/** Notifications can be delivered from tbarcfg_notify() to a listener. */
+PCUT_TEST(notify)
+{
+	errno_t rc;
+	tbarcfg_listener_t *lst;
+	tbarcfg_test_resp_t test_resp;
+
+	test_resp.notified = false;
+
+	printf("create listener resp=%p\n", (void *)&test_resp);
+	rc = tbarcfg_listener_create(TBARCFG_NOTIFY_DEFAULT,
+	    test_cb, &test_resp, &lst);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = tbarcfg_notify(TBARCFG_NOTIFY_DEFAULT);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	PCUT_ASSERT_TRUE(test_resp.notified);
+	tbarcfg_listener_destroy(lst);
+}
+
+static void test_cb(void *arg)
+{
+	tbarcfg_test_resp_t *resp = (tbarcfg_test_resp_t *)arg;
+
+	printf("test_cb: executing resp=%p\n", (void *)resp);
+	resp->notified = true;
+}
+
 PCUT_EXPORT(tbarcfg);
Index: uspace/lib/ui/src/menuentry.c
===================================================================
--- uspace/lib/ui/src/menuentry.c	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/lib/ui/src/menuentry.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -145,5 +145,20 @@
 		return;
 
+	mentry->menu->total_h -= ui_menu_entry_height(mentry);
+	/* NOTE: max_caption_w/max_shortcut_w not updated (speed) */
+
 	list_remove(&mentry->lentries);
+
+	/*
+	 * If we emptied the menu, reset accumulated dims so they
+	 * can be correctly calculated when (if) the menu is
+	 * re-populated.
+	 */
+	if (list_empty(&mentry->menu->entries)) {
+		mentry->menu->total_h = 0;
+		mentry->menu->max_caption_w = 0;
+		mentry->menu->max_shortcut_w = 0;
+	}
+
 	free(mentry->caption);
 	free(mentry);
Index: uspace/srv/locsrv/locsrv.c
===================================================================
--- uspace/srv/locsrv/locsrv.c	(revision 90ba06c84b193d055991b29e9accfaa9bac53856)
+++ uspace/srv/locsrv/locsrv.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
@@ -1,5 +1,5 @@
 /*
+ * Copyright (c) 2024 Jiri Svoboda
  * Copyright (c) 2007 Josef Cejka
- * Copyright (c) 2011 Jiri Svoboda
  * All rights reserved.
  *
@@ -1354,4 +1354,7 @@
 	categ_dir_add_cat(&cdir, cat);
 
+	cat = category_new("tbarcfg-notif");
+	categ_dir_add_cat(&cdir, cat);
+
 	cat = category_new("test3");
 	categ_dir_add_cat(&cdir, cat);
