diff --git a/configs/udoo_defconfig b/configs/udoo_defconfig
index a4a17c161..88a863337 100644
--- a/configs/udoo_defconfig
+++ b/configs/udoo_defconfig
@@ -30,3 +30,4 @@ CONFIG_CMD_FS_GENERIC=y
 CONFIG_DM=y
 CONFIG_DM_THERMAL=y
 CONFIG_OF_LIBFDT=y
+CONFIG_IDENT_STRING=" Parabola GNU/Linux-libre"
diff --git a/include/configs/udoo.h b/include/configs/udoo.h
index 0a7767c20..543993731 100644
--- a/include/configs/udoo.h
+++ b/include/configs/udoo.h
@@ -51,6 +51,9 @@
 
 /* Command definition */
 #define CONFIG_CMD_BMODE
+#define CONFIG_PARTITION_UUIDS
+#define CONFIG_CMD_PART
+#define CONFIG_SUPPORT_RAW_INITRD
 
 #define CONFIG_SYS_MEMTEST_START	0x10000000
 #define CONFIG_SYS_MEMTEST_END		(CONFIG_SYS_MEMTEST_START + 500 * SZ_1M)
@@ -60,8 +63,13 @@
 
 #define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
 
+/* Enable Extlinux boot support */
+#define CONFIG_CMD_PXE
+#define CONFIG_MENU
+#define BOOT_TARGET_DEVICES(func)
+#include <config_distro_bootcmd.h>
+
 #define CONFIG_EXTRA_ENV_SETTINGS \
-	"script=boot.scr\0" \
 	"image=zImage\0" \
 	"console=ttymxc1\0" \
 	"splashpos=m,m\0" \
@@ -69,47 +77,54 @@
 	"initrd_high=0xffffffff\0" \
 	"fdt_file=undefined\0" \
 	"fdt_addr=0x18000000\0" \
-	"boot_fdt=try\0" \
+	"rdaddr=0x12A00000\0" \
+	"rdfile=initramfs-linux.img\0" \
+	"optargs=\0" \
+	"video=\0" \
 	"ip_dyn=yes\0" \
+	"devtype=mmc\0" \
+	"devnum=0\0" \
 	"mmcdev=0\0" \
 	"mmcpart=1\0" \
-	"mmcroot=/dev/mmcblk0p2 rootwait rw\0" \
-	"update_sd_firmware_filename=u-boot.imx\0" \
-	"update_sd_firmware=" \
-		"if test ${ip_dyn} = yes; then " \
-			"setenv get_cmd dhcp; " \
-		"else " \
-			"setenv get_cmd tftp; " \
-		"fi; " \
-		"if mmc dev ${mmcdev}; then "	\
-			"if ${get_cmd} ${update_sd_firmware_filename}; then " \
-				"setexpr fw_sz ${filesize} / 0x200; " \
-				"setexpr fw_sz ${fw_sz} + 1; "	\
-				"mmc write ${loadaddr} 0x2 ${fw_sz}; " \
-			"fi; "	\
-		"fi\0" \
 	"mmcargs=setenv bootargs console=${console},${baudrate} " \
-		"root=${mmcroot}\0" \
-	"loadbootscript=" \
-		"load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
-	"bootscript=echo Running bootscript from mmc ...; " \
-		"source\0" \
-	"loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
-	"loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
-	"mmcboot=echo Booting from mmc ...; " \
-		"run mmcargs; " \
-		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
-			"if run loadfdt; then " \
-				"bootz ${loadaddr} - ${fdt_addr}; " \
-			"else " \
-				"if test ${boot_fdt} = try; then " \
-					"bootz; " \
-				"else " \
-					"echo WARN: Cannot load the DT; " \
-				"fi; " \
+		"${optargs} " \
+		"root=${root} " \
+		"video=${video}\0" \
+	"loadimage=echo Loading /boot/${image}..; load mmc ${mmcdev}:${mmcpart} ${loadaddr} /boot/${image}\0" \
+	"loadfdt=echo Loading /boot/dtbs/${fdt_file}..; load mmc ${mmcdev}:${mmcpart} ${fdt_addr} /boot/dtbs/${fdt_file}\0" \
+	"loadrd=load mmc ${bootpart} ${rdaddr} /boot/${rdfile}\0" \
+	"mmcboot=mmc dev ${mmcdev}; " \
+		"if mmc rescan; then " \
+			"echo SD/MMC found on device ${mmcdev};" \
+			"setenv bootpart ${mmcdev}:1; " \
+			"part uuid mmc ${bootpart} uuid;" \
+			"setenv root PARTUUID=${uuid} rw rootwait;" \
+			"echo Checking for: ${bootdir}/uEnv.txt ...;" \
+			"if test -e mmc ${bootpart} ${bootdir}/uEnv.txt; then " \
+				"load mmc ${bootpart} ${loadaddr} ${bootdir}/uEnv.txt;" \
+				"env import -t ${loadaddr} ${filesize};" \
+				"echo Loaded environment from ${bootdir}/uEnv.txt;" \
+				"echo Checking if uenvcmd is set ...;" \
+				"if test -n ${uenvcmd}; then " \
+					"echo Running uenvcmd ...;" \
+					"run uenvcmd;" \
+				"fi;" \
 			"fi; " \
-		"else " \
-			"bootz; " \
+			"run scan_dev_for_boot;" \
+			"if run loadimage; then " \
+				"if run loadfdt; then " \
+					"run mmcargs;" \
+					"if run loadrd; then " \
+						"bootz ${loadaddr} ${rdaddr}:${filesize} ${fdt_addr};" \
+					"else " \
+						"bootz ${loadaddr} - ${fdt_addr};" \
+					"fi;" \
+				"else " \
+					"echo Kernel found, but no device tree found;" \
+				"fi;" \
+			"else " \
+				"echo No kernel found;" \
+			"fi;" \
 		"fi;\0" \
 	"netargs=setenv bootargs console=${console},${baudrate} " \
 		"root=/dev/nfs " \
@@ -135,26 +150,17 @@
 		"else " \
 			"bootz; " \
 		"fi;\0" \
-		"findfdt=" \
-			"if test $board_rev = MX6Q ; then " \
-				"setenv fdt_file imx6q-udoo.dtb; fi; " \
-			"if test $board_rev = MX6DL ; then " \
-				"setenv fdt_file imx6dl-udoo.dtb; fi; " \
-			"if test $fdt_file = undefined; then " \
-				"echo WARNING: Could not determine dtb to use; fi; \0"
+	"findfdt=" \
+		"if test $board_rev = MX6Q ; then " \
+			"setenv fdt_file imx6q-udoo.dtb; fi; " \
+		"if test $board_rev = MX6DL ; then " \
+			"setenv fdt_file imx6dl-udoo.dtb; fi; " \
+		"if test $fdt_file = undefined; then " \
+			"echo WARNING: Could not determine dtb to use; fi; \0"
 
 #define CONFIG_BOOTCOMMAND \
 	   "run findfdt; " \
-	   "mmc dev ${mmcdev}; if mmc rescan; then " \
-		   "if run loadbootscript; then " \
-			   "run bootscript; " \
-		   "else " \
-			   "if run loadimage; then " \
-				   "run mmcboot; " \
-			   "else run netboot; " \
-			   "fi; " \
-		   "fi; " \
-	   "else run netboot; fi"
+	   "run mmcboot; "
 
 /* Print Buffer Size */
 #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
