diff --git a/config/grub/config/grub.cfg b/config/grub/config/grub.cfg
index 364a4caf30e53ee769f6218f0d17d3627848f65c..4395c5b6fac2e30782ec6db1c4b49d1fd4cc2fd6 100644
--- a/config/grub/config/grub.cfg
+++ b/config/grub/config/grub.cfg
@@ -60,100 +60,9 @@ fi
 
 # Default enums for non detectable medias. Override as you like, eventually.
 set partnums="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20"
+export partnums
 set medianums="20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0"
-
-# Loads into a variable all the medias from *
-function mediadetect {
-	unset media_devlist
-	set media_devlist=*
-}
-
-# Fills a variable containing possible partition list from a specified and previously detected physical media kind
-function list_pmedia {
-	unset tgt_medias
-	for media_item in ${media_devlist}; do
-		for device_kind in ${1}; do
-				for num in $medianums; do
-				# If media number is an existent detected media
-					if [ $media_item == "($device_kind$num)" ]; then
-					# Add raw media
-						tgt_medias="${tgt_medias} (${device_kind}${num})"
-					# Add every possible partition
-						for part in ${partnums}; do
-								tgt_medias="${tgt_medias} (${device_kind}${num},${part})"
-						done
-					fi
-				done
-		done
-	done
-	#echo $tgt_medias
-}
-
-# List of encrypted medias
-set lvm_crypt="crypt grubcrypt debian devuan"
-# List of logical volumes
-set lvm_volumes="boot root bootvol rootvol"
-
-# Fill LVM search list with every possible combination of media and volume
-set lvmnames=""
-for i in ${lvm_crypt}; do
-	for j in ${lvm_volumes}; do
-		lvmnames="${lvmnames} ${i}-${j}"
-	done
-done
-
-# Fills a variable containing possible partition list from a specified and previously detected logic media kind
-function list_lmedia {
-	unset tgt_medias
-	for media_item in $media_devlist; do
-		for device_kind in ${1}; do
-			for num in ${lvmnames}; do
-				if [ $media_item == "($device_kind/$num)" ]; then
-					tgt_medias="${tgt_medias} (${device_kind}/${num})"
-				fi
-			done
-		done
-	done
-	#echo $tgt_medias
-}
-
-# Create menuitems that boot any valid previously detected media
-function make_boot_menus {
-	for i in ${tgt_medias}; do
-		test -e ${i}
-		if [ $? == 0 ]; then # Media exists so we search there
-			grub_create_menu ${i} # Look for grub entries in known directories
-			isolinux_create_menu ${i}
-		fi
-		echo -n "."
-	done
-	echo
-}
-
-# Scan every physical media to make boot menus
-function scan_p_media_menus {
-	for i in ata ahci usb crypto 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 "List all bootable medias" {
-	mediadetect
-	cryptomount -a
-	scan_p_media_menus
-	scan_l_media_menus
-}
+export medianums
 
 # Default list of GRUB possible directories. The @/... entries are for cases where the BTRFS filesystem is being used
 set grub_dirs="" # Complete list of every possible grub directory, automatically filled later
@@ -170,33 +79,11 @@ for i in '' ${grub_dir_super}; do
 		done
 	done
 done
+export grub_dirs
 
 # 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 "Boot GRUB from $1" ${1} ${2} ${3} {
-		set root="${2}"
-		unset superusers
-		configfile ${3}
-	}
-}
-
-function grub_create_menu {
-	set root="${1}"
-	for dir in ${grub_dirs}; do
-		# In order to save time, we do not attempt anything on non existing directory.
-		if [ -d /"${dir}"/ ]; then
-		for name in '' ${grub_conf_names}; do
-			if [ -f /"${dir}"/"${name}"grub.cfg ]; then
-				grub_menuentry ${1} /${dir}/${name}grub.cfg
-			fi
-		done
-		fi
-	done
-}
-
 function try_user_grub_config {
 	set root="${1}"
 	for dir in ${grub_dirs}; do
@@ -239,40 +126,7 @@ for i in '' ${isolinux_dir_super}; do
 		done
 	done
 done
-
-# Creates a menuentry for ISOLINUX. First argument is menu text without spaces then root and configfile
-function isolinux_menuentry {
-	menuentry "Boot ISOLINUX from $1" ${1} ${2} ${3} {
-		set root="${2}"
-		syslinux_configfile -i ${3}
-	}
-}
-
-# Pretty same as above function
-function syslinux_menuentry {
-	menuentry "Boot SYSLINUX from $1" ${1} ${2} ${3} {
-		set root="${2}"
-		syslinux_configfile -s ${3}
-	}
-}
-
-function isolinux_create_menu {
-	set root="${1}"
-	for dir in ${isolinux_dirs}; do
-		# In order to save time, we do not attempt anything on non existing directory.
-		if [ -d /"${dir}"/ ]; then
-			if [ -f "${dir}"/isolinux/isolinux.cfg ]; then
-				isolinux_menuentry ${1} "${dir}"/isolinux/isolinux.cfg
-			elif [ -f "${dir}"/syslinux/syslinux.cfg ]; then
-				syslinux_menuentry ${1} "${dir}"/syslinux/syslinux.cfg
-			elif [ -f "${dir}"/syslinux/extlinux.conf ]; then
-				syslinux_menuentry ${1} "${dir}"/syslinux/extlinux.conf
-			elif [ -f "${dir}"/extlinux/extlinux.conf ]; then
-				syslinux_menuentry ${1} "${dir}"/extlinux/extlinux.conf
-			fi
-		fi
-	done
-}
+export isolinux_dirs
 
 function try_isolinux_config {
 	set root="${1}"
@@ -377,6 +231,9 @@ menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on AHCI  [a]' --hotkey='a'
 menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on ATA/IDE  [d]' --hotkey='d' {
 	search_bootcfg ahci
 }
+menuentry "List all bootable medias  [l]" --hotkey='l' {
+	configfile (memdisk)/boot/grub/mdet.cfg
+}
 if [ -f (cbfsdisk)/grubtest.cfg ]; then
 menuentry 'Load test configuration (grubtest.cfg) inside of CBFS  [t]' --hotkey='t' {
 	set root='(cbfsdisk)'
diff --git a/config/grub/config/mdet.cfg b/config/grub/config/mdet.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..6a81dc584df9ecc53db06fb2980f863bd9350193
--- /dev/null
+++ b/config/grub/config/mdet.cfg
@@ -0,0 +1,147 @@
+# Loads into a variable all the medias from *
+function mediadetect {
+	unset media_devlist
+	set media_devlist=*
+}
+
+# Fills a variable containing possible partition list from a specified and previously detected physical media kind
+function list_pmedia {
+	unset tgt_medias
+	for media_item in ${media_devlist}; do
+		for device_kind in ${1}; do
+				for num in $medianums; do
+				# If media number is an existent detected media
+					if [ $media_item == "($device_kind$num)" ]; then
+					# Add raw media
+						tgt_medias="${tgt_medias} (${device_kind}${num})"
+					# Add every possible partition
+						for part in ${partnums}; do
+								tgt_medias="${tgt_medias} (${device_kind}${num},${part})"
+						done
+					fi
+				done
+		done
+	done
+	#echo $tgt_medias
+}
+
+# List of encrypted medias
+set lvm_crypt="crypt grubcrypt debian devuan"
+# List of logical volumes
+set lvm_volumes="boot root bootvol rootvol"
+
+# Fill LVM search list with every possible combination of media and volume
+set lvmnames=""
+for i in ${lvm_crypt}; do
+	for j in ${lvm_volumes}; do
+		lvmnames="${lvmnames} ${i}-${j}"
+	done
+done
+
+# Fills a variable containing possible partition list from a specified and previously detected logic media kind
+function list_lmedia {
+	unset tgt_medias
+	for media_item in $media_devlist; do
+		for device_kind in ${1}; do
+			for num in ${lvmnames}; do
+				if [ $media_item == "($device_kind/$num)" ]; then
+					tgt_medias="${tgt_medias} (${device_kind}/${num})"
+				fi
+			done
+		done
+	done
+	#echo $tgt_medias
+}
+
+# Create menuitems that boot any valid previously detected media
+function make_boot_menus {
+	for i in ${tgt_medias}; do
+		test -e ${i}
+		if [ $? == 0 ]; then # Media exists so we search there
+			grub_create_menu ${i} # Look for grub entries in known directories
+			isolinux_create_menu ${i}
+		fi
+		echo -n "."
+	done
+	echo
+}
+
+# Scan every physical media to make boot menus
+function scan_p_media_menus {
+	for i in ata ahci usb crypto 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
+}
+
+# Creates a menuentry for GRUB. First argument is menu text without spaces then root and configfile
+function grub_menuentry {
+	menuentry "Boot GRUB from $1" ${1} ${2} ${3} {
+		set root="${2}"
+		unset superusers
+		configfile ${3}
+	}
+}
+
+function grub_create_menu {
+	set root="${1}"
+	for dir in ${grub_dirs}; do
+		# In order to save time, we do not attempt anything on non existing directory.
+		if [ -d /"${dir}"/ ]; then
+		for name in '' ${grub_conf_names}; do
+			if [ -f /"${dir}"/"${name}"grub.cfg ]; then
+				grub_menuentry ${1} /${dir}/${name}grub.cfg
+			fi
+		done
+		fi
+	done
+}
+
+# Creates a menuentry for ISOLINUX. First argument is menu text without spaces then root and configfile
+function isolinux_menuentry {
+	menuentry "Boot ISOLINUX from $1" ${1} ${2} ${3} {
+		set root="${2}"
+		syslinux_configfile -i ${3}
+	}
+}
+
+# Pretty same as above function
+function syslinux_menuentry {
+	menuentry "Boot SYSLINUX from $1" ${1} ${2} ${3} {
+		set root="${2}"
+		syslinux_configfile -s ${3}
+	}
+}
+
+function isolinux_create_menu {
+	set root="${1}"
+	for dir in ${isolinux_dirs}; do
+		# In order to save time, we do not attempt anything on non existing directory.
+		if [ -d /"${dir}"/ ]; then
+			if [ -f "${dir}"/isolinux/isolinux.cfg ]; then
+				isolinux_menuentry ${1} "${dir}"/isolinux/isolinux.cfg
+			elif [ -f "${dir}"/syslinux/syslinux.cfg ]; then
+				syslinux_menuentry ${1} "${dir}"/syslinux/syslinux.cfg
+			elif [ -f "${dir}"/syslinux/extlinux.conf ]; then
+				syslinux_menuentry ${1} "${dir}"/syslinux/extlinux.conf
+			elif [ -f "${dir}"/extlinux/extlinux.conf ]; then
+				syslinux_menuentry ${1} "${dir}"/extlinux/extlinux.conf
+			fi
+		fi
+	done
+}
+
+mediadetect
+cryptomount -a
+scan_p_media_menus
+scan_l_media_menus
diff --git a/script/build/roms b/script/build/roms
index a90e1daa0542f42105a2749f9aa81263396da3ed..db7bcce90ed86a203222d78e5602e1220ec6572a 100755
--- a/script/build/roms
+++ b/script/build/roms
@@ -163,7 +163,8 @@ build_grub_payload()
 	    --modules="${grub_modules}" \
 	    --install-modules="${grub_install_modules}" \
 	    "/boot/grub/grub.cfg=${grubcfgsdir}/config/grub_memdisk.cfg" \
-	    "/boot/grub/grub_default.cfg=${grubcfgsdir}/config/grub.cfg" || \
+	    "/boot/grub/grub_default.cfg=${grubcfgsdir}/config/grub.cfg" \
+	    "/boot/grub/mdet.cfg=${grubcfgsdir}/config/mdet.cfg" || \
 	    $err "could not generate grub.elf"
 }