refactored as separate classes
Use subclasses for legacy storage.