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

        }
        
        applyMutations(self.rangesOfAdditions, Double(stage) * (1 + self.charAnimationOffset))
        applyMutations(self.rangesOfDeletions, Double(self.numberOfAttributionStages - stage + 1))
        
        self.attributedText =  mutableString
    }

    @lazy var attributionStages: NSMutableDictionary[] = self.attributionStagesForNumberOfStages(self.numberOfAttributionStages)
    
    convenience init(frame: CGRect) {
        self.init(frame: frame, animationDuration: 0.21, charAnimationOffset: 0.25, fps: 60)
    }
    
    init(frame: CGRect, animationDuration: Double, charAnimationOffset: Double, fps: Int) {
