       undefined, # Default sigHash
       validationKey,
       @_resumeData
-    ).then( (@_signedRawTransaction) =>
+    ).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) =>
+    .catch (error) =>
       _.defer => d.rejectWithError(Errors.SignatureError, error)
-    ).done()
+    .done()
     d.promise
 
   ###

      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

  # @param [String] validationKey 4 chars ASCII encoded
  # @param [Function] callback
  # @return [Q.Promise]
  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, 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, progressCallback=undefined) ->
    if not @_resumeData? or not @_validationMode?
      Errors.throw('Transaction must me prepared before validation')
    d = ledger.defer(callback)
