{
        boot_lock_bits_set_safe(LockBits);
 }
-
 
 .section .apitable, "ax"
 .org 0
 
+; API function jump table
 .global BootloaderAPI_JumpTable
 BootloaderAPI_JumpTable:
-       jmp BootloaderAPI_ErasePage
-       jmp BootloaderAPI_WritePage
-       jmp BootloaderAPI_FillWord
-       jmp BootloaderAPI_ReadSignature
-       jmp BootloaderAPI_ReadFuse
-       jmp BootloaderAPI_ReadLock
-       jmp BootloaderAPI_WriteLock
+       rjmp BootloaderAPI_ErasePage
+       rjmp BootloaderAPI_WritePage
+       rjmp BootloaderAPI_FillWord
+       rjmp BootloaderAPI_ReadSignature
+       rjmp BootloaderAPI_ReadFuse
+       rjmp BootloaderAPI_ReadLock
+       rjmp BootloaderAPI_WriteLock
+
+; Bootloader table signature
+.org 30
+       .word 0xDCFB
 
  *  uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address)                = BOOTLOADER_API_START(4);
  *  uint8_t (*BootloaderAPI_ReadLock)(void)                            = BOOTLOADER_API_START(5);
  *  void    (*BootloaderAPI_WriteLock)(uint8_t LockBits)               = BOOTLOADER_API_START(6);
+ *
+ *  #define BOOTLOADER_SIG_START               (FLASHEND - 32)
+ *  #define BOOTLOADER_SIGNATURE               0xDCFB
  *  \endcode
  *
+ *  Bootloaders reporting a device release revision number of 1.00 or greater are bootloader API enabled. From the application
+ *  the API support of the bootloader can be detected by reading the FLASH memory bytes located at address \c BOOTLOADER_SIG_START
+ *  and comparing them to the value \c BOOTLOADER_SIGNATURE.
+ *
  *  \section Sec_Options Project Options
  *
  *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
 
 
        .VendorID               = 0x03EB,
        .ProductID              = 0x204A,
-       .ReleaseNumber          = VERSION_BCD(00.01),
+       .ReleaseNumber          = VERSION_BCD(01.00),
 
        .ManufacturerStrIndex   = NO_DESCRIPTOR,
        .ProductStrIndex        = 0x01,
 
 .section .apitable, "ax"
 .org 0
 
+; API function jump table
 .global BootloaderAPI_JumpTable
 BootloaderAPI_JumpTable:
-       jmp BootloaderAPI_ErasePage
-       jmp BootloaderAPI_WritePage
-       jmp BootloaderAPI_FillWord
-       jmp BootloaderAPI_ReadSignature
-       jmp BootloaderAPI_ReadFuse
-       jmp BootloaderAPI_ReadLock
-       jmp BootloaderAPI_WriteLock
+       rjmp BootloaderAPI_ErasePage
+       rjmp BootloaderAPI_WritePage
+       rjmp BootloaderAPI_FillWord
+       rjmp BootloaderAPI_ReadSignature
+       rjmp BootloaderAPI_ReadFuse
+       rjmp BootloaderAPI_ReadLock
+       rjmp BootloaderAPI_WriteLock
+
+; Bootloader table signature
+.org 30
+       .word 0xDCFB
 
  *  uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address)                = BOOTLOADER_API_START(4);
  *  uint8_t (*BootloaderAPI_ReadLock)(void)                            = BOOTLOADER_API_START(5);
  *  void    (*BootloaderAPI_WriteLock)(uint8_t LockBits)               = BOOTLOADER_API_START(6);
+ *
+ *  #define BOOTLOADER_SIG_START               (FLASHEND - 32)
+ *  #define BOOTLOADER_SIGNATURE               0xDCFB
  *  \endcode
  *
+ *  From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address
+ *  \c BOOTLOADER_SIG_START and comparing them to the value \c BOOTLOADER_SIGNATURE.
+ *
  *  \section Sec_Options Project Options
  *
  *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
 
   *   - Altered the Mass Storage Host class driver so that SCSI data STALLs from the attached device can be recovered from automatically without
   *     having to reset the Mass Storage interface
   *   - USB_CONFIG_ATTR_BUSPOWERED constant renamed to USB_CONFIG_ATTR_RESERVED, as this was misnamed (thanks to NXP Semiconductors)
+  *   - Reordered board name definition indexes so that a mispelled BOARD compile option will default to BOARD_USER rather than BOARD_USBKEY
   *  - Library Applications:
   *   - Altered the Mass Storage Host LowLevel demo so that SCSI data STALLs from the attached device can be recovered from automatically without
   *     having to reset the Mass Storage interface