update interface; add state machine; add specs