Simplifying the API, constructor will perform all initialization - not tested with async waiters yet