Refactor and cleanup data fetching to support multiple sources