Refactor for true asynchrony, update docs