 			switch result {
 			case .success(let syncStatuses):
 				
-				guard syncStatuses.count > 0 else {
+				func stopProcessing() {
 					if self.showProgress {
 						self.refreshProgress?.completeTask()
 					}
 					os_log(.debug, log: self.log, "Done sending article statuses.")
 					self.operationDelegate?.operationDidComplete(self)
+				}
+				
+				guard syncStatuses.count > 0 else {
+					stopProcessing()
 					return
 				}
 				
-				self.processStatuses(syncStatuses) {
-					self.selectForProcessing()
+				self.processStatuses(syncStatuses) { stop in
+					if stop {
+						stopProcessing()
+					} else {
+						self.selectForProcessing()
+					}
 				}
 				
 			case .failure(let databaseError):
-				
 				os_log(.error, log: self.log, "Send status error: %@.", databaseError.localizedDescription)
 				self.operationDelegate?.cancelOperation(self)
-				
 			}
 		}
 	}
 	
-	func processStatuses(_ syncStatuses: [SyncStatus], completion: @escaping () -> Void) {
+	func processStatuses(_ syncStatuses: [SyncStatus], completion: @escaping (Bool) -> Void) {
 		guard let account = account, let articlesZone = articlesZone else {
-			completion()
+			completion(true)
 			return
 		}
 		

					return CloudKitArticleStatusUpdate(articleID: key, statuses: value, article: articlesDict[key])
				}
				
				articlesZone.modifyArticles(statusUpdates) { result in
					switch result {
					case .success:
						
						func complete() {
							// Don't clear the last one since we might have had additional ticks added
							if self.showProgress && self.refreshProgress?.numberRemaining ?? 0 > 1 {
								self.refreshProgress?.completeTask()
							}
							os_log(.debug, log: self.log, "Done sending article status block...")
							completion()
						}
						
						if statusUpdates.isEmpty {
							complete()
						} else {
							self.database.deleteSelectedForProcessing(statusUpdates.map({ $0.articleID })) { _ in
								complete()
							}
						}
						
					case .failure(let error):
						self.database.resetSelectedForProcessing(syncStatuses.map({ $0.articleID })) { _ in
							self.processAccountError(account, error)
							os_log(.error, log: self.log, "Send article status modify articles error: %@.", error.localizedDescription)
							completion()
						}
					}
				}

			case .failure(let databaseError):
				self.database.resetSelectedForProcessing(syncStatuses.map({ $0.articleID })) { _ in
					os_log(.error, log: self.log, "Send article status fetch articles error: %@.", databaseError.localizedDescription)
					completion(true)
				}
			}

