Initial async functionality.  Still needs a demo, some further tidying up and a lot more manual testing.