         }
     }
     
-    override public var contentVerticalAlignment: UIControlContentVerticalAlignment { didSet {
+    override open var contentVerticalAlignment: UIControlContentVerticalAlignment { didSet {
         self.nestedButtons.forEach { $0.contentVerticalAlignment = contentVerticalAlignment }
     }}
     
-    override public var contentHorizontalAlignment: UIControlContentHorizontalAlignment{ didSet {
+    override open var contentHorizontalAlignment: UIControlContentHorizontalAlignment{ didSet {
         self.nestedButtons.forEach { $0.contentHorizontalAlignment = contentHorizontalAlignment }
     }}
     
     
-    override public func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
+    override open func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
         self.nestedButtons.forEach { $0.beginTracking(touch, with: event) }
         return super.beginTracking(touch, with: event)
     }
 
-    override public func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
+    override open func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool {
         self.nestedButtons.forEach { $0.continueTracking(touch, with: event) }
         return super.continueTracking(touch, with: event)
     }
 
-    override public func endTracking(_ touch: UITouch?, with event: UIEvent?) {
+    override open func endTracking(_ touch: UITouch?, with event: UIEvent?) {
         self.nestedButtons.forEach { $0.endTracking(touch, with: event) }
         return super.endTracking(touch, with: event)
     }
 
-    override public func cancelTracking(with event: UIEvent?) {
+    override open func cancelTracking(with event: UIEvent?) {
         self.nestedButtons.forEach { $0.cancelTracking(with: event) }
         super.cancelTracking(with: event)
     }
     
-    override public func addTarget(_ target: Any?, action: Selector, for controlEvents: UIControlEvents) {
+    override open func addTarget(_ target: Any?, action: Selector, for controlEvents: UIControlEvents) {
         overlay.addTarget(target, action: action, for: controlEvents)
     }
     
-    override public func removeTarget(_ target: Any?, action: Selector?, for controlEvents: UIControlEvents) {
+    override open func removeTarget(_ target: Any?, action: Selector?, for controlEvents: UIControlEvents) {
         overlay.removeTarget(target, action: action, for: controlEvents)
     }
     
-    override public func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
+    override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
         let newValue = change![.newKey] as! Bool
         switch keyPath {
         case "highlighted"?: isHighlighted = newValue

        self.overlay = overlay
    }
    
    override public var isEnabled: Bool { didSet {
        self.nestedButtons.forEach { $0.isEnabled = isEnabled }
    }}

    override public var isSelected: Bool { didSet {
        self.nestedButtons.forEach { $0.isSelected = isSelected }
    }}

    override public var isHighlighted: Bool { didSet {
        guard shouldMakeTranclucentOnHiglhlight else {
            return
        }

        }
    }}
    
    override open func layoutIfNeeded() {
        super.layoutIfNeeded()
        self.bringSubview(toFront: overlay)
    }
    
    override open func addSubview(_ view: UIView) {
        if let overlay = overlay {
            insertSubview(view, belowSubview: overlay)
        } else {
