diff --git a/src/g_game.c b/src/g_game.c
index c6b633cee0c2a12f658e59c93247b48a40230e3b..484d651136de18c3804a82a5b861de13af09eb8e 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -1503,22 +1503,20 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
 		{
 			cmd->buttons |= BT_ACCELERATE;
 			// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
-			forward += ((axis * forwardmove[1]) >> 10)*2;
+			forward += ((axis * forwardmove[1]) / (JOYAXISRANGE-1));
 		}
 
 		axis = JoyAxis(AXISBRAKE, ssplayer);
 		if (InputDown(gc_brake, ssplayer) || (gamepadjoystickmove && axis > 0))
 		{
 			cmd->buttons |= BT_BRAKE;
-			if (cmd->buttons & BT_ACCELERATE || cmd->forwardmove <= 0)
-				forward -= forwardmove[0];	// 25 - Halved value so clutching is possible
+			forward -= forwardmove[0];	// 25 - Halved value so clutching is possible
 		}
 		else if (analogjoystickmove && axis > 0)
 		{
 			cmd->buttons |= BT_BRAKE;
 			// JOYAXISRANGE is supposed to be 1023 (divide by 1024)
-			if (cmd->buttons & BT_ACCELERATE || cmd->forwardmove <= 0)
-				forward -= ((axis * forwardmove[0]) >> 10);
+			forward -= ((axis * forwardmove[0]) / (JOYAXISRANGE-1));
 		}
 
 		// But forward/backward IS used for aiming.