refactor router again