diff --git a/AppPkg/AppPkg.dsc b/AppPkg/AppPkg.dsc
index d0aac2c..491332a 100644
--- a/AppPkg/AppPkg.dsc
+++ b/AppPkg/AppPkg.dsc
@@ -82,7 +82,7 @@
   ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
   FileHandleLib|ShellPkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
   SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
-  PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
+  PathLib|MdeModulePkg/Library/BasePathLib/BasePathLib.inf
 
   CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf
 
diff --git a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc
index f1cb780..fb580d6 100644
--- a/EmulatorPkg/EmulatorPkg.dsc
+++ b/EmulatorPkg/EmulatorPkg.dsc
@@ -391,7 +391,7 @@
       ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
       SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
       PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
-      PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
+      PathLib|MdeModulePkg/Library/BasePathLib/BasePathLib.inf
 #      MemoryAllocationLib|EmulatorPkg/Library/GuardUefiMemoryAllocationLib/GuardUefiMemoryAllocationLib.inf
 #      SafeBlockIoLib|ShellPkg/Library/SafeBlockIoLib/SafeBlockIoLib.inf
 #      SafeOpenProtocolLib|ShellPkg/Library/SafeOpenProtocolLib/SafeOpenProtocolLib.inf
diff --git a/MdeModulePkg/Include/Library/PathLib.h b/MdeModulePkg/Include/Library/PathLib.h
new file mode 100644
index 0000000..ee47352
--- /dev/null
+++ b/MdeModulePkg/Include/Library/PathLib.h
@@ -0,0 +1,56 @@
+/** @file
+  Provides interface to path manipulation functions.
+
+  Copyright (c) 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 _PATH_LIB_
+#define _PATH_LIB_
+
+#include <Base.h>
+#include <Library/BaseMemoryLib.h>
+
+/**
+  Removes the last directory or file entry in a path by changing the last
+  L'\' to a CHAR_NULL.
+
+  @param[in, out] Path    The pointer to the path to modify.
+
+  @retval FALSE     Nothing was found to remove.
+  @retval TRUE      A directory or file was removed.
+**/
+BOOLEAN
+EFIAPI
+PathRemoveLastItem(
+  IN OUT CHAR16 *Path
+  );
+
+/**
+  Function to clean up paths.  
+  
+  - Single periods in the path are removed.
+  - Double periods in the path are removed along with a single parent directory.
+  - Forward slashes L'/' are converted to backward slashes L'\'.
+
+  This will be done inline and the existing buffer may be larger than required 
+  upon completion.
+
+  @param[in] Path       The pointer to the string containing the path.
+
+  @retval NULL          An error occured.
+  @return Path in all other instances.
+**/
+CHAR16*
+EFIAPI
+PathCleanUpDirectories(
+  IN CHAR16 *Path
+  );
+
+#endif //_PATH_LIB_
diff --git a/MdeModulePkg/Library/BasePathLib/BasePathLib.c b/MdeModulePkg/Library/BasePathLib/BasePathLib.c
new file mode 100644
index 0000000..cc46c0f
--- /dev/null
+++ b/MdeModulePkg/Library/BasePathLib/BasePathLib.c
@@ -0,0 +1,123 @@
+/** @file
+  Provides interface to path manipulation functions.
+
+  Copyright (c) 2011 - 2014, 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.
+**/
+
+#include <Base.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/PathLib.h>
+#include <Library/BaseLib.h>
+#include <Protocol/SimpleTextIn.h> 
+
+/**
+  Removes the last directory or file entry in a path by changing the last
+  L'\' to a CHAR_NULL.
+
+  @param[in, out] Path    The pointer to the path to modify.
+
+  @retval FALSE     Nothing was found to remove.
+  @retval TRUE      A directory or file was removed.
+**/
+BOOLEAN
+EFIAPI
+PathRemoveLastItem(
+  IN OUT CHAR16 *Path
+  )
+{
+  CHAR16        *Walker;
+  CHAR16        *LastSlash;
+  //
+  // get directory name from path... ('chop' off extra)
+  //
+  for ( Walker = Path, LastSlash = NULL
+      ; Walker != NULL && *Walker != CHAR_NULL
+      ; Walker++
+     ){
+    if (*Walker == L'\\' && *(Walker + 1) != CHAR_NULL) {
+      LastSlash = Walker+1;
+    }
+  }
+  if (LastSlash != NULL) {
+    *LastSlash = CHAR_NULL;
+    return (TRUE);
+  }
+  return (FALSE);
+}
+
+/**
+  Function to clean up paths.  
+  
+  - Single periods in the path are removed.
+  - Double periods in the path are removed along with a single parent directory.
+  - Forward slashes L'/' are converted to backward slashes L'\'.
+
+  This will be done inline and the existing buffer may be larger than required 
+  upon completion.
+
+  @param[in] Path       The pointer to the string containing the path.
+
+  @retval NULL          An error occured.
+  @return Path in all other instances.
+**/
+CHAR16*
+EFIAPI
+PathCleanUpDirectories(
+  IN CHAR16 *Path
+  )
+{
+  CHAR16  *TempString;
+  UINTN   TempSize;
+  if (Path==NULL) {
+    return(NULL);
+  }
+
+  //
+  // Fix up the '/' vs '\'
+  //
+  for (TempString = Path ; TempString != NULL && *TempString != CHAR_NULL ; TempString++) {
+    if (*TempString == L'/') {
+      *TempString = L'\\';
+    }
+  }
+
+  //
+  // Fix up the ..
+  //
+  while ((TempString = StrStr(Path, L"\\..\\")) != NULL) {
+    *TempString = CHAR_NULL;
+    TempString  += 4;
+    PathRemoveLastItem(Path);
+    TempSize = StrSize(TempString);
+    CopyMem(Path+StrLen(Path), TempString, TempSize);
+  }
+  if ((TempString = StrStr(Path, L"\\..")) != NULL && *(TempString + 3) == CHAR_NULL) {
+    *TempString = CHAR_NULL;
+    PathRemoveLastItem(Path);
+  }
+
+  //
+  // Fix up the .
+  //
+  while ((TempString = StrStr(Path, L"\\.\\")) != NULL) {
+    *TempString = CHAR_NULL;
+    TempString  += 2;
+    TempSize = StrSize(TempString);
+    CopyMem(Path+StrLen(Path), TempString, TempSize);
+  }
+  if ((TempString = StrStr(Path, L"\\.")) != NULL && *(TempString + 2) == CHAR_NULL) {
+    *(TempString + 1) = CHAR_NULL;
+  }
+
+
+
+  return (Path);
+}
+
diff --git a/MdeModulePkg/Library/BasePathLib/BasePathLib.inf b/MdeModulePkg/Library/BasePathLib/BasePathLib.inf
new file mode 100644
index 0000000..7346968
--- /dev/null
+++ b/MdeModulePkg/Library/BasePathLib/BasePathLib.inf
@@ -0,0 +1,38 @@
+##  @file
+#  Provides interface to path manipulation functions.
+#
+#  Copyright (c) 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.
+#
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010006
+  BASE_NAME                      = BasePathLib
+  FILE_GUID                      = ED244F93-B97A-4a17-83E0-A03CF2A7F7B4
+  MODULE_TYPE                    = UEFI_DRIVER
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = PathLib|UEFI_APPLICATION UEFI_DRIVER
+
+#
+#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
+#
+
+[Sources.common]
+  BasePathLib.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+
+[LibraryClasses]
+  BaseMemoryLib
+  BaseLib
\ No newline at end of file
diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
index 5adf4c0..9c51c82 100644
--- a/OvmfPkg/OvmfPkgIa32.dsc
+++ b/OvmfPkg/OvmfPkgIa32.dsc
@@ -538,7 +538,7 @@
       ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
       SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
       PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
-      PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
+      PathLib|MdeModulePkg/Library/BasePathLib/BasePathLib.inf
 #      SafeBlockIoLib|ShellPkg/Library/SafeBlockIoLib/SafeBlockIoLib.inf
 #      SafeOpenProtocolLib|ShellPkg/Library/SafeOpenProtocolLib/SafeOpenProtocolLib.inf
 
diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
index 75ff5f0..7cd2715 100644
--- a/OvmfPkg/OvmfPkgIa32X64.dsc
+++ b/OvmfPkg/OvmfPkgIa32X64.dsc
@@ -545,7 +545,7 @@
       ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
       SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
       PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
-      PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
+      PathLib|MdeModulePkg/Library/BasePathLib/BasePathLib.inf
 #      SafeBlockIoLib|ShellPkg/Library/SafeBlockIoLib/SafeBlockIoLib.inf
 #      SafeOpenProtocolLib|ShellPkg/Library/SafeOpenProtocolLib/SafeOpenProtocolLib.inf
 
diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
index 7a1e0ee..abf770d 100644
--- a/OvmfPkg/OvmfPkgX64.dsc
+++ b/OvmfPkg/OvmfPkgX64.dsc
@@ -543,7 +543,7 @@
       ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
       SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
       PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
-      PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
+      PathLib|MdeModulePkg/Library/BasePathLib/BasePathLib.inf
 #      SafeBlockIoLib|ShellPkg/Library/SafeBlockIoLib/SafeBlockIoLib.inf
 #      SafeOpenProtocolLib|ShellPkg/Library/SafeOpenProtocolLib/SafeOpenProtocolLib.inf
 
diff --git a/ShellPkg/Include/Library/PathLib.h b/ShellPkg/Include/Library/PathLib.h
deleted file mode 100644
index ee47352..0000000
--- a/ShellPkg/Include/Library/PathLib.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/** @file
-  Provides interface to path manipulation functions.
-
-  Copyright (c) 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 _PATH_LIB_
-#define _PATH_LIB_
-
-#include <Base.h>
-#include <Library/BaseMemoryLib.h>
-
-/**
-  Removes the last directory or file entry in a path by changing the last
-  L'\' to a CHAR_NULL.
-
-  @param[in, out] Path    The pointer to the path to modify.
-
-  @retval FALSE     Nothing was found to remove.
-  @retval TRUE      A directory or file was removed.
-**/
-BOOLEAN
-EFIAPI
-PathRemoveLastItem(
-  IN OUT CHAR16 *Path
-  );
-
-/**
-  Function to clean up paths.  
-  
-  - Single periods in the path are removed.
-  - Double periods in the path are removed along with a single parent directory.
-  - Forward slashes L'/' are converted to backward slashes L'\'.
-
-  This will be done inline and the existing buffer may be larger than required 
-  upon completion.
-
-  @param[in] Path       The pointer to the string containing the path.
-
-  @retval NULL          An error occured.
-  @return Path in all other instances.
-**/
-CHAR16*
-EFIAPI
-PathCleanUpDirectories(
-  IN CHAR16 *Path
-  );
-
-#endif //_PATH_LIB_
diff --git a/ShellPkg/Library/BasePathLib/BasePathLib.c b/ShellPkg/Library/BasePathLib/BasePathLib.c
deleted file mode 100644
index cc46c0f..0000000
--- a/ShellPkg/Library/BasePathLib/BasePathLib.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/** @file
-  Provides interface to path manipulation functions.
-
-  Copyright (c) 2011 - 2014, 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.
-**/
-
-#include <Base.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/PathLib.h>
-#include <Library/BaseLib.h>
-#include <Protocol/SimpleTextIn.h> 
-
-/**
-  Removes the last directory or file entry in a path by changing the last
-  L'\' to a CHAR_NULL.
-
-  @param[in, out] Path    The pointer to the path to modify.
-
-  @retval FALSE     Nothing was found to remove.
-  @retval TRUE      A directory or file was removed.
-**/
-BOOLEAN
-EFIAPI
-PathRemoveLastItem(
-  IN OUT CHAR16 *Path
-  )
-{
-  CHAR16        *Walker;
-  CHAR16        *LastSlash;
-  //
-  // get directory name from path... ('chop' off extra)
-  //
-  for ( Walker = Path, LastSlash = NULL
-      ; Walker != NULL && *Walker != CHAR_NULL
-      ; Walker++
-     ){
-    if (*Walker == L'\\' && *(Walker + 1) != CHAR_NULL) {
-      LastSlash = Walker+1;
-    }
-  }
-  if (LastSlash != NULL) {
-    *LastSlash = CHAR_NULL;
-    return (TRUE);
-  }
-  return (FALSE);
-}
-
-/**
-  Function to clean up paths.  
-  
-  - Single periods in the path are removed.
-  - Double periods in the path are removed along with a single parent directory.
-  - Forward slashes L'/' are converted to backward slashes L'\'.
-
-  This will be done inline and the existing buffer may be larger than required 
-  upon completion.
-
-  @param[in] Path       The pointer to the string containing the path.
-
-  @retval NULL          An error occured.
-  @return Path in all other instances.
-**/
-CHAR16*
-EFIAPI
-PathCleanUpDirectories(
-  IN CHAR16 *Path
-  )
-{
-  CHAR16  *TempString;
-  UINTN   TempSize;
-  if (Path==NULL) {
-    return(NULL);
-  }
-
-  //
-  // Fix up the '/' vs '\'
-  //
-  for (TempString = Path ; TempString != NULL && *TempString != CHAR_NULL ; TempString++) {
-    if (*TempString == L'/') {
-      *TempString = L'\\';
-    }
-  }
-
-  //
-  // Fix up the ..
-  //
-  while ((TempString = StrStr(Path, L"\\..\\")) != NULL) {
-    *TempString = CHAR_NULL;
-    TempString  += 4;
-    PathRemoveLastItem(Path);
-    TempSize = StrSize(TempString);
-    CopyMem(Path+StrLen(Path), TempString, TempSize);
-  }
-  if ((TempString = StrStr(Path, L"\\..")) != NULL && *(TempString + 3) == CHAR_NULL) {
-    *TempString = CHAR_NULL;
-    PathRemoveLastItem(Path);
-  }
-
-  //
-  // Fix up the .
-  //
-  while ((TempString = StrStr(Path, L"\\.\\")) != NULL) {
-    *TempString = CHAR_NULL;
-    TempString  += 2;
-    TempSize = StrSize(TempString);
-    CopyMem(Path+StrLen(Path), TempString, TempSize);
-  }
-  if ((TempString = StrStr(Path, L"\\.")) != NULL && *(TempString + 2) == CHAR_NULL) {
-    *(TempString + 1) = CHAR_NULL;
-  }
-
-
-
-  return (Path);
-}
-
diff --git a/ShellPkg/Library/BasePathLib/BasePathLib.inf b/ShellPkg/Library/BasePathLib/BasePathLib.inf
deleted file mode 100644
index a9bd6a8..0000000
--- a/ShellPkg/Library/BasePathLib/BasePathLib.inf
+++ /dev/null
@@ -1,38 +0,0 @@
-##  @file
-#  Provides interface to path manipulation functions.
-#
-#  Copyright (c) 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.
-#
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010006
-  BASE_NAME                      = BasePathLib
-  FILE_GUID                      = ED244F93-B97A-4a17-83E0-A03CF2A7F7B4
-  MODULE_TYPE                    = UEFI_DRIVER
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = PathLib|UEFI_APPLICATION UEFI_DRIVER
-
-#
-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
-#
-
-[Sources.common]
-  BasePathLib.c
-
-[Packages]
-  MdePkg/MdePkg.dec
-  ShellPkg/ShellPkg.dec
-  
-
-[LibraryClasses]
-  BaseMemoryLib
-  BaseLib
\ No newline at end of file
diff --git a/ShellPkg/ShellPkg.dsc b/ShellPkg/ShellPkg.dsc
index 3284c1c..86c5d4d 100644
--- a/ShellPkg/ShellPkg.dsc
+++ b/ShellPkg/ShellPkg.dsc
@@ -48,7 +48,7 @@
   HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
   
   PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
-  PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
+  PathLib|MdeModulePkg/Library/BasePathLib/BasePathLib.inf
 
 [LibraryClasses.ARM]
   #
diff --git a/StdLib/StdLib.dsc b/StdLib/StdLib.dsc
index b0309e2..e3fe99a 100644
--- a/StdLib/StdLib.dsc
+++ b/StdLib/StdLib.dsc
@@ -82,7 +82,7 @@
   ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
   FileHandleLib|ShellPkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
   SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
-  PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
+  PathLib|MdeModulePkg/Library/BasePathLib/BasePathLib.inf
 
 ###################################################################################################
 #
diff --git a/StdLib/StdLib.inc b/StdLib/StdLib.inc
index 0c8b04f..64604a3 100644
--- a/StdLib/StdLib.inc
+++ b/StdLib/StdLib.inc
@@ -28,7 +28,7 @@
   ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
   FileHandleLib|ShellPkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
   SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
-  PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
+  PathLib|MdeModulePkg/Library/BasePathLib/BasePathLib.inf
   ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
 
   #
