data layer implementation