Index: uspace/drv/bus/usb/usbflbk/main.c
===================================================================
--- uspace/drv/bus/usb/usbflbk/main.c	(revision a825eeb05c1e010a5e73089de2df743ccc767e34)
+++ uspace/drv/bus/usb/usbflbk/main.c	(revision 05a119bc6974949bfc4fa29be4efcd72245f813c)
@@ -64,4 +64,6 @@
 	}
 
+	dev->driver_data = ctl_fun;
+
 	usb_log_info("Pretending to control %s `%s'" \
 	    " (node `%s', handle %" PRIun ").\n",
@@ -72,7 +74,27 @@
 }
 
+/** Callback when new device is removed and recognized as gone by DDF.
+ *
+ * @param dev Representation of a generic DDF device.
+ * @return Error code.
+ */
+static int usbfallback_device_gone(usb_device_t *dev)
+{
+	assert(dev);
+	ddf_fun_t *ctl_fun = dev->driver_data;
+	const int ret = ddf_fun_unbind(ctl_fun);
+	if (ret != EOK) {
+		usb_log_error("Failed to unbind %s.\n", ctl_fun->name);
+		return ret;
+	}
+	ddf_fun_destroy(ctl_fun);
+	dev->driver_data = NULL;
+
+	return EOK;
+}
 /** USB fallback driver ops. */
 static usb_driver_ops_t usbfallback_driver_ops = {
 	.device_add = usbfallback_device_add,
+	.device_gone = usbfallback_device_gone,
 };
 
