Changed to a composite function model for async