diff --git a/Bootloaders/CDC/BootloaderAPI.h b/Bootloaders/CDC/BootloaderAPI.h
index 9c9d5a4cef1e1ed5b9aeffc3fcef47b49d08aa50..e9709125d04a1512f746fa2edbae0ba1e8983b70 100644
--- a/Bootloaders/CDC/BootloaderAPI.h
+++ b/Bootloaders/CDC/BootloaderAPI.h
@@ -43,9 +43,6 @@
 		
 		#include <LUFA/Common/Common.h>
 	
-	/* External Variables: */
-		extern uint8_t* BootloaderAPI_JumpTable;
-	
 	/* Function Prototypes: */
 		void    BootloaderAPI_ErasePage(uint32_t Address);
 		void    BootloaderAPI_WritePage(uint32_t Address);
diff --git a/Bootloaders/CDC/BootloaderCDC.c b/Bootloaders/CDC/BootloaderCDC.c
index f336a1368716ce904866a0fd8eaf00d39bbd913b..7695e33d81388759fea146c5b5b4327ff9793b3b 100644
--- a/Bootloaders/CDC/BootloaderCDC.c
+++ b/Bootloaders/CDC/BootloaderCDC.c
@@ -63,10 +63,6 @@ static bool RunBootloader = true;
  */
 int main(void)
 {
-	/* Force a reference to the API jump table to prevent the linker from discarding it */
-	uint8_t* volatile Dummy = BootloaderAPI_JumpTable;
-	(void)Dummy;
-
 	/* Setup hardware required for the bootloader */
 	SetupHardware();
 
diff --git a/Bootloaders/CDC/makefile b/Bootloaders/CDC/makefile
index 65982263e4653b569208e240e479b108f86d6f82..f98372dfbbd6ac386a13fc6441376a566c6f7714 100644
--- a/Bootloaders/CDC/makefile
+++ b/Bootloaders/CDC/makefile
@@ -340,7 +340,7 @@ EXTMEMOPTS =
 #    -Map:      create map file
 #    --cref:    add cross reference to  map file
 LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
-LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) -Wl,--section-start=.apitable=$(BOOT_API_TABLESTART)
+LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) -Wl,--section-start=.apitable=$(BOOT_API_TABLESTART) -Wl,--undefined=BootloaderAPI_JumpTable
 LDFLAGS += -Wl,--relax
 LDFLAGS += -Wl,--gc-sections
 LDFLAGS += $(EXTMEMOPTS)
diff --git a/Bootloaders/DFU/BootloaderAPI.h b/Bootloaders/DFU/BootloaderAPI.h
index 9c9d5a4cef1e1ed5b9aeffc3fcef47b49d08aa50..e9709125d04a1512f746fa2edbae0ba1e8983b70 100644
--- a/Bootloaders/DFU/BootloaderAPI.h
+++ b/Bootloaders/DFU/BootloaderAPI.h
@@ -43,9 +43,6 @@
 		
 		#include <LUFA/Common/Common.h>
 	
-	/* External Variables: */
-		extern uint8_t* BootloaderAPI_JumpTable;
-	
 	/* Function Prototypes: */
 		void    BootloaderAPI_ErasePage(uint32_t Address);
 		void    BootloaderAPI_WritePage(uint32_t Address);
diff --git a/Bootloaders/DFU/BootloaderDFU.c b/Bootloaders/DFU/BootloaderDFU.c
index 078d59debb4fbf82d66ec4049181cb27f579a2e1..6e0c95d06b6723d6abd4aa54a48b5c334239fa51 100644
--- a/Bootloaders/DFU/BootloaderDFU.c
+++ b/Bootloaders/DFU/BootloaderDFU.c
@@ -99,10 +99,6 @@ static uint16_t EndAddr = 0x0000;
  */
 int main(void)
 {
-	/* Force a reference to the API jump table to prevent the linker from discarding it */
-	uint8_t* volatile Dummy = BootloaderAPI_JumpTable;
-	(void)Dummy;
-
 	/* Configure hardware required by the bootloader */
 	SetupHardware();
 
diff --git a/Bootloaders/DFU/makefile b/Bootloaders/DFU/makefile
index bd7120d8f6b0f73c6e9d79a6a0ab87a793ac23a9..87cfd072ef24ed5af2586122860653a1f1a2a25e 100644
--- a/Bootloaders/DFU/makefile
+++ b/Bootloaders/DFU/makefile
@@ -335,7 +335,7 @@ EXTMEMOPTS =
 #    -Map:      create map file
 #    --cref:    add cross reference to  map file
 LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
-LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) -Wl,--section-start=.apitable=$(BOOT_API_TABLESTART)
+LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) -Wl,--section-start=.apitable=$(BOOT_API_TABLESTART) -Wl,--undefined=BootloaderAPI_JumpTable
 LDFLAGS += -Wl,--relax
 LDFLAGS += -Wl,--gc-sections
 LDFLAGS += $(EXTMEMOPTS)