EventTrainer is now abstract generic