add cache, update to use different internal existing variation structure