diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7312.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7312.dts
index 8d3d686f4638302e0cc9a376a31fed7ed46c032d..c8e67537a94971ae8cab34fafb26b48948f77e0d 100644
--- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7312.dts
+++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7312.dts
@@ -1,6 +1,7 @@
 #include "ar9.dtsi"
 
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
 	compatible = "avm,fritz7312", "lantiq,xway", "lantiq,ar9";
@@ -131,7 +132,10 @@
 
 			partition@20000 {
 				label = "firmware";
+				compatible = "openwrt,uimage", "denx,uimage";
 				reg = <0x20000 0xf60000>;
+				openwrt,ih-magic = <IH_MAGIC_OKLI>;
+				openwrt,offset = <0x11000>;
 			};
 
 			partition@f80000 {
diff --git a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7320.dts b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7320.dts
index f3b4e5e4f53cb8cf24a247a43c3ef717471f21cc..44b8a18dae966cbf699ac42b9b6500cb6d5bf8ae 100644
--- a/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7320.dts
+++ b/target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7320.dts
@@ -1,6 +1,7 @@
 #include "ar9.dtsi"
 
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
 	compatible = "avm,fritz7320", "lantiq,xway", "lantiq,ar9";
@@ -140,8 +141,11 @@
 			};
 
 			partition@20000 {
+				compatible = "openwrt,uimage", "denx,uimage";
 				label = "firmware";
 				reg = <0x20000 0xf60000>;
+				openwrt,ih-magic = <IH_MAGIC_OKLI>;
+				openwrt,offset = <0x11000>;
 			};
 
 			partition@f80000 {
diff --git a/target/linux/lantiq/image/Makefile b/target/linux/lantiq/image/Makefile
index ec10cd882a01cd7067b292f9b47294f030661c5d..facc3fbe099f5f9f31a76973d33202774b735de1 100644
--- a/target/linux/lantiq/image/Makefile
+++ b/target/linux/lantiq/image/Makefile
@@ -49,12 +49,35 @@ define Build/fullimage
 	rm $@.tmp
 endef
 
-DEVICE_VARS += SIGNATURE MAGIC CRC32_POLY
+define Build/loader-okli-compile
+	rm -rf $@.src
+	$(MAKE) -C lzma-loader \
+		PKG_BUILD_DIR="$@.src" \
+		TARGET_DIR="$(dir $@)" LOADER_NAME="$(notdir $@)" \
+		PLATFORM="lantiq" \
+		LZMA_TEXT_START=0x82000000 \
+		LOADADDR=0x80002000 \
+		FLASH_START=0x10000000 \
+		FLASH_OFFS=$(LOADER_FLASH_OFFS) \
+		FLASH_MAX=0x0 \
+		$(1) compile loader.bin
+	mv "$@.bin" "$@"
+	rm -rf $@.src
+endef
+
+define Build/prepend-loader-okli
+	cat "$(KDIR)/loader-$(word 1,$(1)).bin" "$@" >> "$@.new"
+	mv "$@.new" "$@"
+endef
+
+DEVICE_VARS += SIGNATURE MAGIC CRC32_POLY LOADER_FLASH_OFFS
+
 DTS_DIR := $(DTS_DIR)/lantiq
 
 # Shared device definition: applies to every defined device
 define Device/Default
   PROFILES = Default
+  COMPILE :=
   KERNEL_DEPENDS = $$(wildcard $(DTS_DIR)/$$(DEVICE_DTS).dts)
   KERNEL_INITRAMFS_NAME = $$(KERNEL_NAME)-initramfs
   KERNEL := kernel-bin | append-dtb | lzma | uImage lzma
@@ -105,6 +128,16 @@ define Device/AVM
 	append-rootfs | pad-rootfs | check-size | append-metadata
 endef
 
+define Device/AVM_preloader
+  DEVICE_VENDOR := AVM
+  COMPILE := loader-$(1).bin
+  COMPILE/loader-$(1).bin := loader-okli-compile | lzma | eva-image | \
+	pad-to 64k | append-avm-fakeroot | pad-to 4k
+  KERNEL := kernel-bin | append-dtb | lzma | uImage lzma -M 0x4f4b4c49 | \
+	prepend-loader-okli $(1)
+  KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | eva-image
+endef
+
 ifeq ($(SUBTARGET),ase)
 DEFAULT_SOC := amazonse
 include amazonse.mk
diff --git a/target/linux/lantiq/image/ar9.mk b/target/linux/lantiq/image/ar9.mk
index a68868f0d9c5278d768ab2746741fee57de5f36d..5a17395f82cfa35b10daa4c1aa93f7c5f0f99b0f 100644
--- a/target/linux/lantiq/image/ar9.mk
+++ b/target/linux/lantiq/image/ar9.mk
@@ -1,8 +1,9 @@
 define Device/avm_fritz7312
-  $(Device/AVM)
+  $(Device/AVM_preloader)
   DEVICE_MODEL := FRITZ!Box 7312
   SOC := ar9
   IMAGE_SIZE := 15744k
+  LOADER_FLASH_OFFS := 0x31000
   DEVICE_PACKAGES := kmod-ath9k kmod-owl-loader wpad-basic-wolfssl \
 	kmod-ltq-adsl-ar9-mei kmod-ltq-adsl-ar9 \
 	kmod-ltq-adsl-ar9-fw-b kmod-ltq-atm-ar9 \
@@ -12,12 +13,13 @@ endef
 TARGET_DEVICES += avm_fritz7312
 
 define Device/avm_fritz7320
-  $(Device/AVM)
+  $(Device/AVM_preloader)
   DEVICE_MODEL := FRITZ!Box 7320
   DEVICE_ALT0_VENDOR := 1&1
   DEVICE_ALT0_MODEL := HomeServer
   SOC := ar9
   IMAGE_SIZE := 15744k
+  LOADER_FLASH_OFFS := 0x31000
   DEVICE_PACKAGES := kmod-ath9k kmod-owl-loader wpad-basic-wolfssl \
 	kmod-ltq-adsl-ar9-mei kmod-ltq-adsl-ar9 \
 	kmod-ltq-adsl-ar9-fw-b kmod-ltq-atm-ar9 \