http://weblogs.asp.net/rosherove/articles/DefensiveEventPublishing.aspx