diff --git a/Config.in b/Config.in
index e80d90c03e97ae663f95bcd2f4c9507d4f42359a..1f689c0664a40d996cee3b5ae7e758399d2db1b6 100644
--- a/Config.in
+++ b/Config.in
@@ -88,6 +88,13 @@ menu "Target Images"
 		help
 		  Create some bootable ISO image
 
+	config TARGET_ROOTFS_UBIFS
+		bool "ubifs"
+		default y if USES_UBIFS
+		depends !TARGET_ROOTFS_INITRAMFS && USES_UBIFS
+		help
+		  Build a ubifs root filesystem
+
 comment "Image Options"
 
 source "target/linux/*/image/Config.in"
diff --git a/include/image.mk b/include/image.mk
index 7f2307919be33df95950915ac05d6c1823421b9f..ac8093704900948adb4764b65b7c0a64c47f0c01 100644
--- a/include/image.mk
+++ b/include/image.mk
@@ -86,6 +86,14 @@ ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
 		( cd $(TARGET_DIR); find . | cpio -o -H newc | gzip -9 >$(BIN_DIR)/openwrt-$(BOARD)-rootfs.cpio.gz )
     endef
   endif
+  ifeq ($(CONFIG_TARGET_ROOTFS_UBIFS),y)
+    define Image/mkfs/ubifs
+		$(CP) ./ubinize.cfg $(KDIR)
+		$(STAGING_DIR_HOST)/bin/mkfs.ubifs $(UBIFS_OPTS) -o $(KDIR)/root.ubifs -d $(TARGET_DIR)
+		(cd $(KDIR); \
+		$(STAGING_DIR_HOST)/bin/ubinize $(UBINIZE_OPTS) -o $(BIN_DIR)/openwrt-$(BOARD)-rootfs.ubi ubinize.cfg)
+    endef
+  endif
 else
   define Image/BuildKernel
 	cp $(KDIR)/vmlinux.elf $(BIN_DIR)/openwrt-$(BOARD)-vmlinux.elf
@@ -150,6 +158,7 @@ ifneq ($(IB),1)
 	$(call Image/mkfs/cpiogz)
 	$(call Image/mkfs/ext2)
 	$(call Image/mkfs/iso)
+	$(call Image/mkfs/ubifs)
 	$(call Image/Checksum)
 else
   install: compile install-targets
@@ -160,6 +169,7 @@ else
 	$(call Image/mkfs/cpiogz)
 	$(call Image/mkfs/ext2)
 	$(call Image/mkfs/iso)
+	$(call Image/mkfs/ubifs)
 	$(call Image/Checksum)
 endif
 
diff --git a/scripts/metadata.pl b/scripts/metadata.pl
index 54ac06390234d8e173dae9951944d7c4707bf9e1..aa66e53094c952617952d74eed2be20178bfe48e 100755
--- a/scripts/metadata.pl
+++ b/scripts/metadata.pl
@@ -163,6 +163,7 @@ sub target_config_features(@) {
 		/ext2/ and $ret .= "\tselect USES_EXT2\n";
 		/tgz/ and $ret .= "\tselect USES_TGZ\n";
 		/cpiogz/ and $ret .= "\tselect USES_CPIOGZ\n";
+		/ubifs/ and $ret .= "\tselect USES_UBIFS\n";
 		/fpu/ and $ret .= "\tselect HAS_FPU\n";
 		/ramdisk/ and $ret .= "\tselect USES_INITRAMFS\n";
 		/powerpc64/ and $ret .= "\tselect powerpc64\n";
diff --git a/target/Config.in b/target/Config.in
index 14cdfa577e752615821fa6b53482cbd3deda45ff..f5aa0430538e2d73893e503d68e1ca8a8a85f616 100644
--- a/target/Config.in
+++ b/target/Config.in
@@ -50,7 +50,10 @@ config USES_TGZ
 config USES_CPIOGZ
 	bool
 
-config PROFILE_KCONFIG 
+config USES_UBIFS
+	bool
+
+config PROFILE_KCONFIG
 	bool
 
 config NOMMU