         if let e = error {
             result = .failure(e)
         }
-        characteristicDiscoveryHandler?(result)
+        
+        for operation in queue.items {
+            guard operation.name == service.uuid.uuidString,
+                operation.isExecuting == true else {
+                    continue
+            }
+            // TODO: Exit loop, or run through everything just in case? Probably exit
+            // TODO: If queue.items can be mapped as QueueItem<Data> - cast unnecessary
+            (operation as? QueueItem<DiscoveredCharacteristic>)?.notify(result)
+        }
     }
     
     func didUpdateValueFor(characteristic: CBCharacteristic, error: Error?) {

    fileprivate let manager: SwiftyTeeth

    fileprivate var connectionHandler: ConnectionHandler?
    // Should these handlers be queues?
    fileprivate var serviceDiscoveryHandler: ServiceDiscovery?
    fileprivate var characteristicDiscoveryHandler: CharacteristicDiscovery?
    
    fileprivate var notificationHandler = [CBCharacteristic: ReadHandler]()
    
    // Connection parameters

import CoreBluetooth

public typealias DiscoveredCharacteristic = (service: CBService, characteristics: [CBCharacteristic])

public typealias ConnectionHandler = ((Bool) -> Void)
public typealias ServiceDiscovery = ((Result<[CBService]>) -> Void)
public typealias CharacteristicDiscovery = ((Result<DiscoveredCharacteristic>) -> Void)
