[WIP] abstracting out model