diff --git a/plat/arm/board/fvp/fvp_io_storage.c b/plat/arm/board/fvp/fvp_io_storage.c
index 0284c3d..e9d847f 100644
--- a/plat/arm/board/fvp/fvp_io_storage.c
+++ b/plat/arm/board/fvp/fvp_io_storage.c
@@ -29,16 +29,88 @@
  */
 
 #include <assert.h>
+#include <common_def.h>
 #include <debug.h>
 #include <io_driver.h>
 #include <io_storage.h>
 #include <io_semihosting.h>
 #include <plat_arm.h>
+#include <semihosting.h>	/* For FOPEN_MODE_... */
+
+/* Semihosting filenames */
+#define BL2_IMAGE_NAME			"bl2.bin"
+#define BL31_IMAGE_NAME			"bl31.bin"
+#define BL32_IMAGE_NAME			"bl32.bin"
+#define BL33_IMAGE_NAME			"bl33.bin"
+
+#if TRUSTED_BOARD_BOOT
+#define BL2_CERT_NAME			"bl2.crt"
+#define TRUSTED_KEY_CERT_NAME		"trusted_key.crt"
+#define BL31_KEY_CERT_NAME		"bl31_key.crt"
+#define BL32_KEY_CERT_NAME		"bl32_key.crt"
+#define BL33_KEY_CERT_NAME		"bl33_key.crt"
+#define BL31_CERT_NAME			"bl31.crt"
+#define BL32_CERT_NAME			"bl32.crt"
+#define BL33_CERT_NAME			"bl33.crt"
+#endif /* TRUSTED_BOARD_BOOT */
 
 /* IO devices */
 static const io_dev_connector_t *sh_dev_con;
 static uintptr_t sh_dev_handle;
 
+static const io_file_spec_t sh_file_spec[] = {
+	[BL2_IMAGE_ID] = {
+		.path = BL2_IMAGE_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[BL31_IMAGE_ID] = {
+		.path = BL31_IMAGE_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[BL32_IMAGE_ID] = {
+		.path = BL32_IMAGE_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[BL33_IMAGE_ID] = {
+		.path = BL33_IMAGE_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+#if TRUSTED_BOARD_BOOT
+	[BL2_CERT_ID] = {
+		.path = BL2_CERT_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[TRUSTED_KEY_CERT_ID] = {
+		.path = TRUSTED_KEY_CERT_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[BL31_KEY_CERT_ID] = {
+		.path = BL31_KEY_CERT_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[BL32_KEY_CERT_ID] = {
+		.path = BL32_KEY_CERT_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[BL33_KEY_CERT_ID] = {
+		.path = BL33_KEY_CERT_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[BL31_CERT_ID] = {
+		.path = BL31_CERT_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[BL32_CERT_ID] = {
+		.path = BL32_CERT_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+	[BL33_CERT_ID] = {
+		.path = BL33_CERT_NAME,
+		.mode = FOPEN_MODE_RB
+	},
+#endif /* TRUSTED_BOARD_BOOT */
+};
+
 
 static int open_semihosting(const uintptr_t spec)
 {
@@ -75,13 +147,17 @@
 	(void)io_result;
 }
 
-int plat_arm_get_alt_image_source(
-	const uintptr_t image_spec,
-	uintptr_t *dev_handle)
+/*
+ * FVP provides semihosting as an alternative to load images
+ */
+int plat_arm_get_alt_image_source(unsigned int image_id, uintptr_t *dev_handle,
+				  uintptr_t *image_spec)
 {
-	int result = open_semihosting(image_spec);
-	if (result == IO_SUCCESS)
+	int result = open_semihosting((const uintptr_t)&sh_file_spec[image_id]);
+	if (result == IO_SUCCESS) {
 		*dev_handle = sh_dev_handle;
+		*image_spec = (uintptr_t)&sh_file_spec[image_id];
+	}
 
 	return result;
 }
diff --git a/plat/arm/common/arm_io_storage.c b/plat/arm/common/arm_io_storage.c
index ea29313..8488f12 100644
--- a/plat/arm/common/arm_io_storage.c
+++ b/plat/arm/common/arm_io_storage.c
@@ -28,13 +28,14 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <assert.h>
+#include <bl_common.h>		/* For ARRAY_SIZE */
 #include <debug.h>
+#include <firmware_image_package.h>
 #include <io_driver.h>
 #include <io_fip.h>
 #include <io_memmap.h>
 #include <io_storage.h>
 #include <platform_def.h>
-#include <semihosting.h>	/* For FOPEN_MODE_... */
 #include <string.h>
 
 /* IO devices */
@@ -48,179 +49,162 @@
 	.length = PLAT_ARM_FIP_MAX_SIZE
 };
 
-static const io_file_spec_t bl2_file_spec = {
-	.path = BL2_IMAGE_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl2_uuid_spec = {
+	.uuid = UUID_TRUSTED_BOOT_FIRMWARE_BL2,
 };
 
-static const io_file_spec_t bl30_file_spec = {
-	.path = BL30_IMAGE_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl30_uuid_spec = {
+	.uuid = UUID_SCP_FIRMWARE_BL30,
 };
 
-static const io_file_spec_t bl31_file_spec = {
-	.path = BL31_IMAGE_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl31_uuid_spec = {
+	.uuid = UUID_EL3_RUNTIME_FIRMWARE_BL31,
 };
 
-static const io_file_spec_t bl32_file_spec = {
-	.path = BL32_IMAGE_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl32_uuid_spec = {
+	.uuid = UUID_SECURE_PAYLOAD_BL32,
 };
 
-static const io_file_spec_t bl33_file_spec = {
-	.path = BL33_IMAGE_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl33_uuid_spec = {
+	.uuid = UUID_NON_TRUSTED_FIRMWARE_BL33,
 };
 
 #if TRUSTED_BOARD_BOOT
-static const io_file_spec_t bl2_cert_file_spec = {
-	.path = BL2_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl2_cert_uuid_spec = {
+	.uuid = UUID_TRUSTED_BOOT_FIRMWARE_BL2_CERT,
 };
 
-static const io_file_spec_t trusted_key_cert_file_spec = {
-	.path = TRUSTED_KEY_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t trusted_key_cert_uuid_spec = {
+	.uuid = UUID_TRUSTED_KEY_CERT,
 };
 
-static const io_file_spec_t bl30_key_cert_file_spec = {
-	.path = BL30_KEY_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl30_key_cert_uuid_spec = {
+	.uuid = UUID_SCP_FIRMWARE_BL30_KEY_CERT,
 };
 
-static const io_file_spec_t bl31_key_cert_file_spec = {
-	.path = BL31_KEY_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl31_key_cert_uuid_spec = {
+	.uuid = UUID_EL3_RUNTIME_FIRMWARE_BL31_KEY_CERT,
 };
 
-static const io_file_spec_t bl32_key_cert_file_spec = {
-	.path = BL32_KEY_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl32_key_cert_uuid_spec = {
+	.uuid = UUID_SECURE_PAYLOAD_BL32_KEY_CERT,
 };
 
-static const io_file_spec_t bl33_key_cert_file_spec = {
-	.path = BL33_KEY_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl33_key_cert_uuid_spec = {
+	.uuid = UUID_NON_TRUSTED_FIRMWARE_BL33_KEY_CERT,
 };
 
-static const io_file_spec_t bl30_cert_file_spec = {
-	.path = BL30_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl30_cert_uuid_spec = {
+	.uuid = UUID_SCP_FIRMWARE_BL30_CERT,
 };
 
-static const io_file_spec_t bl31_cert_file_spec = {
-	.path = BL31_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl31_cert_uuid_spec = {
+	.uuid = UUID_EL3_RUNTIME_FIRMWARE_BL31_CERT,
 };
 
-static const io_file_spec_t bl32_cert_file_spec = {
-	.path = BL32_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl32_cert_uuid_spec = {
+	.uuid = UUID_SECURE_PAYLOAD_BL32_CERT,
 };
 
-static const io_file_spec_t bl33_cert_file_spec = {
-	.path = BL33_CERT_NAME,
-	.mode = FOPEN_MODE_RB
+static const io_uuid_spec_t bl33_cert_uuid_spec = {
+	.uuid = UUID_NON_TRUSTED_FIRMWARE_BL33_CERT,
 };
 #endif /* TRUSTED_BOARD_BOOT */
 
+
 static int open_fip(const uintptr_t spec);
 static int open_memmap(const uintptr_t spec);
 
 struct plat_io_policy {
-	const char *image_name;
 	uintptr_t *dev_handle;
 	uintptr_t image_spec;
 	int (*check)(const uintptr_t spec);
 };
 
+/* By default, ARM platforms load images from the FIP */
 static const struct plat_io_policy policies[] = {
-	{
-		FIP_IMAGE_NAME,
+	[FIP_IMAGE_ID] = {
 		&memmap_dev_handle,
 		(uintptr_t)&fip_block_spec,
 		open_memmap
-	}, {
-		BL2_IMAGE_NAME,
+	},
+	[BL2_IMAGE_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl2_file_spec,
+		(uintptr_t)&bl2_uuid_spec,
 		open_fip
-	}, {
-		BL30_IMAGE_NAME,
+	},
+	[BL30_IMAGE_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl30_file_spec,
+		(uintptr_t)&bl30_uuid_spec,
 		open_fip
-	}, {
-		BL31_IMAGE_NAME,
+	},
+	[BL31_IMAGE_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl31_file_spec,
+		(uintptr_t)&bl31_uuid_spec,
 		open_fip
-	}, {
-		BL32_IMAGE_NAME,
+	},
+	[BL32_IMAGE_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl32_file_spec,
+		(uintptr_t)&bl32_uuid_spec,
 		open_fip
-	}, {
-		BL33_IMAGE_NAME,
+	},
+	[BL33_IMAGE_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl33_file_spec,
+		(uintptr_t)&bl33_uuid_spec,
 		open_fip
-	}, {
+	},
 #if TRUSTED_BOARD_BOOT
-		BL2_CERT_NAME,
+	[BL2_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl2_cert_file_spec,
+		(uintptr_t)&bl2_cert_uuid_spec,
 		open_fip
-	}, {
-		TRUSTED_KEY_CERT_NAME,
+	},
+	[TRUSTED_KEY_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&trusted_key_cert_file_spec,
+		(uintptr_t)&trusted_key_cert_uuid_spec,
 		open_fip
-	}, {
-		BL30_KEY_CERT_NAME,
+	},
+	[BL30_KEY_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl30_key_cert_file_spec,
+		(uintptr_t)&bl30_key_cert_uuid_spec,
 		open_fip
-	}, {
-		BL31_KEY_CERT_NAME,
+	},
+	[BL31_KEY_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl31_key_cert_file_spec,
+		(uintptr_t)&bl31_key_cert_uuid_spec,
 		open_fip
-	}, {
-		BL32_KEY_CERT_NAME,
+	},
+	[BL32_KEY_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl32_key_cert_file_spec,
+		(uintptr_t)&bl32_key_cert_uuid_spec,
 		open_fip
-	}, {
-		BL33_KEY_CERT_NAME,
+	},
+	[BL33_KEY_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl33_key_cert_file_spec,
+		(uintptr_t)&bl33_key_cert_uuid_spec,
 		open_fip
-	}, {
-		BL30_CERT_NAME,
+	},
+	[BL30_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl30_cert_file_spec,
+		(uintptr_t)&bl30_cert_uuid_spec,
 		open_fip
-	}, {
-		BL31_CERT_NAME,
+	},
+	[BL31_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl31_cert_file_spec,
+		(uintptr_t)&bl31_cert_uuid_spec,
 		open_fip
-	}, {
-		BL32_CERT_NAME,
+	},
+	[BL32_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl32_cert_file_spec,
+		(uintptr_t)&bl32_cert_uuid_spec,
 		open_fip
-	}, {
-		BL33_CERT_NAME,
+	},
+	[BL33_CERT_ID] = {
 		&fip_dev_handle,
-		(uintptr_t)&bl33_cert_file_spec,
+		(uintptr_t)&bl33_cert_uuid_spec,
 		open_fip
-	}, {
+	},
 #endif /* TRUSTED_BOARD_BOOT */
-		0, 0, 0
-	}
 };
 
 
@@ -235,7 +219,7 @@
 	uintptr_t local_image_handle;
 
 	/* See if a Firmware Image Package is available */
-	result = io_dev_init(fip_dev_handle, (uintptr_t)FIP_IMAGE_NAME);
+	result = io_dev_init(fip_dev_handle, (uintptr_t)FIP_IMAGE_ID);
 	if (result == IO_SUCCESS) {
 		result = io_open(fip_dev_handle, spec, &local_image_handle);
 		if (result == IO_SUCCESS) {
@@ -293,8 +277,9 @@
 }
 
 int plat_arm_get_alt_image_source(
-	const uintptr_t image_spec __attribute__((unused)),
-	uintptr_t *dev_handle __attribute__((unused)))
+	unsigned int image_id __attribute__((unused)),
+	uintptr_t *dev_handle __attribute__((unused)),
+	uintptr_t *image_spec __attribute__((unused)))
 {
 	/* By default do not try an alternative */
 	return IO_FAIL;
@@ -302,36 +287,24 @@
 
 /* Return an IO device handle and specification which can be used to access
  * an image. Use this to enforce platform load policy */
-int plat_get_image_source(const char *image_name, uintptr_t *dev_handle,
+int plat_get_image_source(unsigned int image_id, uintptr_t *dev_handle,
 			  uintptr_t *image_spec)
 {
 	int result = IO_FAIL;
 	const struct plat_io_policy *policy;
 
-	if ((image_name != NULL) && (dev_handle != NULL) &&
-	    (image_spec != NULL)) {
-		policy = policies;
-		while (policy->image_name != NULL) {
-			if (strcmp(policy->image_name, image_name) == 0) {
-				result = policy->check(policy->image_spec);
-				if (result == IO_SUCCESS) {
-					*image_spec = policy->image_spec;
-					*dev_handle = *(policy->dev_handle);
-					break;
-				}
-				VERBOSE("Trying alternative IO\n");
-				result = plat_arm_get_alt_image_source(
-						policy->image_spec,
-						dev_handle);
-				if (result == IO_SUCCESS) {
-					*image_spec = policy->image_spec;
-					break;
-				}
-			}
-			policy++;
-		}
+	assert(image_id < ARRAY_SIZE(policies));
+
+	policy = &policies[image_id];
+	result = policy->check(policy->image_spec);
+	if (result == IO_SUCCESS) {
+		*image_spec = policy->image_spec;
+		*dev_handle = *(policy->dev_handle);
 	} else {
-		result = IO_FAIL;
+		VERBOSE("Trying alternative IO\n");
+		result = plat_arm_get_alt_image_source(image_id, dev_handle,
+						       image_spec);
 	}
+
 	return result;
 }
