Hello all, Apologies if this has been raised before. I reckon there is an issue with the way Dancer2::Handler:: objects get incorporated into apps. The current process is: Dancer2::Core::App object is instantiated and its BUILD method gets called. This calls init_route_handlers. init_route_handlers loops through the config route_handlers section and creates an appropriate route handler for each app. This means, for example, the Dancer2::Handler::File object that handles requests to files in the public folder gets added to every app. The effect of this for a non-existent url request 1) Loop through apps (pm files) 2) Find megasplat route for file handler 3) Call before hooks defined in that app! 4) Call Dancer2::Handler::File route 5) Dancer2::Handler::File doesn’t find file, so it ‘passes’ on to the next route. 6) Go to next app. Whilst this is certainly inefficient, my primary concern is that the before hooks gets called for every single app when you expect before hooks to only apply to the routes that you defined in the same app/perl module as the before hook. Having before hooks apply to routes that you did not define is very confusing. I’d suggest that the Dancer2 Handlers either get added to their own private Dancer2::Core::App object or to a single ‘handler app’. Dancer2::Runner would therefore loop through the (default) handlers and add them to specific app objects. I can’t currently see a use case where you’d want the same route handler to appear in every app, although potentially the route handler could define the route based off something in the config, which in theory could be different for each app/pm file. 2-3 questions then arise: 1) How does Dancer2::Runner handle these. A separate app for each handler? 2) If you do want a before hook to apply, how do you apply one. 3) If for some reason that I can’t see, you do want a handler to create a route in each app, how do you declare that? (some sort of app_route_handler config key?) I am happy to implement these changes and raise a github issue/pull request if the core developers agree with me. You can of course avoid before hooks firing by turning off the default route_handlers with a “route_handler: {}” line in config.yml, but that is super confusing and causes other issues. - shumphrey