             dispatch_async(dispatch_get_main_queue(), {
                 let stage = self.currentAttributionStage
                 
-                if (self.currentAttributionStage++ > self.numberOfAttributionStages) {
+                if (self.currentAttributionStage++ >= self.numberOfAttributionStages) {
                     self.endAnimation()
                 } else {
                     self.applyAttributedStringForStage(stage, string: self.attributedText.string)

            return font
        }
        
        for i in 0...numberOfStages {
            var attributionStage = NSMutableDictionary()
            
            let progress = ease(Float(i) / Float(numberOfStages))
            let textColor = textColorWithAlpha(CGFloat(progress))
            attributionStage[NSForegroundColorAttributeName] = textColor
            

    
    func applyAttributedStringForStage(stage: Int, string: String) {
        var mutableString = NSMutableAttributedString(string: string)
        
        struct AnimationDirection {
            static func entryPoint(location: Int, middle: Int) -> Double {
