             }
         }
         webViewObservation = nil
-        NotificationCenter.default.removeObserver(self)
-    }
-
-    /// Track url requests change in order to reset adView and position tracking
-    /// When position is located a new time, alert through ``TeadsWebViewHelperDelegate/webViewHelperSlotFoundSuccessfully()``
-    override public func observeValue(forKeyPath keyPath: String?, of _: Any?, change: [NSKeyValueChangeKey: Any]?, context _: UnsafeMutableRawPointer?) {
-        if keyPath == Self.urlKeyPath,
-           let _ = change?[NSKeyValueChangeKey.newKey] {
-            adView?.removeFromSuperview()
-            containerView?.removeFromSuperview()
-            slotPosition = nil
-        }
     }
 
     /// Inject Teads' bootstrap in the webview

        self.delegate = delegate
        super.init()

        // URL Change observer
        webView.addObserver(self, forKeyPath: Self.urlKeyPath, options: .new, context: nil)

        // add message handler method name to communicate with the wkwebview
        JSBootstrapOutput.allCases.map(\.rawValue).forEach {

    /// When registering WKWeakScriptHandler, WKWebView create a strong reference to handler
    /// This leads to retain cycle between webView <-> owner and webView <-> scriptHandler
    /// In order to avoid retain cycle
    final class WKWeakScriptHandler: NSObject, WKScriptMessageHandler {
        weak var delegate: WKScriptMessageHandler?

        init(delegate: WKScriptMessageHandler) {
