         
         // TODO: extract common pattern
         let route = routes
-            .map { closure -> (RouteHandler?, Parameters) in
-                if case let .Route(f) = closure { return f(URLString) }
-                else { return (nil, [String: String]())}
-            }
+            .map { $0(URLString) }
             .filter { $0.0 != nil }
             .first
             .map { ($0!, $1) }

            }

            let proxiedRoute = routes
                .map { closure -> (RouteHandler?, Parameters) in
                    if case let .Route(f) = closure { return f(path) }
                    else { return (nil, [String: String]())}
                }
                .filter { $0.0 != nil }
                .first
                .map { ($0!, $1) }

        return false
    }
    
    private func process(var path: String, var parameters: [String: String], var route: (RouteHandler, Parameters), routes: [Route]) {
        var proxies: [Proxy]!
        dispatch_sync(accessQueue) {
            proxies = self.proxies
        }
        
        dispatch_async(routingQueue) {
            let semaphore = dispatch_semaphore_create(0)
            // TODO: allow proxy to abort
            proxies
                .map { $0(path) }
                .filter { $0.0 != nil }
                .map { ($0!, $1) }
                .forEach { (h, var p) in
