     Errors.throw(Errors.DongleAlreadyUnlock) if @state isnt States.LOCKED
     _btchipQueue.enqueue "unlockWithPinCode", =>
       d = ledger.defer(callback)
-      _pin = pin
-      @_btchip.verifyPin_async(new ByteString(_pin, ASCII))
+      @_pin = pin
+      @_btchip.verifyPin_async(new ByteString(@_pin, ASCII))
       .then =>
         # 19.7. SET OPERATION MODE
         @_sendApdu(0xE0, 0x26, 0x01, 0x01, new ByteString(Convert.toHexByte(0x01), HEX), [0x9000])

        message = new ByteString(message, ASCII)
        @_btchip.signMessagePrepare_async(path, message)
        .then =>
          return @_btchip.signMessageSign_async(new ByteString(_pin, ASCII))
        .then (sig) =>
          signedMessage = @_convertMessageSignature(pubKey, message, sig.signature)
          d.resolve(signedMessage)

  # @property [Integer]
  operationMode: undefined

  # @private [BtChip]
  _btchip: undefined
  # @private [Array<ledger.wallet.ExtendedPublicKey>]
  _xpubs: []

  # @private @property [String] pin used to unlock dongle.
  _pin: undefined

  # @private @property [ledger.utils.PromiseQueue] Enqueue btchip calls to prevent multiple call to interfer
  _btchipQueue = undefined
