Index: uspace/drv/char/ps2mouse/ps2mouse.c
===================================================================
--- uspace/drv/char/ps2mouse/ps2mouse.c	(revision 3fac882de32a2062f42b9cca57a8ec1a5c932667)
+++ uspace/drv/char/ps2mouse/ps2mouse.c	(revision db9ef0c61e487e3425327e1970bd33de373bf43b)
@@ -176,4 +176,5 @@
 			continue;
 		}
+
 		/* Buttons */
 		for (unsigned i = 0; i < BUTTON_COUNT; ++i) {
@@ -184,11 +185,13 @@
 			}
 		}
+
 		/* Movement */
-		const int move_x = ((packet[0] & X_SIGN)
-		    ? (int)(int8_t)packet[1] : (int)packet[1]);
-		const int move_y = -((packet[0] & Y_SIGN)
-		    ? (int)(int8_t)packet[2] : (int)packet[2]);
+		const int16_t move_x =
+		    ((packet[0] & X_SIGN) ? 0xff00 : 0) | packet[1];
+		const int16_t move_y =
+		    (((packet[0] & Y_SIGN) ? 0xff00 : 0) | packet[2]);
+		//TODO: Consider overflow bit
 		if (move_x != 0 || move_y != 0) {
-			async_msg_2(exch, MOUSEEV_MOVE_EVENT, move_x, move_y);
+			async_msg_2(exch, MOUSEEV_MOVE_EVENT, move_x, -move_y);
 		}
 		async_exchange_end(exch);
