   }
 }
 
-// MARK: - Layout
-
-public extension TVOSButton {
-
-  public override func layoutSubviews() {
-    super.layoutSubviews()
-    if let style = tvosButtonStyleForStateAction?(tvosButtonState: tvosState) {
-      tvosImageView = style.image?.createImageView() ?? UIImageView(frame: CGRect.zero)
-      tvosTextLabel = style.text?.createLabel() ?? UILabel(frame: CGRect.zero)
-      tvosTitleLabel = style.title?.createLabel() ?? UILabel(frame: CGRect.zero)
-    }
-  }
-}
-
 // MARK: - TVOSButtonState
 
 public extension TVOSButton {
 
   private func tvosButtonStateDidChange() {
+    if let style = tvosButtonStyleForStateAction?(tvosButtonState: tvosState) {
+      applyStyle(style)
+    }
+    setNeedsLayout()
     layoutIfNeeded()
   }
 }
+
+// MARK: - TVOSButtonStyle
+
+public extension TVOSButton {
+
+  private func applyStyle(style: TVOSButtonStyle) {
+
+  }
+}

public class TVOSButton: UIButton {

  private var tvosImageView: UIImageView!
  private var tvosTextLabel: UILabel!
  private var tvosTitleLabel: UILabel!

  }

  private func commonInit() {
    // setup subviews
    // add state observer
    addObserver(self, forKeyPath: "state", options: .New, context: nil)
    // finalize
    tvosButtonStateDidChange()
  }
}

