virtualized the data provider layer, which reduces the code!