setTimeout isn't that precise