major refactor for enter/exit/update pattern