                     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)
 

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

        operation.fetchRecordZoneChangesCompletionBlock = { [unowned self] error in
            if let error = error {
                os_log("Failed to fetch record zone changes: %{public}@",
                       log: self.log,
                       type: .error,
                       String(describing: error))

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

        operation.qualityOfService = .userInitiated

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