Issue #561 ( https://github.com/sukria/Dancer/issues/561 ) is really killing me and due to the design of Dancer I can't find a simple way around it. The crux of the issue is that in Dancer::Factory::Hooks all the hooks get executed and their return values aren't checked. The hooks are initially compiled in Dancer::Hook and they are compiled wrapped in an eval such that if an exception occurs the hook returns a Dancer::halt which in turns wraps a Dancer::Response object that wraps an error render. Unfortunately nothing is ever done with this error render and I don't see a standard way to actually "halt" processing. If an exception occurs in a hook we should never ignore it and continue processing the rest of the page! We should die immediately and print an error message to the screen. The Dancer::halt method just returns a Dancer::Response object, it doesn't actually stop processing. As it works now, the returned Dancer::Response object is (almost) completely ignored. In fact the status code gets persisted to the actual Dancer::Response that is served (500) but the page renders normally otherwise. We are so deep in the call stack when hooks are executed that it's impossible to have any meaningful "return" value (unless someone goes in to every place "execute_hooks" is called and actually checks for errors -- in this case it would have to check for Dancer::Response objects). Is there a method somewhere that really halts instead of just returning a Dancer::Response object? Is there an accepted way to short-circuit the rest of the request handling? Thanks, Brian