   public func get(key: KeyType) -> CacheRequest<OutputType> {
     let result = CacheRequest<OutputType>()
     
-    let request = Request(URL: key, success: { data in
+    let request = Request(URL: key, success: { data,request in
       Logger.log("Fetched \(key) from the network fetcher")
       result.succeed(data)
-      self.pendingRequests[key.absoluteString!] = nil
-    }, failure: { error in
+      self.removePendingRequests(request)
+    }, failure: { error, request in
       Logger.log("Failed fetching \(key) from the network fetcher", .Error)
       result.fail(error)
-      self.pendingRequests[key.absoluteString!] = nil
+      self.removePendingRequests(request)
     })
-    
-    pendingRequests[key.absoluteString!] = request
+    self.addPendingRequest(request)
     return result
   }
   

    private let URL : NSURL
    private var task : NSURLSessionDataTask? = nil
    
    init(URL: NSURL, success succeed : (NSData) -> (), failure fail : ((NSError?) -> ())) {
      self.URL = URL
      self.task = NSURLSession.sharedSession().dataTaskWithURL(URL) {[weak self] (data, response, error) in
        if let strongSelf = self {

      }
    }
    
    private func failWithCode(code: NetworkFetcherError, failure fail : ((NSError?,Request) -> ())) {
      dispatch_async(dispatch_get_main_queue()) {
        fail(errorWithCode(code.rawValue),self)
      }
    }
  }

  private lazy var lockQueue: dispatch_queue_t = {
    return dispatch_queue_create(CarlosGlobals.QueueNamePrefix + "NetworkFetcher", nil)
  }()

  private var pendingRequests: [Request] = []

  private func addPendingRequest(request: Request) {
    dispatch_async(lockQueue) {
      self.pendingRequests.append(request)
    }
  }

  private func removePendingRequests(request: Request) {
    dispatch_async(lockQueue) {
      var idx: Int?

      for (index, obj) in enumerate(self.pendingRequests) {
        if request === obj {
          idx = index
          break
        }
      }

      if let idx = idx {
        self.pendingRequests.removeAtIndex(idx)
      }
    }
  }

  /**
  Initializes a new instance of a NetworkFetcher
  */
