Routing merge

This is just a merge of master into the routing branch, to make it easier to merge and ensure that any work that still needs to be done (if there is any?) isn't creating more work in the merge.