     required init(context: UIObject) {
         super.init(context: context)
         animatonHandler = DoubleTapAnimation(core)
+        bindEvents()
     }
     
     required init() {
         super.init()
     }
     
-    override func render() {
+    private func bindEvents() {
+        stopListening()
+        bindCoreEvents()
+    }
+    
+    private func bindCoreEvents() {
+        guard let core = core else { return }
+        listenTo(core, eventName: Event.didChangeActiveContainer.rawValue) { [weak self] _ in self?.bindEvents() }
+        listenTo(core, eventName: Event.didShowModal.rawValue) { [weak self] _ in self?.didShowModal() }
+        listenTo(core, eventName: Event.didHideModal.rawValue) { [weak self] _ in self?.didHideModal() }
+    }
+    
+    private func didShowModal() {
+        doubleTapView.isUserInteractionEnabled = false
+    }
+    
+    private func didHideModal() {
+        doubleTapView.isUserInteractionEnabled = true
+    }
+    
+    override public func render() {
+        doubleTapView.core = core
+        doubleTapView.backgroundColor = .clear
+        core?.view.addSubview(doubleTapView)
+        doubleTapView.bindFrameToSuperviewBounds()
+        addGestures()
+    }
+    
+    private func addGestures() {
         let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(doubleTap))
         doubleTapGesture.numberOfTapsRequired = 2
         
         let tapGesture = UITapGestureRecognizer(target: self, action: #selector(singleTap))
         tapGesture.require(toFail: doubleTapGesture)
         
-        doubleTapView.core = core
-        doubleTapView.backgroundColor = .clear
-        core?.view.addSubview(doubleTapView)
-        doubleTapView.bindFrameToSuperviewBounds()
-        
         doubleTapView.addGestureRecognizer(doubleTapGesture)
         doubleTapView.addGestureRecognizer(tapGesture)
     }
-    
+
     @objc private func doubleTap(gestureRecognizer: UITapGestureRecognizer) {
         if gestureRecognizer.state == .recognized {
             let xPosition = gestureRecognizer.location(in: view).x

import UIKit

class DoubleTapPlugin: UICorePlugin {
    
    override open var pluginName: String {
        return String(describing: DoubleTapPlugin.self)

    private func mediaControlPluginsColidesWithTouch(point: CGPoint, event: UIEvent?) -> Bool {
        guard let mediaControlPlugin = core?.plugins.first(where: { $0 is MediaControl }) else { return false }
        
        let pluginColidingWithGesture = filteredOutModalPlugins()?.first(where: {
            pluginColideWithTouch($0, point: point, event: event)
        })
        
        return pluginColidingWithGesture == nil || mediaControlPlugin.view.isHidden
    }
    
    private func filteredOutModalPlugins() -> [UICorePlugin]? {
        let pluginsWithoutMediaControl = core?.plugins.filter({ $0.pluginName != MediaControl.name })
        return pluginsWithoutMediaControl?.filter({ ($0 as? MediaControlPlugin)?.panel != .modal })
    }
    
    private func pluginColideWithTouch(_ plugin: UICorePlugin, point: CGPoint, event: UIEvent?) -> Bool {
        return plugin.view.point(inside: self.convert(point, to: plugin.view), with: event)
    }
}
