add interfaces to abstract the store