Rather than share a filterEventJobSwap method, I'd rather we just copy the function twice. The event generation and event handler code needs to be as dumb as possible to make it painfully clear what the intended behavior is.