Index: uspace/srv/hid/console/console.c
===================================================================
--- uspace/srv/hid/console/console.c	(revision 0db0df2acaf79a846301b8337ca8d67aee9c1f18)
+++ uspace/srv/hid/console/console.c	(revision 2e9f28483e3e3832adf6f08bb34a173e2fbf6a40)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2011 Martin Decky
  * All rights reserved.
@@ -963,5 +963,5 @@
 
 			if (loc_service_register(console_srv, vc,
-			    &consoles[i].dsid) != EOK) {
+			    fallback_port_id, &consoles[i].dsid) != EOK) {
 				printf("%s: Unable to register device %s\n", NAME, vc);
 				return false;
Index: uspace/srv/hid/display/main.c
===================================================================
--- uspace/srv/hid/display/main.c	(revision 0db0df2acaf79a846301b8337ca8d67aee9c1f18)
+++ uspace/srv/hid/display/main.c	(revision 2e9f28483e3e3832adf6f08bb34a173e2fbf6a40)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -126,8 +126,5 @@
 	ds_output_t *output = NULL;
 	gfx_context_t *gc = NULL;
-	port_id_t disp_port;
-	port_id_t gc_port;
-	port_id_t wm_port;
-	port_id_t dc_port;
+	port_id_t port = 0;
 	loc_srv_t *srv = NULL;
 	service_id_t sid = 0;
@@ -169,19 +166,20 @@
 
 	rc = async_create_port(INTERFACE_DISPLAY, display_client_conn, disp,
-	    &disp_port);
-	if (rc != EOK)
-		goto error;
-
-	rc = async_create_port(INTERFACE_GC, display_gc_conn, disp, &gc_port);
-	if (rc != EOK)
-		goto error;
-
-	rc = async_create_port(INTERFACE_WNDMGT, display_wndmgt_conn, disp,
-	    &wm_port);
-	if (rc != EOK)
-		goto error;
-
-	rc = async_create_port(INTERFACE_DISPCFG, display_dispcfg_conn, disp,
-	    &dc_port);
+	    &port);
+	if (rc != EOK)
+		goto error;
+
+	rc = async_port_create_interface(port, INTERFACE_GC, display_gc_conn,
+	    disp);
+	if (rc != EOK)
+		goto error;
+
+	rc = async_port_create_interface(port, INTERFACE_WNDMGT,
+	    display_wndmgt_conn, disp);
+	if (rc != EOK)
+		goto error;
+
+	rc = async_port_create_interface(port, INTERFACE_DISPCFG,
+	    display_dispcfg_conn, disp);
 	if (rc != EOK)
 		goto error;
@@ -194,5 +192,5 @@
 	}
 
-	rc = loc_service_register(srv, SERVICE_NAME_DISPLAY, &sid);
+	rc = loc_service_register(srv, SERVICE_NAME_DISPLAY, port, &sid);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service: %s.", str_error(rc));
@@ -208,8 +206,6 @@
 	if (srv != NULL)
 		loc_server_unregister(srv);
-	// XXX destroy disp_port
-	// XXX destroy gc_port
-	// XXX destroy wm_port
-	// XXX destroy dc_port
+	if (port != 0)
+		async_port_destroy(port);
 #if 0
 	if (disp->input != NULL)
Index: uspace/srv/hid/input/input.c
===================================================================
--- uspace/srv/hid/input/input.c	(revision 0db0df2acaf79a846301b8337ca8d67aee9c1f18)
+++ uspace/srv/hid/input/input.c	(revision 2e9f28483e3e3832adf6f08bb34a173e2fbf6a40)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2006 Josef Cejka
  * All rights reserved.
@@ -909,5 +909,5 @@
 
 	service_id_t service_id;
-	rc = loc_service_register(srv, argv[1], &service_id);
+	rc = loc_service_register(srv, argv[1], fallback_port_id, &service_id);
 	if (rc != EOK) {
 		printf("%s: Unable to register service %s\n", NAME, argv[1]);
Index: uspace/srv/hid/isdv4_tablet/main.c
===================================================================
--- uspace/srv/hid/isdv4_tablet/main.c	(revision 0db0df2acaf79a846301b8337ca8d67aee9c1f18)
+++ uspace/srv/hid/isdv4_tablet/main.c	(revision 2e9f28483e3e3832adf6f08bb34a173e2fbf6a40)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2012 Martin Sucha
  * All rights reserved.
@@ -331,5 +331,6 @@
 	}
 
-	rc = loc_service_register(srv, service_name, &service_id);
+	rc = loc_service_register(srv, service_name, fallback_port_id,
+	    &service_id);
 	if (rc != EOK) {
 		loc_server_unregister(srv);
Index: uspace/srv/hid/output/output.c
===================================================================
--- uspace/srv/hid/output/output.c	(revision 0db0df2acaf79a846301b8337ca8d67aee9c1f18)
+++ uspace/srv/hid/output/output.c	(revision 2e9f28483e3e3832adf6f08bb34a173e2fbf6a40)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2011 Martin Decky
  * All rights reserved.
@@ -488,5 +488,5 @@
 
 	service_id_t service_id;
-	rc = loc_service_register(srv, argv[1], &service_id);
+	rc = loc_service_register(srv, argv[1], fallback_port_id, &service_id);
 	if (rc != EOK) {
 		loc_server_unregister(srv);
Index: uspace/srv/hid/remcons/remcons.c
===================================================================
--- uspace/srv/hid/remcons/remcons.c	(revision 0db0df2acaf79a846301b8337ca8d67aee9c1f18)
+++ uspace/srv/hid/remcons/remcons.c	(revision 2e9f28483e3e3832adf6f08bb34a173e2fbf6a40)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2012 Vojtech Horky
  * All rights reserved.
@@ -757,5 +757,5 @@
 
 	errno_t rc = loc_service_register(remcons_srv, user->service_name,
-	    &user->service_id);
+	    fallback_port_id, &user->service_id);
 	if (rc != EOK) {
 		telnet_user_error(user, "Unable to register %s with loc: %s.",
Index: uspace/srv/hid/rfb/main.c
===================================================================
--- uspace/srv/hid/rfb/main.c	(revision 0db0df2acaf79a846301b8337ca8d67aee9c1f18)
+++ uspace/srv/hid/rfb/main.c	(revision 2e9f28483e3e3832adf6f08bb34a173e2fbf6a40)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2013 Martin Sucha
  * All rights reserved.
@@ -498,5 +498,6 @@
 	service_id_t service_id;
 
-	rc = loc_service_register(srv, service_name, &service_id);
+	rc = loc_service_register(srv, service_name, fallback_port_id,
+	    &service_id);
 	if (rc != EOK) {
 		printf(NAME ": Unable to register service %s.\n", service_name);
Index: uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c
===================================================================
--- uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision 0db0df2acaf79a846301b8337ca8d67aee9c1f18)
+++ uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c	(revision 2e9f28483e3e3832adf6f08bb34a173e2fbf6a40)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -103,5 +103,6 @@
 	}
 
-	rc = loc_service_register(srv, NAMESPACE "/mouse", &ts->service_id);
+	rc = loc_service_register(srv, NAMESPACE "/mouse", fallback_port_id,
+	    &ts->service_id);
 	if (rc != EOK) {
 		// XXX s3c24xx_ts_fini();
