         rules        :
           clear      : clearValidationErrors
 
-          checkCC    : (input, event) ->
+          checkCC    : KD.utils.debounce 100, (input, event) =>
             val = $.trim input.getValue().replace(/-|\s/g,"")
-            result = Stripe.card.validateCardNumber val
-            result = if result
-            then no
-            else 'Card number is not valid'
+            returnResult = result = Stripe.card.validateCardNumber val
+            result = if result then no else 'Card number is not valid'
             input.setValidationResult 'checkCC', result
-
+            return returnResult
           cardType   : do =>
             cssClass = null
             return (input, event) =>
               @unsetClass cssClass  if cssClass
               val = $.trim input.getValue().replace(/-|\s/g,"")
-              cssClass = (Stripe.card.cardType val).toLowerCase()
+              cssClass = Stripe.card.cardType(val).toLowerCase()
               cssClass = KD.utils.slugify cssClass
               @setClass cssClass
 
         events       :
           cardType   : 'keyup'
-          checkCC    : 'blur'
-          clear      : 'focus'
+          checkCC    : ['keyup', 'blur']
+          clear      : ['keydown']
     }
 
     fields.cardCVC = {

          checkYear      : (yearInput, event) =>
            yearVal    = $.trim yearInput.getValue().replace(/-|\s/g, '')
            validMonth = (new Date).getMonth() + 1
            result = Stripe.card.validateExpiry validMonth, yearVal
            result = if result
            then no
            else 'Invalid year!'
            yearInput.setValidationResult 'checkYear', result

        events           :
          checkYear      : 'blur'
          clear          : 'focus'
    }

    { planTitle, planInterval, currentPlan

      input.unsetTooltip()
      input.validationNotifications = {}
      input.clearValidationFeedback()
      return no

    notificationOptions = { type: 'tooltip', placement: 'top' }

