restructure
simplify router