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

    
    func applyAttributedStringForStage(stage: Int, string: String) {
        var mutableString = NSMutableAttributedString(string: string)
        
        func applyableIndexForOffset(offset: Int) -> Int {
            var retval = offset < 0 ? 0 : offset
            retval = retval > self.numberOfAttributionStages ? self.numberOfAttributionStages : retval
            return retval
        }
        
        struct AnimationDirection {
            static func entryPoint(location: Int, middle: Int) -> Double {

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