some refactoring and Event Subsrcription Model