 	*/
 	public func peripheral(peripheral: CBPeripheral, didDiscoverCharacteristicsForService service: CBService, error: NSError?) {
 		dispatch_async(self.operationQ) { () -> Void in
+			// multiple reqs of discovering characteristic within a short duration will be responsed simultaneously
+			// 1. check if characteristic UUID specified in req...
 			for req in self.characteristicDiscoveringRequests {
 				if let uuids = req.characteristicUUIDs {
+					// if so, check if all interested characteristics are discovered, otherwise return directly
 					if !self.areCharacteristicsAvailable(uuids: uuids) {
 						return
 					}
 				}
 			}
+			// 2. all interested characteristics are discovered, OR in case no characteristic UUID specified in req...
 			for req in self.characteristicDiscoveringRequests {
 				req.timedOut = false
 				dispatch_async(dispatch_get_main_queue(), { () -> Void in

						// discovering failed
						req.failure?(errorInfo)
					} else {
						// discovering succeed
						req.success?(nil)
					}
				})
				dispatch_async(self.requestQ, { () -> Void in
					self.characteristicDiscoveringRequests.remove(req)
				})

	*/
	public func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?) {
		dispatch_async(self.operationQ) { () -> Void in
			// multiple reqs of discovering service within a short duration will be responsed simultaneously
			// 1. check if service UUID specified in req...
			for req in self.serviceDiscoveringRequests {
				if let uuids = req.serviceUUIDs {
					// if so, check if all interested services are discovered, otherwise return directly
					if !self.areServicesAvailable(uuids: uuids) {
						return
					}
				}
			}
			// 2. all interested services are discovered, OR in case no service UUID specified in req...
			for req in self.serviceDiscoveringRequests {
				req.timedOut = false
				dispatch_async(dispatch_get_main_queue(), { () -> Void in
