also yield user_data in callbacks