Index: uspace/srv/devman/main.c
===================================================================
--- uspace/srv/devman/main.c	(revision fb4c877b5a2e89c57f7d1e3d731e386508596fbd)
+++ uspace/srv/devman/main.c	(revision b29bb098aa093f6015e148a9c216b7fcd225b8d6)
@@ -320,8 +320,11 @@
 			fibril_rwlock_write_unlock(&device_tree.rwlock);
 			
-			rc = driver_dev_remove(&device_tree, dev);
-			if (rc != EOK) {
-				dev_del_ref(dev);
-				return ENOTSUP;
+			/* If device is owned by driver, ask driver to give it up. */
+			if (dev->state == DEVICE_USABLE) {
+				rc = driver_dev_remove(&device_tree, dev);
+				if (rc != EOK) {
+					dev_del_ref(dev);
+					return ENOTSUP;
+				}
 			}
 			
@@ -332,7 +335,9 @@
 				return EIO;
 			}
+			driver_t *driver = dev->drv;
 			fibril_rwlock_read_unlock(&device_tree.rwlock);
 			
-			detach_driver(&device_tree, dev);
+			if (driver)
+				detach_driver(&device_tree, dev);
 			
 			fibril_rwlock_write_lock(&device_tree.rwlock);
