add persistence and data source, still need tests