Index: uspace/srv/devman/drv_conn.c
===================================================================
--- uspace/srv/devman/drv_conn.c	(revision 5b1813795d41cbb726ef1c77c6a223085a955fd0)
+++ uspace/srv/devman/drv_conn.c	(revision b1dc2825b548f320348604f8b3abe66222a90fd6)
@@ -544,5 +544,5 @@
 		if (fun->service_id != 0) {
 			/* Unregister from location service */
-			rc = loc_service_unregister(fun->service_id);
+			rc = loc_unregister_tree_function(fun, &device_tree);
 			if (rc != EOK) {
 				log_msg(LOG_DEFAULT, LVL_ERROR, "Failed unregistering tree "
Index: uspace/srv/devman/fun.c
===================================================================
--- uspace/srv/devman/fun.c	(revision 5b1813795d41cbb726ef1c77c6a223085a955fd0)
+++ uspace/srv/devman/fun.c	(revision b1dc2825b548f320348604f8b3abe66222a90fd6)
@@ -413,5 +413,5 @@
 	} else {
 		/* Unregister from location service */
-		rc = loc_service_unregister(fun->service_id);
+		rc = loc_unregister_tree_function(fun, &device_tree);
 		if (rc != EOK) {
 			fibril_rwlock_write_unlock(&device_tree.rwlock);
Index: uspace/srv/devman/loc.c
===================================================================
--- uspace/srv/devman/loc.c	(revision 5b1813795d41cbb726ef1c77c6a223085a955fd0)
+++ uspace/srv/devman/loc.c	(revision b1dc2825b548f320348604f8b3abe66222a90fd6)
@@ -67,4 +67,11 @@
 }
 
+int loc_unregister_tree_function(fun_node_t *fun, dev_tree_t *tree)
+{
+	int rc = loc_service_unregister(fun->service_id);
+	tree_rem_loc_function(tree, fun);
+	return rc;
+}
+
 fun_node_t *find_loc_tree_function(dev_tree_t *tree, service_id_t service_id)
 {
@@ -89,4 +96,11 @@
 }
 
+void tree_rem_loc_function(dev_tree_t *tree, fun_node_t *fun)
+{
+	assert(fibril_rwlock_is_write_locked(&tree->rwlock));
+	
+	hash_table_remove(&tree->loc_functions, &fun->service_id);
+}
+
 /** @}
  */
Index: uspace/srv/devman/loc.h
===================================================================
--- uspace/srv/devman/loc.h	(revision 5b1813795d41cbb726ef1c77c6a223085a955fd0)
+++ uspace/srv/devman/loc.h	(revision b1dc2825b548f320348604f8b3abe66222a90fd6)
@@ -39,6 +39,8 @@
 
 extern void loc_register_tree_function(fun_node_t *, dev_tree_t *);
+extern int loc_unregister_tree_function(fun_node_t *, dev_tree_t *);
 extern fun_node_t *find_loc_tree_function(dev_tree_t *, service_id_t);
 extern void tree_add_loc_function(dev_tree_t *, fun_node_t *);
+extern void tree_rem_loc_function(dev_tree_t *, fun_node_t *);
 
 #endif
