add BaseStorage abstract class for easier implementation of new storage