Good suggestion Angelo.
The key handling is done in the onMove procedure and the doMove is called in the statemachine and the statemachine is called in the timer procedure:

Code:
if (isUp in form1.DXInput1.States) then
Y := y + (1 * updatespeed) else
if not(isUp in form1.DXInput1.States) then
Y := Y + (0.5 * updatespeed);
I disabled the procedure to check if the key is pressed or not and it is still jerky :-(

i.e. Y := y + (1 * updatespeed);

Thanks for your help so far :-)