How to implement State Machines?