Index: uspace/lib/tbarcfg/private/tbarcfg.h
===================================================================
--- uspace/lib/tbarcfg/private/tbarcfg.h	(revision cb20b05b56e214b3b2d2db4c1f2333f7868f368a)
+++ uspace/lib/tbarcfg/private/tbarcfg.h	(revision 5caad1d4a9774280b120ed9f9da51f4bb6f1f4bf)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -39,4 +39,5 @@
 
 #include <adt/list.h>
+#include <loc.h>
 #include <stdbool.h>
 #include <types/tbarcfg/tbarcfg.h>
@@ -68,4 +69,10 @@
 /** Taskbar configuration listener */
 typedef struct tbarcfg_listener {
+	/** Async port */
+	port_id_t portid;
+	/** Registered server */
+	loc_srv_t *srv;
+	/** Registered service */
+	service_id_t svcid;
 	/** Notification callback */
 	void (*cb)(void *);
Index: uspace/lib/tbarcfg/src/tbarcfg.c
===================================================================
--- uspace/lib/tbarcfg/src/tbarcfg.c	(revision cb20b05b56e214b3b2d2db4c1f2333f7868f368a)
+++ uspace/lib/tbarcfg/src/tbarcfg.c	(revision 5caad1d4a9774280b120ed9f9da51f4bb6f1f4bf)
@@ -671,4 +671,7 @@
 		goto error;
 
+	free(svcname);
+	svcname = NULL;
+
 	rc = loc_category_get_id(nchan, &catid, 0);
 	if (rc != EOK)
@@ -679,4 +682,7 @@
 		goto error;
 
+	lst->portid = port;
+	lst->srv = srv;
+	lst->svcid = svcid;
 	*rlst = lst;
 	return EOK;
@@ -699,4 +705,7 @@
 void tbarcfg_listener_destroy(tbarcfg_listener_t *lst)
 {
+	loc_service_unregister(lst->srv, lst->svcid);
+	loc_server_unregister(lst->srv);
+	async_port_destroy(lst->portid);
 	free(lst);
 }
