better event handling & triggering