with event subtyping