One last refactor to get everything in it's right place for async usage.