First run at an async interface, and untested implementation.