Refactor futures and move to util::async