   # @param [String] validationKey 4 chars ASCII encoded
   # @param [Function] callback
   # @return [Q.Promise]
-  validateWithPinCode: (validationPinCode, callback=undefined) -> @_validate((char.charCodeAt(0).toString(16) for char in validationPinCode).join(''), callback)
+  validateWithPinCode: (validationPinCode, callback=undefined, progressCallback=undefined) -> @_validate((char.charCodeAt(0).toString(16) for char in validationPinCode).join(''), callback, progressCallback)
 
   # @param [String] validationKey 4 chars ASCII encoded
   # @param [Function] callback
   # @return [Q.Promise]
-  validateWithKeycard: (validationKey, callback=undefined) -> @_validate(("0#{char}" for char in validationKey).join(''), callback)
+  validateWithKeycard: (validationKey, callback=undefined, progressCallback=undefined) -> @_validate(("0#{char}" for char in validationKey).join(''), callback, progressCallback)
 
   # @param [String] validationKey 4 bytes hex encoded
   # @param [Function] callback
   # @return [Q.Promise]
-  _validate: (validationKey, callback=undefined) ->
+  _validate: (validationKey, callback=undefined, progressCallback=undefined) ->
     if not @_resumeData? or not @_validationMode?
       Errors.throw('Transaction must me prepared before validation')
     d = ledger.defer(callback)

      currentStep = progress.currentPublicKey + progress.currentSignTransaction + progress.currentTrustedInput + progress.currentTrustedInputProgress + progress.currentHashOutputBase58 + progress.currentUntrustedHash
      stepsCount = progress.publicKeyCount + progress.transactionSignCount + progress.trustedInputsCount + progress.trustedInputsProgressTotal + progress.hashOutputBase58Count + progress.untrustedHashCount
      percent = Math.ceil(currentStep / stepsCount * 100)
      l percent + "%"
      l progress
      progressCallback?({currentStep, stepsCount, percent})
    .then (@_resumeData) =>
      @_validationMode = @_resumeData.authorizationRequired

      undefined, # Default sigHash
      validationKey,
      @_resumeData
    ).progress (progress) =>
      currentStep = progress.currentPublicKey + progress.currentSignTransaction + progress.currentTrustedInput + progress.currentTrustedInputProgress + progress.currentHashOutputBase58 + progress.currentUntrustedHash
      stepsCount = progress.publicKeyCount + progress.transactionSignCount + progress.trustedInputsCount + progress.trustedInputsProgressTotal + progress.hashOutputBase58Count + progress.untrustedHashCount
      percent = Math.ceil(currentStep / stepsCount * 100)
      d.notify({currentStep, stepsCount, percent})
      progressCallback?({currentStep, stepsCount, percent})
    .then (@_signedRawTransaction) =>
      @_isValidated = yes
      $info("Raw TX: ", @getSignedTransaction())
      _.defer => d.resolve(@)
    .catch (error) =>
      _.defer => d.rejectWithError(Errors.SignatureError, error)
    .done()
    d.promise

  ###
