diff --git a/image_manager.cpp b/image_manager.cpp
index 922575b..93fac66 100644
--- a/image_manager.cpp
+++ b/image_manager.cpp
@@ -18,7 +18,9 @@
 
 #include <algorithm>
 #include <cstring>
+#include <ctime>
 #include <filesystem>
+#include <random>
 #include <string>
 
 namespace phosphor
@@ -187,7 +189,8 @@
         Version::getValue(manifestPath.string(), "ExtendedVersion");
 
     // Compute id
-    auto id = Version::getId(version);
+    auto salt = std::to_string(randomGen());
+    auto id = Version::getId(version + salt);
 
     fs::path imageDirPath = std::string{IMG_UPLOAD_DIR};
     imageDirPath /= id;
@@ -211,7 +214,7 @@
         auto versionPtr = std::make_unique<Version>(
             bus, objPath, version, purpose, extendedVersion,
             imageDirPath.string(),
-            std::bind(&Manager::erase, this, std::placeholders::_1));
+            std::bind(&Manager::erase, this, std::placeholders::_1), id);
         versionPtr->deleteObject =
             std::make_unique<phosphor::software::manager::Delete>(bus, objPath,
                                                                   *versionPtr);
diff --git a/image_manager.hpp b/image_manager.hpp
index acd56b6..25f0ced 100644
--- a/image_manager.hpp
+++ b/image_manager.hpp
@@ -3,6 +3,8 @@
 
 #include <sdbusplus/server.hpp>
 
+#include <chrono>
+#include <random>
 #include <string>
 
 namespace phosphor
@@ -51,6 +53,10 @@
     /** @brief Persistent sdbusplus DBus bus connection. */
     sdbusplus::bus::bus& bus;
 
+    /** @brief The random generator to get the version salt */
+    std::mt19937 randomGen{static_cast<unsigned>(
+        std::chrono::system_clock::now().time_since_epoch().count())};
+
     /**
      * @brief Untar the tarball.
      *
diff --git a/item_updater.cpp b/item_updater.cpp
index 9309a3f..e694ee0 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -145,7 +145,8 @@
 
         auto versionPtr = std::make_unique<VersionClass>(
             bus, path, version, purpose, extendedVersion, filePath,
-            std::bind(&ItemUpdater::erase, this, std::placeholders::_1));
+            std::bind(&ItemUpdater::erase, this, std::placeholders::_1),
+            versionId);
         versionPtr->deleteObject =
             std::make_unique<phosphor::software::manager::Delete>(bus, path,
                                                                   *versionPtr);
@@ -217,7 +218,10 @@
                 continue;
             }
 
-            auto id = VersionClass::getId(version);
+            // The flash location is part of the mount name: rofs-<location>
+            auto flashId = iter.path().native().substr(BMC_RO_PREFIX_LEN);
+
+            auto id = VersionClass::getId(version + flashId);
 
             // Check if the id has already been added. This can happen if the
             // BMC partitions / devices were manually flashed with the same
@@ -227,8 +231,6 @@
                 continue;
             }
 
-            // The flash location is part of the mount name: rofs-<location>
-            auto flashId = iter.path().native().substr(BMC_RO_PREFIX_LEN);
             auto functional = false;
             if (iter.path().native().find(functionalSuffix) !=
                 std::string::npos)
@@ -274,7 +276,8 @@
             // Create Version instance for this version.
             auto versionPtr = std::make_unique<VersionClass>(
                 bus, path, version, purpose, extendedVersion, flashId,
-                std::bind(&ItemUpdater::erase, this, std::placeholders::_1));
+                std::bind(&ItemUpdater::erase, this, std::placeholders::_1),
+                id);
             if (functional)
             {
                 versionPtr->setFunctional(true);
@@ -324,7 +327,8 @@
     if (activations.size() == 0)
     {
         auto version = VersionClass::getBMCVersion(OS_RELEASE_FILE);
-        auto id = phosphor::software::manager::Version::getId(version);
+        auto id = phosphor::software::manager::Version::getId(version +
+                                                              functionalSuffix);
         auto versionFileDir = BMC_ROFS_PREFIX + id + functionalSuffix + "/etc/";
         try
         {
@@ -787,7 +791,7 @@
     };
     biosVersion = std::make_unique<VersionClass>(
         bus, path, version, VersionPurpose::Host, "", "",
-        std::bind(dummyErase, std::placeholders::_1));
+        std::bind(dummyErase, std::placeholders::_1), "");
     biosVersion->deleteObject =
         std::make_unique<phosphor::software::manager::Delete>(bus, path,
                                                               *biosVersion);
diff --git a/version.cpp b/version.cpp
index 11d4201..250c221 100644
--- a/version.cpp
+++ b/version.cpp
@@ -206,7 +206,7 @@
 {
     if (parent.eraseCallback)
     {
-        parent.eraseCallback(parent.getId(parent.version()));
+        parent.eraseCallback(parent.id);
     }
 }
 
diff --git a/version.hpp b/version.hpp
index 73cc137..b6269e0 100644
--- a/version.hpp
+++ b/version.hpp
@@ -79,9 +79,9 @@
     Version(sdbusplus::bus::bus& bus, const std::string& objPath,
             const std::string& versionString, VersionPurpose versionPurpose,
             const std::string& extVersion, const std::string& filePath,
-            eraseFunc callback) :
+            eraseFunc callback, const std::string& id) :
         VersionInherit(bus, (objPath).c_str(), true),
-        eraseCallback(callback), versionStr(versionString)
+        eraseCallback(callback), id(id), versionStr(versionString)
     {
         // Set properties.
         extendedVersion(extVersion);
@@ -106,11 +106,13 @@
      * @details The version id is a unique 8 hexadecimal digit id
      *          calculated from the version string.
      *
-     * @param[in] version - The image's version string (e.g. v1.99.10-19).
+     * @param[in] versionWithSalt - The image's version string
+     *                              (e.g. v1.99.10-19) plus an optional salt
+     *                              string.
      *
      * @return The id.
      */
-    static std::string getId(const std::string& version);
+    static std::string getId(const std::string& versionWithSalt);
 
     /**
      * @brief Get the active BMC machine name string.
@@ -166,6 +168,9 @@
     /** @brief The parent's erase callback. */
     eraseFunc eraseCallback;
 
+    /** @brief The version ID of the object */
+    const std::string id;
+
   private:
     /** @brief This Version's version string */
     const std::string versionStr;
