Rewrote the modules to be fully async.