         // starting handle of the specified service and the Ending Handle shall be set to the 
         // ending handle of the specified service.
         
-        discoverCharacteristics(service: service, completion: completion)
+        discoverCharacteristics(service: service) { [unowned self] (response) in
+            
+            // update cache
+            switch response {
+            case .error:
+                break
+            case let .value(value):
+                self.cache.services[service.uuid]?.update(value)
+            }
+            
+            // call completion
+            completion(response)
+        }
     }
     
     /// Discover Characteristics by UUID

            
            return nil
        }
    }
}


        guard let end = cache.endHandle(for: characteristic)
            else { fatalError("Could not retrieve handles") }
        
        let operation = DescriptorDiscoveryOperation(start: start, end: end) { [unowned self] (response) in
            
            // update cache
            switch response {
            case .error:
                break
            case let .value(value):
                self.cache.update(value, for: characteristic)
            }
            
            // call completion
            completion(response)
        }
        
        discoverDescriptors(operation: operation)
    }
