diff --git a/delete.hpp b/delete.hpp
deleted file mode 100644
index 22d9447..0000000
--- a/delete.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-#pragma once
-
-#include "interfaces.hpp"
-#include "manager.hpp"
-
-namespace ibm
-{
-namespace logging
-{
-
-/**
- *  @class Delete
- *
- *  Implements the xyz.openbmc_project.Object.Delete interface
- *  to delete an IBM logging object.
- */
-class Delete : public DeleteObject
-{
-  public:
-    Delete() = delete;
-    Delete(const Delete&) = delete;
-    Delete& operator=(const Delete&) = delete;
-    Delete(Delete&&) = default;
-    Delete& operator=(Delete&&) = default;
-    virtual ~Delete() = default;
-
-    /**
-     * Constructor
-     *
-     * @param[in] bus - the D-Bus bus object
-     * @param[in] path - the object path
-     * @param[in] manager - the Manager object
-     * @param[in] deferSignals - if the object creation signals
-     *                           should be deferred
-     */
-    Delete(sdbusplus::bus::bus& bus, const std::string& path, Manager& manager,
-           bool deferSignals) :
-        DeleteObject(bus, path.c_str(), deferSignals),
-        path(path), manager(manager)
-    {
-    }
-
-    /**
-     * The Delete D-Bus method
-     */
-    inline void delete_() override
-    {
-        manager.erase(path);
-    }
-
-  private:
-    /**
-     * The logging entry object path
-     */
-    const std::string path;
-
-    /**
-     * The Manager object
-     */
-    Manager& manager;
-};
-}
-}
diff --git a/interfaces.hpp b/interfaces.hpp
index b889cbb..0dfa668 100644
--- a/interfaces.hpp
+++ b/interfaces.hpp
@@ -1,7 +1,6 @@
 #pragma once
 
 #include <com/ibm/Logging/Policy/server.hpp>
-#include <xyz/openbmc_project/Object/Delete/server.hpp>
 
 namespace ibm
 {
@@ -11,16 +10,12 @@
 template <typename... T>
 using ServerObject = typename sdbusplus::server::object::object<T...>;
 
-using DeleteInterface = sdbusplus::xyz::openbmc_project::Object::server::Delete;
-using DeleteObject = ServerObject<DeleteInterface>;
-
 using PolicyInterface = sdbusplus::com::ibm::Logging::server::Policy;
 using PolicyObject = ServerObject<PolicyInterface>;
 
 enum class InterfaceType
 {
-    POLICY,
-    DELETE
+    POLICY
 };
 }
 }
diff --git a/manager.cpp b/manager.cpp
index d47b3ad..276a5a5 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 #include "config.h"
-#include "delete.hpp"
 #include "manager.hpp"
 #include "policy_find.hpp"
 
@@ -69,19 +68,6 @@
 #ifdef USE_POLICY_INTERFACE
     createPolicyInterface(objectPath, properties);
 #endif
-
-    // Emits the interfaces added signal.
-    createDeleteInterface(objectPath);
-}
-
-void Manager::erase(const std::string& objectPath)
-{
-    auto entry = entries.find(getEntryID(objectPath));
-
-    if (entry != entries.end())
-    {
-        entries.erase(entry);
-    }
 }
 
 void Manager::addInterface(const std::string& objectPath, InterfaceType type,
@@ -102,14 +88,6 @@
     }
 }
 
-void Manager::createDeleteInterface(const std::string& objectPath)
-{
-    std::experimental::any object =
-        std::make_shared<Delete>(bus, objectPath, *this, false);
-
-    addInterface(objectPath, InterfaceType::DELETE, object);
-}
-
 #ifdef USE_POLICY_INTERFACE
 void Manager::createPolicyInterface(const std::string& objectPath,
                                     const DbusPropertyMap& properties)
@@ -121,6 +99,8 @@
     object->eventID(std::get<policy::EIDField>(values));
     object->description(std::get<policy::MsgField>(values));
 
+    object->emit_object_added();
+
     std::experimental::any anyObject = object;
 
     addInterface(objectPath, InterfaceType::POLICY, anyObject);
diff --git a/manager.hpp b/manager.hpp
index 69d9479..ca5e16b 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -42,13 +42,6 @@
      */
     explicit Manager(sdbusplus::bus::bus& bus);
 
-    /**
-     * Deletes the entry with the specified path
-     *
-     * @param[in] objectPath - the entry object path
-     */
-    void erase(const std::string& objectPath);
-
   private:
     /**
      * The callback for an interfaces added signal
@@ -100,14 +93,6 @@
 #endif
 
     /**
-     * Creates the Delete interface for a single error log
-     * and saves it in the list of interfaces.
-     *
-     * @param[in] objectPath - object path of the error log
-     */
-    void createDeleteInterface(const std::string& objectPath);
-
-    /**
      * Returns the entry ID for a log
      *
      * @param[in] objectPath - the object path of the log
