first cut at state machine, with everything as passthroughs