 		return isExecutingOperation
 	}
 	
-	private var isExecutingOperation = false {
-		willSet {
-			willChangeValue(for: \.isExecuting)
-		}
-		didSet {
-			didChangeValue(for: \.isExecuting)
-		}
-	}
-	
 	override var isFinished: Bool {
 		return isFinishedOperation
 	}
-	
-	private var isFinishedOperation = false {
-		willSet {
+
+	private var isExecutingOperation = false
+	private var isFinishedOperation = false
+
+	private func updateExecutingAndFinished(_ executing: Bool, _ finished: Bool) {
+		let isExecutingDidChange = executing != isExecutingOperation
+		let isFinishedDidChange = finished != isFinishedOperation
+
+		if isFinishedDidChange {
 			willChangeValue(for: \.isFinished)
 		}
-		didSet {
+		if isExecutingDidChange {
+			willChangeValue(for: \.isExecuting)
+		}
+		isExecutingOperation = executing
+		isFinishedOperation = finished
+
+		if isExecutingDidChange {
+			didChangeValue(for: \.isExecuting)
+		}
+		if isFinishedDidChange {
 			didChangeValue(for: \.isFinished)
 		}
 	}

	
	override func start() {
		guard !isCancelled else {
			isExecutingOperation = false
			isFinishedOperation = true
			
			if downloadProgress != nil {
				DispatchQueue.main.async {
					self.downloadProgress = nil

		
		downloadProgress = nil
		
		updateExecutingAndFinished(false, true)
	}
	
	func didFinish(_ error: Error) {
