storage abstraction