more irepository abstraction + caching