diff --git a/MdePkg/Include/Protocol/UserCredential.h b/MdePkg/Include/Protocol/UserCredential.h
index a16bcae..227f7fa 100644
--- a/MdePkg/Include/Protocol/UserCredential.h
+++ b/MdePkg/Include/Protocol/UserCredential.h
@@ -1,5 +1,6 @@
 /** @file
-  UEFI 2.2 User Credential Protocol definition.
+  UEFI 2.2 User Credential Protocol definition.It has been removed from UEFI 2.3.1 and replaced
+  by EFI_USER_CREDENTIAL2_PROTOCOL.
 
   Attached to a device handle, this protocol identifies a single means of identifying the user.
 
diff --git a/MdePkg/Include/Protocol/UserCredential2.h b/MdePkg/Include/Protocol/UserCredential2.h
new file mode 100644
index 0000000..59694e6
--- /dev/null
+++ b/MdePkg/Include/Protocol/UserCredential2.h
@@ -0,0 +1,314 @@
+/** @file
+  UEFI 2.3.1 User Credential Protocol definition.
+
+  Attached to a device handle, this protocol identifies a single means of identifying the user.
+
+  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
+  This program and the accompanying materials                          
+  are licensed and made available under the terms and conditions of the BSD License         
+  which accompanies this distribution.  The full text of the license may be found at        
+  http://opensource.org/licenses/bsd-license.php                                            
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
+
+**/
+
+#ifndef __USER_CREDENTIAL2_H__
+#define __USER_CREDENTIAL2_H__
+
+#include <Protocol/UserManager.h>
+
+#define EFI_USER_CREDENTIAL2_PROTOCOL_GUID \
+  { \
+    0xe98adb03, 0xb8b9, 0x4af8, { 0xba, 0x20, 0x26, 0xe9, 0x11, 0x4c, 0xbc, 0xe5 } \
+  }
+
+typedef struct _EFI_USER_CREDENTIAL2_PROTOCOL  EFI_USER_CREDENTIAL2_PROTOCOL;
+
+/**
+  Enroll a user on a credential provider.
+
+  This function enrolls a user on this credential provider. If the user exists on this credential 
+  provider, update the user information on this credential provider; otherwise add the user information 
+  on credential provider.
+
+  @param[in] This                Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[in] User                The user profile to enroll.
+ 
+  @retval EFI_SUCCESS            User profile was successfully enrolled.
+  @retval EFI_ACCESS_DENIED      Current user profile does not permit enrollment on the user profile 
+                                 handle. Either the user profile cannot enroll on any user profile or 
+                                 cannot enroll on a user profile other than the current user profile.
+  @retval EFI_UNSUPPORTED        This credential provider does not support enrollment in the pre-OS.
+  @retval EFI_DEVICE_ERROR       The new credential could not be created because of a device error.
+  @retval EFI_INVALID_PARAMETER  User does not refer to a valid user profile handle.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_ENROLL)(
+  IN CONST EFI_USER_CREDENTIAL2_PROTOCOL  *This,
+  IN       EFI_USER_PROFILE_HANDLE        User
+  );
+
+/**
+  Returns the user interface information used during user identification.
+
+  This function returns information about the form used when interacting with the user during user 
+  identification. The form is the first enabled form in the form-set class 
+  EFI_HII_USER_CREDENTIAL_FORMSET_GUID installed on the HII handle HiiHandle. If 
+  the user credential provider does not require a form to identify the user, then this function should 
+  return EFI_NOT_FOUND.
+
+  @param[in]  This               Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[out] Hii                On return, holds the HII database handle.
+  @param[out] FormSetId          On return, holds the identifier of the form set which contains
+                                 the form used during user identification.
+  @param[out] FormId             On return, holds the identifier of the form used during user 
+                                 identification.
+ 
+  @retval EFI_SUCCESS            Form returned successfully.
+  @retval EFI_NOT_FOUND          Form not returned.
+  @retval EFI_INVALID_PARAMETER  Hii is NULL or FormSetId is NULL or FormId is NULL.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_FORM)(
+  IN CONST EFI_USER_CREDENTIAL2_PROTOCOL *This,
+  OUT      EFI_HII_HANDLE                *Hii,
+  OUT      EFI_GUID                      *FormSetId,
+  OUT      EFI_FORM_ID                   *FormId
+  );
+
+/**
+  Returns bitmap used to describe the credential provider type.
+
+  This optional function returns a bitmap which is less than or equal to the number of pixels specified 
+  by Width and Height. If no such bitmap exists, then EFI_NOT_FOUND is returned. 
+
+  @param[in]      This           Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[in, out] Width          On entry, points to the desired bitmap width. If NULL then no bitmap
+                                 information will be returned. On exit, points to the width of the  
+                                 bitmap returned.
+  @param[in, out] Height         On entry, points to the desired bitmap height. If NULL then no bitmap 
+                                 information will be returned. On exit, points to the height of the  
+                                 bitmap returned
+  @param[out]     Hii            On return, holds the HII database handle. 
+  @param[out]     Image          On return, holds the HII image identifier. 
+ 
+  @retval EFI_SUCCESS            Image identifier returned successfully.
+  @retval EFI_NOT_FOUND          Image identifier not returned.
+  @retval EFI_INVALID_PARAMETER  Hii is NULL or Image is NULL.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_TILE)(
+  IN CONST EFI_USER_CREDENTIAL2_PROTOCOL *This,
+  IN OUT   UINTN                         *Width,
+  IN OUT   UINTN                         *Height,
+  OUT      EFI_HII_HANDLE                *Hii,
+  OUT      EFI_IMAGE_ID                  *Image
+  );
+
+/**
+  Returns string used to describe the credential provider type.
+
+  This function returns a string which describes the credential provider. If no such string exists, then 
+  EFI_NOT_FOUND is returned. 
+
+  @param[in]  This               Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[out] Hii                On return, holds the HII database handle.
+  @param[out] String             On return, holds the HII string identifier.
+ 
+  @retval EFI_SUCCESS            String identifier returned successfully.
+  @retval EFI_NOT_FOUND          String identifier not returned.
+  @retval EFI_INVALID_PARAMETER  Hii is NULL or String is NULL.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_TITLE)(
+  IN CONST EFI_USER_CREDENTIAL2_PROTOCOL *This,
+  OUT      EFI_HII_HANDLE                *Hii,
+  OUT      EFI_STRING_ID                 *String
+  );
+
+/**
+  Return the user identifier associated with the currently authenticated user.
+
+  This function returns the user identifier of the user authenticated by this credential provider. This 
+  function is called after the credential-related information has been submitted on a form OR after a 
+  call to Default() has returned that this credential is ready to log on.
+
+  @param[in]  This               Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[in]  User               The user profile handle of the user profile currently being considered 
+                                 by the user identity manager. If NULL, then no user profile is currently 
+                                 under consideration.
+  @param[out] Identifier         On return, points to the user identifier. 
+ 
+  @retval EFI_SUCCESS            User identifier returned successfully.
+  @retval EFI_NOT_READY          No user identifier can be returned.
+  @retval EFI_ACCESS_DENIED      The user has been locked out of this user credential.
+  @retval EFI_NOT_FOUND          User is not NULL, and the specified user handle can't be found in user 
+                                 profile database 
+  @retval EFI_INVALID_PARAMETER  Identifier is NULL.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_USER)(
+  IN CONST EFI_USER_CREDENTIAL2_PROTOCOL *This,
+  IN       EFI_USER_PROFILE_HANDLE       User,
+  OUT      EFI_USER_INFO_IDENTIFIER      *Identifier
+  );
+
+/**
+  Indicate that user interface interaction has begun for the specified credential.
+
+  This function is called when a credential provider is selected by the user. If AutoLogon returns 
+  FALSE, then the user interface will be constructed by the User Identity Manager. 
+
+  @param[in]  This               Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[out] AutoLogon          On return, points to the credential provider's capabilities after 
+                                 the credential provider has been selected by the user. 
+ 
+  @retval EFI_SUCCESS            Credential provider successfully selected.
+  @retval EFI_INVALID_PARAMETER  AutoLogon is NULL.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_SELECT)(
+  IN CONST EFI_USER_CREDENTIAL2_PROTOCOL *This,
+  OUT      EFI_CREDENTIAL_LOGON_FLAGS    *AutoLogon
+  ); 
+
+/**
+  Indicate that user interface interaction has ended for the specified credential.
+
+  This function is called when a credential provider is deselected by the user.
+
+  @param[in] This        Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+ 
+  @retval EFI_SUCCESS    Credential provider successfully deselected.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_DESELECT)(
+  IN CONST EFI_USER_CREDENTIAL2_PROTOCOL *This
+  );
+
+/**
+  Return the default logon behavior for this user credential.
+
+  This function reports the default login behavior regarding this credential provider.  
+
+  @param[in]  This               Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[out] AutoLogon          On return, holds whether the credential provider should be 
+                                 used by default to automatically log on the user.  
+ 
+  @retval EFI_SUCCESS            Default information successfully returned.
+  @retval EFI_INVALID_PARAMETER  AutoLogon is NULL.
+**/
+typedef 
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_DEFAULT)(
+  IN  CONST EFI_USER_CREDENTIAL2_PROTOCOL       *This,
+  OUT EFI_CREDENTIAL_LOGON_FLAGS                *AutoLogon
+  );
+
+/**
+  Return information attached to the credential provider.
+
+  This function returns user information. 
+
+  @param[in]     This           Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[in]     UserInfo       Handle of the user information data record. 
+  @param[out]    Info           On entry, points to a buffer of at least *InfoSize bytes. On exit, holds the user 
+                                information. If the buffer is too small to hold the information, then 
+                                EFI_BUFFER_TOO_SMALL is returned and InfoSize is updated to contain the 
+                                number of bytes actually required.
+  @param[in,out] InfoSize       On entry, points to the size of Info. On return, points to the size of the user 
+                                information. 
+ 
+  @retval EFI_SUCCESS           Information returned successfully.
+  @retval EFI_BUFFER_TOO_SMALL  The size specified by InfoSize is too small to hold all of the user 
+                                information. The size required is returned in *InfoSize.
+  @retval EFI_NOT_FOUND         The specified UserInfo does not refer to a valid user info handle.
+  @retval EFI_INVALID_PARAMETER Info is NULL or InfoSize is NULL.                                
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_GET_INFO)(
+  IN CONST EFI_USER_CREDENTIAL2_PROTOCOL *This,
+  IN       EFI_USER_INFO_HANDLE          UserInfo,
+  OUT      EFI_USER_INFO                 *Info,
+  IN OUT   UINTN                         *InfoSize
+  );
+
+/**
+  Enumerate all of the user information records on the credential provider.
+
+  This function returns the next user information record. To retrieve the first user information record 
+  handle, point UserInfo at a NULL. Each subsequent call will retrieve another user information 
+  record handle until there are no more, at which point UserInfo will point to NULL. 
+
+  @param[in]     This            Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[in,out] UserInfo        On entry, points to the previous user information handle or NULL to  
+                                 start enumeration. On exit, points to the next user information handle 
+                                 or NULL if there is no more user information.
+ 
+  @retval EFI_SUCCESS            User information returned.
+  @retval EFI_NOT_FOUND          No more user information found.
+  @retval EFI_INVALID_PARAMETER  UserInfo is NULL.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREDENTIAL_GET_NEXT_INFO)(
+  IN CONST EFI_USER_CREDENTIAL2_PROTOCOL *This,
+  IN OUT   EFI_USER_INFO_HANDLE          *UserInfo
+  );
+
+/**
+  Delete a user on this credential provider.
+
+  This function deletes a user on this credential provider. 
+
+  @param[in]     This            Points to this instance of the EFI_USER_CREDENTIAL2_PROTOCOL.
+  @param[in]     User            The user profile handle to delete.
+
+  @retval EFI_SUCCESS            User profile was successfully deleted.
+  @retval EFI_ACCESS_DENIED      Current user profile does not permit deletion on the user profile handle. 
+                                 Either the user profile cannot delete on any user profile or cannot delete 
+                                 on a user profile other than the current user profile. 
+  @retval EFI_UNSUPPORTED        This credential provider does not support deletion in the pre-OS.
+  @retval EFI_DEVICE_ERROR       The new credential could not be deleted because of a device error.
+  @retval EFI_INVALID_PARAMETER  User does not refer to a valid user profile handle.
+**/
+typedef 
+EFI_STATUS 
+(EFIAPI *EFI_CREDENTIAL_DELETE)(
+ IN CONST EFI_USER_CREDENTIAL2_PROTOCOL  *This,
+ IN       EFI_USER_PROFILE_HANDLE        User
+);
+
+///
+/// This protocol provides support for a single class of credentials
+///
+struct _EFI_USER_CREDENTIAL2_PROTOCOL {
+  EFI_GUID                      Identifier;  ///< Uniquely identifies this credential provider.
+  EFI_GUID                      Type;        ///< Identifies this class of User Credential Provider.
+  EFI_CREDENTIAL_ENROLL         Enroll;
+  EFI_CREDENTIAL_FORM           Form;
+  EFI_CREDENTIAL_TILE           Tile;
+  EFI_CREDENTIAL_TITLE          Title;
+  EFI_CREDENTIAL_USER           User;
+  EFI_CREDENTIAL_SELECT         Select;   
+  EFI_CREDENTIAL_DESELECT       Deselect;
+  EFI_CREDENTIAL_DEFAULT        Default;
+  EFI_CREDENTIAL_GET_INFO       GetInfo;
+  EFI_CREDENTIAL_GET_NEXT_INFO  GetNextInfo;
+  EFI_CREDENTIAL_CAPABILITIES   Capabilities;
+  EFI_CREDENTIAL_DELETE         Delete; 
+};
+
+extern EFI_GUID gEfiUserCredential2ProtocolGuid;
+
+#endif
diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
index 132fe7a..3878733 100644
--- a/MdePkg/MdePkg.dec
+++ b/MdePkg/MdePkg.dec
@@ -1237,6 +1237,9 @@
   ## Include/Protocol/StorageSecurityCommand.h
   gEfiStorageSecurityCommandProtocolGuid    = { 0xc88b0b6d, 0x0dfc, 0x49a7, {0x9c, 0xb4, 0x49, 0x7, 0x4b, 0x4c, 0x3a, 0x78 }}
 
+  ## Include/Protocol/UserCredential2.h
+  gEfiUserCredential2ProtocolGuid       = { 0xe98adb03, 0xb8b9, 0x4af8, {0xba, 0x20, 0x26, 0xe9, 0x11, 0x4c, 0xbc, 0xe5 }}
+
 [PcdsFeatureFlag]
   ## If TRUE, the component name protocol will not be installed.
   gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|FALSE|BOOLEAN|0x0000000d
