Triggers 3 events... are you sure it shouldn't be just a single event having the logic as part of a chain of responsibility (being a listener)?