with async wrapper