use EventHandler<T> rather then creating a new delegate type