refactor to utilize RouteUrl and UrlInterface