un-nested UserObject
utilities
simplified TransitionListener
simplified TransitionListener
refactor