                 // Begin again, if conditions met
                 if (self.labelShouldScroll() && !self.tapToScroll && !self.holdScrolling) {
                     // Perform completion callback
-                    callback(self)(interval: interval, delay: delay)
+                    self.scroll(interval, delay: delay, scroller: scroller, fader: gradientAnimation)
                 }
             }
         })
         
         // Call scroller
-        let scrolls = scroller(interval: interval, delay: delay)
+        let scrolls = scroller.generate(interval, delay: delay)
         
         // Perform all animations in scrolls
         for (index, scroll) in scrolls.enumerate() {

    init (_ f: T) { self.f = f }
}

private extension UIResponder {
    // Thanks to Phil M
    // http://stackoverflow.com/questions/1340434/get-to-uiviewcontroller-from-uiview-on-iphone

        CATransaction.setAnimationDuration(transDuration)
        
        // Create gradient animation, if needed
        var gradientAnimation: CAKeyframeAnimation? = nil
        if fadeLength > 0.0 {
            // Remove any setup animation, but apply final values
            if let finalColors = self.layer.mask?.animationForKey("setupFade")?.valueForKey("setupFade") as? [CGColorRef] {
                let gradientMask = self.layer.mask as? CAGradientLayer
                gradientMask?.colors = finalColors
            }
            self.layer.mask?.removeAnimationForKey("setupFade")
            
            // Generate animation if needed
            gradientAnimation = {
                if let previousAnimation = fader {
                    return previousAnimation
                } else {
                    return keyFrameAnimationForGradient(fadeLength, interval: interval, delay: delay)
                }
            }()
            
            // Apply scrolling animation
            self.layer.mask?.addAnimation(gradientAnimation!, forKey: "gradient")
        }
        
        let completion = CompletionBlock<MLAnimationCompletion>({ (finished: Bool) -> () in
