better async

dig out of cb hell and so you don't choke on *possible* errors. May do some reorganizing if thats a PR you would accept to clean up this codebase, its a bit scary to look at...