support both types of async