                     os_log("Change token expired, clearing token and retrying", log: self.log, type: .error)
 
                     DispatchQueue.main.async {
+                        self.privateChangeToken = nil
                         self.fetchChanges()
                     }
+                    return
                 } else if error.isCKZoneDeleted {
                     os_log("User deleted CK zone, recreating", log: self.log, type: .error)
 

                            self.fetchChanges()
                        }
                    }
                } else {
                    error.retryCloudKitOperationIfPossible(self.log) { self.fetchChanges() }
                }

        operation.recordChangedBlock = { changedRecords.append($0) }

        operation.fetchRecordZoneChangesCompletionBlock = { [unowned self] error in
            guard error == nil else { return }

            os_log("Finished fetching record zone changes", log: self.log, type: .info)
            self.databaseQueue.async { self.commitServerChangesToDatabase(with: changedRecords) }
        }

        operation.qualityOfService = .userInitiated
