employed some aggressive caching so we don't recalculate the spiral all the time, which is rather expensive computationally