state machining

incomplete but concrete implementation exists