         }
 
         titleLabel?.font = style.font
-        setTitleColor(style.disabledTitleColor, forState: .Disabled)
-        setTitleColor(style.highlightedTitleColor, forState: .Highlighted)
-        setTitleColor(style.selectedTitleColor, forState: .Selected)
-        setTitleColor(style.titleColor, forState: .Normal)
+
+        let states: [(UIControlState, UIColor?)] = [
+            (.Disabled, style.disabledTitleColor),
+            (.Highlighted, style.highlightedTitleColor),
+            (.Selected, style.selectedTitleColor),
+            (.Normal, style.titleColor),
+        ]
+        for (state, stateColor) in states {
+            guard
+                let color = stateColor ?? style.titleColor,
+                let title = titleForState(.Normal)
+            else { continue }
+
+            let attrdTitle = NSAttributedString(title, color: color, underlineStyle: style.underline ? .StyleSingle : .StyleNone, font: style.font)
+            setAttributedTitle(attrdTitle, forState: state)
+        }
     }
 
     required override public init(frame: CGRect) {


        let fontSize: CGFloat?
        let cornerRadius: CGFloat?

        var font: UIFont {
            guard let size = fontSize else {

        switch name {
        case "LightGray": return .LightGray
        case "White": return .White
        case "WhiteUnderlined": return .WhiteUnderlined
        case "SquareBlack": return .SquareBlack
        case "BlackPill": return .BlackPill
        case "RoundedGray": return .RoundedGray
