distinguish data and model, add Async