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

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

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