Added abstraction around data sources
finish implementation