Completely rewrite routing and using recursive