diff --git a/MdeModulePkg/Core/Dxe/SysCall/IA32/InitializeIA32.c b/MdeModulePkg/Core/Dxe/SysCall/IA32/InitializeIA32.c
index f9fe87feb6..60a9672e47 100644
--- a/MdeModulePkg/Core/Dxe/SysCall/IA32/InitializeIA32.c
+++ b/MdeModulePkg/Core/Dxe/SysCall/IA32/InitializeIA32.c
@@ -13,7 +13,7 @@
 VOID
 EFIAPI
 MakeUserPageTableTemplate (
-  OUT VOID   **UserPageTableTemplate,
+  OUT UINTN  *UserPageTableTemplate,
   OUT UINTN  *UserPageTableTemplateSize
   )
 {
@@ -83,7 +83,7 @@ MakeUserPageTableTemplate (
       );
   }
 
-  *UserPageTableTemplate     = (VOID *)PageMap;
+  *UserPageTableTemplate     = (UINTN)PageMap;
   *UserPageTableTemplateSize = EFI_PAGES_TO_SIZE (TotalPagesNum);
 }
 
diff --git a/MdeModulePkg/Core/Dxe/SysCall/Initialization.c b/MdeModulePkg/Core/Dxe/SysCall/Initialization.c
index d2c18cb3e0..df9fc4a8b5 100644
--- a/MdeModulePkg/Core/Dxe/SysCall/Initialization.c
+++ b/MdeModulePkg/Core/Dxe/SysCall/Initialization.c
@@ -19,8 +19,6 @@ VOID        *gRing3Interfaces;
 UINTN       gUartBaseAddress;
 
 UEFI_IMAGE_RECORD    *mDxeRing3;
-VOID                 *mUserPageTableTemplate;
-UINTN                mUserPageTableTemplateSize;
 EXCEPTION_ADDRESSES  *mExceptionAddresses;
 
 extern UINTN         SysCallBase;
@@ -29,7 +27,7 @@ extern UINTN         SysCallEnd;
 VOID
 EFIAPI
 MakeUserPageTableTemplate (
-  OUT VOID   **UserPageTableTemplate,
+  OUT UINTN  *UserPageTableTemplate,
   OUT UINTN  *UserPageTableTemplateSize
   );
 
@@ -195,8 +193,6 @@ InitializeRing3 (
     gRing3Data->SystemTable.NumberOfTableEntries
     );
 
-  MakeUserPageTableTemplate (&mUserPageTableTemplate, &mUserPageTableTemplateSize);
-
   mExceptionAddresses = GetExceptionAddresses ();
 
   return Status;
@@ -209,15 +205,17 @@ InitializeUserPageTable (
   )
 {
   UINTN                      UserPageTable;
+  UINTN                      UserPageTableSize;
   UEFI_IMAGE_RECORD_SEGMENT  *ImageRecordSegment;
   UINTN                      SectionAddress;
   UINT32                     Index;
   UEFI_IMAGE_RECORD          *UserImageRecord;
   IA32_DESCRIPTOR            IdtDescriptor;
 
-  UserPageTable = (UINTN)AllocatePages (EFI_SIZE_TO_PAGES (mUserPageTableTemplateSize));
-
-  CopyMem ((VOID *)UserPageTable, mUserPageTableTemplate, mUserPageTableTemplateSize);
+  //
+  // TODO: Remove ASSERTs, add proper checks and return status.
+  //
+  MakeUserPageTableTemplate (&UserPageTable, &UserPageTableSize);
 
   //
   // Map gRing3Data, gRing3Interfaces, gRing3CallStackBase, DxeRing3
diff --git a/MdeModulePkg/Core/Dxe/SysCall/X64/InitializeX64.c b/MdeModulePkg/Core/Dxe/SysCall/X64/InitializeX64.c
index 3754ab65f4..662e96b8b9 100644
--- a/MdeModulePkg/Core/Dxe/SysCall/X64/InitializeX64.c
+++ b/MdeModulePkg/Core/Dxe/SysCall/X64/InitializeX64.c
@@ -14,7 +14,7 @@
 VOID
 EFIAPI
 MakeUserPageTableTemplate (
-  OUT VOID   **UserPageTableTemplate,
+  OUT UINTN  *UserPageTableTemplate,
   OUT UINTN  *UserPageTableTemplateSize
   )
 {
@@ -280,7 +280,7 @@ MakeUserPageTableTemplate (
     ZeroMem (PageMapLevel5Entry, (512 - IndexOfPml5Entries) * sizeof (PAGE_MAP_AND_DIRECTORY_POINTER));
   }
 
-  *UserPageTableTemplate     = (VOID *)PageMap;
+  *UserPageTableTemplate     = (UINTN)PageMap;
   *UserPageTableTemplateSize = EFI_PAGES_TO_SIZE (TotalPagesNum);
 }