Index: uspace/drv/bus/usb/usbhid/mouse/mousedev.c
===================================================================
--- uspace/drv/bus/usb/usbhid/mouse/mousedev.c	(revision c5b6db5336d3a1455e16c9047748a71e1337c382)
+++ uspace/drv/bus/usb/usbhid/mouse/mousedev.c	(revision f2964e4523ea4081acddb6f42fcb7d6ebf764615)
@@ -186,4 +186,19 @@
 	if (mouse_dev->wheel_sess != NULL)
 		async_hangup(mouse_dev->wheel_sess);
+	int ret = ddf_fun_unbind(mouse_dev->mouse_fun);
+	if (ret != EOK) {
+		usb_log_error("Failed to unbind mouse function.\n");
+	} else {
+		ddf_fun_destroy(mouse_dev->mouse_fun);
+		/* Prevent double free */
+		mouse_dev->wheel_fun->driver_data = NULL;
+	}
+
+	ret = ddf_fun_unbind(mouse_dev->wheel_fun);
+	if (ret != EOK) {
+		usb_log_error("Failed to unbind wheel function.\n");
+	} else {
+		ddf_fun_destroy(mouse_dev->wheel_fun);
+	}
 }
 
@@ -338,5 +353,4 @@
 		usb_log_error("Could not bind DDF function: %s.\n",
 		    str_error(rc));
-		ddf_fun_destroy(fun);
 		return rc;
 	}
@@ -349,7 +363,7 @@
 		    "Could not add DDF function to category %s: %s.\n",
 		    HID_MOUSE_CATEGORY, str_error(rc));
-		ddf_fun_destroy(fun);
-		return rc;
-	}
+		return rc;
+	}
+	mouse->mouse_fun = fun;
 
 	/*
@@ -376,5 +390,4 @@
 		usb_log_error("Could not bind DDF function: %s.\n",
 		    str_error(rc));
-		ddf_fun_destroy(fun);
 		return rc;
 	}
@@ -387,7 +400,7 @@
 		    "Could not add DDF function to category %s: %s.\n",
 		    HID_MOUSE_WHEEL_CATEGORY, str_error(rc));
-		ddf_fun_destroy(fun);
-		return rc;
-	}
+		return rc;
+	}
+	mouse->wheel_fun = fun;
 
 	return EOK;
@@ -511,5 +524,5 @@
 {
 	if (data != NULL) {
-		usb_mouse_destroy((usb_mouse_t *)data);
+		usb_mouse_destroy(data);
 	}
 }
Index: uspace/drv/bus/usb/usbhid/mouse/mousedev.h
===================================================================
--- uspace/drv/bus/usb/usbhid/mouse/mousedev.h	(revision c5b6db5336d3a1455e16c9047748a71e1337c382)
+++ uspace/drv/bus/usb/usbhid/mouse/mousedev.h	(revision f2964e4523ea4081acddb6f42fcb7d6ebf764615)
@@ -55,4 +55,8 @@
 
 	ddf_dev_ops_t ops;
+	/* DDF mouse function */
+	ddf_fun_t *mouse_fun;
+	/* DDF mouse function */
+	ddf_fun_t *wheel_fun;
 } usb_mouse_t;
 
