It's fixed now...

I've adapted tick approach in Nuno's article and my main loop looks like that:
Code:
      repeat        while TicksInQueue>0 do
        begin
          if ((CurrentState<>nil) and (not quit)) then CurrentState.Update;
          Dec(TicksInQueue);
        end;
        if not quit then CurrentState.BeforeDraw;
        if not quit then CurrentState.Draw;
        if not quit then CurrentState.Main;
      until quit;
The only thing update function (timer) does now is to increase TicksInQueue.