diff --git a/Config.in b/Config.in
index 606cb4a0e952da1f863411a5cb464db3612b9eb4..6f2cdcc2d0b38c440b94011668e68c733a7c7448 100644
--- a/Config.in
+++ b/Config.in
@@ -41,6 +41,13 @@ menu "Target Images"
 		help
 		  Build a compressed tar archive of the the root filesystem
 		  
+	config TARGET_ROOTFS_CPIOGZ
+		bool "cpiogz"
+		default y if USES_TGZ
+		depends !TARGET_ROOTFS_INITRAMFS
+		help
+		  Build a compressed cpio archive of the the root filesystem
+		  
 	config TARGET_ROOTFS_EXT2FS
 		bool "ext2"
 		default y if USES_EXT2
diff --git a/include/image.mk b/include/image.mk
index 47f6714d1305fd72c3bf334079b3ba6786fe99df..d7e4ccd36baa734555b34fa0004b3402083e8b7c 100644
--- a/include/image.mk
+++ b/include/image.mk
@@ -64,6 +64,12 @@ ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
 		$(TAR) -zcf $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-rootfs.tgz --owner=root --group=root -C $(TARGET_DIR)/ .
     endef
   endif
+
+  ifeq ($(CONFIG_TARGET_ROOTFS_CPIOGZ),y)
+    define Image/mkfs/cpiogz
+		( cd $(BUILD_DIR)/root; find . | cpio -o -H newc | gzip -9 >$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-rootfs.cpio.gz )
+    endef
+  endif
 else
   define Image/BuildKernel
 	cp $(KDIR)/vmlinux.elf $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinux.elf
@@ -118,6 +124,7 @@ ifneq ($(IB),1)
 	$(call Image/mkfs/jffs2)
 	$(call Image/mkfs/squashfs)
 	$(call Image/mkfs/tgz)
+	$(call Image/mkfs/cpiogz)
 	$(call Image/mkfs/ext2)
 	$(call Image/mkfs/iso)
 else
@@ -126,6 +133,7 @@ else
 	$(call Image/mkfs/jffs2)
 	$(call Image/mkfs/squashfs)
 	$(call Image/mkfs/tgz)
+	$(call Image/mkfs/cpiogz)
 	$(call Image/mkfs/ext2)
 	$(call Image/mkfs/iso)
 endif