diff --git a/openwrt/include/package.mk b/openwrt/include/package.mk
index cf8756ea63ecb58811947b07509099222913702c..0996574d26dd8a6cfab9fb1fd84920c4fea8438d 100644
--- a/openwrt/include/package.mk
+++ b/openwrt/include/package.mk
@@ -74,6 +74,7 @@ define Package/Default
   PRIORITY:=optional
   DEFAULT:=
   MENU:=
+  SUBMENU:=
   TITLE:=
   DESCRIPTION:=
 endef
@@ -124,6 +125,11 @@ define BuildPackage
 	echo "Menu: $(MENU)";
   endif
 
+  ifneq ($(SUBMENU),)
+    DUMPINFO += \
+	echo "Submenu: $(SUBMENU)";
+  endif
+
   ifneq ($(DEFAULT),)
     DUMPINFO += \
 	echo "Default: $(DEFAULT)";
diff --git a/openwrt/package/broadcom-wl/Makefile b/openwrt/package/broadcom-wl/Makefile
index 8b68e752f100fc107f407f6f6028aa2e8769ea95..79586a3a57b7efe588831eae0024b365961c2675 100644
--- a/openwrt/package/broadcom-wl/Makefile
+++ b/openwrt/package/broadcom-wl/Makefile
@@ -21,8 +21,8 @@ define Package/kmod-brcm-wl
   CATEGORY:=Drivers
   DEPENDS:=@LINUX_2_4_BRCM
   DEFAULT:=y
-  MENU:=1
-  TITLE:=Proprietary BCM43xx WiFi driver
+  SUBMENU:=Proprietary BCM43xx WiFi driver
+  TITLE:=Kernel driver (normal version)
   DESCRIPTION:=Proprietary Wireless driver for the Broadcom BCM43xx chipset
   VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(PKG_RELEASE)
 endef
@@ -30,8 +30,7 @@ endef
 define Package/kmod-brcm-wl-mimo
   $(call Package/kmod-brcm-wl)
   DEFAULT:=m if ALL
-  MENU:=
-  TITLE:=Proprietary BCM43xx WiFi driver (MIMO version)
+  TITLE:=Kernel driver (MIMO version)
   DESCRIPTION:=Proprietary Wireless driver for the Broadcom BCM43xx chipset (MIMO version)
 endef
 
diff --git a/openwrt/scripts/gen_menuconfig.pl b/openwrt/scripts/gen_menuconfig.pl
index eff78dcd90e37c4d0e994f56562121c78abe8493..c1510b0d5842ec6f5c977726a6ad021b53c533a5 100755
--- a/openwrt/scripts/gen_menuconfig.pl
+++ b/openwrt/scripts/gen_menuconfig.pl
@@ -5,6 +5,7 @@ my $src;
 my $makefile;
 my $pkg;
 my %category;
+my $cur_menu;
 
 sub print_category($) {
 	my $cat = shift;
@@ -15,6 +16,16 @@ sub print_category($) {
 	my %spkg = %{$category{$cat}};
 	foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) {
 		foreach my $pkg (@{$spkg{$spkg}}) {
+			if ($cur_menu ne $pkg->{submenu}) {
+				if ($cur_menu) {
+					print "endmenu\n";
+					undef $cur_menu;
+				} 
+				if ($pkg->{submenu}) {
+					$cur_menu = $pkg->{submenu};
+					print "menu \"$cur_menu\"\n";
+				}
+			}
 			my $title = $pkg->{name};
 			my $c = (72 - length($pkg->{name}) - length($pkg->{title}));
 			if ($c > 0) {
@@ -65,6 +76,7 @@ while ($line = <>) {
 	$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 =~ /^Submenu: \s*(.+)\s*$/ and $pkg->{submenu} = $1;
 	$line =~ /^Default: \s*(.+)\s*$/ and $pkg->{default} = $1;
 	$line =~ /^Depends: \s*(.+)\s*$/ and do {
 		my @dep = split /\s+/, $1;