         // starting handle of the specified service and the Ending Handle shall be set to the 
         // ending handle of the specified service.
         
-        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)
-        }
+        discoverCharacteristics(service: service, completion: completion)
     }
     
     /// Discover Characteristics by UUID

        // The Attribute Type is set to the UUID for «Characteristic» and the Starting Handle and Ending Handle
        // parameters shall be set to the service handle range.
        
        discoverCharacteristics(uuid: uuid, service: service) { [unowned self] (response) in
            
            // update cache
            switch response {
            case .error:
                break
            case let .value(value):
                self.cache.services[service.uuid]?.update(value, isCompleteSet: false)
            }
            
            // call completion
            completion(response)
        }
    }
    
    /// Read Characteristic Value

        
        send(pdu) { [unowned self] in self.findInformationResponse($0, operation: operation) }
    }
    /*
    private func register(notification: Notification?,
                          for characteristic: Characteristic,
                          descriptors: [GATTClient.Descriptor],
