Solved: I keep two BLE Managers (BLE1 and BLE2 as BLEManager2) with almost identical code and event handlers (but different event names). At any time, one is doing the comms, the other is searching for nearer devices. I have a global variable ActiveBLEManager (0, 1 or 2). 0 for no connection, 1 for BLE1 and 2 for BLE2. If a nearer device is found then it connects, authenticates, sets notify, negotiates mtu, THEN changes ActiveBLEManager. Just before WriteData I select the BLEManager based on the ActiveBLEManager global.