implement storage and tests