implement DataProvider