Make Dispatcher into an interface
move some things to interfaces