use stream based DOM events