diff --git a/bl1/bl1_main.c b/bl1/bl1_main.c
index 1ce7930c6cf63e2c43c0dc1193ee96981d914f92..b12d581d9f33125b60283660b8a6752fa213c94a 100644
--- a/bl1/bl1_main.c
+++ b/bl1/bl1_main.c
@@ -32,7 +32,6 @@
 #include <arch_helpers.h>
 #include <assert.h>
 #include <bl_common.h>
-#include <bl1.h>
 #include <debug.h>
 #include <platform.h>
 #include <platform_def.h>
diff --git a/bl2/bl2_main.c b/bl2/bl2_main.c
index 7d1863916555d39872f6bb7764966882ffe1dd59..e96b555e92b3dc4b0fb0169612a332acfa4b5337 100644
--- a/bl2/bl2_main.c
+++ b/bl2/bl2_main.c
@@ -32,7 +32,6 @@
 #include <arch_helpers.h>
 #include <assert.h>
 #include <bl_common.h>
-#include <bl2.h>
 #include <debug.h>
 #include <platform.h>
 #include <platform_def.h>
diff --git a/bl31/bl31_main.c b/bl31/bl31_main.c
index 02815ffc29567f4ccad709de3f3b7b451433f1f2..e851c6104cfd51f5bb43485ffd788b8889cab06b 100644
--- a/bl31/bl31_main.c
+++ b/bl31/bl31_main.c
@@ -34,6 +34,7 @@
 #include <bl_common.h>
 #include <bl31.h>
 #include <context_mgmt.h>
+#include <platform.h>
 #include <runtime_svc.h>
 #include <stdio.h>
 
diff --git a/bl32/tsp/tsp_main.c b/bl32/tsp/tsp_main.c
index 05737aef6f85dbc9ca3056104aed6d6d10ee47b3..eaabe613c4308c251db7917ab35672ca27c49a0e 100644
--- a/bl32/tsp/tsp_main.c
+++ b/bl32/tsp/tsp_main.c
@@ -30,7 +30,6 @@
 
 #include <arch_helpers.h>
 #include <bl_common.h>
-#include <bl32.h>
 #include <debug.h>
 #include <platform.h>
 #include <platform_def.h>
diff --git a/common/bl_common.c b/common/bl_common.c
index 470c5fff05fc7fa0b91f95d55108cf935b17f40e..32a4a77ce29f02654ede4da50b08a39c047e6f87 100644
--- a/common/bl_common.c
+++ b/common/bl_common.c
@@ -74,9 +74,11 @@ void change_security_state(unsigned int target_security_state)
 
 
 /*******************************************************************************
- * The next function is a weak definition. Platform specific
- * code can override it if it wishes to.
+ * The next two functions are weak definitions. Platform specific
+ * code can override them if it wishes to.
  ******************************************************************************/
+#pragma weak init_bl31_mem_layout
+#pragma weak init_bl2_mem_layout
 
 /*******************************************************************************
  * Function that takes a memory layout into which BL2 has been either top or
diff --git a/include/bl1/bl1.h b/include/bl1/bl1.h
deleted file mode 100644
index b1bbf244f9cb3a5bd55017c42602640fdff3916c..0000000000000000000000000000000000000000
--- a/include/bl1/bl1.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of ARM nor the names of its contributors may be used
- * to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __BL1_H__
-#define __BL1_H__
-
-
-/******************************************
- * Forward declarations
- *****************************************/
-struct meminfo;
-
-/******************************************
- * Function prototypes
- *****************************************/
-void bl1_platform_setup(void);
-struct meminfo *bl1_plat_sec_mem_layout(void);
-
-#endif /* __BL1_H__ */
diff --git a/include/bl2/bl2.h b/include/bl2/bl2.h
deleted file mode 100644
index 49b0dc4891b7d0c98d609dad297aa778decfc049..0000000000000000000000000000000000000000
--- a/include/bl2/bl2.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of ARM nor the names of its contributors may be used
- * to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __BL2_H__
-#define __BL2_H__
-
-/******************************************
- * Forward declarations
- *****************************************/
-struct meminfo;
-struct bl31_args;
-
-/******************************************
- * Function prototypes
- *****************************************/
-void bl2_platform_setup(void);
-struct meminfo *bl2_plat_sec_mem_layout(void);
-
-/*******************************************************************************
- * This function returns a pointer to the shared memory that the platform has
- * kept aside to pass trusted firmware related information that BL3-1
- * could need
- ******************************************************************************/
-struct bl31_params *bl2_plat_get_bl31_params(void);
-
-/*******************************************************************************
- * This function returns a pointer to the shared memory that the platform has
- * kept aside to pass platform related information that BL3-1 could need
- ******************************************************************************/
-struct bl31_plat_params *bl2_plat_get_bl31_plat_params(void);
-
-/*******************************************************************************
- * This function returns a pointer to the shared memory that the platform
- * has kept to point to entry point information of BL31 to BL2
- ******************************************************************************/
-struct el_change_info *bl2_plat_get_bl31_ep(void);
-
-
-/************************************************************************
- * This function flushes to main memory all the params that are
- * passed to BL3-1
- **************************************************************************/
-void bl2_plat_flush_bl31_params(void);
-
-#endif /* __BL2_H__ */
diff --git a/include/bl31/bl31.h b/include/bl31/bl31.h
index 8c5fb720ea84f40a24193806955947f146795739..1be97795b5122f1f732912fa42d183df733773f0 100644
--- a/include/bl31/bl31.h
+++ b/include/bl31/bl31.h
@@ -37,7 +37,6 @@
  * Forward declarations
  *****************************************/
 struct meminfo;
-struct el_change_info;
 
 /*******************************************************************************
  * Function prototypes
diff --git a/include/bl32/bl32.h b/include/bl32/bl32.h
deleted file mode 100644
index ede7c48e019096d2c9926787b99d80dd2dada3e2..0000000000000000000000000000000000000000
--- a/include/bl32/bl32.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of ARM nor the names of its contributors may be used
- * to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __BL32_H__
-#define __BL32_H__
-
-#include <stdint.h>
-
-/******************************************
- * Forward declarations
- *****************************************/
-struct meminfo;
-
-/******************************************
- * Function prototypes
- *****************************************/
-void bl32_platform_setup(void);
-struct meminfo *bl32_plat_sec_mem_layout(void);
-uint64_t bl32_main(void);
-
-#endif /* __BL32_H__ */
diff --git a/include/common/bl_common.h b/include/common/bl_common.h
index d2aaded8d73505a81d9d76081de8c320c6ea0aa9..b5bdf11b66299bc29766f7fc08ef9d20e5c141e3 100644
--- a/include/common/bl_common.h
+++ b/include/common/bl_common.h
@@ -193,13 +193,6 @@ CASSERT(sizeof(unsigned long) == __builtin_offsetof(el_change_info_t, spsr) - \
  ******************************************************************************/
 unsigned long page_align(unsigned long, unsigned);
 void change_security_state(unsigned int);
-void init_bl2_mem_layout(meminfo_t *,
-			 meminfo_t *,
-			 unsigned int,
-			 unsigned long) __attribute__((weak));
-void init_bl31_mem_layout(const meminfo_t *,
-			  meminfo_t *,
-			  unsigned int) __attribute__((weak));
 unsigned long image_size(const char *);
 int load_image(meminfo_t *,
 		const char *,
@@ -207,7 +200,6 @@ int load_image(meminfo_t *,
 		unsigned long,
 		image_info_t *,
 		el_change_info_t *);
-unsigned long *get_el_change_mem_ptr(void);
 extern const char build_message[];
 
 #endif /*__ASSEMBLY__*/
diff --git a/include/plat/common/platform.h b/include/plat/common/platform.h
index cd2a8552553ae030c5fb1e14a5a4da1b6b01c55a..630eb1cdc6857cb49e5bc31fbf28e63356572975 100644
--- a/include/plat/common/platform.h
+++ b/include/plat/common/platform.h
@@ -41,33 +41,25 @@ struct plat_pm_ops;
 struct meminfo;
 struct image_info;
 struct el_change_info;
+struct bl31_params;
 
 /*******************************************************************************
- * Function and variable prototypes
+ * Function declarations
  ******************************************************************************/
-void bl1_plat_arch_setup(void);
-void bl2_plat_arch_setup(void);
-void bl31_plat_arch_setup(void);
-int platform_setup_pm(const struct plat_pm_ops **);
-unsigned int platform_get_core_pos(unsigned long mpidr);
+/*******************************************************************************
+ * Mandatory common functions
+ ******************************************************************************/
+uint64_t plat_get_syscnt_freq(void);
 void enable_mmu_el1(void);
 void enable_mmu_el3(void);
-void configure_mmu_el1(unsigned long total_base,
-		       unsigned long total_size,
-		       unsigned long,
-		       unsigned long,
-		       unsigned long,
-		       unsigned long);
-void configure_mmu_el3(unsigned long total_base,
-		       unsigned long total_size,
-		       unsigned long,
-		       unsigned long,
-		       unsigned long,
-		       unsigned long);
-void plat_report_exception(unsigned long);
+int plat_get_image_source(const char *image_name,
+			uintptr_t *dev_handle,
+			uintptr_t *image_spec);
 unsigned long plat_get_ns_image_entrypoint(void);
-unsigned long platform_get_stack(unsigned long mpidr);
-uint64_t plat_get_syscnt_freq(void);
+
+/*******************************************************************************
+ * Mandatory interrupt management functions
+ ******************************************************************************/
 uint32_t ic_get_pending_interrupt_id(void);
 uint32_t ic_get_pending_interrupt_type(void);
 uint32_t ic_acknowledge_interrupt(void);
@@ -76,13 +68,19 @@ void ic_end_of_interrupt(uint32_t id);
 uint32_t plat_interrupt_type_to_line(uint32_t type,
 				     uint32_t security_state);
 
-int plat_get_max_afflvl(void);
-unsigned int plat_get_aff_count(unsigned int, unsigned long);
-unsigned int plat_get_aff_state(unsigned int, unsigned long);
-int plat_get_image_source(const char *image_name,
-			uintptr_t *dev_handle,
-			uintptr_t *image_spec);
+/*******************************************************************************
+ * Optional common functions (may be overridden)
+ ******************************************************************************/
+unsigned int platform_get_core_pos(unsigned long mpidr);
+unsigned long platform_get_stack(unsigned long mpidr);
+void plat_report_exception(unsigned long);
 
+/*******************************************************************************
+ * Mandatory BL1 functions
+ ******************************************************************************/
+void bl1_plat_arch_setup(void);
+void bl1_platform_setup(void);
+struct meminfo *bl1_plat_sec_mem_layout(void);
 /*
  * Before calling this function BL2 is loaded in memory and its entrypoint
  * is set by load_image. This is a placeholder for the platform to change
@@ -92,6 +90,36 @@ int plat_get_image_source(const char *image_name,
 void bl1_plat_bl2_loaded(struct image_info *image,
 			 struct el_change_info *ep);
 
+/*******************************************************************************
+ * Optional BL1 functions (may be overridden)
+ ******************************************************************************/
+void init_bl2_mem_layout(struct meminfo *,
+			struct meminfo *,
+			unsigned int,
+			unsigned long);
+
+/*******************************************************************************
+ * Mandatory BL2 functions
+ ******************************************************************************/
+void bl2_plat_arch_setup(void);
+void bl2_platform_setup(void);
+struct meminfo *bl2_plat_sec_mem_layout(void);
+/*******************************************************************************
+ * This function returns a pointer to the shared memory that the platform has
+ * kept aside to pass trusted firmware related information that BL3-1
+ * could need
+ ******************************************************************************/
+struct bl31_params *bl2_plat_get_bl31_params(void);
+/*******************************************************************************
+ * This function returns a pointer to the shared memory that the platform
+ * has kept to point to entry point information of BL31 to BL2
+ ******************************************************************************/
+struct el_change_info *bl2_plat_get_bl31_ep(void);
+/************************************************************************
+ * This function flushes to main memory all the params that are
+ * passed to BL3-1
+ **************************************************************************/
+void bl2_plat_flush_bl31_params(void);
 /*
  * Before calling this function BL31 is loaded in memory and its entrypoint
  * is set by load_image. This is a placeholder for the platform to change
@@ -100,7 +128,6 @@ void bl1_plat_bl2_loaded(struct image_info *image,
  */
 void bl2_plat_bl31_post_load_actions(struct image_info *image,
 				     struct el_change_info *ep);
-
 /*
  * Before calling this function BL32 is loaded in memory and its entrypoint
  * is set by load_image. This is a placeholder for the platform to change
@@ -109,7 +136,6 @@ void bl2_plat_bl31_post_load_actions(struct image_info *image,
  */
 void bl2_plat_bl32_post_load_actions(struct image_info *image,
 				     struct el_change_info *ep);
-
 /*
  * Before calling this function BL33 is loaded in memory and its entrypoint
  * is set by load_image. This is a placeholder for the platform to change
@@ -118,12 +144,35 @@ void bl2_plat_bl32_post_load_actions(struct image_info *image,
  */
 void bl2_plat_bl33_post_load_actions(struct image_info *image,
 				     struct el_change_info *ep);
-
 /* Gets the memory layout for BL32 */
 void bl2_plat_get_bl32_meminfo(struct meminfo *mem_info);
-
 /* Gets the memory layout for BL33 */
 void bl2_plat_get_bl33_meminfo(struct meminfo *mem_info);
 
+/*******************************************************************************
+ * Optional BL2 functions (may be overridden)
+ ******************************************************************************/
+
+/*******************************************************************************
+ * Mandatory BL3-1 functions
+ ******************************************************************************/
+void bl31_plat_arch_setup(void);
+void bl31_platform_setup(void);
+struct el_change_info *bl31_get_next_image_info(uint32_t type);
+
+/*******************************************************************************
+ * Mandatory PSCI functions (BL3-1)
+ ******************************************************************************/
+int platform_setup_pm(const struct plat_pm_ops **);
+int plat_get_max_afflvl(void);
+unsigned int plat_get_aff_count(unsigned int, unsigned long);
+unsigned int plat_get_aff_state(unsigned int, unsigned long);
+
+/*******************************************************************************
+ * Mandatory BL3-2 functions (only if platform contains a BL3-2
+ ******************************************************************************/
+void bl32_platform_setup(void);
+struct meminfo *bl32_plat_sec_mem_layout(void);
+
 
 #endif /* __PLATFORM_H__ */
diff --git a/plat/fvp/bl1_plat_setup.c b/plat/fvp/bl1_plat_setup.c
index 0173802f10ff8240110a4e88a5d517dae00c188f..49f21c7990a80c904ad68be791eedb673a56e391 100644
--- a/plat/fvp/bl1_plat_setup.c
+++ b/plat/fvp/bl1_plat_setup.c
@@ -31,7 +31,6 @@
 #include <arch_helpers.h>
 #include <assert.h>
 #include <bl_common.h>
-#include <bl1.h>
 #include <console.h>
 #include <fvp_def.h>
 #include <mmio.h>
diff --git a/plat/fvp/bl2_plat_setup.c b/plat/fvp/bl2_plat_setup.c
index ecc8c467ddc599c902105ba06b9da31a00c7841a..0d3001d1676b5e8a9ee5f931299ab0254ee76c48 100644
--- a/plat/fvp/bl2_plat_setup.c
+++ b/plat/fvp/bl2_plat_setup.c
@@ -31,7 +31,6 @@
 #include <arch_helpers.h>
 #include <assert.h>
 #include <bl_common.h>
-#include <bl2.h>
 #include <console.h>
 #include <fvp_def.h>
 #include <platform.h>
diff --git a/plat/fvp/bl32_plat_setup.c b/plat/fvp/bl32_plat_setup.c
index 3f82962a92b8e262b549610f7e4ad1d0c08eac9d..c12b19c88744ecac4a2db6f81c2fc766c598afd4 100644
--- a/plat/fvp/bl32_plat_setup.c
+++ b/plat/fvp/bl32_plat_setup.c
@@ -28,9 +28,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <arch_helpers.h>
 #include <bl_common.h>
-#include <bl32.h>
 #include <console.h>
 #include <fvp_def.h>
 #include <fvp_private.h>
diff --git a/plat/fvp/fvp_private.h b/plat/fvp/fvp_private.h
index efa1f75ce801d2b3122458bbe3bb00fad87c5f78..5324b7cfaa867e3ef1775a54ac9809fe5960dfc7 100644
--- a/plat/fvp/fvp_private.h
+++ b/plat/fvp/fvp_private.h
@@ -55,9 +55,26 @@ typedef struct bl2_to_bl31_params_mem {
 	el_change_info_t bl31_ep;
 } bl2_to_bl31_params_mem_t;
 
+/*******************************************************************************
+ * Forward declarations
+ ******************************************************************************/
+struct meminfo;
+
 /*******************************************************************************
  * Function and variable prototypes
  ******************************************************************************/
+void configure_mmu_el1(unsigned long total_base,
+		       unsigned long total_size,
+		       unsigned long,
+		       unsigned long,
+		       unsigned long,
+		       unsigned long);
+void configure_mmu_el3(unsigned long total_base,
+		       unsigned long total_size,
+		       unsigned long,
+		       unsigned long,
+		       unsigned long,
+		       unsigned long);
 unsigned long platform_get_cfgvar(unsigned int);
 int platform_config_setup(void);