still workign on the first version; refactoring to use callbacks to support multiple storage providers"