diff --git a/boot/barebox/Config.in b/boot/barebox/Config.in
index 95f330f..bb20542 100644
--- a/boot/barebox/Config.in
+++ b/boot/barebox/Config.in
@@ -99,4 +99,32 @@ config BR2_TARGET_BAREBOX_BAREBOXENV
 	help
 	  Install bareboxenv tool in target.
 
+choice
+	prompt "Barebox xloader configuration"
+	default BR2_TARGET_BAREBOX_XLOADER_NONE
+
+config BR2_TARGET_BAREBOX_XLOADER_NONE
+	bool "None"
+
+config BR2_TARGET_BAREBOX_XLOADER_USE_DEFCONFIG
+	bool "Using defconfig"
+
+config BR2_TARGET_BAREBOX_XLOADER_USE_CUSTOM_CONFIG
+	bool "Using a custom config file"
+
+endchoice
+
+config BR2_TARGET_BAREBOX_BOARD_XLOADER_DEFCONFIG
+	string "board xloader defconfig"
+	depends on BR2_TARGET_BAREBOX_XLOADER_USE_DEFCONFIG
+	help
+	  Name of the board for which Barebox xloader should be built, without
+	  the _defconfig suffix (can be used for pandaboard, beagleboard ...).
+
+config BR2_TARGET_BAREBOX_XLOADER_CUSTOM_CONFIG_FILE
+	string "Xloader configuration file path"
+	depends on BR2_TARGET_BAREBOX_XLOADER_USE_CUSTOM_CONFIG
+	help
+	  Path to the barebox custom xloader configuration file.
+
 endif
diff --git a/boot/barebox/barebox.mk b/boot/barebox/barebox.mk
index 16110b9..199b708 100644
--- a/boot/barebox/barebox.mk
+++ b/boot/barebox/barebox.mk
@@ -56,7 +56,33 @@ endif
 
 BAREBOX_BUILD_DIR = barebox
 
+ifneq ($(BR2_TARGET_BAREBOX_XLOADER_NONE),y)
+ifeq ($(BR2_TARGET_BAREBOX_XLOADER_USE_DEFCONFIG),y)
+BAREBOX_XLOADER_SOURCE_CONFIG = $(@D)/arch/$(BAREBOX_ARCH)/configs/$(call qstrip,$(BR2_TARGET_BAREBOX_BOARD_XLOADER_DEFCONFIG))_defconfig
+else ifeq ($(BR2_TARGET_BAREBOX_XLOADER_USE_CUSTOM_CONFIG),y)
+BAREBOX_XLOADER_SOURCE_CONFIG = $(BR2_TARGET_BAREBOX_XLOADER_CUSTOM_CONFIG_FILE)
+endif
+
+BAREBOX_XLOADER_BUILD_DIR = MLO
+
+define BAREBOX_XLOADER_CONFIGURE_CMDS
+	mkdir -p $(@D)/$(BAREBOX_XLOADER_BUILD_DIR)
+	cp $(BAREBOX_XLOADER_SOURCE_CONFIG) $(@D)/arch/$(BAREBOX_ARCH)/configs/buildroot_xload_defconfig
+	$(MAKE) $(BAREBOX_MAKE_FLAGS) -C $(@D) buildroot_xload_defconfig O=$(BAREBOX_XLOADER_BUILD_DIR)
+endef
+
+define BAREBOX_XLOADER_BUILD_CMDS
+	$(MAKE) $(BAREBOX_MAKE_FLAGS) -C $(@D) O=$(BAREBOX_XLOADER_BUILD_DIR)
+endef
+
+define BAREBOX_XLOADER_INSTALL_IMAGES_CMDS
+	cp $(@D)/$(BAREBOX_XLOADER_BUILD_DIR)/MLO $(BINARIES_DIR)
+endef
+
+endif
+
 define BAREBOX_CONFIGURE_CMDS
+	$(BAREBOX_XLOADER_CONFIGURE_CMDS)
 	mkdir -p $(@D)/$(BAREBOX_BUILD_DIR)
 	cp $(BAREBOX_SOURCE_CONFIG) $(@D)/arch/$(BAREBOX_ARCH)/configs/buildroot_defconfig
 	$(MAKE) $(BAREBOX_MAKE_FLAGS) -C $(@D) buildroot_defconfig O=$(BAREBOX_BUILD_DIR)
@@ -70,11 +96,13 @@ endef
 endif
 
 define BAREBOX_BUILD_CMDS
+	$(BAREBOX_XLOADER_BUILD_CMDS)
 	$(BAREBOX_BUILD_BAREBOXENV_CMDS)
 	$(MAKE) $(BAREBOX_MAKE_FLAGS) -C $(@D) O=$(BAREBOX_BUILD_DIR)
 endef
 
 define BAREBOX_INSTALL_IMAGES_CMDS
+	$(BAREBOX_XLOADER_INSTALL_IMAGES_CMDS)
 	cp $(@D)/$(BAREBOX_BUILD_DIR)/barebox.bin $(BINARIES_DIR)
 endef
 
