         }
     }
     
-    private init(peripheral:Wrapper) {
-        self.peripheral = peripheral
-    }
-    
-    private func lookForAdvertisingToStop() {
-        if self.peripheral.isAdvertising {
-            let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(WAIT_FOR_ADVERTISING_TO_STOP_POLLING_INTERVAL * Float(NSEC_PER_SEC)))
-            dispatch_after(popTime, self.peripheralQueue, {
-                self.lookForAdvertisingToStop()
-            })
+    private init() {
+    }
+    
+    private func lookForAdvertisingToStop(peripheral:Wrapper) {
+        if peripheral.isAdvertising {
+            PeripheralQueue.delay(WAIT_FOR_ADVERTISING_TO_STOP_POLLING_INTERVAL) {
+                self.lookForAdvertisingToStop(peripheral)
+            }
         } else {
             Logger.debug("Peripheral#lookForAdvertisingToStop: Advertising stopped")
             self.afterAdvertsingStoppedPromise.success()

    }
    
    // CBPeripheralManagerDelegate
    public func peripheralManagerDidUpdateState() {
        switch self.peripheral.state {
        case CBPeripheralManagerState.PoweredOn:
            Logger.debug("PeripheralManagerImpl#peripheralManagerDidUpdateState: poweredOn")
            self.afterPowerOnPromise.success()

        return promise.future
    }
    
    public func removeAllServices(peripheral:Wrapper) -> Future<Void> {
        let promise = Promise<Void>()
        if !peripheral.isAdvertising {
            Logger.debug("PeripheralManagerImpl#removeAllServices")
            peripheral.removeAllWrappedServices()
            promise.success()
        } else {
            promise.failure(BCError.peripheralManagerIsAdvertising)
