     private var _initializing = false
     private var _initialized = false
     private var _rewarded = false
+    private var _loadingAdIds: Set<String> = []
     private var _loadedAdIds: Set<String> = []
 
     public required init(_ bridge: IMessageBridge) {

    public func vungleAdPlayabilityUpdate(_ isAdPlayable: Bool, adId: String?, error: Error?) {
        _logger.debug("\(#function): playable = \(isAdPlayable) id = \(adId ?? "") reason \(error?.localizedDescription ?? "")")
        if let adId = adId {
            if _loadedAdIds.contains(adId) {
                assert(isAdPlayable)
                _bridge.callCpp(kOnLoaded, EEJsonUtils.convertDictionary(toString: [
                    "ad_id": adId
                ]))

    func loadRewardedAd(_ adId: String) {
        Thread.runOnMainThread {
            do {
                _loadingAdIds.insert(adId)
                try self._sdk.loadPlacement(withID: adId)
            } catch {
                _loadingAdIds.remove(adId)
                self._bridge.callCpp(kOnFailedToLoad, EEJsonUtils.convertDictionary(toString: [
                    "ad_id": adId,
                    "message": error.localizedDescription
