FSM algorithm.