         }
     }
     
+    /// Duration for HUD to be fade out and be removed when `hide(animated: true)`
+    ///
+    /// Default: `1.0`
     public var hideAnimationDuration = 1.0
     
-    public var pulseDurationOffset = 0.0
+    /// Duration offset for easily quickening or slowing down pulse animation speed.
+    ///
+    /// Default: `0.0`
+    public var pulseDurationOffset = 0.0 {
+        didSet {
+            if let pulseNumberGenerator = pulseNumberGenerator as? JPulseDateNumberGenerator {
+                pulseNumberGenerator.durationOffset = pulseDurationOffset
+            }
+        }
+    }
+    
+    /// Custom JPulseNumberGenerator for building custom number sequences for the pulse animation.
+    ///
+    /// Default: `JPulseDateNumberGenerator()`
+    public var pulseNumberGenerator: JPulseNumberGenerator = JPulseDateNumberGenerator()
     
     //MARK: - Initializers
     

    
    //MARK: - Internal Instances Functions
    
    internal func removeFromSuperViewAnimated(animated: Bool, completion: JPulseHUDCompletion? = nil) {
        if animated {
            UIView.animateWithDuration(hideAnimationDuration, delay: 0, options: .CurveEaseOut, animations: { [weak self] in
                self?.alpha = 0
            }) { [weak self] (_) in
                self?.removeFromSuperview()
                completion?()
            }
        } else {
            removeFromSuperview()
            completion?()
        }
    }
    

        hud.show()
    }
    
    /**
     Removes HUD from view if it exists.
     
     - parameter view:     view to remove HUD from.
     - parameter animated: animates HUD by fading out based on `hideAnimationDuration`.
     
     - returns: Bool indicating if HUD was successfully removed.
     */
    public static func removeHUDFromView(view: UIView, animated: Bool) -> Bool {
        let hud = hudFromView(view)
        guard hud != nil else {
