     @objc weak var delegate: PurchasesOrchestratorDelegate?
 
     private var _allowSharingAppStoreAccount: Bool?
-    private var presentedOfferingIDsByProductID: [String: String] = [:]
-    private var purchaseCompleteCallbacksByProductID: [String: PurchaseCompletedBlock] = [:]
+    private var presentedOfferingIDsByProductID: Atomic<[String: String]> = .init([:])
+    private var purchaseCompleteCallbacksByProductID: Atomic<[String: PurchaseCompletedBlock]> = .init([:])
 
     private var appUserID: String { self.currentUserProvider.currentAppUserID }
     private var unsyncedAttributes: SubscriberAttributeDict {

            productData = receivedProductData

            let productID = receivedProductData.productIdentifier
            let foundPresentedOfferingID = self.presentedOfferingIDsByProductID[productID]
            presentedOfferingID = foundPresentedOfferingID

            presentedOfferingIDsByProductID.removeValue(forKey: productID)
        }
        let unsyncedAttributes = self.unsyncedAttributes


    private let deviceCache: DeviceCache
    private let manageSubscriptionsHelper: ManageSubscriptionsHelper
    private let beginRefundRequestHelper: BeginRefundRequestHelper

    // Can't have these properties with `@available`.
    // swiftlint:disable identifier_name
