Async update

This builds on top of #82, the new commit should be squashed with the others. This addresses the remaining issues from my own review of #82.