diff --git a/bl1/bl1.ld.S b/bl1/bl1.ld.S
index ac52e52..7a00a3f 100644
--- a/bl1/bl1.ld.S
+++ b/bl1/bl1.ld.S
@@ -116,5 +116,5 @@
     __COHERENT_RAM_UNALIGNED_SIZE__ =
         __COHERENT_RAM_END_UNALIGNED__ - __COHERENT_RAM_START__;
 
-    ASSERT(. <= BL31_BASE, "BL31 image overlaps BL1 image.")
+    ASSERT(. <= BL31_BASE, "BL1 image overlaps BL31 image.")
 }
diff --git a/bl1/bl1_main.c b/bl1/bl1_main.c
index 06ab4e5..b3adc25 100644
--- a/bl1/bl1_main.c
+++ b/bl1/bl1_main.c
@@ -104,7 +104,11 @@
 		printf("BL2 memory layout address = 0x%llx \n\r",
 		       (unsigned long long) bl2_tzram_layout);
 #endif
-		run_image(bl2_base, spsr, SECURE, bl2_tzram_layout, 0);
+		run_image(bl2_base,
+			  spsr,
+			  SECURE,
+			  (void *) bl2_tzram_layout,
+			  NULL);
 	}
 
 	/*
diff --git a/bl2/bl2_main.c b/bl2/bl2_main.c
index 4745881..a3e0cdf 100644
--- a/bl2/bl2_main.c
+++ b/bl2/bl2_main.c
@@ -48,9 +48,7 @@
 void bl2_main(void)
 {
 	meminfo *bl2_tzram_layout;
-	meminfo *bl31_tzram_layout;
-	meminfo *bl33_ns_layout;
-	el_change_info *ns_image_info;
+	bl31_args *bl2_to_bl31_args;
 	unsigned long bl31_base, bl33_base, el_status;
 	unsigned int bl2_load, bl31_load, mode;
 
@@ -60,7 +58,7 @@
 	/* Perform platform setup in BL1 */
 	bl2_platform_setup();
 
-#if defined (__GNUC__)
+#if defined(__GNUC__)
 	printf("BL2 Built : %s, %s\n\r", __TIME__, __DATE__);
 #endif
 
@@ -80,19 +78,30 @@
 	                       bl31_load, BL31_BASE);
 
 	/* Assert if it has not been possible to load BL31 */
-	assert(bl31_base != 0);
+	if (bl31_base == 0) {
+		ERROR("Failed to load BL3-1.\n");
+		panic();
+	}
+
+	/*
+	 * Get a pointer to the memory the platform has set aside to pass
+	 * information to BL31.
+	 */
+	bl2_to_bl31_args = bl2_get_bl31_args_ptr();
 
 	/*
 	 * Create a new layout of memory for BL31 as seen by BL2. This
 	 * will gobble up all the BL2 memory.
 	 */
-	bl31_tzram_layout = (meminfo *) get_el_change_mem_ptr();
-	init_bl31_mem_layout(bl2_tzram_layout, bl31_tzram_layout, bl31_load);
+	init_bl31_mem_layout(bl2_tzram_layout,
+			     &bl2_to_bl31_args->bl31_meminfo,
+			     bl31_load);
 
-	/* Find out where the BL3-3 normal world firmware should go. */
-	bl33_ns_layout = bl2_get_ns_mem_layout();
-	bl33_base = load_image(bl33_ns_layout, BL33_IMAGE_NAME,
-			       BOT_LOAD, plat_get_ns_image_entrypoint());
+	/* Load the BL33 image in non-secure memory provided by the platform */
+	bl33_base = load_image(&bl2_to_bl31_args->bl33_meminfo,
+			       BL33_IMAGE_NAME,
+			       BOT_LOAD,
+			       plat_get_ns_image_entrypoint());
 	/* Halt if failed to load normal world firmware. */
 	if (bl33_base == 0) {
 		ERROR("Failed to load BL3-3.\n");
@@ -101,11 +110,9 @@
 
 	/*
 	 * BL2 also needs to tell BL31 where the non-trusted software image
-	 * has been loaded. Place this info right after the BL31 memory layout
+	 * is located.
 	 */
-	ns_image_info = (el_change_info *) ((unsigned char *) bl31_tzram_layout
-					      + sizeof(meminfo));
-	ns_image_info->entrypoint = bl33_base;
+	bl2_to_bl31_args->bl33_image_info.entrypoint = bl33_base;
 
 	/* Figure out what mode we enter the non-secure world in */
 	el_status = read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL2_SHIFT;
@@ -116,22 +123,27 @@
 	else
 		mode = MODE_EL1;
 
-	ns_image_info->spsr = make_spsr(mode, MODE_SP_ELX, MODE_RW_64);
-	ns_image_info->security_state = NON_SECURE;
-	flush_dcache_range((unsigned long) ns_image_info,
-			   sizeof(el_change_info));
+	/*
+	 * TODO: Consider the possibility of specifying the SPSR in
+	 * the FIP ToC and allowing the platform to have a say as
+	 * well.
+	 */
+	bl2_to_bl31_args->bl33_image_info.spsr =
+		make_spsr(mode, MODE_SP_ELX, MODE_RW_64);
+	bl2_to_bl31_args->bl33_image_info.security_state = NON_SECURE;
+
+	/* Flush the entire BL31 args buffer */
+	flush_dcache_range((unsigned long) bl2_to_bl31_args,
+			   sizeof(*bl2_to_bl31_args));
 
 	/*
 	 * Run BL31 via an SMC to BL1. Information on how to pass control to
-	 * the non-trusted software image will be passed to BL31 in x2.
+	 * the BL32 (if present) and BL33 software images will be passed to
+	 * BL31 as an argument.
 	 */
-	if (bl31_base)
-		run_image(bl31_base,
-			  make_spsr(MODE_EL3, MODE_SP_ELX, MODE_RW_64),
-			  SECURE,
-			  bl31_tzram_layout,
-			  (void *) ns_image_info);
-
-	/* There is no valid reason for run_image() to return */
-	assert(0);
+	run_image(bl31_base,
+		  make_spsr(MODE_EL3, MODE_SP_ELX, MODE_RW_64),
+		  SECURE,
+		  (void *) bl2_to_bl31_args,
+		  NULL);
 }
diff --git a/bl31/aarch64/bl31_entrypoint.S b/bl31/aarch64/bl31_entrypoint.S
index 1b8488d..c72b363 100644
--- a/bl31/aarch64/bl31_entrypoint.S
+++ b/bl31/aarch64/bl31_entrypoint.S
@@ -47,11 +47,10 @@
 
 bl31_entrypoint: ; .type bl31_entrypoint, %function
 	/* ---------------------------------------------
-	 * BL2 has populated x0,x3,x4 with the opcode
-	 * indicating BL31 should be run, memory layout
-	 * of the trusted SRAM available to BL31 and
-	 * information about running the non-trusted
-	 * software already loaded by BL2.
+	 * BL2 has populated x0 with the opcode
+	 * indicating BL31 should be run, x3 with
+	 * a pointer to a 'bl31_args' structure & x4
+ 	 * with any other optional information
 	 * ---------------------------------------------
 	 */
 
diff --git a/common/bl_common.c b/common/bl_common.c
index 7e17bb8..fb86ac5 100644
--- a/common/bl_common.c
+++ b/common/bl_common.c
@@ -40,17 +40,6 @@
 #include "io_storage.h"
 #include "debug.h"
 
-/***********************************************************
- * Memory for sharing data while changing exception levels.
- * Only used by the primary core.
- **********************************************************/
-unsigned char bl2_el_change_mem_ptr[EL_CHANGE_MEM_SIZE];
-
-unsigned long *get_el_change_mem_ptr(void)
-{
-	return (unsigned long *) bl2_el_change_mem_ptr;
-}
-
 unsigned long page_align(unsigned long value, unsigned dir)
 {
 	unsigned long page_size = 1 << FOUR_KB_SHIFT;
@@ -85,9 +74,9 @@
 	write_scr(scr);
 }
 
-int drop_el(aapcs64_params *args,
-	    unsigned long spsr,
-	    unsigned long entrypoint)
+void __dead2 drop_el(aapcs64_params *args,
+		     unsigned long spsr,
+		     unsigned long entrypoint)
 {
 	write_spsr(spsr);
 	write_elr(entrypoint);
@@ -99,19 +88,18 @@
 	     args->arg5,
 	     args->arg6,
 	     args->arg7);
-	return -EINVAL;
 }
 
-long raise_el(aapcs64_params *args)
+void __dead2 raise_el(aapcs64_params *args)
 {
-	return smc(args->arg0,
-		   args->arg1,
-		   args->arg2,
-		   args->arg3,
-		   args->arg4,
-		   args->arg5,
-		   args->arg6,
-		   args->arg7);
+	smc(args->arg0,
+	    args->arg1,
+	    args->arg2,
+	    args->arg3,
+	    args->arg4,
+	    args->arg5,
+	    args->arg6,
+	    args->arg7);
 }
 
 /*
@@ -119,7 +107,7 @@
  * Add support for dropping into EL0 etc. Consider adding support
  * for switching from S-EL1 to S-EL0/1 etc.
  */
-long change_el(el_change_info *info)
+void __dead2 change_el(el_change_info *info)
 {
 	unsigned long current_el = read_current_el();
 
@@ -134,9 +122,9 @@
 		if (info->security_state == NON_SECURE)
 			change_security_state(info->security_state);
 
-		return drop_el(&info->args, info->spsr, info->entrypoint);
+		drop_el(&info->args, info->spsr, info->entrypoint);
 	} else
-		return raise_el(&info->args);
+		raise_el(&info->args);
 }
 
 /* TODO: add a parameter for DAIF. not needed right now */
@@ -515,11 +503,11 @@
  * The only way of doing the latter is through an SMC. In either case, setup the
  * parameters for the EL change request correctly.
  ******************************************************************************/
-int run_image(unsigned long entrypoint,
-	      unsigned long spsr,
-	      unsigned long target_security_state,
-	      meminfo *mem_layout,
-	      void *data)
+void __dead2 run_image(unsigned long entrypoint,
+		       unsigned long spsr,
+		       unsigned long target_security_state,
+		       void *first_arg,
+		       void *second_arg)
 {
 	el_change_info run_image_info;
 	unsigned long current_el = read_current_el();
@@ -529,7 +517,6 @@
 	run_image_info.entrypoint = entrypoint;
 	run_image_info.spsr = spsr;
 	run_image_info.security_state = target_security_state;
-	run_image_info.next = 0;
 
 	/*
 	 * If we are EL3 then only an eret can take us to the desired
@@ -538,14 +525,14 @@
 	 * will go into the general purpose register xY e.g. arg0->x0
 	 */
 	if (GET_EL(current_el) == MODE_EL3) {
-		run_image_info.args.arg1 = (unsigned long) mem_layout;
-		run_image_info.args.arg2 = (unsigned long) data;
+		run_image_info.args.arg1 = (unsigned long) first_arg;
+		run_image_info.args.arg2 = (unsigned long) second_arg;
 	} else {
 		run_image_info.args.arg1 = entrypoint;
 		run_image_info.args.arg2 = spsr;
-		run_image_info.args.arg3 = (unsigned long) mem_layout;
-		run_image_info.args.arg4 = (unsigned long) data;
+		run_image_info.args.arg3 = (unsigned long) first_arg;
+		run_image_info.args.arg4 = (unsigned long) second_arg;
 	}
 
-	return change_el(&run_image_info);
+	change_el(&run_image_info);
 }
diff --git a/docs/porting-guide.md b/docs/porting-guide.md
index 93a84c7..91b2a20 100644
--- a/docs/porting-guide.md
+++ b/docs/porting-guide.md
@@ -529,8 +529,8 @@
         meminfo.free_size  = Size of secure RAM available for allocation to
                              BL3-1
 
-    BL2 places this `meminfo` structure in memory provided by the
-    platform (`bl2_el_change_mem_ptr`). BL2 implements the
+    BL2 populates this information in the `bl31_meminfo` field of the pointer
+    returned by the `bl2_get_bl31_args_ptr() function. BL2 implements the
     `init_bl31_mem_layout()` function to populate the BL3-1 meminfo structure
     described above. The platform may override this implementation, for example
     if the platform wants to restrict the amount of memory visible to BL3-1.
@@ -554,9 +554,7 @@
 The platform must copy the contents of the `meminfo` structure into a private
 variable as the original memory may be subsequently overwritten by BL2. The
 copied structure is made available to all BL2 code through the
-`bl2_plat_sec_mem_layout()` function. The non-secure memory extents used for
-loading BL3-3 is also initialized in this function. Access to this information
-is provided by the `bl2_get_ns_mem_layout()` function.
+`bl2_plat_sec_mem_layout()` function.
 
 
 ### Function : bl2_plat_arch_setup() [mandatory]
@@ -581,27 +579,20 @@
 port does the necessary initialization in `bl2_plat_arch_setup()`. It is only
 called by the primary CPU.
 
-The purpose of this function is to perform any platform initialization specific
-to BL2. This function must initialize a pointer to memory
-(`bl2_el_change_mem_ptr`), which can then be used to populate an
-`el_change_info` structure. The underlying requirement is that the platform must
-initialize this pointer before the `get_el_change_mem_ptr()` function
-accesses it in `bl2_main()`.
+The purpose of this function is to perform any platform initialization
+specific to BL2. For example on the ARM FVP port this function initialises a
+internal pointer (`bl2_to_bl31_args`) to a `bl31_args` which will be used by
+BL2 to pass information to BL3_1. The pointer is initialized to the base
+address of Secure DRAM (`0x06000000`).
 
-The ARM FVP port initializes this pointer to the base address of Secure DRAM
-(`0x06000000`).
+The non-secure memory extents used for loading BL3-3 are also initialized in
+this function. This information is accessible in the `bl33_meminfo` field in
+the `bl31_args` structure pointed to by `bl2_to_bl31_args`.
 
 This function is also responsible for initializing the storage abstraction layer
 which is used to load further bootloader images.
 
 
-### Variable : unsigned char bl2_el_change_mem_ptr[EL_CHANGE_MEM_SIZE] [mandatory]
-
-As mentioned in the description of `bl2_platform_setup()`, this pointer is
-initialized by the platform to point to memory where an `el_change_info`
-structure can be populated.
-
-
 ### Function : bl2_plat_sec_mem_layout() [mandatory]
 
     Argument : void
@@ -616,18 +607,20 @@
 `bl2_early_platform_setup()` above.
 
 
-### Function : bl2_get_ns_mem_layout() [mandatory]
+### Function : bl2_get_bl31_args_ptr() [mandatory]
 
     Argument : void
-    Return   : meminfo *
+    Return   : bl31_args *
 
-This function should only be called on the cold boot path. It may execute with
-the MMU and data caches enabled if the platform port does the necessary
-initialization in `bl2_plat_arch_setup()`. It is only called by the primary CPU.
-
-The purpose of this function is to return a pointer to a `meminfo` structure
-populated with the extents of non-secure DRAM available for BL2 to use. See
-`bl2_early_platform_setup()` above.
+BL2 platform code needs to return a pointer to a `bl31_args` structure it will
+use for passing information to BL3-1. The `bl31_args` structure carries the
+following information. This information is used by the `bl2_main()` function to
+load the BL3-2 (if present) and BL3-3 images.
+    - Extents of memory available to the BL3-1 image in the `bl31_meminfo` field
+    - Extents of memory available to the BL3-2 image in the `bl32_meminfo` field
+    - Extents of memory available to the BL3-3 image in the `bl33_meminfo` field
+    - Information about executing the BL3-3 image in the `bl33_image_info` field
+    - Information about executing the BL3-2 image in the `bl32_image_info` field
 
 
 ### Function : init_bl31_mem_layout() [optional]
@@ -699,11 +692,16 @@
 *   An opaque pointer that the platform may use as needed.
 *   The `MPIDR` of the primary CPU.
 
-The platform must copy the contents of the `meminfo` structure into a private
-variable as the original memory may be subsequently overwritten by BL3-1. The
-copied structure is made available to all BL3-1 code through the
+The platform can copy the contents of the `meminfo` structure into a private
+variable if the original memory may be subsequently overwritten by BL3-1. The
+reference to this structure is made available to all BL3-1 code through the
 `bl31_plat_sec_mem_layout()` function.
 
+On the ARM FVP port, BL2 passes a pointer to a `bl31_args` structure populated
+in the secure DRAM at address `0x6000000` in the opaque pointer mentioned
+earlier. BL3-1 does not copy this information to internal data structures as it
+guarantees that the secure DRAM memory will not be overwritten. It maintains an
+internal reference to this information in the `bl2_to_bl31_args` variable.
 
 ### Function : bl31_plat_arch_setup() [mandatory]
 
diff --git a/docs/user-guide.md b/docs/user-guide.md
index 69827cd..011f233 100644
--- a/docs/user-guide.md
+++ b/docs/user-guide.md
@@ -796,7 +796,7 @@
 BL2 does not perform any platform initialization that affects subsequent
 stages of the ARM Trusted Firmware or normal world software. It copies the
 information regarding the trusted SRAM populated by BL1 using a
-platform-specific mechanism. It also calculates the limits of DRAM (main memory)
+platform-specific mechanism. It calculates the limits of DRAM (main memory)
 to determine whether there is enough space to load the normal world software
 images. A platform defined base address is used to specify the load address for
 the BL3-1 image.
diff --git a/include/aarch64/arch_helpers.h b/include/aarch64/arch_helpers.h
index 133f4b7..4acf551 100644
--- a/include/aarch64/arch_helpers.h
+++ b/include/aarch64/arch_helpers.h
@@ -34,6 +34,7 @@
 #include <arch.h>
 
 #ifndef __ASSEMBLY__
+#include <stdio.h>
 
 /*******************************************************************************
  * TLB maintenance accessor prototypes
@@ -108,14 +109,14 @@
 extern unsigned int get_afflvl_shift(unsigned int);
 extern unsigned int mpidr_mask_lower_afflvls(unsigned long, unsigned int);
 
-extern void eret(unsigned long, unsigned long,
-		 unsigned long, unsigned long,
-		 unsigned long, unsigned long,
-		 unsigned long, unsigned long);
+extern void __dead2 eret(unsigned long, unsigned long,
+			 unsigned long, unsigned long,
+			 unsigned long, unsigned long,
+			 unsigned long, unsigned long);
 
-extern unsigned long  smc(unsigned long, unsigned long,
-			  unsigned long, unsigned long,
-			  unsigned long, unsigned long,
+extern void __dead2 smc(unsigned long, unsigned long,
+			 unsigned long, unsigned long,
+			 unsigned long, unsigned long,
 			  unsigned long, unsigned long);
 
 /*******************************************************************************
diff --git a/include/bl2.h b/include/bl2.h
index 2955a40..d0ff69b 100644
--- a/include/bl2.h
+++ b/include/bl2.h
@@ -43,6 +43,6 @@
  *****************************************/
 extern void bl2_platform_setup(void);
 extern meminfo *bl2_plat_sec_mem_layout(void);
-extern meminfo *bl2_get_ns_mem_layout(void);
+extern bl31_args *bl2_get_bl31_args_ptr(void);
 
 #endif /* __BL2_H__ */
diff --git a/include/bl_common.h b/include/bl_common.h
index 2d1d0db..aad3d22 100644
--- a/include/bl_common.h
+++ b/include/bl_common.h
@@ -49,21 +49,6 @@
 #define LOAD_MASK	(1 << 0)
 
 /*******************************************************************************
- * Size of memory for sharing data while changing exception levels.
- *
- * There are 2 cases where this memory buffer is used:
- *
- *   - when BL1 (running in EL3) passes control to BL2 (running in S-EL1).
- *     BL1 needs to pass the memory layout to BL2, to allow BL2 to find out
- *     how much free trusted ram remains;
- *
- *   - when BL2 (running in S-EL1) passes control back to BL1 (running in EL3)
- *     to make it run BL31.  BL2 needs to pass the memory layout, as well as
- *     information on how to pass control to the non-trusted software image.
- ******************************************************************************/
-#define EL_CHANGE_MEM_SIZE	(sizeof(meminfo) + sizeof(el_change_info))
-
-/*******************************************************************************
  * Macro to flag a compile time assertion. It uses the preprocessor to generate
  * an invalid C construct if 'cond' evaluates to false.
  * The following  compilation error is triggered if the assertion fails:
@@ -81,6 +66,8 @@
 
 
 #ifndef __ASSEMBLY__
+#include <stdio.h>
+
 /*******************************************************************************
  * Structure used for telling the next BL how much of a particular type of
  * memory is available for its use and how much is already used.
@@ -108,27 +95,36 @@
 /*******************************************************************************
  * This structure represents the superset of information needed while switching
  * exception levels. The only two mechanisms to do so are ERET & SMC. In case of
- * SMC all members apart from 'aapcs64_params' will be ignored. The 'next'
- * member is a placeholder for a complicated case in the distant future when BL2
- * will load multiple BL3x images as well as a non-secure image. So multiple
- * such structures will have to be passed to BL31 in S-EL3.
+ * SMC all members apart from 'aapcs64_params' will be ignored.
  ******************************************************************************/
 typedef struct {
 	unsigned long entrypoint;
 	unsigned long spsr;
 	unsigned long security_state;
 	aapcs64_params args;
-	unsigned long next;
 } el_change_info;
 
 /*******************************************************************************
+ * This structure represents the superset of information that can be passed to
+ * BL31 e.g. while passing control to it from BL2. The BL32 parameters will be
+ * populated only if BL2 detects its presence.
+ ******************************************************************************/
+typedef struct {
+	meminfo bl31_meminfo;
+	el_change_info bl32_image_info;
+	meminfo bl32_meminfo;
+	el_change_info bl33_image_info;
+	meminfo bl33_meminfo;
+} bl31_args;
+
+/*******************************************************************************
  * Function & variable prototypes
  ******************************************************************************/
 extern unsigned long page_align(unsigned long, unsigned);
 extern void change_security_state(unsigned int);
-extern int drop_el(aapcs64_params *, unsigned long, unsigned long);
-extern long raise_el(aapcs64_params *);
-extern long change_el(el_change_info *);
+extern void __dead2 drop_el(aapcs64_params *, unsigned long, unsigned long);
+extern void __dead2 raise_el(aapcs64_params *);
+extern void __dead2 change_el(el_change_info *);
 extern unsigned long make_spsr(unsigned long, unsigned long, unsigned long);
 extern void init_bl2_mem_layout(meminfo *,
 			        meminfo *,
@@ -138,11 +134,11 @@
 				 meminfo *,
 				 unsigned int) __attribute__((weak));
 extern unsigned long load_image(meminfo *, const char *, unsigned int, unsigned long);
-extern int run_image(unsigned long,
-		     unsigned long,
-		     unsigned long,
-		     meminfo *,
-		     void *);
+extern void __dead2 run_image(unsigned long entrypoint,
+			      unsigned long spsr,
+			      unsigned long security_state,
+			      void *first_arg,
+			      void *second_arg);
 extern unsigned long *get_el_change_mem_ptr(void);
 
 #endif /*__ASSEMBLY__*/
diff --git a/plat/fvp/bl2_plat_setup.c b/plat/fvp/bl2_plat_setup.c
index f8c922e..2e367d7 100644
--- a/plat/fvp/bl2_plat_setup.c
+++ b/plat/fvp/bl2_plat_setup.c
@@ -70,19 +70,25 @@
 static meminfo bl2_tzram_layout
 __attribute__ ((aligned(PLATFORM_CACHE_LINE_SIZE),
 		section("tzfw_coherent_mem")));
-/* Data structure which holds the extents of the Non-Secure DRAM for BL33 */
-static meminfo bl33_dram_layout
-__attribute__ ((aligned(PLATFORM_CACHE_LINE_SIZE),
-		section("tzfw_coherent_mem")));
+
+/*******************************************************************************
+ * Reference to structure which holds the arguments which need to be passed
+ * to BL31
+ ******************************************************************************/
+static bl31_args *bl2_to_bl31_args;
 
 meminfo *bl2_plat_sec_mem_layout(void)
 {
 	return &bl2_tzram_layout;
 }
 
-meminfo *bl2_get_ns_mem_layout(void)
+/*******************************************************************************
+ * This function returns a pointer to the memory that the platform has kept
+ * aside to pass all the information that BL31 could need.
+ ******************************************************************************/
+bl31_args *bl2_get_bl31_args_ptr(void)
 {
-	return &bl33_dram_layout;
+	return bl2_to_bl31_args;
 }
 
 /*******************************************************************************
@@ -101,16 +107,6 @@
 	bl2_tzram_layout.attr = mem_layout->attr;
 	bl2_tzram_layout.next = 0;
 
-	/* Setup the BL3-3 memory layout.
-	 * Normal World Firmware loaded into main DRAM.
-	 */
-	bl33_dram_layout.total_base = DRAM_BASE;
-	bl33_dram_layout.total_size = DRAM_SIZE;
-	bl33_dram_layout.free_base = DRAM_BASE;
-	bl33_dram_layout.free_size = DRAM_SIZE;
-	bl33_dram_layout.attr = 0;
-	bl33_dram_layout.next = 0;
-
 	/* Initialize the platform config for future decision making */
 	platform_config_setup();
 
@@ -127,7 +123,15 @@
 	io_setup();
 
 	/* Use the Trusted DRAM for passing args to BL31 */
-	bl2_el_change_mem_ptr = (unsigned char **) TZDRAM_BASE;
+	bl2_to_bl31_args = (bl31_args *) TZDRAM_BASE;
+
+	/* Populate the extents of memory available for loading BL33 */
+	bl2_to_bl31_args->bl33_meminfo.total_base = DRAM_BASE;
+	bl2_to_bl31_args->bl33_meminfo.total_size = DRAM_SIZE;
+	bl2_to_bl31_args->bl33_meminfo.free_base = DRAM_BASE;
+	bl2_to_bl31_args->bl33_meminfo.free_size = DRAM_SIZE;
+	bl2_to_bl31_args->bl33_meminfo.attr = 0;
+	bl2_to_bl31_args->bl33_meminfo.next = 0;
 }
 
 /*******************************************************************************
diff --git a/plat/fvp/bl31_plat_setup.c b/plat/fvp/bl31_plat_setup.c
index 425fad6..019b8e1 100644
--- a/plat/fvp/bl31_plat_setup.c
+++ b/plat/fvp/bl31_plat_setup.c
@@ -30,6 +30,7 @@
 
 #include <platform.h>
 #include <fvp_pwrc.h>
+#include <bl_common.h>
 
 /*******************************************************************************
  * Declarations of linker defined symbols which will help us find the layout
@@ -61,22 +62,14 @@
 #define BL31_COHERENT_RAM_LIMIT (unsigned long)(&__COHERENT_RAM_END__)
 
 /*******************************************************************************
- * This data structure holds information copied by BL31 from BL2 to pass
- * control to the normal world software images.
- * TODO: Can this be moved out of device memory.
+ * Reference to structure which holds the arguments that have been passed to
+ * BL31 from BL2.
  ******************************************************************************/
-static el_change_info ns_entry_info
-__attribute__ ((aligned(PLATFORM_CACHE_LINE_SIZE),
-		section("tzfw_coherent_mem")));
-
-/* Data structure which holds the extents of the trusted SRAM for BL31 */
-static meminfo bl31_tzram_layout
-__attribute__ ((aligned(PLATFORM_CACHE_LINE_SIZE),
-		section("tzfw_coherent_mem")));
+static bl31_args *bl2_to_bl31_args;
 
 meminfo *bl31_plat_sec_mem_layout(void)
 {
-	return &bl31_tzram_layout;
+	return &bl2_to_bl31_args->bl31_meminfo;
 }
 
 /*******************************************************************************
@@ -87,34 +80,24 @@
  ******************************************************************************/
 el_change_info *bl31_get_next_image_info(void)
 {
-	return &ns_entry_info;
+	return &bl2_to_bl31_args->bl33_image_info;
 }
 
 /*******************************************************************************
- * Perform any BL31 specific platform actions. Here we copy parameters passed
- * by the calling EL (S-EL1 in BL2 & S-EL3 in BL1) before they are lost
- * (potentially). This is done before the MMU is initialized so that the memory
- * layout can be used while creating page tables.
+ * Perform any BL31 specific platform actions. Here is an opportunity to copy
+ * parameters passed by the calling EL (S-EL1 in BL2 & S-EL3 in BL1) before they
+ * are lost (potentially). This needs to be done before the MMU is initialized
+ * so that the memory layout can be used while creating page tables. On the FVP
+ * we know that BL2 has populated the parameters in secure DRAM. So we just use
+ * the reference passed in 'from_bl2' instead of copying. The 'data' parameter
+ * is not used since all the information is contained in 'from_bl2'. Also, BL2
+ * has flushed this information to memory, so we are guaranteed to pick up good
+ * data
  ******************************************************************************/
-void bl31_early_platform_setup(meminfo *mem_layout,
+void bl31_early_platform_setup(bl31_args *from_bl2,
 			       void *data)
 {
-	el_change_info *image_info = (el_change_info *) data;
-
-	/* Setup the BL31 memory layout */
-	bl31_tzram_layout.total_base = mem_layout->total_base;
-	bl31_tzram_layout.total_size = mem_layout->total_size;
-	bl31_tzram_layout.free_base = mem_layout->free_base;
-	bl31_tzram_layout.free_size = mem_layout->free_size;
-	bl31_tzram_layout.attr = mem_layout->attr;
-	bl31_tzram_layout.next = 0;
-
-	/* Save information about jumping into the normal world */
-	ns_entry_info.entrypoint = image_info->entrypoint;
-	ns_entry_info.spsr = image_info->spsr;
-	ns_entry_info.args = image_info->args;
-	ns_entry_info.security_state = image_info->security_state;
-	ns_entry_info.next = image_info->next;
+	bl2_to_bl31_args = from_bl2;
 
 	/* Initialize the platform config for future decision making */
 	platform_config_setup();
@@ -163,7 +146,7 @@
  ******************************************************************************/
 void bl31_plat_arch_setup()
 {
-	configure_mmu(&bl31_tzram_layout,
+	configure_mmu(&bl2_to_bl31_args->bl31_meminfo,
 		      BL31_RO_BASE,
 		      BL31_RO_LIMIT,
 		      BL31_COHERENT_RAM_BASE,
diff --git a/plat/fvp/platform.h b/plat/fvp/platform.h
index 5826d35..76a9fca 100644
--- a/plat/fvp/platform.h
+++ b/plat/fvp/platform.h
@@ -53,17 +53,20 @@
 
 /* Trusted Boot Firmware BL2 */
 #define BL2_IMAGE_NAME			"bl2.bin"
+
 /* EL3 Runtime Firmware BL31 */
-#define BL31_IMAGE_NAME		"bl31.bin"
+#define BL31_IMAGE_NAME			"bl31.bin"
+
 /* Secure Payload BL32 (Trusted OS) */
-#define BL32_IMAGE_NAME		"bl32.bin"
+#define BL32_IMAGE_NAME			"bl32.bin"
+
 /* Non-Trusted Firmware BL33 and its load address */
-#define BL33_IMAGE_NAME		"bl33.bin" /* e.g. UEFI */
-#define NS_IMAGE_OFFSET		(DRAM_BASE + 0x8000000) /* DRAM + 128MB */
+#define BL33_IMAGE_NAME			"bl33.bin" /* e.g. UEFI */
+#define NS_IMAGE_OFFSET			(DRAM_BASE + 0x8000000) /* DRAM + 128MB */
+
 /* Firmware Image Package */
 #define FIP_IMAGE_NAME			"fip.bin"
 
-
 #define PLATFORM_CACHE_LINE_SIZE	64
 #define PLATFORM_CLUSTER_COUNT		2ull
 #define PLATFORM_CLUSTER0_CORE_COUNT	4
