Index: uspace/drv/bus/usb/usbmid/explore.c
===================================================================
--- uspace/drv/bus/usb/usbmid/explore.c	(revision 359d96fd2cd98fd2da38c5c6b6ae8505ebfa8c50)
+++ uspace/drv/bus/usb/usbmid/explore.c	(revision 229629d35e44cfe88f924a130ad369c5c4699b91)
@@ -163,28 +163,36 @@
 	}
 
+	usb_mid_t *usb_mid = malloc(sizeof(usb_mid_t));
+	if (!usb_mid) {
+		usb_log_error("Failed to create USB MID structure.\n");
+		return false;
+	}
+
 	/* Create control function */
-	ddf_fun_t *ctl_fun = ddf_fun_create(dev->ddf_dev, fun_exposed, "ctl");
-	if (ctl_fun == NULL) {
+	usb_mid->ctl_fun = ddf_fun_create(dev->ddf_dev, fun_exposed, "ctl");
+	if (usb_mid->ctl_fun == NULL) {
 		usb_log_error("Failed to create control function.\n");
-		return false;
-	}
-
-	ctl_fun->ops = &mid_device_ops;
-
-	rc = ddf_fun_bind(ctl_fun);
+		free(usb_mid);
+		return false;
+	}
+
+	usb_mid->ctl_fun->ops = &mid_device_ops;
+
+	rc = ddf_fun_bind(usb_mid->ctl_fun);
 	if (rc != EOK) {
-		ddf_fun_destroy(ctl_fun);
 		usb_log_error("Failed to bind control function: %s.\n",
 		    str_error(rc));
-		return false;
-	}
+		ddf_fun_destroy(usb_mid->ctl_fun);
+		free(usb_mid);
+		return false;
+	}
+
 
 	/* Create interface children. */
-	list_t interface_list;
-	list_initialize(&interface_list);
+	list_initialize(&usb_mid->interface_list);
 	create_interfaces(config_descriptor_raw, config_descriptor_size,
-	    &interface_list);
-
-	list_foreach(interface_list, link) {
+	    &usb_mid->interface_list);
+
+	list_foreach(usb_mid->interface_list, link) {
 		usbmid_interface_t *iface = list_get_instance(link,
 		    usbmid_interface_t, link);
@@ -201,4 +209,5 @@
 		}
 	}
+	dev->driver_data = usb_mid;
 
 	return true;
Index: uspace/drv/bus/usb/usbmid/usbmid.h
===================================================================
--- uspace/drv/bus/usb/usbmid/usbmid.h	(revision 359d96fd2cd98fd2da38c5c6b6ae8505ebfa8c50)
+++ uspace/drv/bus/usb/usbmid/usbmid.h	(revision 229629d35e44cfe88f924a130ad369c5c4699b91)
@@ -58,4 +58,10 @@
 } usbmid_interface_t;
 
+/** Container to hold all the function pointers */
+typedef struct usb_mid {
+	ddf_fun_t *ctl_fun;
+	list_t interface_list;
+} usb_mid_t;
+
 bool usbmid_explore_device(usb_device_t *);
 int usbmid_spawn_interface_child(usb_device_t *, usbmid_interface_t *,
