removed observer pattern, in favour of mediator