Back when I was learning C#, I was taught a pattern for events that went something like this: public class Tribe { // For demonstration only. Please do not write code like this. public class TribesmanAddedEventArgs : EventArgs { private readonly Tribesman _tribesman; public TribesmanAddedEventArgs(Tribesman tribesman) { _tribesman = tribesman; } public Tribesman NewTribesman { get { return _tribesman; } } } public delegate void TribesmanAddedDelegate(object sender, TribesmanAddedEventArgs args); public event TribesmanAddedDelegate TribesmanAdded; private void OnTribesmanAdded(Tribesman tribesman) { if(TribesmanAdded != null) TribesmanAdded(this, new TribesmanAddedEventArgs(tribesman)); } } Can we take this any further? You bet Read More...