diff --git a/elog_watch.hpp b/elog_watch.hpp
index cfdf41a..588ac34 100644
--- a/elog_watch.hpp
+++ b/elog_watch.hpp
@@ -1,9 +1,12 @@
 #pragma once
 
+#include <set>
+#include <cereal/access.hpp>
+
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server.hpp>
-#include "config.h"
 
+#include "config.h"
 #include "dump_manager.hpp"
 
 namespace phosphor
@@ -14,9 +17,11 @@
 {
 
 using IMgr = phosphor::dump::internal::Manager;
+using EId = uint32_t;
+using ElogList = std::set<EId>;
 
 /** @class Watch
- *  @brief Adds d-bus signal based watch for elog commit.
+ *  @brief Adds d-bus signal based watch for elog add and delete.
  *  @details This implements methods for watching for InternalFailure
  *  type error message and call appropriate function to initiate dump
  */
@@ -30,36 +35,58 @@
         Watch(Watch&&) = default;
         Watch& operator=(Watch&&) = default;
 
-        /** @brief constructs watch for elog commits.
+        /** @brief constructs watch for elog add and delete signals.
          *  @param[in] bus -  The Dbus bus object
          *  @param[in] intMgr - Dump internal Manager object
          */
-        Watch(sdbusplus::bus::bus& bus, IMgr& iMgr):
-            iMgr(iMgr),
-            elogMatch(
-                bus,
-                sdbusplus::bus::match::rules::interfacesAdded() +
-                sdbusplus::bus::match::rules::path_namespace(
-                                              OBJ_LOGGING),
-                std::bind(std::mem_fn(&Watch::callback),
-                          this, std::placeholders::_1))
-        {
-            //Do nothing
-        }
+        Watch(sdbusplus::bus::bus& bus, IMgr& iMgr);
     private:
 
-        /** @brief Callback function for error log commit.
+        friend class cereal::access;
+
+        /** @brief Function required by Cereal to perform serialization.
+         *  @tparam Archive - Cereal archive type (binary in our case).
+         *  @param[in] a - reference to Cereal archive.
+         */
+        template<class Archive>
+        void serialize(Archive& a)
+        {
+            a(elogList);
+        }
+
+        /** @brief Callback function for error log add.
          *  @details InternalError type error message initiates
          *           Internal error type dump request.
          *  @param[in] msg  - Data associated with subscribed signal
          */
-        void callback(sdbusplus::message::message& msg);
+        void addCallback(sdbusplus::message::message& msg);
+
+        /** @brief Callback function for error log delete.
+         *  @param[in] msg  - Data associated with subscribed signal
+         */
+        void delCallback(sdbusplus::message::message& msg);
+
+        /** @brief get elog ID from elog entry object string.
+         *  @param[in] objectPath  - elog entry object path.
+         *  @return - elog id.
+         */
+        inline EId getEid(const std::string& objectPath)
+        {
+            fs::path path(objectPath);
+            return std::stoul(path.filename());
+        }
 
         /**  @brief Dump internal Manager object. */
         IMgr& iMgr;
 
-        /** @brief sdbusplus signal match for elog commit */
-        sdbusplus::bus::match_t elogMatch;
+        /** @brief sdbusplus signal match for elog add */
+        sdbusplus::bus::match_t addMatch;
+
+        /** @brief sdbusplus signal match for elog delete */
+        sdbusplus::bus::match_t delMatch;
+
+        /** @brief List of elog ids, which have associated dumps created */
+        ElogList elogList;
 };
 
 }//namespace elog
