diff --git a/image_manager.cpp b/image_manager.cpp
index bc9ce9e..5242d8b 100644
--- a/image_manager.cpp
+++ b/image_manager.cpp
@@ -172,7 +172,10 @@
                                   objPath,
                                   version,
                                   purpose,
-                                  imageDirPath.string())));
+                                  imageDirPath.string(),
+                                  std::bind(&Manager::erase,
+                                            this,
+                                            std::placeholders::_1))));
 
     return 0;
 }
diff --git a/item_updater.cpp b/item_updater.cpp
index fe9af2f..04a9eb4 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -121,7 +121,10 @@
                                 path,
                                 version,
                                 purpose,
-                                filePath)));
+                                filePath,
+                                std::bind(&ItemUpdater::erase,
+                                          this,
+                                          std::placeholders::_1))));
     }
     return;
 }
@@ -148,10 +151,47 @@
                              path,
                              version,
                              purpose,
-                             "")));
+                             "",
+                             std::bind(&ItemUpdater::erase,
+                                       this,
+                                       std::placeholders::_1))));
+
     return;
 }
 
+void ItemUpdater::erase(std::string entryId)
+{
+    // Delete ReadWrite and ReadOnly partitions
+    removeReadWritePartition(entryId);
+    removeReadOnlyPartition(entryId);
+
+    // Removing entry in versions map
+    auto it = versions.find(entryId);
+    if (it == versions.end())
+    {
+        log<level::ERR>(("Error: Failed to find version " + entryId + \
+                        " in item updater versions map." \
+                        " Unable to remove.").c_str());
+        return;
+    }
+    this->versions.erase(entryId);
+
+    // Removing entry in activations map
+    auto ita = activations.find(entryId);
+    if (ita == activations.end())
+    {
+        log<level::ERR>(("Error: Failed to find version " + entryId + \
+                        " in item updater activations map." \
+                        " Unable to remove.").c_str());
+        return;
+    }
+    // TODO: openbmc/openbmc#1986
+    //       Test if this is the currently running image
+    //       If not, don't continue.
+
+    this->activations.erase(entryId);
+}
+
 ItemUpdater::ActivationStatus ItemUpdater::validateSquashFSImage(
              const std::string& filePath)
 {
@@ -202,6 +242,35 @@
     return;
 }
 
+void ItemUpdater::removeReadOnlyPartition(std::string versionId)
+{
+    auto serviceFile = "obmc-flash-bmc-ubiro-remove@" + versionId +
+            ".service";
+
+    // Remove the read-only partitions.
+    auto method = bus.new_method_call(
+            SYSTEMD_BUSNAME,
+            SYSTEMD_PATH,
+            SYSTEMD_INTERFACE,
+            "StartUnit");
+    method.append(serviceFile, "replace");
+    bus.call_noreply(method);
+}
+
+void ItemUpdater::removeReadWritePartition(std::string versionId)
+{
+    auto serviceFile = "obmc-flash-bmc-ubirw-remove.service";
+
+    // Remove the read-write partitions.
+    auto method = bus.new_method_call(
+            SYSTEMD_BUSNAME,
+            SYSTEMD_PATH,
+            SYSTEMD_INTERFACE,
+            "StartUnit");
+    method.append(serviceFile, "replace");
+    bus.call_noreply(method);
+}
+
 } // namespace updater
 } // namespace software
 } // namespace phosphor
diff --git a/item_updater.hpp b/item_updater.hpp
index e4fdd69..5b2a71b 100644
--- a/item_updater.hpp
+++ b/item_updater.hpp
@@ -66,6 +66,14 @@
      */
     void processBMCImage();
 
+    /**
+     * @brief Erase specified entry d-bus object
+     *        if Action property is not set to Active
+     *
+     * @param[in] entryId - unique identifier of the entry
+     */
+    void erase(std::string entryId);
+
     private:
         /** @brief Callback function for Software.Version match.
          *  @details Creates an Activation dbus object.
@@ -105,6 +113,20 @@
         /** @brief sdbusplus signal match for Software.Version */
         sdbusplus::bus::match_t versionMatch;
 
+        /** @brief Clears read only partition for
+          * given Activation dbus object.
+          *
+          * @param[in]  versionId - The version id.
+          */
+        void removeReadOnlyPartition(std::string versionId);
+
+        /** @brief Clears read write partition for
+          * given Activation dbus object.
+          *
+          * @param[in]  versionId - The version id.
+          */
+        void removeReadWritePartition(std::string versionId);
+
 };
 
 
diff --git a/version.hpp b/version.hpp
index fcd57eb..ef6747f 100755
--- a/version.hpp
+++ b/version.hpp
@@ -35,14 +35,18 @@
          * @param[in] versionId      - The version identifier
          * @param[in] versionPurpose - The version purpose
          * @param[in] filePath       - The image filesystem path
+         * @param[in] callback       - The parent's erase callback
          */
         Version(sdbusplus::bus::bus& bus,
                 const std::string& objPath,
                 const std::string& versionId,
                 VersionPurpose versionPurpose,
-                const std::string& filePath) : VersionInherit(
+                const std::string& filePath,
+                eraseFunc callback) : VersionInherit(
                     bus, (objPath).c_str(), true)
         {
+            // Bind erase method
+            eraseCallback = callback;
             // Set properties.
             purpose(versionPurpose);
             version(versionId);
