Use event dispatcher abstraction, add providers/factories