guard against cycles
don't calculate tier unless given an option
cycle detection in tiers, unfinished