simplify by reducing number of delegate and EventArgs types