         self.textLabel.textColor = textColor
         self.textLabel.sizeToFit()
     }
-    
-    @objc public func setActive(active: Bool, animated: Bool) {
-        animateEnabled = animated
-        self.active = active
-        animateEnabled = true
-
-    }
-    
-}
-
-// MARK: - Touch Overrides
-extension NDFillButton {
-    override public func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool {
-        pressed = true
-        return true
-    }
-    
-    override public func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool {
-        return true
-    }
-    
-    override public func endTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) {
-        pressed = false
-    }
-    
-    override public func cancelTrackingWithEvent(event: UIEvent?) {
-        pressed = false
-    }
-}
-
-// MARK: -
-extension NDFillButton {
-}
+}
+
+public extension NDFillButton {
+    @objc public override func sizeThatFits(size: CGSize) -> CGSize {
+        var labelSize = textLabel.sizeThatFits(size)
+        return CGSize(width: labelSize.width + 4, height: labelSize.height)
+    }
+}
    @objc public func toggle() {
        active = !active
    }
    
    func setupLayers() {
        self.layer.addSublayer(backgroundLayer)
        self.backgroundLayer.addSublayer(fillAnimationLayer)
        self.layer.addSublayer(foregroundLayer)
        
        var midPoint = CGPoint(x: backgroundLayer.bounds.size.width / 2, y: backgroundLayer.bounds.size.height / 2)
        fillAnimationLayer.backgroundColor = fillColor.CGColor
        fillAnimationLayer.frame = CGRect(origin: midPoint, size: CGSize.zeroSize)
        
        updateLayers()
    }
    
    func updateLayers() {
        backgroundLayer.frame = CGRect(origin: CGPointZero, size: frame.size)
        backgroundLayer.cornerRadius = cornerRadius
        backgroundLayer.borderWidth = borderWidth
        backgroundLayer.borderColor = borderColor.CGColor
        backgroundLayer.masksToBounds = true
        foregroundLayer.frame = frame
    }
    
    func setupLabel() {
        updateLabel(false)
        self.addSubview(textLabel)
        textLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
        var centerX = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: textLabel, attribute: NSLayoutAttribute.CenterX, multiplier: 1.0, constant: 0.0)
        var centerY = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: textLabel, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0.0)
        self.addConstraints([centerX, centerY])
    }
    
    private func updateLabel(animated: Bool) {
        if(!animated) {
            self.changeLabelText()
            return
        }
        UIView.animateWithDuration(0.1, animations: { () -> Void in
            self.textLabel.transform = CGAffineTransformMakeScale(0.1, 0.1)
        }) { (anim) -> Void in
            self.changeLabelText()
            UIView.animateWithDuration(0.2, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: UIViewAnimationOptions.allZeros, animations: { () -> Void in
                self.textLabel.transform = CGAffineTransformMakeScale(1, 1)
            }, completion:nil)
        }
    }
    
    private func animateFill(active: Bool, animated: Bool) {
        var scale = UIScreen.mainScreen().scale
        var R = sqrt(backgroundLayer.bounds.size.height * backgroundLayer.bounds.size.height + backgroundLayer.bounds.size.width * backgroundLayer.bounds.size.width) / 2

        }
    }
    
    override public var frame: CGRect {
        didSet {
        }
