Index: uspace/srv/devman/devman.c
===================================================================
--- uspace/srv/devman/devman.c	(revision df747b9ce545e1eda723dbd969461898e697c40b)
+++ uspace/srv/devman/devman.c	(revision f6584584155369fb64be36eb3432e8a2081ac094)
@@ -679,4 +679,5 @@
 {
 	node_t *dev = tree->root_node;
+	// relative path to the device from its parent (but with '/' at the beginning)
 	char *rel_path = path;
 	char *next_path_elem = NULL;
@@ -685,5 +686,5 @@
 	
 	while (cont && NULL != dev) {		
-		next_path_elem  = get_path_elem_end(rel_path+1);		
+		next_path_elem  = get_path_elem_end(rel_path + 1);		
 		if ('/' == next_path_elem[0]) {
 			cont = true;
@@ -693,7 +694,8 @@
 		}
 		
-		dev = find_node_child(dev, rel_path);		
+		dev = find_node_child(dev, rel_path + 1);		
 		
 		if (cont) {
+			// restore the original path
 			next_path_elem[0] = '/';
 		}
Index: uspace/srv/devman/main.c
===================================================================
--- uspace/srv/devman/main.c	(revision df747b9ce545e1eda723dbd969461898e697c40b)
+++ uspace/srv/devman/main.c	(revision f6584584155369fb64be36eb3432e8a2081ac094)
@@ -291,4 +291,56 @@
 }
 
+/** Find handle for the device instance identified by the device's path in the device tree.
+ */
+static void devman_device_get_handle(ipc_callid_t iid, ipc_call_t *icall)
+{
+	char *pathname;
+	
+	/* Get fqdn */
+	int rc = async_string_receive(&pathname, 0, NULL);
+	if (rc != EOK) {
+		ipc_answer_0(iid, rc);
+		return;
+	}
+	
+	node_t * dev = find_dev_node_by_path(&device_tree, pathname); 
+	
+	free(pathname);
+
+	if (NULL == dev) {
+		ipc_answer_0(iid, ENOENT);
+		return;
+	}
+	
+	ipc_answer_1(iid, EOK, dev->handle);
+}
+
+
+/** Function for handling connections from a client to the device manager.
+ */
+static void devman_connection_client(ipc_callid_t iid, ipc_call_t *icall)
+{
+	/* Accept connection */
+	ipc_answer_0(iid, EOK);
+	
+	bool cont = true;
+	while (cont) {
+		ipc_call_t call;
+		ipc_callid_t callid = async_get_call(&call);
+		
+		switch (IPC_GET_METHOD(call)) {
+		case IPC_M_PHONE_HUNGUP:
+			cont = false;
+			continue;
+		case DEVMAN_DEVICE_GET_HANDLE:
+			devman_device_get_handle(callid, &call);
+			break;
+		default:
+			if (!(callid & IPC_CALLID_NOTIFICATION))
+				ipc_answer_0(callid, ENOENT);
+		}
+	}	
+}
+
 static void devman_forward(ipc_callid_t iid, ipc_call_t *icall, bool drv_to_parent) {	
 	
@@ -346,7 +398,7 @@
 		devman_connection_driver(iid, icall);
 		break;
-	/*case DEVMAN_CLIENT:
-		devmap_connection_client(iid, icall);
-		break;*/
+	case DEVMAN_CLIENT:
+		devman_connection_client(iid, icall);
+		break;
 	case DEVMAN_CONNECT_TO_DEVICE:
 		// Connect client to selected device
