navigation refactor