diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile
index 3ab194a9f0d40769bdcdc212b39e71f63d882219..545da4d0e056a51370a4820ab0b444a62803c3dd 100644
--- a/package/system/procd/Makefile
+++ b/package/system/procd/Makefile
@@ -43,6 +43,13 @@ define Package/procd-nand
   TITLE:=OpenWrt sysupgrade nand helper
 endef
 
+define Package/procd-nand-firstboot
+  SECTION:=utils
+  CATEGORY:=Utilities
+  DEPENDS:=procd-nand
+  TITLE:=OpenWrt firstboot nand helper
+endef
+
 define Package/procd/config
 menu "Configuration"
 	depends on PACKAGE_procd
@@ -85,5 +92,12 @@ define Package/procd-nand/install
 	$(INSTALL_DATA) ./files/nand.sh $(1)/lib/upgrade/
 endef
 
+define Package/procd-nand-firstboot/install
+	$(INSTALL_DIR) $(1)/lib/preinit
+
+	$(INSTALL_DATA) ./files/nand-preinit.sh $(1)/lib/preinit/60-nand-firstboot.sh
+endef
+
 $(eval $(call BuildPackage,procd))
 $(eval $(call BuildPackage,procd-nand))
+$(eval $(call BuildPackage,procd-nand-firstboot))
diff --git a/package/system/procd/files/nand-preinit.sh b/package/system/procd/files/nand-preinit.sh
new file mode 100644
index 0000000000000000000000000000000000000000..bd2193c9289b23b04a88bc4eda6af8c1acfe1c62
--- /dev/null
+++ b/package/system/procd/files/nand-preinit.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Copyright (C) 2014 OpenWrt.org
+
+nand_takeover() {
+	. /lib/upgrade/nand.sh
+	mtd=$(find_mtd_index "$CI_UBIPART")
+	local file_type="$(identify $2)"
+	mtd -l 400 dump /dev/mtd$mtd > /tmp/takeover.hdr
+	MAGIC=$(dd if=/tmp/takeover.hdr bs=1 skip=261 count=5 2> /dev/null)
+	SIZE=$(printf "%d" 0x$(dd if=/tmp/takeover.hdr bs=4 count=1 2> /dev/null | hexdump -v -n 4 -e '1/1 "%02x"'))
+	[ "$MAGIC" = "ustar" ] && {
+		mtd -l $((SIZE + 4))  dump /dev/mtd$mtd | dd bs=1 skip=4 of=/tmp/sysupgrade.tar
+		nand_do_upgrade_stage2 /tmp/sysupgrade.tar
+	}
+}
+
+boot_hook_add initramfs nand_takeover