Mediator pattern

Rewrite Draft