diff --git a/bl31/bl31_main.c b/bl31/bl31_main.c
index 536bb864c5e7325f68242ad24c44a6b17cfc17de..cee5a04e21511d837af97dd1d526939db53db1df 100644
--- a/bl31/bl31_main.c
+++ b/bl31/bl31_main.c
@@ -173,6 +173,14 @@ void bl31_prepare_next_image_entry()
 	if (image_type == NON_SECURE)
 		scr |= SCR_NS_BIT;
 
+	/*
+	 * Setup general purpose registers context for next image.
+	 */
+	cpu_context *context = cm_get_context(read_mpidr(),
+					next_image_info->security_state);
+	memcpy(&context->gpregs_ctx, &next_image_info->args,
+					sizeof(next_image_info->args));
+
 	/*
 	 * Tell the context mgmt. library to ensure that SP_EL3 points to
 	 * the right context to exit from EL3 correctly.
diff --git a/plat/juno/bl31_plat_setup.c b/plat/juno/bl31_plat_setup.c
index 19f2085d82807ab24729bc082499a2e518ecf7f7..620c0133eea149c57d30279c56a96231f549779b 100644
--- a/plat/juno/bl31_plat_setup.c
+++ b/plat/juno/bl31_plat_setup.c
@@ -108,6 +108,9 @@ void bl31_early_platform_setup(bl31_args *from_bl2,
 			       void *data)
 {
 	bl2_to_bl31_args = *from_bl2;
+
+	/* UEFI expects x0 to be primary CPU MPID */
+	bl2_to_bl31_args.bl33_image_info.args.arg0 = PRIMARY_CPU;
 }
 
 /*******************************************************************************
diff --git a/plat/juno/platform.h b/plat/juno/platform.h
index c85b270a909e44dad37b8ad274c992aef1c49f92..e6f8a4179b876f14cc840cdbc7e96bbfc77a1c20 100644
--- a/plat/juno/platform.h
+++ b/plat/juno/platform.h
@@ -62,7 +62,7 @@
 
 /* Non-Trusted Firmware BL3-3 and its load address */
 #define BL33_IMAGE_NAME			"bl33.bin" /* e.g. UEFI */
-#define NS_IMAGE_OFFSET			(DRAM_BASE + 0x8000000) /* DRAM + 128MB */
+#define NS_IMAGE_OFFSET			0xE0000000
 
 /* Firmware Image Package */
 #define FIP_IMAGE_NAME			"fip.bin"