     public var maximumDuration: NSTimeInterval = 0.0 {
         didSet {
             setNeedsDisplay()
-            reloadAllComponents()
+
+            (0..<numberOfComponents).forEach { (component) in
+                self.reloadComponent(component)
+            }
             
-
-            if maximumDuration > 60*60 {
+            if maximumDuration >= 60*60 {
                 selectRow(60*500, inComponent: 1, animated: false)
                 selectRow(60*500, inComponent: 2, animated: false)
-            } else if maximumDuration > 60 {
+            } else if maximumDuration >= 60 {
                 selectRow(60*500, inComponent: 1, animated: false)
             }
         }

    }
    
    public func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        let componentPlaceValue = Float(placeValueForComponent(component))
        
        let numberOfRows = Int(min(ceilf(Float(maximumDuration)/componentPlaceValue), 60.0))
        return numberOfRows < 60 ? numberOfRows : 60*1000
    }
}

    }
    
    internal var selectedDuration: NSTimeInterval {
        return (0..<numberOfComponents).reduce(NSTimeInterval(0.0)) { (acc, index) -> NSTimeInterval in
            let componentPlaceValue = placeValueForComponent(index)
            var row = selectedRowInComponent(index)
            
            if componentPlaceValue == 60*60 {
                row %= 60
            }
            return acc + NSTimeInterval(row*componentPlaceValue)
        }
    }
}

