optimize doMove