Index: uspace/drv/bus/usb/usbhid/mouse/mousedev.c
===================================================================
--- uspace/drv/bus/usb/usbhid/mouse/mousedev.c	(revision acac2effbc6b0707492d35a39f2bac8e89fe564e)
+++ uspace/drv/bus/usb/usbhid/mouse/mousedev.c	(revision edb3cf2f04d2b108284b32ca61af972d4d06ac35)
@@ -152,5 +152,5 @@
 
 /*----------------------------------------------------------------------------*/
-
+#if 0
 static void usb_mouse_send_wheel(const usb_mouse_t *mouse_dev, int wheel)
 {
@@ -177,5 +177,5 @@
 	}
 }
-
+#endif
 /*----------------------------------------------------------------------------*/
 
@@ -221,16 +221,17 @@
 	    &hid_dev->report, USB_HIDUT_USAGE_GENERIC_DESKTOP_WHEEL);
 
-	if ((shift_x != 0) || (shift_y != 0)) {
+	if (shift_x || shift_y || wheel) {
 		async_exch_t *exch =
 		    async_exchange_begin(mouse_dev->mouse_sess);
 		if (exch != NULL) {
-			async_req_2_0(exch, MOUSEEV_MOVE_EVENT, shift_x, shift_y);
+			async_msg_3(exch, MOUSEEV_MOVE_EVENT,
+			    shift_x, shift_y, wheel);
 			async_exchange_end(exch);
 		}
 	}
-
+#if 0
 	if (wheel != 0)
-		usb_mouse_send_wheel(mouse_dev, wheel);
-
+		(void)usb_mouse_send_wheel(mouse_dev, wheel);
+#endif
 	/* Buttons */
 	usb_hid_report_path_t *path = usb_hid_report_path();
Index: uspace/srv/hid/input/generic/input.c
===================================================================
--- uspace/srv/hid/input/generic/input.c	(revision acac2effbc6b0707492d35a39f2bac8e89fe564e)
+++ uspace/srv/hid/input/generic/input.c	(revision edb3cf2f04d2b108284b32ca61af972d4d06ac35)
@@ -172,8 +172,16 @@
 
 /** Mouse pointer has moved. */
-void mouse_push_event_move(mouse_dev_t *mdev, int dx, int dy)
+void mouse_push_event_move(mouse_dev_t *mdev, int dx, int dy, int dz)
 {
 	async_exch_t *exch = async_exchange_begin(client_sess);
-	async_msg_2(exch, INPUT_EVENT_MOVE, dx, dy);
+	if (dx || dy)
+		async_msg_2(exch, INPUT_EVENT_MOVE, dx, dy);
+	if (dz) {
+		keycode_t code = dz > 0 ? KC_UP : KC_DOWN;
+		for (int i = 0; i < 3; ++i) {
+			async_msg_4(exch, INPUT_EVENT_KEY, KEY_PRESS, code, 0, 0);
+		}
+		async_msg_4(exch, INPUT_EVENT_KEY, KEY_RELEASE, code, 0, 0);
+	}
 	async_exchange_end(exch);
 }
Index: uspace/srv/hid/input/include/mouse.h
===================================================================
--- uspace/srv/hid/input/include/mouse.h	(revision acac2effbc6b0707492d35a39f2bac8e89fe564e)
+++ uspace/srv/hid/input/include/mouse.h	(revision edb3cf2f04d2b108284b32ca61af972d4d06ac35)
@@ -62,5 +62,5 @@
 
 extern void mouse_push_data(mouse_dev_t *, sysarg_t);
-extern void mouse_push_event_move(mouse_dev_t *, int, int);
+extern void mouse_push_event_move(mouse_dev_t *, int, int, int);
 extern void mouse_push_event_button(mouse_dev_t *, int, int);
 
Index: uspace/srv/hid/input/proto/adb.c
===================================================================
--- uspace/srv/hid/input/proto/adb.c	(revision acac2effbc6b0707492d35a39f2bac8e89fe564e)
+++ uspace/srv/hid/input/proto/adb.c	(revision edb3cf2f04d2b108284b32ca61af972d4d06ac35)
@@ -82,5 +82,5 @@
 	
 	if (dx != 0 || dy != 0)
-		mouse_push_event_move(mouse_dev, dx, dy);
+		mouse_push_event_move(mouse_dev, dx, dy, 0);
 }
 
Index: uspace/srv/hid/input/proto/mousedev.c
===================================================================
--- uspace/srv/hid/input/proto/mousedev.c	(revision acac2effbc6b0707492d35a39f2bac8e89fe564e)
+++ uspace/srv/hid/input/proto/mousedev.c	(revision edb3cf2f04d2b108284b32ca61af972d4d06ac35)
@@ -91,11 +91,12 @@
 		switch (IPC_GET_IMETHOD(call)) {
 		case MOUSEEV_MOVE_EVENT:
-			mouse_push_event_move(mousedev->mouse_dev, IPC_GET_ARG1(call),
-			    IPC_GET_ARG2(call));
+			mouse_push_event_move(mousedev->mouse_dev,
+			    IPC_GET_ARG1(call), IPC_GET_ARG2(call),
+			    IPC_GET_ARG3(call));
 			retval = EOK;
 			break;
 		case MOUSEEV_BUTTON_EVENT:
-			mouse_push_event_button(mousedev->mouse_dev, IPC_GET_ARG1(call),
-			    IPC_GET_ARG2(call));
+			mouse_push_event_button(mousedev->mouse_dev,
+			    IPC_GET_ARG1(call), IPC_GET_ARG2(call));
 			retval = EOK;
 			break;
Index: uspace/srv/hid/input/proto/ps2.c
===================================================================
--- uspace/srv/hid/input/proto/ps2.c	(revision acac2effbc6b0707492d35a39f2bac8e89fe564e)
+++ uspace/srv/hid/input/proto/ps2.c	(revision edb3cf2f04d2b108284b32ca61af972d4d06ac35)
@@ -126,5 +126,5 @@
 		
 		if (x != 0 || y != 0)
-			mouse_push_event_move(mouse_dev, x, y);
+			mouse_push_event_move(mouse_dev, x, y, 0);
 	}
 }
