1. A computer-implemented method for running state machines, the method comprising: running at least a first and a second state machine in parallel; observing at least the first state machine for at least one first synchronization rule; changing the state of the second state machine when the first synchronization rule applies; observing the second state machine for at least one second synchronization rule; and changing the state of the first state machine when the second synchronization rule applies.