diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 81c334b..b2b6fcd 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -80,6 +80,7 @@ KERNEL_ALT_IMAGETYPE ??= ""
 # Define where the kernel headers are installed on the target as well as where
 # they are staged.
 KERNEL_SRC_PATH = "/usr/src/kernel"
+UNPRUNED_KERNEL_SRC_PATH = "/usr/src/kernel-unpruned"
 
 KERNEL_IMAGETYPE_FOR_MAKE = "${@(lambda s: s[:-3] if s[-3:] == ".gz" else s)(d.getVar('KERNEL_IMAGETYPE', True))}"
 
@@ -135,7 +136,9 @@ kernel_do_install() {
 	# kernel source tree.
 	#
 	kerneldir=${D}${KERNEL_SRC_PATH}
+	unrprunedkerneldir=${D}${UNPRUNED_KERNEL_SRC_PATH}
 	install -d $kerneldir
+	install -d $unrprunedkerneldir
 
 	#
 	# Store the kernel version in sysroots for module-base.bbclass
@@ -176,7 +179,6 @@ kernel_do_install() {
 	# and include files.
 	#
 	oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
-	make -C $kerneldir _mrproper_scripts
 	find $kerneldir -path $kerneldir/lib -prune -o -path $kerneldir/tools -prune -o -path $kerneldir/scripts -prune -o -name "*.[csS]" -exec rm '{}' \;
 	find $kerneldir/Documentation -name "*.txt" -exec rm '{}' \;
 
@@ -186,6 +188,9 @@ kernel_do_install() {
 	if [ ${ARCH} = "powerpc" ]; then
 		cp arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o
 	fi
+	# make a copy of unpruned kernel tree
+	cp -fR $kerneldir/* $unrprunedkerneldir
+	make -C $kerneldir _mrproper_scripts
 
 	# Remove the following binaries which cause strip or arch QA errors
 	# during do_package for cross-compiled platforms
@@ -197,8 +202,14 @@ kernel_do_install() {
 	done
 }
 
+PACKAGE_PREPROCESS_FUNCS += "kernel_package_preprocess"
+
+kernel_package_preprocess () {
+	rm -rf ${PKGD}/${UNPRUNED_KERNEL_SRC_PATH}
+}
+
 sysroot_stage_all_append() {
-	sysroot_stage_dir ${D}${KERNEL_SRC_PATH} ${SYSROOT_DESTDIR}${KERNEL_SRC_PATH}
+	sysroot_stage_dir ${D}${UNPRUNED_KERNEL_SRC_PATH} ${SYSROOT_DESTDIR}${KERNEL_SRC_PATH}
 }
 
 kernel_do_configure() {
