restructure repo to support multiple data sources