diff --git a/initramfs-init b/initramfs-init
index da7a464897206a2ecf473bddabe871cb8640286e..6e2c998e1dbf1cea63d2a10b9a59530d8b7da826 100755
--- a/initramfs-init
+++ b/initramfs-init
@@ -198,6 +198,13 @@ eend 0
 mount -t tmpfs tmpfs $NEWROOT
 
 # look for apkovl
+if dmesg | grep '^usb-storage: waiting' >/dev/null; then
+	ebegin "Waiting for USB device to settle"
+	while ! dmesg | grep 'usb-storage: device scan complete' >/dev/null; do
+		sleep 1
+	done
+	eend 0
+fi
 for i in usb floppy cdrom; do
 	mount /media/$i 2>/dev/null || continue
 	ovl=$(find_ovl /media/$i)
@@ -212,7 +219,7 @@ if [ -f "$ovl" ]; then
 	ebegin "Loading user settings from $ovl"
 	tar -C $NEWROOT -zxf "$ovl"
 	eend $?
-	umount /media/$i 2>/dev/null
+	umount /media/$i 2>/dev/null &
 	pkgs=$(sed 's/\#.*//' $NEWROOT/etc/lbu/packages.list 2>/dev/null)
 fi
 
@@ -255,9 +262,9 @@ cat /proc/mounts | while read DEV DIR TYPE OPTS ; do
 		mount -o move $DIR $NEWROOT/$DIR
 	fi
 done
+ln -sf /.modloop/modules $NEWROOT/lib/modules
 sync
 
-ln -sf /.modloop/modules $NEWROOT/lib/modules
 echo ""
 if [ -x $NEWROOT/sbin/init ]; then
 	exec /bin/busybox switch_root $NEWROOT $chart_init /sbin/init $KOPT_init_args