                     case .newer:
                         updateInCloud.append(realmItem)
                     case .older:
+                        // the cloud item has no notion of the realm object
+                        // so the realmID in the clouditem is fake
+                        // so we need to set the realmID of the cloud item to its matching realmObject
                         var mCloudItem = cloudItem
                         mCloudItem.realmID = realmItem.realmID
                         updateInRealm.append(mCloudItem)


    }
    
    private func diff(cloudItems: [URLItemType], realmItems: [URLItemType])
        -> (addToCloud: [URLItemType], addToRealm: [URLItemType], updateInCloud: [URLItemType], updateInRealm: [URLItemType])
    {
        var addToCloud = [URLItemType]()
        var addToRealm = [URLItemType]()
        var updateInCloud = [URLItemType]()
        var updateInRealm = [URLItemType]() // need to add info here so I know the original realm object
        
        for realmItem in realmItems {
            let matchingCloudItems = cloudItems.filter({ realmItem.cloudKitID == $0.cloudKitID })

    
    private func step2ProcessChanges(realmResults: [Result<URLItemType>], cloudResults: [Result<URLItemType>], finalCompletionHandler: SuccessResult?) {
        self.serialQueue.async {
            let (addToCloud, addToRealm, updateInCloud, updateInRealm) = type(of: self).diff(cloudItems: cloudResults.mapSuccess(), realmItems: realmResults.mapSuccess())
            
            var allResults = realmResults + cloudResults
            
