 
     @objc internal func invalidate() {
         advertisingTimeoutTimer?.invalidate()
-        // Cancel connection (if any) if peripheral wasn't "hijacked" by another one (e.g. NuimoDFU) – this is when the delegate isn't any longer `self`
-        if peripheral.delegate === self {
-            centralManager.cancelPeripheralConnection(peripheral)
-        }
+        disconnect()
         didInvalidate()
     }
 

    }

    public func disconnect() -> Bool {
        guard [CBPeripheralState.Connecting, CBPeripheralState.Connected].contains(peripheral.state) else { return false }
        centralManager.cancelPeripheralConnection(peripheral)
        return true
    }

    private var advertisingTimeoutTimer: NSTimer?
    private var connectionTimeoutTimer: NSTimer?
    private var connectionAttempt = 0
    private var didInitiateConnection = false

    /// Convenience initializer that takes a BLEDiscoveryManager instead of a CBCentralManager. This initializer allows to detect that the device has disappeared by checking if the OS didn't receive any more advertising packages.
    public convenience init(discoveryManager: BLEDiscoveryManager, uuid: String, peripheral: CBPeripheral) {
