   
   // MARK: - Initialization
   // ------------------------------------------------------------
-  internal convenience init(withState state: FollowButtonState) {
+  public convenience init(withState state: FollowButtonState) {
     self.init(frame: CGRectZero)
     self.updateButtonToState(state)
   }
   
-  override init(frame: CGRect) {
+  public override init(frame: CGRect) {
     super.init(frame: frame)
     
     self.setupViewHierarchy()
     self.configureConstraints()
   }
   
-  required init?(coder aDecoder: NSCoder) {
+  public required init?(coder aDecoder: NSCoder) {
     super.init(coder: aDecoder)
   }
   

    self.buttonView.addSubview(spinnerImageView)
  }
  
  override func updateConstraints() {
    super.updateConstraints()
  }
  
  // layoutSubviews is very useful to update the view's corner radius as it has available the view's 
  // size and position based on its constraints
  override func layoutSubviews() {
    self.updateCornerRadius()
    
    // I don't know if this is the best solution, but it seems to work out well in this example

  
  // MARK: - Variables
  // ------------------------------------------------------------
  public var delegate: FollowButtonDelegate?
  
  private var adjustedWidthConstraints: (left: Constraint?, right: Constraint?)
  private var minButtonWidth: CGFloat?
