diff --git a/openwrt/target/Config.in b/openwrt/target/Config.in
index 1fad548133b1083fa0b38e71754af81b6e5d9b53..d93df6b1cfc872aab594f32c704d791127a3d50c 100644
--- a/openwrt/target/Config.in
+++ b/openwrt/target/Config.in
@@ -4,4 +4,5 @@ choice
 	source "target/squashfs/Config.in"
 	source "target/squashfs-lzma/Config.in"
 endchoice
-	comment "After changing root filesystem, do make clean"
+
+source "target/device/Config.in"
diff --git a/openwrt/target/Makefile.in b/openwrt/target/Makefile.in
index c01ade299a908e776344ace49abd9c5af1f8ced8..802b576fbacb90e9e9b77ca296e2f2f92031d8f1 100644
--- a/openwrt/target/Makefile.in
+++ b/openwrt/target/Makefile.in
@@ -1 +1,17 @@
-# Nothing
+# Default target skeleton stuff, may be overridden
+TARGET_SKELETON=target/default/skel.tar.gz
+TARGET_SKEL_DIR=target/default/target_skeleton
+
+include target/device/Makefile.in
+
+openwrt-linux.trx: openwrt-trx
+	PATH=$(TARGET_PATH) trx -o openwrt-linux.trx $(LINUX_DIR)/$(LINUX_BINLOC) $(IMAGE).$(ROOTFS)
+
+openwrt-gs-code.bin: openwrt-addpattern openwrt-linux.trx
+	PATH=$(TARGET_PATH) addpattern -2 -i  openwrt-linux.trx -o openwrt-gs-code.bin -g
+
+openwrt-g-code.bin: openwrt-gs-code.bin
+	sed -e "1s,^W54S,W54G," < openwrt-gs-code.bin > openwrt-g-code.bin
+
+openwrt-image:	openwrt-g-code.bin
+
diff --git a/openwrt/target/default/openwrt.mk b/openwrt/target/default/openwrt.mk
deleted file mode 100644
index 89051cd1bf32a956a7633db9e16e452d36ddaff3..0000000000000000000000000000000000000000
--- a/openwrt/target/default/openwrt.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-openwrt-linux.trx: openwrt-trx
-	PATH=$(TARGET_PATH) trx -o openwrt-linux.trx $(LINUX_DIR)/$(LINUX_BINLOC) $(IMAGE).$(ROOTFS)
-
-openwrt-gs-code.bin: openwrt-addpattern openwrt-linux.trx
-	PATH=$(TARGET_PATH) addpattern -2 -i  openwrt-linux.trx -o openwrt-gs-code.bin -g
-
-openwrt-g-code.bin: openwrt-gs-code.bin
-	sed -e "1s,^W54S,W54G," < openwrt-gs-code.bin > openwrt-g-code.bin
-
-openwrt-image:	openwrt-g-code.bin
diff --git a/openwrt/target/default/skel.tar.gz b/openwrt/target/default/skel.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..86cefb1d24a81521856763fc61a4fa1a0fa2b5dc
Binary files /dev/null and b/openwrt/target/default/skel.tar.gz differ
diff --git a/openwrt/target/device/Config.in b/openwrt/target/device/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..36d056cadfc352e73ef9f2e46dd6e2293b59e4ab
--- /dev/null
+++ b/openwrt/target/device/Config.in
@@ -0,0 +1,17 @@
+choice
+	prompt "Device Support"
+	default BR2_TARGET_ALL
+
+config BR2_TARGET_ALL
+	bool "Support for all devices"
+
+config BR2_TARGET_LINKSYS_WRT54G
+    bool "Linksys WRT54G Support"
+
+config BR2_TARGET_LINKSYS_WRT54GS
+    bool "Linksys WRT54GS Support"
+
+config BR2_TARGET_ASUS_WL500G
+	bool "Asus WL-500g Support"
+
+endchoice
diff --git a/openwrt/target/device/Makefile.in b/openwrt/target/device/Makefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..92d6e76bc78bc874baaaa236a1bbde0dd2e1127f
--- /dev/null
+++ b/openwrt/target/device/Makefile.in
@@ -0,0 +1,2 @@
+-include target/device/*/*/Makefile.in
+-include target/device/all/Makefile.in
diff --git a/openwrt/target/jffs2/jffs2root.mk b/openwrt/target/jffs2/jffs2root.mk
index 90a60165cbf4ec4407edab0cfb1bb643c8859d34..8dcd00f572d11367cc3d61ad42d475caa9c8f28e 100644
--- a/openwrt/target/jffs2/jffs2root.mk
+++ b/openwrt/target/jffs2/jffs2root.mk
@@ -43,3 +43,8 @@ jffs2root-clean:
 
 jffs2root-dirclean:
 	rm -rf $(MTD_DIR)
+
+ifeq ($(strip $(BR2_TARGET_ROOTFS_JFFS2)),y)
+TARGETS+=jffs2root openwrt-image
+ROOTFS=jffs2
+endif
diff --git a/openwrt/target/squashfs-lzma/squashfslzmaroot.mk b/openwrt/target/squashfs-lzma/squashfslzmaroot.mk
index 6f41f931555a34e1fa650a20acae5af4c27f63e3..722c20524e711036a3b76e2c2f9c822e70ed9200 100644
--- a/openwrt/target/squashfs-lzma/squashfslzmaroot.mk
+++ b/openwrt/target/squashfs-lzma/squashfslzmaroot.mk
@@ -48,3 +48,8 @@ squashfslzmaroot-clean:
 
 squashfslzmaroot-dirclean:
 	rm -rf $(SQUASHFSLZMA_DIR)
+
+ifeq ($(strip $(BR2_TARGET_ROOTFS_SQUASHFS_LZMA)),y)
+TARGETS+=squashfslzmaroot openwrt-image
+ROOTFS=squashfslzma
+endif
diff --git a/openwrt/target/squashfs/squashfsroot.mk b/openwrt/target/squashfs/squashfsroot.mk
index 4dd6800a0d32981c6f96c95b696eb4aa07c1f8c2..d3a104a83f3e6f0ed8e4ed4f95cbb72c5fe04de5 100644
--- a/openwrt/target/squashfs/squashfsroot.mk
+++ b/openwrt/target/squashfs/squashfsroot.mk
@@ -47,3 +47,8 @@ squashfsroot-clean:
 
 squashfsroot-dirclean:
 	rm -rf $(SQUASHFS_DIR)
+
+ifeq ($(strip $(BR2_TARGET_ROOTFS_SQUASHFS)),y)
+TARGETS+=squashfsroot openwrt-image
+ROOTFS=squashfs
+endif