router takes maps instead of lists for more explicit macro