 	 */
 	public func discoverIncludedServices(includedServiceUUIDs: [CBUUID]?,
 		forService service: Service) -> Observable<[Service]> {
+        if let identifiers = includedServiceUUIDs, let services = service.includedServices?.filter({ identifiers.contains($0.UUID) })
+            where identifiers.count == services.count {
+            return ensureValidPeripheralState(Observable.just(services))
+        } else {
 			let observable = peripheral
 				.rx_didDiscoverIncludedServicesForService
 				.filter { $0.0 == service.service }

	 Immediately after that `.Complete` is emitted.
	 */
	public func discoverServices(serviceUUIDs: [CBUUID]?) -> Observable<[Service]> {
		let observable = peripheral.rx_didDiscoverServices
			.flatMap {
				(_, error) -> Observable<[Service]> in
				if let cachedRxServices = self.peripheral.services  {
					let cachedServices = cachedRxServices.map { Service(peripheral: self, service: $0) }
					guard let identifiers = serviceUUIDs else { return Observable.just(cachedServices) }
					let uuids = cachedServices.map { $0.service.uuid }
					if Set(identifiers).isSubsetOf(Set(uuids)) {

					disposable.dispose()
				}
			}
        }
	}

	// MARK: Characteristics
