Index: uspace/app/usbinfo/list.c
===================================================================
--- uspace/app/usbinfo/list.c	(revision e242fbaada5d843aef96bca2b157fc06cef8a9e1)
+++ uspace/app/usbinfo/list.c	(revision f3922c24c834e6340915df177133dd6ad8afa309)
@@ -55,23 +55,8 @@
 	int rc = devman_fun_get_path(handle, path, MAX_PATH_LENGTH);
 	if (rc != EOK) {
-		printf(NAME "Failed to get path for device %" PRIun
-		    "\n", handle);
+		printf(NAME "Failed to get path for device %"PRIun"\n", handle);
 		return;
 	}
-	// TODO remove this. Device name contains USB address
-	// and addresses as external id are going away
-	usb_dev_session_t *sess = usb_dev_connect(handle);
-	async_exch_t *exch = async_exchange_begin(sess);
-	
-	usb_address_t address;
-	rc = usb_get_my_address(exch, &address);
-	
-	async_exchange_end(exch);
-	usb_dev_disconnect(sess);
-	if (rc != EOK) {
-		printf("Failed to get address for device %" PRIun "\n", handle);
-		return;
-	}
-	printf("\tDevice %02d: %s\n", address, path);
+	printf("\tDevice %" PRIun ": %s\n", handle, path);
 }
 
Index: uspace/lib/usb/src/dev.c
===================================================================
--- uspace/lib/usb/src/dev.c	(revision e242fbaada5d843aef96bca2b157fc06cef8a9e1)
+++ uspace/lib/usb/src/dev.c	(revision f3922c24c834e6340915df177133dd6ad8afa309)
@@ -35,49 +35,4 @@
 #include <stdio.h>
 
-#define MAX_DEVICE_PATH 1024
-
-static bool try_parse_bus_and_address(const char *path,
-    const char **func_start,
-    devman_handle_t *out_hc_handle, usb_address_t *out_device_address)
-{
-	uint64_t sid;
-	size_t address;
-	int rc;
-	const char *ptr;
-
-	rc = str_uint64_t(path, &ptr, 10, false, &sid);
-	if (rc != EOK) {
-		return false;
-	}
-	if ((*ptr == ':') || (*ptr == '.')) {
-		ptr++;
-	} else {
-		return false;
-	}
-	rc = str_size_t(ptr, func_start, 10, false, &address);
-	if (rc != EOK) {
-		return false;
-	}
-	rc = usb_ddf_get_hc_handle_by_sid(sid, out_hc_handle);
-	if (rc != EOK) {
-		return false;
-	}
-	if (out_device_address != NULL) {
-		*out_device_address = (usb_address_t) address;
-	}
-	return true;
-}
-
-static int get_device_handle_by_address(devman_handle_t hc_handle, int addr,
-    devman_handle_t *dev_handle)
-{
-	usb_hc_connection_t conn;
-	usb_hc_connection_initialize(&conn, hc_handle);
-
-	const int rc = usb_hc_get_handle_by_address(&conn, addr, dev_handle);
-
-	return rc;
-}
-
 /** Resolve handle and address of USB device from its path.
  *
@@ -105,78 +60,13 @@
 	}
 
-	devman_handle_t hc;
-	usb_address_t addr = -1;
-	int rc;
-	const char *func_start = NULL;
-	char *path = NULL;
+	/* First, try to get the device handle. */
+	int rc = devman_fun_get_handle(dev_path, dev_handle, 0);
 
-	/* First try the BUS.ADDR format. */
-	if (try_parse_bus_and_address(dev_path, &func_start, &hc, &addr)) {
-		/*
-		 * Now get the handle of the device. We will need that
-		 * in both cases. If there is only BUS.ADDR, it will
-		 * be the handle to be returned to the caller, otherwise
-		 * we will need it to resolve the path to which the
-		 * suffix would be appended.
-		 */
-		/* If there is nothing behind the BUS.ADDR, we will
-		 * get the device handle from the host controller.
-		 * Otherwise, we will
-		 */
-
-		rc = get_device_handle_by_address(hc, addr, dev_handle);
-		if (rc != EOK) {
-			return rc;
-		}
-		if (str_length(func_start) > 0) {
-			char tmp_path[MAX_DEVICE_PATH];
-			rc = devman_fun_get_path(*dev_handle,
-			    tmp_path, MAX_DEVICE_PATH);
-			if (rc != EOK) {
-				return rc;
-			}
-			rc = asprintf(&path, "%s%s", tmp_path, func_start);
-			if (rc < 0) {
-				return ENOMEM;
-			}
-		} else {
-			/* Everything is resolved. Get out of here. */
-			return EOK;
-		}
-	} else {
-		path = str_dup(dev_path);
-		if (path == NULL) {
-			return ENOMEM;
-		}
+	/* Next, try parsing dev_handle from the provided string */
+	if (rc != EOK) {
+		*dev_handle = strtoul(dev_path, NULL, 10);
+		//FIXME: check errno
+		rc = EOK;
 	}
-
-	/* First try to get the device handle. */
-	rc = devman_fun_get_handle(path, dev_handle, 0);
-	if (rc != EOK) {
-		free(path);
-		/* Invalid path altogether. */
-		return rc;
-	}
-
-	/* Remove suffixes and hope that we will encounter device node. */
-	while (str_length(path) > 0) {
-		/* Get device handle first. */
-		devman_handle_t tmp_handle;
-		rc = devman_fun_get_handle(path, &tmp_handle, 0);
-		if (rc != EOK) {
-			free(path);
-			return rc;
-		}
-
-		/* Remove the last suffix. */
-		char *slash_pos = str_rchr(path, '/');
-		if (slash_pos != NULL) {
-			*slash_pos = 0;
-		}
-	}
-
-	free(path);
-
-
-	return EOK;
+	return rc;
 }
