                 }
             }
         }
-    }        
+    }
+    
+    private func startScaningForPeripherals(minRSSI: Int) {
+        self.minRSSI = minRSSI
+        
+        guard !self.centralManager.isScanning else { return }
+        
+        self.ensure(centralManagerHasState: .poweredOn) { result in
+            switch result {
+            case .error(let err):
+                self.delegate?.clink(self, didCatchError: err)
+            case .success:
+                self.centralManager.scanForPeripherals(withServices: [self.serviceId], options: nil)
+            }
+        }
+    }
+    
+    private func startAdvertisingPeripheral() {
+        self.ensure(peripheralManagerHasState: .poweredOn) { result in
+            switch result {
+            case .error(let err):
+                self.delegate?.clink(self, didCatchError: err)
+            case .success:
+                self.peripheralManager.startAdvertising([CBAdvertisementDataServiceUUIDsKey: [self.serviceId]])
+            }
+        }
+    }
+    
+    
+    // MARK: - PUBLIC METHODS
     
     override private init() {
-        super.init()        
+        super.init()
         
         let service = CBMutableService(type: serviceId, primary: true)
         

        self.connect(peerWithId: peripheral.identifier)
    }
    
    public final func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
        if let err = error, self.logLevel == .verbose { print(print("\(#function)\n\(err)\n")) }
        
        if let e = error {

            self.connectedPeers.append(peer)
            self.delegate?.clink(self, didDiscoverPeer: peer)
            
            NotificationCenter.default.post(
                name: Clink.Notifications.didDiscoverPeer,
                object: peer,
                userInfo: peer.data)
            
            if self.activePairingTask != nil {
                self.centralManager.stopScan()
