Use async and make sure errors are passed to callback