Complete Rewrite to work asynchronously.