         superLayer.masksToBounds   = false
         superLayer.backgroundColor = backgroundColor.CGColor
         groupAnimation.animations?.append(shadowAnimation)
-        superLayer.addAnimation(groupAnimation, forKey: "BorderWithShadow")
+        superLayer.addAnimation(groupAnimation, forKey: nil)
     }
     
     private func animateBackground() {
-        backgroundColorAnimation = CABasicAnimation(keyPath: AnimationKeyPath.backgroundColor.rawValue)
-        backgroundColorAnimation.fromValue      = UIColor.clearColor().CGColor
+        let type: AnimationType = .backgroundColor
+        backgroundColorAnimation = CABasicAnimation(keyPath: type.keyPath)
+        backgroundColorAnimation.fromValue      = type.fromValue
         backgroundColorAnimation.toValue        = animationBackgroundColor.CGColor
         backgroundColorAnimation.duration       = animationDuration
         backgroundColorAnimation.autoreverses   = true
         backgroundColorAnimation.repeatCount    = AnimationConstants.repeatCount
         backgroundColorAnimation.timingFunction = animationTimingFunction.timingFunction
-        superLayer.addAnimation(backgroundColorAnimation, forKey: "Background")
+        superLayer.addAnimation(backgroundColorAnimation, forKey: nil)
     }
     
     private func animateText() {
-        textColorAnimation = CABasicAnimation(keyPath: AnimationKeyPath.foregroundColor.rawValue)
+        textColorAnimation = CABasicAnimation(keyPath: AnimationType.foregroundColor.keyPath)
         textColorAnimation.duration            = animationDuration
         textColorAnimation.autoreverses        = true
         textColorAnimation.repeatCount         = AnimationConstants.repeatCount

        groupAnimation.delegate       = self
        groupAnimation.autoreverses   = true
        groupAnimation.repeatCount    = AnimationConstants.repeatCount
        syLayerAnimation == .BorderWithShadow ? animateBorderWithShadow(groupAnimation) : superLayer.addAnimation(groupAnimation, forKey: "Border")
    }

    private func animateBorderWithShadow(groupAnimation: CAAnimationGroup) {

        case opacity
        case transformScale  = "transform.scale"
        
        private var keyPath: String {
            get {
                return rawValue
            }
        }
        
        private var fromValue: AnyObject {
            switch self {
            case .borderColor:
                return UIColor.clearColor().CGColor
            case .borderWidth:
                return 0
            case .shadowOpacity:
                return 0
            case .backgroundColor:
                return UIColor.clearColor().CGColor
            case .foregroundColor:
                //Don't use
                return UIColor.clearColor().CGColor
            case .opacity:
                return 1
            case .transformScale:
                return 0.4
            }
        }
    }
    
    private var superLayer: CALayer!
