             
         // Default case not required
         }
+        
+        // Recompute the animation duration
+        animationDuration = {
+            switch self.speed {
+            case .Rate(let rate):
+                return CGFloat(fabs(self.awayOffset) / rate)
+            case .Duration(let duration):
+                return duration
+            }
+        }()
         
         // Configure gradient for current condition
         applyGradientMask(fadeLength, animated: !self.labelize)

        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)

            // Configure replication
            repliLayer().instanceCount = 2
            repliLayer().instanceTransform = CATransform3DMakeTranslation(-awayOffset, 0.0, 0.0)
        
        case .RightLeft:
            homeLabelFrame = CGRectIntegral(CGRectMake(bounds.size.width - (expectedLabelSize.width + leadingBuffer), 0.0, expectedLabelSize.width, bounds.size.height))
            awayOffset = (expectedLabelSize.width + trailingBuffer + leadingBuffer) - bounds.size.width
            
            // Set frame and text
            sublabel.frame = homeLabelFrame
            
