                     }
                     deletedReadingLists[readingListID] = localReadingList
                 })
+                if requestCount % 4 == 0 {
+                    taskGroup.wait()
+                }
             } else if localReadingList.isUpdatedLocally {
+                requestCount += 1
                 taskGroup.enter()
                 self.apiController.updateList(withListID: readingListID, name: readingListName, description: localReadingList.readingListDescription, completion: { (updateError) in
                     defer {

        var updatedReadingLists: [Int64: ReadingList] = [:]
        var deletedReadingLists: [Int64: ReadingList] = [:]
        var listsToCreate: [ReadingList] = []
        for localReadingList in listsToUpdate {
            guard let readingListName = localReadingList.name else {
                moc.delete(localReadingList)

                continue
            }
            if localReadingListEntry.isDeletedLocally {
                requestCount += 1
                taskGroup.enter()
                self.apiController.removeEntry(withEntryID: readingListEntryID, fromListWithListID: readingListID, completion: { (deleteError) in
                    defer {
