diff --git a/makefiles/multislot.mk b/makefiles/multislot.mk
new file mode 100644
index 0000000000000000000000000000000000000000..94fb5f35d8e120c3d84726af2fb96bf584ab83c1
--- /dev/null
+++ b/makefiles/multislot.mk
@@ -0,0 +1,54 @@
+ifdef SLOT0_SIZE
+
+IMGTOOL ?= $(RIOTBASE)/dist/tools/mcuboot/imgtool.py
+override IMGTOOL := $(abspath $(IMGTOOL))
+
+BINFILE ?= $(BINDIR)/$(APPLICATION).bin
+SIGN_BINFILE = $(BINDIR)/signed-$(APPLICATION).bin
+MCUBOOT_KEYFILE ?= $(BINDIR)/key.pem
+OFLAGS = -O binary
+MCUBOOT_BIN ?= $(BINDIR)/mcuboot.bin
+MCUBOOT_BIN_URL ?= http://download.riot-os.org/mynewt.mcuboot.bin
+MCUBOOT_BIN_MD5 ?= 0c71a0589bd3709fc2d90f07a0035ce7
+
+create-key: $(MCUBOOT_KEYFILE)
+
+ifeq ($(BINDIR)/key.pem,$(MCUBOOT_KEYFILE))
+$(MCUBOOT_KEYFILE):
+	$(Q)mkdir -p $(BINDIR)
+	$(Q)$(IMGTOOL) keygen -k $@ -t rsa-2048
+endif
+
+mcuboot: create-key link
+	@$(COLOR_ECHO)
+	@$(COLOR_ECHO) '${COLOR_PURPLE}Re-linking for MCUBoot at $(SLOT0_SIZE)...${COLOR_RESET}'
+	@$(COLOR_ECHO)
+	$(Q)$(_LINK) $(LINKFLAGPREFIX)--defsym=offset="$$(($(SLOT0_SIZE) + $(IMAGE_HDR_SIZE)))" \
+	$(LINKFLAGPREFIX)--defsym=length="$$(($(SLOT1_SIZE) - $(IMAGE_HDR_SIZE)))" \
+	$(LINKFLAGPREFIX)--defsym=image_header="$(IMAGE_HDR_SIZE)" -o $(ELFFILE) && \
+	$(OBJCOPY) $(OFLAGS) $(ELFFILE) $(BINFILE) && \
+	$(IMGTOOL) sign --key $(MCUBOOT_KEYFILE) --version $(IMAGE_VERSION) --align \
+	$(IMAGE_ALIGN) -H $(IMAGE_HDR_SIZE) $(BINFILE) $(SIGN_BINFILE)
+	@$(COLOR_ECHO)
+	@$(COLOR_ECHO) '${COLOR_PURPLE}Signed with $(MCUBOOT_KEYFILE) for version $(IMAGE_VERSION)\
+	${COLOR_RESET}'
+	@$(COLOR_ECHO)
+
+$(MCUBOOT_BIN):
+	$(Q)$(DLCACHE) $(MCUBOOT_BIN_URL) $(MCUBOOT_BIN_MD5) $@
+
+.PHONY: flash-bootloader flash-mcuboot
+
+flash-bootloader: HEXFILE = $(MCUBOOT_BIN)
+flash-bootloader: $(MCUBOOT_BIN) $(FLASHDEPS)
+	FLASH_ADDR=0x0 $(FLASHER) $(FFLAGS)
+
+flash-mcuboot: HEXFILE = $(SIGN_BINFILE)
+flash-mcuboot: mcuboot $(FLASHDEPS) flash-bootloader
+	FLASH_ADDR=$(SLOT0_SIZE) $(FLASHER) $(FFLAGS)
+
+else
+mcuboot:
+	$(Q)echo "error: mcuboot not supported on board $(BOARD)!"
+	$(Q)false
+endif # SLOT0_SIZE