                 
                 _ = (proxiedRoute ?? route).map { (h, var p) -> (RouteHandler, Parameters) in
                     parameters.forEach { p[$0.0] = $0.1 }
-                    dispatch_async(dispatch_get_main_queue()) {
+                    dispatch_async(self.callbackQueue) {
                         h!(p) {
                             dispatch_semaphore_signal(semaphore)
                         }

        // TODO: allow proxy to abort
        
        defer {
            dispatch_async(routingQueue) { [weak self] in
                let semaphore = dispatch_semaphore_create(0)
                
                routes  /* Proxies */

                    .filter { $0.0 != nil }
                    .forEach { (h, var p) in
                        parameters.forEach { p[$0.0] = $0.1 }
                        dispatch_async(self.callbackQueue) {
                            h!(path, p) { (proxiedPath, proxiedParameters) in
                                proxiedParameters.forEach { parameters[$0.0] = $0.1 }
                                path = proxiedPath
