Broke out into modules. Using Q for async.