diff --git a/config/grub/config/grub.cfg b/config/grub/config/grub.cfg
index 7935560cb468dca2cc7e1e4434321c53f28720b3..478a6e80b0e542fec179eb7644d57ef144cf5621 100644
--- a/config/grub/config/grub.cfg
+++ b/config/grub/config/grub.cfg
@@ -68,14 +68,14 @@ function list_pmedia {
 				done
 		done
 	done
-	echo $tgt_medias
+	#echo $tgt_medias
 }
 
 set lvmnames="crypt-bootvol crypt-rootvol crypt-boot crypt-root grubcrypt-bootvol grubcrypt-rootvol"
 
 # Fills a variable containing possible partition list from a specified and previously detected logic media kind
 function list_lmedia {
-	  unset tgt_medias
+	unset tgt_medias
 	for media_item in $media_devlist; do
 		for device_kind in ${1}; do
 			for num in ${lvmnames}; do
@@ -85,18 +85,40 @@ function list_lmedia {
 			done
 		done
 	done
-	  echo $tgt_medias
+	#echo $tgt_medias
+}
+
+# Create menuitems that boot any valid previously detected media
+function make_boot_menus {
+	for i in ${tgt_medias}; do
+		grub_create_menu ${i}
+		echo -n "."
+	done
+	echo
 }
 
-mediadetect
+# Scan every physical media to make boot menus
+function scan_p_media_menus {
+	for i in ata ahci usb fd; do
+		echo -n "Scanning ${i}"
+		list_pmedia ${i}
+		make_boot_menus
+	done
+}
+
+# Scan every logical media to make boot menus
+function scan_l_media_menus {
+	for i in lvm md; do
+		echo -n "Scanning ${i}"
+		list_lmedia ${i}
+		make_boot_menus
+	done
+}
 
-menuentry "Media detection test" {
-cryptomount -a -p assword
-#list_pmedia ata
-list_lmedia lvm
-for i in ${tgt_medias}; do
-	grub_create_menu ${i}
-done
+menuentry "List all bootable medias" {
+	mediadetect
+	scan_p_media_menus
+	scan_l_media_menus
 }
 
 # FIXME Make an automatic override for BTRFS directories instead of copypasting with a "@/" in front of every element
@@ -106,24 +128,29 @@ set grub_dirs="boot grub grub2 boot/grub boot/grub2 @/boot @/grub @/grub2 @/boot
 # Default list of GRUB possible config files prefixes
 set grub_conf_names="'' osboot_ autoboot_ libreboot_ coreboot_"
 
+# Creates a menuentry for GRUB. First argument is menu text without spaces then root and configfile
+function grub_menuentry {
+	menuentry ${1} ${2} ${3} {
+		set root="${2}"
+		unset superusers
+		configfile ${3}
+	}
+}
+
 function grub_create_menu {
-	echo "[GRUB] Looking on ${1}"
 	set root="${1}"
-	# The @/... entries are for cases where the BTRFS filesystem is being used
+	if [ ! -d / ]; then # Root is invalid: maybe unknown FS or encrypted one
+		cryptomount ${1}
+		return;
+	fi
 	for dir in ${grub_dirs}; do
 		# In order to save time, we do not attempt anything on non existing directory.
-		if [ -d / ]; then
-			if [ -d /"${dir}"/ ]; then
-			for name in '' ${grub_conf_names}; do
-				if [ -f /"${dir}"/"${name}"grub.cfg ]; then
-					menuentry "${1} load GRUB" ${1} /"${dir}"/"${name}"grub.cfg {
-						set root="${2}"
-						unset superusers
-						configfile ${3}
-					}
-				fi
-			done
+		if [ -d /"${dir}"/ ]; then
+		for name in '' ${grub_conf_names}; do
+			if [ -f /"${dir}"/"${name}"grub.cfg ]; then
+				grub_menuentry ${1}:GRUB ${1} /${dir}/${name}grub.cfg
 			fi
+		done
 		fi
 	done
 }