diff --git a/openwrt/Config.in b/openwrt/Config.in
index 7e4d29e7d7d7b39881e05ac87c6dbc8bc2f4264a..71f05689770f64127f77e6b8efccd1f4eff6e2af 100644
--- a/openwrt/Config.in
+++ b/openwrt/Config.in
@@ -34,5 +34,5 @@ config JLEVEL
 	    Number of jobs to run simultanesouly
 
 source "toolchain/Config.in"
-source "package/Config.in"
+source ".config.in"
 
diff --git a/openwrt/Makefile b/openwrt/Makefile
index d82d6180e32778cf6810a21b21a64e66511fbb6e..b938c241f9f084b77c55e18188dc679751072d66 100644
--- a/openwrt/Makefile
+++ b/openwrt/Makefile
@@ -50,6 +50,7 @@ endif
 	done > $@
 	
 .config.in: .pkginfo
+	./scripts/gen_menuconfig.pl < $< > $@ || rm -f $@
 
 pkginfo-clean:
 	-rm -f .pkginfo .config.in
@@ -63,7 +64,7 @@ scripts/config/conf: .config.in
 menuconfig: scripts/config/mconf
 	$< Config.in
 
-config: scripts/config/mconf
+config: scripts/config/conf
 	$< Config.in
 
 config-clean:
diff --git a/openwrt/package/Config.in b/openwrt/package/Config.in
deleted file mode 100644
index a0961bf6672fd0df693018ace9074350c86b9a8f..0000000000000000000000000000000000000000
--- a/openwrt/package/Config.in
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-
-menu "OpenWrt Package Selection"
-
-comment "Package categories"
-
-menu "Base system"
-endmenu
-
-endmenu
-
diff --git a/openwrt/package/busybox/Makefile b/openwrt/package/busybox/Makefile
index a5830764e5fc17b80315227570db3df0a6cf4848..5ccbe225144c63de4c8e76987ed28946c50376b7 100644
--- a/openwrt/package/busybox/Makefile
+++ b/openwrt/package/busybox/Makefile
@@ -18,6 +18,7 @@ define Package/busybox
 CONFIGFILE:=config/Config.in
 SECTION:=base
 CATEGORY:=Base system
+DEFAULT:=y
 TITLE:=Core utilities for embedded Linux
 DESCRIPTION:=The Swiss Army Knife of embedded Linux.  It slices, it dices, it\\\
 makes Julian Fries.
diff --git a/openwrt/package/iptables/Makefile b/openwrt/package/iptables/Makefile
index 56ab594174b57a9828bdceeefb65123028d664fb..cc7c84a0d57d10c658ab2fede679ec8e48950238 100644
--- a/openwrt/package/iptables/Makefile
+++ b/openwrt/package/iptables/Makefile
@@ -28,6 +28,8 @@ endif
 define Package/iptables
 SECTION:=net
 CATEGORY:=Base system
+MENU:=1
+DEFAULT:=y
 TITLE:=IPv4 firewall administration tool
 URL:=http://netfilter.org/
 endef
@@ -186,10 +188,6 @@ define Package/ip6tables/install
 	$(RSTRIP) $(1)
 endef
 
-$(eval $(call BuildPackage,iptables))
-$(eval $(call BuildPackage,iptables-utils))
-$(eval $(call BuildPackage,ip6tables))
-
 define BuildPlugin
 define Package/$(1)/install
 	install -m0755 -d $$(1)/usr/lib/iptables
@@ -206,6 +204,8 @@ endef
 L7_INSTALL:=mkdir -p $$(1)/etc/l7-protocols; \
 	$(CP) files/l7/*.pat $$(1)/etc/l7-protocols/
 
+$(eval $(call BuildPackage,iptables))
+$(eval $(call BuildPackage,iptables-utils))
 $(eval $(call BuildPlugin,iptables-mod-conntrack,$(IPT_CONNTRACK-m)))
 $(eval $(call BuildPlugin,iptables-mod-extra,$(IPT_EXTRA-m)))
 $(eval $(call BuildPlugin,iptables-mod-filter,$(IPT_FILTER-m),$(L7_INSTALL)))
@@ -214,6 +214,7 @@ $(eval $(call BuildPlugin,iptables-mod-ipopt,$(IPT_IPOPT-m)))
 $(eval $(call BuildPlugin,iptables-mod-ipsec,$(IPT_IPSEC-m)))
 $(eval $(call BuildPlugin,iptables-mod-nat,$(IPT_NAT-m)))
 $(eval $(call BuildPlugin,iptables-mod-ulog,$(IPT_ULOG-m)))
+$(eval $(call BuildPackage,ip6tables))
 
 
 $(STAGING_DIR)/usr/lib/libipq.a: $(PKG_BUILD_DIR)/.built
diff --git a/openwrt/package/rules.mk b/openwrt/package/rules.mk
index ac9b98d74c49cd08adc69d74fbc9c9f67cfffbbc..2ff710ac84799a5f70bfd1dfd9c896254b88af05 100644
--- a/openwrt/package/rules.mk
+++ b/openwrt/package/rules.mk
@@ -46,6 +46,8 @@ SOURCE:=$(patsubst $(TOPDIR)/%,%,${shell pwd})
 VERSION:=$(PKG_VERSION)-$(PKG_RELEASE)
 PKGARCH:=$(ARCH)
 PRIORITY:=optional
+DEFAULT:=
+MENU:=
 TITLE:=
 DESCRIPTION:=
 endef
@@ -96,11 +98,21 @@ endif
 IDEPEND_$(1):=$$(strip $$(DEPENDS))
 
 DUMPINFO += \
-	echo "Package: $(1)"; \
+	echo "Package: $(1)"; 
+ifneq ($(MENU),)
+DUMPINFO += \
+	echo "Menu: $(MENU)";
+endif
+ifneq ($(DEFAULT),)
+DUMPINFO += \
+	echo "Default: $(DEFAULT)";
+endif
+DUMPINFO += \
 	echo "Version: $(VERSION)"; \
-	echo "Depends: $(IDEPEND_$(1))"; \
+	echo "Depends: $$(IDEPEND_$(1))"; \
+	echo "Category: $(CATEGORY)"; \
 	echo "Title: $(TITLE)"; \
-	echo "$(DESCRIPTION)" | sed -e 's,\\,\n,g'; \
+	echo "Description: $(DESCRIPTION)" | sed -e 's,\\,\n,g'; \
 	echo; \
 	echo "$(URL)"; \
 	echo "@@";
@@ -110,7 +122,7 @@ $$(IDIR_$(1))/CONTROL/control: $(PKG_BUILD_DIR)/.prepared
 	mkdir -p $$(IDIR_$(1))/CONTROL
 	echo "Package: $(1)" > $$(IDIR_$(1))/CONTROL/control
 	echo "Version: $(VERSION)" >> $$(IDIR_$(1))/CONTROL/control
-	echo "Depends: $(IDEPEND_$(1))" >> $$(IDIR_$(1))/CONTROL/control
+	echo "Depends: $$(IDEPEND_$(1))" >> $$(IDIR_$(1))/CONTROL/control
 	echo "Source: $(SOURCE)" >> $$(IDIR_$(1))/CONTROL/control
 	echo "Section: $(SECTION)" >> $$(IDIR_$(1))/CONTROL/control
 	echo "Priority: $(PRIORITY)" >> $$(IDIR_$(1))/CONTROL/control
diff --git a/openwrt/scripts/gen_menuconfig.pl b/openwrt/scripts/gen_menuconfig.pl
new file mode 100755
index 0000000000000000000000000000000000000000..70e31a45f5b419d802c164c5c77e32cc966b9d3d
--- /dev/null
+++ b/openwrt/scripts/gen_menuconfig.pl
@@ -0,0 +1,82 @@
+#!/usr/bin/perl
+use strict;
+
+my $src;
+my $makefile;
+my $pkg;
+my %category;
+
+sub print_category($) {
+	my $cat = shift;
+	
+	return unless $category{$cat};
+	
+	print "menu \"$cat\"\n\n";
+	my %spkg = %{$category{$cat}};
+	foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) {
+		foreach my $pkg (@{$spkg{$spkg}}) {
+			my $title = $pkg->{name};
+			my $c = (72 - length($pkg->{name}) - length($pkg->{title}));
+			if ($c > 0) {
+				$title .= ("." x $c). " ". $pkg->{title};
+			}
+			print "\t";
+			$pkg->{menu} and print "menu";
+			print "config PACKAGE_".$pkg->{name}."\n";
+			print "\t\ttristate \"$title\"\n";
+			print "\t\tdefault ".$pkg->{default}."\n";
+			foreach my $depend (@{$pkg->{depends}}) {
+				print "\t\tdepends PACKAGE_$depend\n";
+			}
+			print "\n"
+		}
+	}
+	print "endmenu\n\n";
+	
+	undef $category{$cat};
+}
+
+my $line;
+while ($line = <>) {
+	chomp $line;
+	$line =~ /^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do {
+		$makefile = $1;
+		$src = $2;
+		undef $pkg;
+	};
+	$line =~ /^Package: \s*(.+)\s*$/ and do {
+		$pkg = {};
+		$pkg->{src} = $src;
+		$pkg->{makefile} = $makefile;
+		$pkg->{name} = $1;
+		$pkg->{default} = "m if ALL";
+	};
+	$line =~ /^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
+	$line =~ /^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;
+	$line =~ /^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1;
+	$line =~ /^Default: \s*(.+)\s*$/ and $pkg->{default} = $1;
+	$line =~ /^Depends: \s*(.+)\s*$/ and do {
+		my @dep = split /,\s*/, $1;
+		$pkg->{depends} = \@dep;
+	};
+	$line =~ /^Category: \s*(.+)\s*$/ and do {
+		$pkg->{category} = $1;
+		defined $category{$1} or $category{$1} = {};
+		defined $category{$1}->{$src} or $category{$1}->{$src} = [];
+		push @{$category{$1}->{$src}}, $pkg;
+	};
+	$line =~ /^Description: \s*(.*)\s*$/ and do {
+		my $desc = $1;
+		my $line;
+		while (<>) {
+			last if /^@@/;
+			$desc .= $1;
+		}
+		$pkg->{description} = $desc;
+	}
+}
+
+print_category 'Base system';
+foreach my $cat (keys %category) {
+	print_category $cat;
+}
diff --git a/openwrt/target/Config.in b/openwrt/target/Config.in
index 80e9847d6253408a2ca02499d0490e639b47c780..7f07ff0ac102923a5e6876a3667533a13c181a24 100644
--- a/openwrt/target/Config.in
+++ b/openwrt/target/Config.in
@@ -69,7 +69,7 @@ config LINUX_2_6_AU1000
 	bool "au1000 [2.6]"
 	select mipsel
 	select LINUX_2_6
-	select LINUX_PCMCIA_SUPPORT
+	select PCMCIA_SUPPORT
 	help
 	  Build firmware for AMD Alchemy 1500 boards
 	  (e.g. 4G-Systems Mesh/Access Cube ...)