refactor toward recursion
anticipate upcoming moves