Generic Automaton macro!