Probably we should do a similar thing to `Sync` here with `Client` and have a module/object that manages this all internally.