Rewrite data model to allow some rough caching