Index: uspace/lib/usbdev/src/devdrv.c
===================================================================
--- uspace/lib/usbdev/src/devdrv.c	(revision 05913fe7573b3078f8c23bfa5774302f09810a55)
+++ uspace/lib/usbdev/src/devdrv.c	(revision 2bdf92a5421dca631f166390174abc1a586d1c26)
@@ -489,10 +489,8 @@
 	int iface_no = -1;
 
-	async_sess_t *sess = devman_parent_device_connect(
-	    ddf_dev_get_handle(ddf_dev), IPC_FLAG_BLOCKING);
+	async_sess_t *sess = ddf_dev_parent_sess_get(ddf_dev);
 	if (sess == NULL)
 		return ENOMEM;
 	const int ret = usb_device_get_info(sess, &h, &iface_no);
-	async_hangup(sess);
 	if (ret != EOK)
 		return ret;
Index: uspace/lib/usbhost/src/ddf_helpers.c
===================================================================
--- uspace/lib/usbhost/src/ddf_helpers.c	(revision 05913fe7573b3078f8c23bfa5774302f09810a55)
+++ uspace/lib/usbhost/src/ddf_helpers.c	(revision 2bdf92a5421dca631f166390174abc1a586d1c26)
@@ -46,5 +46,4 @@
 #include <ddf/interrupt.h>
 #include <device/hw_res_parsed.h>
-#include <devman.h>
 #include <errno.h>
 #include <fibril_synch.h>
@@ -692,5 +691,5 @@
 }
 
-//TODO: Move this to generic ddf?
+//TODO: Cache parent session in HCD
 /** Call the parent driver with a request to enable interrupts
  *
@@ -700,26 +699,22 @@
 int hcd_ddf_enable_interrupts(ddf_dev_t *device)
 {
-	assert(device);
-	async_sess_t *parent_sess =
-	    devman_parent_device_connect(ddf_dev_get_handle(device),
-	    IPC_FLAG_BLOCKING);
+	async_sess_t *parent_sess = ddf_dev_parent_sess_get(device);
+	if (parent_sess == NULL)
+		return EIO;
+
 	const bool enabled = hw_res_enable_interrupt(parent_sess);
-	async_hangup(parent_sess);
 
 	return enabled ? EOK : EIO;
 }
 
-//TODO: Move this to generic ddf?
+//TODO: Cache parent session in HCD
 int hcd_ddf_get_registers(ddf_dev_t *device, hw_res_list_parsed_t *hw_res)
 {
-	assert(device);
-	assert(hw_res);
-
-	async_sess_t *parent_sess =
-	    devman_parent_device_connect(ddf_dev_get_handle(device),
-	    IPC_FLAG_BLOCKING);
+	async_sess_t *parent_sess = ddf_dev_parent_sess_get(device);
+	if (parent_sess == NULL)
+		return EIO;
+
 	hw_res_list_parsed_init(hw_res);
 	const int ret = hw_res_get_list_parsed(parent_sess, hw_res, 0);
-	async_hangup(parent_sess);
 	if (ret != EOK)
 		hw_res_list_parsed_clean(hw_res);
