                 self.eventBus.post(DomainEvent.LatestDataFetchedEvent(response: response))
 
                 self.dataStore.performTransaction({ (transaction) in
-                    imageIdentifiersToDelete.forEach(transaction.deleteImage)
-                    response.events.deleted.forEach(transaction.deleteEvent)
-                    response.tracks.deleted.forEach(transaction.deleteTrack)
-                    response.rooms.deleted.forEach(transaction.deleteRoom)
-                    response.conferenceDays.deleted.forEach(transaction.deleteConferenceDay)
-                    response.maps.deleted.forEach(transaction.deleteMap)
-                    response.dealers.deleted.forEach(transaction.deleteDealer)
-                    response.knowledgeEntries.deleted.forEach(transaction.deleteKnowledgeEntry)
-                    response.knowledgeGroups.deleted.forEach(transaction.deleteKnowledgeGroup)
-                    response.announcements.deleted.forEach(transaction.deleteAnnouncement)
-
-                    if lastSyncTime == nil {
+                    self.deleteExistingEntities(imageIdentifiersToDelete: imageIdentifiersToDelete,
+                                                response: response,
+                                                transaction: transaction)
+
+                    let isFullStoreRefresh: Bool = lastSyncTime == nil
+                    if isFullStoreRefresh {
                         func not<T>(_ predicate: @escaping (T) -> Bool) -> (T) -> Bool {
                             return { (element) in return !predicate(element) }
                         }

        return progress
    }

}

    }

    private func performSync(lastSyncTime: Date?, completionHandler: @escaping (Error?) -> Void) -> Progress {
        notifyRefreshStarted()

        let longRunningTask = longRunningTaskManager?.beginLongRunningTask()
        let finishLongRunningTask: () -> Void = {
