Updated to be async.
Updated to use monitor mixin.