             } else if Utils.validateRegexp(url, regexp: "^data:(.*)\\/(.*);base64,(.*)") && method == "GET" {
                 
                 // JAVASCRIPT INLINE REQUESTS
-                
-                NSURLProtocol.setProperty("", forKey: HttpInterceptorProtocol.httpInterceptorKey, inRequest: newRequest)
-                NSURLConnection.sendAsynchronousRequest(newRequest, queue: HttpInterceptorProtocol.queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
-                    if (error == nil) {
-                        self.client!.URLProtocol(self, didReceiveResponse: response, cacheStoragePolicy: .NotAllowed)
-                        self.client!.URLProtocol(self, didLoadData: data)
-                        self.client!.URLProtocolDidFinishLoading(self)
-                        NSURLProtocol.removePropertyForKey(HttpInterceptorProtocol.httpInterceptorKey, inRequest: newRequest)
-                    } else {
-                        self.client!.URLProtocol(self, didFailWithError: error)
-                        NSURLProtocol.removePropertyForKey(HttpInterceptorProtocol.httpInterceptorKey, inRequest: newRequest)
-                    }
-                })
+                self.forwardResponse(newRequest)
             
             } else {
                 
-                // EXTERNAL URL'S
-                
-                // TODO: Validate services, end-points, paths and methods...
-                
                 if IOParser.sharedInstance.validateResource(url) && method == "GET" {
                     
-                    // VALIDATE RESOURCES
-                    
-                    NSURLProtocol.setProperty("", forKey: HttpInterceptorProtocol.httpInterceptorKey, inRequest: newRequest)
-                    NSURLConnection.sendAsynchronousRequest(newRequest, queue: HttpInterceptorProtocol.queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
-                        if (error == nil) {
-                            self.client!.URLProtocol(self, didReceiveResponse: response, cacheStoragePolicy: .NotAllowed)
-                            self.client!.URLProtocol(self, didLoadData: data)
-                            self.client!.URLProtocolDidFinishLoading(self)
-                            NSURLProtocol.removePropertyForKey(HttpInterceptorProtocol.httpInterceptorKey, inRequest: newRequest)
-                        } else {
-                            self.client!.URLProtocol(self, didFailWithError: error)
-                            NSURLProtocol.removePropertyForKey(HttpInterceptorProtocol.httpInterceptorKey, inRequest: newRequest)
-                        }
-                    })
+                    // VALIDATE EXTERNAL RESOURCES WHITELIST
+                    self.forwardResponse(newRequest)
+                    
+                } else if let st = IOParser.sharedInstance.getServiceTokenByURI(url) {
+                    
+                    // VALIDATE EXTERNAL SERVICES WHITELIST
+                    if IOParser.sharedInstance.validateService(st) {
+                        self.forwardResponse(newRequest)
+                    } else {
+                        self.nonPermisionResponse(newRequest)
+                    }
+                    
                 } else {
-                    var response : NSHTTPURLResponse! = NSHTTPURLResponse(URL: self.request.URL, statusCode: 403, HTTPVersion: "1.1", headerFields: nil)
-                    self.client!.URLProtocol(self, didReceiveResponse: response, cacheStoragePolicy: .NotAllowed)
-                    self.client!.URLProtocol(self, didLoadData: "".dataUsingEncoding(NSUTF8StringEncoding)!)
-                    self.client!.URLProtocolDidFinishLoading(self)
-                    NSURLProtocol.removePropertyForKey(HttpInterceptorProtocol.httpInterceptorKey, inRequest: newRequest)
+                    self.nonPermisionResponse(newRequest)
                 }
             }
         } else {

                
                // ADAPTIVE NATIVE CALLS
                
                
                if let body:NSData = newRequest.HTTPBody {
                    
                    if let bodyString:NSString = NSString(data: body, encoding: NSUTF8StringEncoding) {

                            logger.log(ILoggingLogLevel.ERROR, category:loggerTag, message: "There is no attribute inside APIRequest indicating the TS version ")
                        }
                        
                        // Call the service and return the data
                        var apiResponse:APIResponse = ServiceHandler.sharedInstance.handleServiceUrl(apiRequest)
                        var data:NSString = APIResponse.Serializer.toJSON(apiResponse)
                        
                        // Create the response                        
                        var responseHeaders = NSMutableDictionary(dictionary: requestHeaders)
