Abstract away much of attemptMove