Index: Source/Python/UPT/InstallPkg.py
===================================================================
--- Source/Python/UPT/InstallPkg.py	(revision 17650)
+++ Source/Python/UPT/InstallPkg.py	(working copy)
@@ -1,7 +1,7 @@
 ## @file
 # Install distribution package.
 #
-# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2011 - 2015, 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 
@@ -556,15 +556,16 @@
         Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(),
             platform) + format_exc())
     finally:
-        Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_STARTED)
-        if DistFile:
-            DistFile.Close()
-        if ContentZipFile:
-            ContentZipFile.Close()
-        if GlobalData.gUNPACK_DIR:
-            rmtree(GlobalData.gUNPACK_DIR)
-            GlobalData.gUNPACK_DIR = None
-        Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_DONE)
+        if ReturnCode != UPT_ALREADY_INSTALLED_ERROR:
+            Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_STARTED)
+            if DistFile:
+                DistFile.Close()
+            if ContentZipFile:
+                ContentZipFile.Close()
+            if GlobalData.gUNPACK_DIR:
+                rmtree(GlobalData.gUNPACK_DIR)
+                GlobalData.gUNPACK_DIR = None
+            Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_DONE)
     if ReturnCode == 0:
         Logger.Quiet(ST.MSG_FINISH)
     return ReturnCode
Index: Source/Python/UPT/Logger/StringTable.py
===================================================================
--- Source/Python/UPT/Logger/StringTable.py	(revision 17650)
+++ Source/Python/UPT/Logger/StringTable.py	(working copy)
@@ -1,7 +1,7 @@
 ## @file
 # This file is used to define strings used in the UPT tool
 #
-# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2011 - 2015, 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 
@@ -781,7 +781,7 @@
 WRN_FILE_EXISTED          = _("This file already exists: %s")
 WRN_FILE_NOT_OVERWRITTEN  = \
 _("This file already exist and cannot be overwritten: %s")
-WRN_DIST_PKG_INSTALLED    = _("This distribution package has been installed")
+WRN_DIST_PKG_INSTALLED = _("This distribution package has previously been installed.")
 WRN_DIST_NOT_FOUND         = _(
     "Distribution is not found at location %s")
 WRN_MULTI_PCD_RANGES      = _(
Index: Source/Python/UPT/UPT.py
===================================================================
--- Source/Python/UPT/UPT.py	(revision 17650)
+++ Source/Python/UPT/UPT.py	(working copy)
@@ -38,6 +38,7 @@
 from Logger.ToolError import FILE_TYPE_MISMATCH
 from Logger.ToolError import OPTION_CONFLICT
 from Logger.ToolError import FatalError
+from Logger.ToolError import UPT_ALREADY_INSTALLED_ERROR
 
 import MkPkg
 import InstallPkg
@@ -282,7 +283,7 @@
                          format_exc())
     finally:
         try:
-            if ReturnCode != 0:
+            if ReturnCode != 0 and ReturnCode != UPT_ALREADY_INSTALLED_ERROR:
                 Logger.Quiet(ST.MSG_RECOVER_START)
                 GlobalData.gDB.RollBack()
                 Mgr.rollback()
