first cut at doing events in a more typed way.