New speed adjust algorithm

Finally thought through how this should have worked from the start.