adding DFA abstraction