should come out in the same order
now does work async