     /* Observers */
     
     override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
+        if let newValue = change?[.newKey] as? NSObject,
+            let oldValue = change?[.oldKey] as? NSObject,
+            newValue == oldValue {
+            return
+        }
         if (object as? UIView) == superview && keyPath == "frame" {
             guard let superview = self.superview else { return }
             

            
            updateButtonPosition()
            
            superview.addObserver(self, forKeyPath: "frame", options: .new, context: nil)
            observesSuperviewBounds = true
            if (floating && superview is UIScrollView) {
                superview.addObserver(self, forKeyPath: "contentOffset", options: .new, context: nil)
                observesSuperviewContentOffset = true
            }
        }

                observesSuperviewContentOffset = false
            }
            if let superview = self.superview as? UIScrollView, floating {
                superview.addObserver(self, forKeyPath: "contentOffset", options: [.old, .new], context: nil)
                observesSuperviewContentOffset = true
            }
        }
