centralise all dispatching functionality