move most of basic to quirin
caching
==1 = <= 2