async wins again, rewrite using twisted