why is it ever nil? do we want to support not storing metadata? isn't it better to just have the store have an extra method?