Ported to use more async