add async functionality