almost correctly async reader