diff -Nurp genkernel-3.4.10.906.orig/defaults/initrd.scripts genkernel-3.4.10.906/defaults/initrd.scripts
--- genkernel-3.4.10.906.orig/defaults/initrd.scripts	2009-08-11 18:42:31.669397498 +0200
+++ genkernel-3.4.10.906/defaults/initrd.scripts	2009-08-11 19:16:22.161397604 +0200
@@ -195,6 +195,13 @@ mount_sysfs() {
 	[ "$ret" -eq '0' ] || bad_msg "Failed to mount /sys!"
 }
 
+aufs_setup_dir() {
+	mount -t aufs -o "br:$OVERLAY=rw:$2=ro" -- aufs $1
+	if [ "$?" -eq '0' ]; then
+		good_msg "Addition of $2 to $OVERLAY merged into $1"
+	fi
+}
+
 findnfsmount() {
 	if [ "${IP}" != '' ] || busybox udhcpc -n -T 15 -q
 	then
@@ -378,9 +385,10 @@ setup_hotplug() {
 
 check_slowusb() {
 	[ "${DO_slowusb}" ] || \
-	for dir in /sys/bus/usb/drivers/usb-storage/*
+	for x in /sys/bus/usb/drivers/usb-storage/*
 	do
-		[ -d "${dir}" ] && FORCE_slowusb="1"
+		[ -d "${x}" ]  && [ "${x}" != "/sys/bus/usb/drivers/usb-storage/module" ] \
+			&& FORCE_slowusb="1"
 	done
 }
 
@@ -388,9 +396,7 @@ start_dev_mgr() {
 	if [ "${KV_2_6_OR_GREATER}" ]
 	then
 		cd /sys
-		[ "${DO_slowusb}" ] && sdelay
 		check_slowusb
-		[ "${FORCE_slowusb}" ] && sdelay
 		good_msg 'Activating mdev'
 		runmdev
 		[ "${DO_slowusb}" ] || \
@@ -928,6 +934,34 @@ getdvhoff() {
 	echo $(( $(hexdump -n 4 -s $((316 + 12 * $2)) -e '"%i"' $1) * 512))
 }
 
+setup_aufs() {
+
+	# Directory used for rw changes in union mount filesystem
+	UNION=/aufs
+	OVERLAY=/overlay
+
+	mkdir -p "${UNION}"
+	mkdir -p "${OVERLAY}"
+	mount -t tmpfs none "${OVERLAY}"
+	good_msg "Loading aufs module (if module)"
+	modprobe aufs > /dev/null 2>&1
+
+	aufs_setup_dir "${UNION}" "${NEW_ROOT}/${FS_LOCATION}"
+
+	# setup internal mounts
+	mkdir -p "${UNION}/mnt/livecd"
+	if [ ! -e "${UNION}/mnt/cdrom" ]; then
+		mkdir "${UNION}/mnt/cdrom" -p
+	fi
+	mount --bind "${NEW_ROOT}/${FS_LOCATION}" "${UNION}/mnt/livecd"
+	mount --bind "${NEW_ROOT}/mnt/cdrom" "${UNION}/mnt/cdrom"
+
+	# Make sure fstab notes livecd is mounted ro.  Makes system skip remount which fails on aufs $
+	sed -e 's|\(.*\s/\s*tmpfs\s*\)defaults\(.*\)|\1defaults,ro\2|' "/${UNION}/etc/fstab" > "/${UNION}/etc/fstab.new"
+	mv "/${UNION}/etc/fstab.new" "/${UNION}/etc/fstab"
+
+}
+
 setup_unionfs() {
 	local rw_dir=$1
 	local ro_dir=$2
diff -Nurp genkernel-3.4.10.906.orig/defaults/linuxrc genkernel-3.4.10.906/defaults/linuxrc
--- genkernel-3.4.10.906.orig/defaults/linuxrc	2009-02-04 14:30:48.000000000 +0100
+++ genkernel-3.4.10.906/defaults/linuxrc	2009-08-11 19:19:48.949397441 +0200
@@ -191,6 +191,9 @@ do
 				USE_UNIONFS_NORMAL=1
 			fi
 			;;
+		aufs)
+			USE_AUFS_NORMAL=1
+		;;
 		nounionfs)
 			USE_UNIONFS_NORMAL=0
 			;;
@@ -587,7 +588,13 @@ then
 	fi
 
 
-	if [ "${USE_UNIONFS_NORMAL}" = '1' ]
+	if [ "${USE_AUFS_NORMAL}" -eq '1' ]
+	then
+		good_msg 'Setting up aufs mounts'
+		setup_aufs
+		CHROOT="${UNION}"
+
+	elif [ "${USE_UNIONFS_NORMAL}" = '1' ]
 	then
 		setup_unionfs ${NEW_ROOT} ${NEW_ROOT}/${FS_LOCATION}
 		CHROOT=/union
@@ -636,10 +643,6 @@ then
 		fi
 	done
 
-	if [ "${DO_slowusb}" ] || [ "${FORCE_slowusb}" ]
-	then
-		sleep 10
-	fi
 	mkdir initramfs proc tmp sys 2>/dev/null
 	chmod 1777 tmp
 
@@ -668,6 +671,11 @@ else
 		setup_unionfs /union_changes ${NEW_ROOT}
 		mkdir -p ${UNION}/tmp/.initrd
 	fi
+	if [ "${USE_AUFS_NORMAL}" -eq '1' ]
+	then
+		setup_aufs
+		mkdir -p ${UNION}/tmp/.initrd
+	fi
 fi
 
 # Execute script on the cdrom just before boot to update things if necessary