 }
 
 private extension SpringIndicator.Refresher {
+    private func addObserver(scrollView: UIScrollView) {
+        if targetView == nil {
+            targetView = scrollView
+            scrollView.addObserver(self, forKeyPath: ObserverOffsetKeyPath, options: .New, context: nil)
+        }
+    }
+    
     private func setupIndicator() {
         indicator.lineWidth = 2
         indicator.lotateDuration = 1

            setupIndicator()
        }
        
        public override func drawRect(rect: CGRect) {
            super.drawRect(rect)
            
            targetView?.addObserver(self, forKeyPath: ObserverOffsetKeyPath, options: .New, context: nil)
        }
        
        public override func layoutSubviews() {
            super.layoutSubviews()
            
            if let superview = superview {
                frame.size.height = DefaultContentHeight
                frame.size.width = superview.bounds.width
                center.x = superview.center.x
                
                backgroundColor = UIColor.clearColor()
                userInteractionEnabled = false
                autoresizingMask = .FlexibleWidth | .FlexibleBottomMargin
            }
            
            if let targetView = targetView {
                initialInsetTop = targetView.contentInset.top
            }
        }
        

    public func startRefreshing(sendActions: Bool = false) {
        refreshing = true
        
        if let superview = superview as? UIScrollView {
            addObserver(superview)
        }
        
        if sendActions {
            sendActionsForControlEvents(.ValueChanged)
        }
        
        indicator.layer.addAnimation(refreshAnimation(), forKey: ScaleAnimationKey)
        indicator.startAnimation(expand: true)
    }
    
    public func endRefreshing() {
