             }
             .take(1)
 
-        return ensureValidStateAndCallIfNecessary(
-            for: observable,
-            call: { self.peripheral.discoverCharacteristics(characteristicUUIDs, for: service.service) }
+        return ensureValidPeripheralStateAndCallIfSucceeded(
+            for: observable,
+            postSubscriptionCall: { self.peripheral.discoverCharacteristics(characteristicUUIDs, for: service.service) }
         )
     }
 

                throw BluetoothError.descriptorsDiscoveryFailed(characteristic, error)
            }

        return ensureValidStateAndCallIfNecessary(
            for: observable,
            call: { self.peripheral.discoverDescriptors(for: characteristic.characteristic) }
        )
    }


            }
            .take(1)

        return ensureValidPeripheralStateAndCallIfSucceeded(
            for: observable,
            postSubscriptionCall: { self.peripheral.discoverIncludedServices(includedServiceUUIDs, for: service.service) }
        )
    }

