         case "got-init-data":
             gotInitData()
         case "save-init-data" :
+            // A bit hacky, but this method's data is not very uniform
+            // (e.g. arg2 is [Int])
+            let data = JSON(string: message.body as? String ?? "")
             saveInitData(data)
         case "get-existing-objects":
             // TODO: Should just return records, and immediately call resolve-sync-records
-            getExistingObjects(data)
+            getExistingObjects(syncResponse.rootElements)
         case "resolved-sync-records":
-            resolvedSyncRecords(data)
+            resolvedSyncRecords(syncResponse.rootElements)
         case "sync-debug":
             print("---- Sync Debug: \(data)")
         case "sync-ready":

        }
    }

    func resolvedSyncRecords(data: JSON) {
        guard
            let objects = data["arg2"].asArray,
            let syncRecords = SyncRoot.syncObject(objects)
            else { return }
        
        for fetchedRoot in syncRecords {
            if fetchedRoot.objectData != "bookmark" { return }

// MARK: Server To Native Message category
extension Sync {

    func getExistingObjects(data: [SyncRoot]?) {
        //  as? [[String: AnyObject]]
        guard let syncRecords = data else { return }
        
        /* Top level keys: "bookmark", "action","objectId", "objectData:bookmark","deviceId" */
        
