add FSM framework