add overridable transition function