add data model to make async stuff easier