diff --git a/Makefile b/Makefile
index 03a0332c6d6455a1a7f04ae52bde1bf9323f06e0..ffce8d555778419bf2632009f3e5ae1cf33f214e 100644
--- a/Makefile
+++ b/Makefile
@@ -172,14 +172,15 @@ feeds: FORCE
 	+$(GLUONMAKE) refresh_feeds V=s$(OPENWRT_VERBOSE)
 
 config: FORCE
-	echo \
-		'CONFIG_TARGET_$(BOARD)=y' \
-		'CONFIG_TARGET_ROOTFS_JFFS2=n' \
-		'CONFIG_BUSYBOX_CONFIG_SHA512SUM=y' \
-		'CONFIG_ATH_USER_REGD=y' \
-		'$(patsubst %,CONFIG_PACKAGE_%=m,$(sort $(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES) $(PROFILE_PACKAGES)))' \
-		| sed -e 's/ /\n/g' > .config
-	$(_SINGLE)$(SUBMAKE) defconfig OPENWRT_BUILD=
+	( \
+		cat $(GLUONDIR)/include/config $(GLUONDIR)/targets/$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))/config; \
+		echo '$(patsubst %,CONFIG_PACKAGE_%=m,$(sort $(filter-out -%,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES) $(PROFILE_PACKAGES))))' \
+			| sed -e 's/ /\n/g'; \
+	) > $(BOARD_BUILDDIR)/config
+	+$(NO_TRACE_MAKE) scripts/config/conf
+	scripts/config/conf -D $(BOARD_BUILDDIR)/config -w $(BOARD_BUILDDIR)/config Config.in
+
+	ln -sf $(BOARD_BUILDDIR)/config .config
 
 .config:
 	+$(GLUONMAKE) config
diff --git a/include/config b/include/config
new file mode 100644
index 0000000000000000000000000000000000000000..35d6c5133c3745d95782e1fce559b872c8b6f4f9
--- /dev/null
+++ b/include/config
@@ -0,0 +1,2 @@
+CONFIG_BUSYBOX_CONFIG_SHA512SUM=y
+CONFIG_ATH_USER_REGD=y
diff --git a/targets/ar71xx-generic/config b/targets/ar71xx-generic/config
new file mode 100644
index 0000000000000000000000000000000000000000..e8c1f032f823460810af496fb8a327dd2a7899a7
--- /dev/null
+++ b/targets/ar71xx-generic/config
@@ -0,0 +1,2 @@
+CONFIG_TARGET_ar71xx=y
+CONFIG_TARGET_ROOTFS_JFFS2=n