Reimplementación con FSM.