diff --git a/Makefile b/Makefile
index 1e48bc5..c816c9d 100644
--- a/Makefile
+++ b/Makefile
@@ -386,7 +386,7 @@
 scripts/bb_mkdep: $(top_srcdir)/scripts/bb_mkdep.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
 
-DEP_INCLUDES := include/config.h include/bb_config.h
+DEP_INCLUDES := include/bb_config.h
 
 ifeq ($(strip $(CONFIG_BBCONFIG)),y)
 DEP_INCLUDES += include/bbconfigopts.h
@@ -401,25 +401,15 @@
 	$(disp_gen)
 	$(Q)$(RM_F) .depend
 	$(Q)mkdir -p include/config
-	$(Q)scripts/bb_mkdep -c include/config.h -c include/bb_config.h \
-			-I $(top_srcdir)/include $(top_srcdir) > $@.tmp
+	$(Q)scripts/bb_mkdep -I $(top_srcdir)/include $(top_srcdir) > $@.tmp
 	$(Q)mv $@.tmp $@
 
-include/config.h: .config
+include/bb_config.h: .config
 	@if [ ! -x $(top_builddir)/scripts/config/conf ] ; then \
 	    $(MAKE) -C scripts/config conf; \
 	fi;
 	@$(top_builddir)/scripts/config/conf -o $(CONFIG_CONFIG_IN)
 
-include/bb_config.h: include/config.h
-	@echo -e "#ifndef BB_CONFIG_H\n#define BB_CONFIG_H" > $@
-	@sed -e h -e 's/#undef CONFIG_\(.*\)/#define ENABLE_\1 0/p' -e g \
-	   -e 's/#undef CONFIG_\(.*\)/#define USE_\1(...)/p' -e g \
-	   -e 's/#define CONFIG_\([^ ]*\).*/#define ENABLE_\1 1/p' -e g -e \
-	   's/#define CONFIG_\([^ ]*\).*/#define USE_\1(...) __VA_ARGS__/p' \
-	   -e g $< >> $@
-	@echo "#endif" >> $@
-
 clean:
 	- $(MAKE) -C scripts/config $@
 	- $(RM_F) docs/busybox.dvi docs/busybox.ps \
diff --git a/include/.cvsignore b/include/.cvsignore
index 9c68c95..0bdc57d 100644
--- a/include/.cvsignore
+++ b/include/.cvsignore
@@ -1,2 +1,3 @@
 config
-config.h
+bb_config.h
+bbconfigopts.h
diff --git a/scripts/bb_mkdep.c b/scripts/bb_mkdep.c
index ca48c6a..a4f97c2 100644
--- a/scripts/bb_mkdep.c
+++ b/scripts/bb_mkdep.c
@@ -1,5 +1,5 @@
 /*
- * Another fast dependencies generator for Makefiles, Version 4.0
+ * Another fast dependencies generator for Makefiles, Version 4.1
  *
  * Copyright (C) 2005,2006 by Vladimir Oleynik <dzo@simtreas.ru>
  *
@@ -26,7 +26,7 @@
  *  - more verbose --help output.
  *
  * This program does:
- * 1) find #define KEY VALUE or #undef KEY from include/config.h
+ * 1) find #define KEY VALUE or #undef KEY from include/bb_config.h
  * 2) recursive find and scan *.[ch] files, but skips scan of include/config/
  * 3) find #include "*.h" and KEYs using, if not as #define and #undef
  * 4) generate dependencies to stdout
@@ -39,7 +39,7 @@
 
 #define LOCAL_INCLUDE_PATH          "include"
 #define INCLUDE_CONFIG_PATH         LOCAL_INCLUDE_PATH"/config"
-#define INCLUDE_CONFIG_KEYS_PATH    LOCAL_INCLUDE_PATH"/config.h"
+#define INCLUDE_CONFIG_KEYS_PATH    LOCAL_INCLUDE_PATH"/bb_config.h"
 
 #define bb_mkdep_full_options \
 "\nOptions:" \
@@ -308,7 +308,7 @@
 #define TOK_UMINUS tok_decl(UNARYPREC+1,0)
 #define TOK_UPLUS tok_decl(UNARYPREC+1,1)
 
-#define SPEC_PREC (UNARYPREC+1)
+#define SPEC_PREC (UNARYPREC+2)
 
 #define TOK_NUM tok_decl(SPEC_PREC, 0)
 #define TOK_RPAREN tok_decl(SPEC_PREC, 1)
@@ -521,13 +521,6 @@
 }
 
 
-/* Like strncpy but make sure the resulting string is always 0 terminated. */
-static inline char * safe_strncpy(char *dst, const char *src, size_t size)
-{
-	dst[size-1] = '\0';
-	return strncpy(dst, src, size-1);
-}
-
 static arith_t arith (const char *expr, int *perrcode)
 {
     char arithval;          /* Current character under analysis */
@@ -1400,7 +1393,10 @@
 		if(*val == '\0') {
 		    recordsz = sprintf(record_buf, "#define %s\n", k);
 		} else {
-		    recordsz = sprintf(record_buf, "#define %s %s\n", k, val);
+		    if(val[0] != '(')
+			recordsz = sprintf(record_buf, "#define %s %s\n", k, val);
+		    else
+			recordsz = sprintf(record_buf, "#define %s%s\n", k, val);
 		}
 	    }
 	    /* size_t -> ssize_t :( */
diff --git a/scripts/config/confdata.c b/scripts/config/confdata.c
index c4087fd..fa26293 100644
--- a/scripts/config/confdata.c
+++ b/scripts/config/confdata.c
@@ -279,6 +279,7 @@
 	char dirname[128], tmpname[128], newname[128];
 	int type, l;
 	const char *str;
+	const char *opt_name;
 
 	dirname[0] = 0;
 	if (name && name[0]) {
@@ -316,6 +317,7 @@
 		     "# Automatically generated make config: don't edit\n"
 		     "#\n");
 	if (out_h) {
+		fprintf(out_h, "#ifndef BB_CONFIG_H\n#define BB_CONFIG_H\n");
 		fprintf(out_h, "/*\n"
 			     " * Automatically generated header file: don't edit\n"
 			     " */\n\n"
@@ -367,14 +369,23 @@
 				if (modules_sym->curr.tri == no)
 					type = S_BOOLEAN;
 			}
+			opt_name = strchr(sym->name, '_');
+			if(opt_name == NULL)
+				opt_name = sym->name;
+			else
+				opt_name++;
 			switch (type) {
 			case S_BOOLEAN:
 			case S_TRISTATE:
 				switch (sym_get_tristate_value(sym)) {
 				case no:
 					fprintf(out, "# %s is not set\n", sym->name);
-					if (out_h)
+					if (out_h) {
 						fprintf(out_h, "#undef %s\n", sym->name);
+						fprintf(out_h, "#define ENABLE_%s 0\n", opt_name);
+						fprintf(out_h, "#define USE_%s(...)\n", opt_name);
+						fprintf(out_h, "#define UNUSE_%s(...)  __VA_ARGS__\n", opt_name);
+					}
 					break;
 				case mod:
 #if 0
@@ -385,8 +396,12 @@
 					break;
 				case yes:
 					fprintf(out, "%s=y\n", sym->name);
-					if (out_h)
+					if (out_h) {
 						fprintf(out_h, "#define %s 1\n", sym->name);
+						fprintf(out_h, "#define ENABLE_%s 1\n", opt_name);
+						fprintf(out_h, "#define USE_%s(...)  __VA_ARGS__\n", opt_name);
+						fprintf(out_h, "#define UNUSE_%s(...)\n", opt_name);
+					}
 					break;
 				}
 				break;
@@ -412,32 +427,47 @@
 					}
 				} while (*str);
 				fputs("\"\n", out);
-				if (out_h)
+				if (out_h) {
 					fputs("\"\n", out_h);
+					fprintf(out_h, "#define ENABLE_%s 1\n", opt_name);
+					fprintf(out_h, "#define USE_%s(...)  __VA_ARGS__\n", opt_name);
+					fprintf(out_h, "#define UNUSE_%s(...)\n", opt_name);
+				}
 				break;
 			case S_HEX:
 				str = sym_get_string_value(sym);
 				if (str[0] != '0' || (str[1] != 'x' && str[1] != 'X')) {
 					fprintf(out, "%s=%s\n", sym->name, *str ? str : "0");
-					if (out_h)
+					if (out_h) {
 						fprintf(out_h, "#define %s 0x%s\n", sym->name, str);
+						fprintf(out_h, "#define ENABLE_%s 1\n", opt_name);
+						fprintf(out_h, "#define USE_%s(...)  __VA_ARGS__\n", opt_name);
+						fprintf(out_h, "#define UNUSE_%s(...)\n", opt_name);
+					}
 					break;
 				}
 			case S_INT:
 				str = sym_get_string_value(sym);
 				fprintf(out, "%s=%s\n", sym->name, *str ? str : "0");
-				if (out_h)
+				if (out_h) {
 					fprintf(out_h, "#define %s %s\n", sym->name, str);
+					fprintf(out_h, "#define ENABLE_%s 1\n", opt_name);
+					fprintf(out_h, "#define USE_%s(...)  __VA_ARGS__\n", opt_name);
+					fprintf(out_h, "#define UNUSE_%s(...)\n", opt_name);
+				}
 				break;
 			}
+			if (out_h)
+				fprintf(out_h, "\n");
 		}
 next:
 		menu = next_menu(menu);
 	}
 	fclose(out);
 	if (out_h) {
+		fprintf(out_h, "#endif /* BB_CONFIG_H */\n");
 		fclose(out_h);
-		rename(".tmpconfig.h", "include/config.h");
+		rename(".tmpconfig.h", "include/bb_config.h");
 		file_write_dep(NULL);
 	}
 	if (!name || basename != conf_def_filename) {
