better data model. still not done yet