         guard let delegate = delegate else { return false }
 
         let storeProduct = StoreProduct(sk1Product: product)
-        lock.lock()
         delegate.readyForPromotedProduct(storeProduct) { completion in
-            self.purchaseCompleteCallbacksByProductID[product.productIdentifier] = completion
+            self.purchaseCompleteCallbacksByProductID.modify { $0[product.productIdentifier] = completion }
             storeKitWrapper.add(payment)
         }
-        lock.unlock()
         return false
     }
 

    @objc weak var delegate: PurchasesOrchestratorDelegate?

    private var _allowSharingAppStoreAccount: Bool?
    private var presentedOfferingIDsByProductID: [String: String] = [:]
    private var purchaseCompleteCallbacksByProductID: [String: PurchaseCompletedBlock] = [:]

    private var appUserID: String { self.currentUserProvider.currentAppUserID }
    private var unsyncedAttributes: SubscriberAttributeDict {

            productData = receivedProductData

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

            self.presentedOfferingIDsByProductID.modify { $0.removeValue(forKey: productID) }
        }
        let unsyncedAttributes = self.unsyncedAttributes

