diff --git a/include/host.mk b/include/host.mk
index b6a58248fdb79f332ea9e60fc0bbf633469f3744..497d044503b3d53ba18d8d75d44e9021d1dca65c 100644
--- a/include/host.mk
+++ b/include/host.mk
@@ -6,7 +6,9 @@
 #
 
 TMP_DIR ?= $(TOPDIR)/tmp
--include $(TMP_DIR)/.host.mk
+ifndef DUMP
+  -include $(TMP_DIR)/.host.mk
+endif
 
 export TAR FIND
 
diff --git a/include/kernel-version.mk b/include/kernel-version.mk
index 45139a6a7765ee0e139fc8deb4666d72dc15c9ad..003fc085b38cbb9ba5588be63128e0fbec986f7f 100644
--- a/include/kernel-version.mk
+++ b/include/kernel-version.mk
@@ -38,6 +38,8 @@ endif
 # disable the md5sum check for unknown kernel versions
 LINUX_KERNEL_MD5SUM?=x
 
-KERNEL?=2.$(word 2,$(subst ., ,$(strip $(LINUX_VERSION))))
-KERNEL_PATCHVER=$(shell echo '$(LINUX_VERSION)' | cut -d. -f1,2,3 | cut -d- -f1)
+split_version=$(subst ., ,$(1))
+merge_version=$(subst $(space),.,$(1))
+KERNEL=$(call merge_version,$(wordlist 1,2,$(call split_version,$(LINUX_VERSION))))
+KERNEL_PATCHVER=$(call merge_version,$(wordlist 1,3,$(call split_version,$(LINUX_VERSION))))
 
diff --git a/include/package-dumpinfo.mk b/include/package-dumpinfo.mk
index f5f1200ba2c1b1e4ad9f0d2ba977d71d2f93c41f..f08788bbb17ce3d0940f5d9744491d10c90bd4c7 100644
--- a/include/package-dumpinfo.mk
+++ b/include/package-dumpinfo.mk
@@ -6,37 +6,48 @@
 #
 
 ifneq ($(DUMP),)
-  define Config
-    preconfig_$$(1) += echo "Preconfig: $(1)"; echo "Preconfig-Type: $(2)"; echo "Preconfig-Default: $(3)"; echo "Preconfig-Label: $(4)";
-  endef
 
-  define Dumpinfo
-    dumpinfo: dumpinfo-$(1)
-    .SILENT: dumpinfo-$(1)
-    dumpinfo-$(1): FORCE
-	  @echo "Package: $(1)" ; \
-		$(if $(MENU),echo "Menu: $(MENU)";) \
-		$(if $(SUBMENU),echo "Submenu: $(SUBMENU)";) \
-		$(if $(SUBMENUDEP),echo "Submenu-Depends: $(SUBMENUDEP)";) \
-		$(if $(DEFAULT),echo "Default: $(DEFAULT)";)  \
-		if [ "$$$$PREREQ_CHECK" = 1 ]; then echo "Prereq-Check: 1"; fi; \
-		echo "Version: $(VERSION)"; \
-		echo "Depends: $(DEPENDS)"; \
-		echo "Provides: $(PROVIDES)"; \
-		echo "Build-Depends: $(PKG_BUILD_DEPENDS)"; \
-		echo "Section: $(SECTION)"; \
-		echo "Category: $(CATEGORY)"; \
-		echo "Title: $(TITLE)"; \
-		echo "Maintainer: $(MAINTAINER)"; \
-		echo "Source: $(PKG_SOURCE)"; \
-		echo "Type: $(if $(Package/$(1)/targets),$(Package/$(1)/targets),$(if $(PKG_TARGETS),$(PKG_TARGETS),ipkg))"; \
-		$(if $(KCONFIG),echo "Kernel-Config: $(KCONFIG)";) \
-		$(if $(BUILDONLY),echo "Build-Only: $(BUILDONLY)";) \
-		echo -n "Description: "; \
-		getvar $(call shvar,Package/$(1)/description); \
-		$(if $(URL),echo;echo "$(URL)";) \
-		echo "@@" ; \
-		$$(if $$(Package/$(1)/config),echo "Config: "; getvar $(call shvar,Package/$(1)/config); echo "@@"; ) \
-		$$(if $$(preconfig_$(1)),$$(preconfig_$(1)) echo "")
+dumpinfo: FORCE
+
+define Config/template
+Preconfig: $(1)
+Preconfig-Type: $(2)
+Preconfig-Default: $(3)
+Preconfig-Label: $(4)
+
+endef
+
+define Config
+  Preconfig/$(1) = $$(call Config/template,$(1),$(2),$(3),$(4))
+  preconfig_$$(1) += $(1)
+endef
+
+define Dumpinfo
+$(info Package: $(1)
+$(if $(MENU),Menu: $(MENU)
+)$(if $(SUBMENU),Submenu: $(SUBMENU)
+)$(if $(SUBMENUDEP),Submenu-Depends: $(SUBMENUDEP)
+)$(if $(DEFAULT),Default: $(DEFAULT)
+)$(if $(findstring $(PREREQ_CHECK),1),Prereq-Check: 1
+)Version: $(VERSION)
+Depends: $(DEPENDS)
+Provides: $(PROVIDES)
+Build-Depends: $(PKG_BUILD_DEPENDS)
+Section: $(SECTION)
+Category: $(CATEGORY)
+Title: $(TITLE)
+Maintainer: $(MAINTAINER)
+Source: $(PKG_SOURCE)
+Type: $(if $(Package/$(1)/targets),$(Package/$(1)/targets),$(if $(PKG_TARGETS),$(PKG_TARGETS),ipkg))
+$(if $(KCONFIG),Kernel-Config: $(KCONFIG)
+)$(if $(BUILDONLY),Build-Only: $(BUILDONLY)
+)Description: $(if $(Package/$(1)/description),$(Package/$(1)/description),$(TITLE))
+$(if $(URL),$(URL)
+)@@
+$(if $(Package/$(1)/config),Config:
+$(Package/$(1)/config)
+@@
+)$(foreach pc,$(preconfig_$(1)),
+$(Preconfig/$(pc))))
   endef
 endif
diff --git a/include/quilt.mk b/include/quilt.mk
index 71fee06f14a36680ba4d93f054220ca20926bba9..c5245a8aeecbdc3baab7d112855eed48b6568fc4 100644
--- a/include/quilt.mk
+++ b/include/quilt.mk
@@ -3,9 +3,8 @@
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
-#
 
-ifneq ($(__quilt_inc),1)
+ifneq ($(if $(DUMP),1,$(__quilt_inc)),1)
 __quilt_inc:=1
 
 ifeq ($(TARGET_BUILD),1)
diff --git a/include/target.mk b/include/target.mk
index ee373aa19e0de3926c5934ed1a128980aefc05e4..d3c149aa18ab46797c645f6f6734ab1838355ba9 100644
--- a/include/target.mk
+++ b/include/target.mk
@@ -40,9 +40,11 @@ TARGETID:=$(BOARD)$(if $(SUBTARGET),/$(SUBTARGET))
 PLATFORM_SUBDIR:=$(PLATFORM_DIR)$(if $(SUBTARGET),/$(SUBTARGET))
 
 ifneq ($(TARGET_BUILD),1)
-  include $(PLATFORM_DIR)/Makefile
-  ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR))
-    include $(PLATFORM_SUBDIR)/target.mk
+  ifndef DUMP
+    include $(PLATFORM_DIR)/Makefile
+    ifneq ($(PLATFORM_DIR),$(PLATFORM_SUBDIR))
+      include $(PLATFORM_SUBDIR)/target.mk
+    endif
   endif
 else
   ifneq ($(SUBTARGET),)
@@ -102,7 +104,9 @@ endif
 
 $(eval $(call shexport,Target/Description))
 
-include $(INCLUDE_DIR)/kernel-version.mk
+ifneq ($(TARGET_BUILD)$(if $(DUMP),,1),)
+  include $(INCLUDE_DIR)/kernel-version.mk
+endif
 
 GENERIC_PLATFORM_DIR := $(TOPDIR)/target/linux/generic-$(KERNEL)
 GENERIC_PATCH_DIR := $(GENERIC_PLATFORM_DIR)/patches$(shell [ -d "$(GENERIC_PLATFORM_DIR)/patches-$(KERNEL_PATCHVER)" ] && printf -- "-$(KERNEL_PATCHVER)" || true )
diff --git a/rules.mk b/rules.mk
index 1bd8667fda44eb828e8dfd3926d7054d226fcc4b..1ccaf41595e64012da0e5a4b82e9a54e739b495c 100644
--- a/rules.mk
+++ b/rules.mk
@@ -73,6 +73,7 @@ TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include
 TARGET_LDFLAGS:=-L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib
 LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-lgcc_s,$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a))
 
+ifndef DUMP
 ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
   -include $(TOOLCHAIN_DIR)/info.mk
   REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))
@@ -80,6 +81,7 @@ ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
   TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-)
   TARGET_CFLAGS+= -fhonour-copts
 endif
+endif
 
 ifeq ($(CONFIG_SOFT_FLOAT),y)
   SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft