     {
         let now = NSDate()
         var canExecuteClosure = false
-        if let rateLimitInfo = self.rateLimitInfoForKey(key) {
+        if let rateLimitInfo = self.throttleInfoForKey(key) {
             let timeDifference = rateLimitInfo.lastExecutionDate.timeIntervalSinceDate(now)
             if timeDifference < 0 && fabs(timeDifference) < threshold {
                 if trailing && rateLimitInfo.timer == nil {
                     let timer = NSTimer.scheduledTimerWithTimeInterval(threshold, target: self, selector: #selector(RateLimit.throttleTimerFired(_:)), userInfo: ["rateLimitInfo" : rateLimitInfo], repeats: false)
                     let throttleInfo = ThrottleInfo(key: key, threshold: threshold, trailing: trailing, closure: closure)
-                    self.setRateLimitInfoForKey(RateLimitInfo(lastExecutionDate: rateLimitInfo.lastExecutionDate, timer: timer, throttleInfo: throttleInfo), forKey: key)
+                    self.setThrottleInfoForKey(ThrottleExecutionInfo(lastExecutionDate: rateLimitInfo.lastExecutionDate, timer: timer, throttleInfo: throttleInfo), forKey: key)
                 }
             } else {
                 canExecuteClosure = true

        self.threshold = threshold
        self.trailing = trailing
        self.closure = closure
        super.init()
    }
}

// TODO: Merge ThrottleInfo with DebounceInfo
class DebounceInfo: NSObject {
    let key: String
    let threshold: NSTimeInterval
    let atBegin: Bool


import Foundation

class ThrottleInfo {
    let key: String
    let threshold: NSTimeInterval
    let trailing: Bool
