back up
refactored to store values instead of re-evaluating