refactor url() with visitor