         return (sublabel.layer.speed == 0.0)
     }
     
-    public var scrollDuration: CGFloat? = 7.0 {
+    public enum speedLimit {
+        case Rate(CGFloat)
+        case Duration(CGFloat)
+    }
+    
+    public var speed: speedLimit = .Duration(7.0) {
         didSet {
-            if scrollDuration != oldValue {
-                scrollRate = nil
+            switch (speed, oldValue) {
+            case (.Rate(let a), .Rate(let b)) where a == b:
+                return
+            case (.Duration(let a), .Duration(let b)) where a == b:
+                return
+            default:
                 updateAndScroll()
             }
         }
     }
     
-    public var scrollRate: CGFloat? = nil {
-        didSet {
-            if scrollRate != oldValue {
-                scrollDuration = nil
-                updateAndScroll()
+    public var scrollDuration: CGFloat? {
+        get {
+            switch speed {
+            case .Duration(let duration): return duration
+            case .Rate(_): return nil
+            }
+        }
+        set {
+            if let duration = newValue {
+                speed = .Duration(duration)
+            }
+        }
+    }
+    
+    public var scrollRate: CGFloat? {
+        get {
+            switch speed {
+            case .Duration(_): return nil
+            case .Rate(let rate): return rate
+            }
+        }
+        set {
+            if let rate = newValue {
+                speed = .Rate(rate)
             }
         }
     }

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "labelsShouldLabelize:", name: MarqueeKeys.Labelize.rawValue, object: nil)
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "labelsShouldAnimate:", name: MarqueeKeys.Animate.rawValue, object: nil)
        
        // UIApplication state notifications
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "restartLabel", name: UIApplicationDidBecomeActiveNotification, object: nil)
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "shutdownLabel", name: UIApplicationDidEnterBackgroundNotification, object: nil)

            homeLabelFrame = CGRectIntegral(CGRectMake(leadingBuffer, 0.0, expectedLabelSize.width, expectedLabelSize.height))
            awayOffset = bounds.size.width - (expectedLabelSize.width + leadingBuffer + trailingBuffer)
            
            // Set frame and text
            sublabel.frame = homeLabelFrame
            
