added storage abstraction