diff --git a/dump_manager_bmc.cpp b/dump_manager_bmc.cpp
index 6c99099..d41979a 100644
--- a/dump_manager_bmc.cpp
+++ b/dump_manager_bmc.cpp
@@ -69,6 +69,11 @@
     {
         dumpType = validateDumpType(type, BMC_DUMP);
     }
+
+    if (dumpType == DumpTypes::ELOG)
+    {
+        dumpType = getErrorDumpType(params);
+    }
     std::string path = extractParameter<std::string>(
         convertCreateParametersToString(CreateParameters::FilePath), params);
 
diff --git a/dump_manager_main.cpp b/dump_manager_main.cpp
index 68b0bc0..4801f5f 100644
--- a/dump_manager_main.cpp
+++ b/dump_manager_main.cpp
@@ -71,6 +71,8 @@
 
         phosphor::dump::bmc::internal::Manager mgr(bus, *bmcDumpMgr,
                                                    OBJ_INTERNAL);
+        phosphor::dump::bmc::Manager* ptrBmcDumpMgr = bmcDumpMgr.get();
+
         dumpMgrList.push_back(std::move(bmcDumpMgr));
 
         std::unique_ptr<phosphor::dump::faultlog::Manager> faultLogMgr =
@@ -87,7 +89,8 @@
             dmpMgr->restore();
         }
 
-        phosphor::dump::elog::Watch eWatch(bus, mgr);
+        phosphor::dump::elog::Watch eWatch(bus, *ptrBmcDumpMgr);
+
         bus.attach_event(eventP.get(), SD_EVENT_PRIORITY_NORMAL);
 
         // Daemon is all set up so claim the busname now.
diff --git a/dump_utils.hpp b/dump_utils.hpp
index 7bf8a7b..27aefef 100644
--- a/dump_utils.hpp
+++ b/dump_utils.hpp
@@ -10,6 +10,7 @@
 #include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/bus.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
+#include <xyz/openbmc_project/Dump/Create/common.hpp>
 #include <xyz/openbmc_project/Dump/Create/server.hpp>
 #include <xyz/openbmc_project/State/Boot/Progress/server.hpp>
 #include <xyz/openbmc_project/State/Host/server.hpp>
diff --git a/elog_watch.cpp b/elog_watch.cpp
index 93c73e9..d128f12 100644
--- a/elog_watch.cpp
+++ b/elog_watch.cpp
@@ -32,8 +32,8 @@
 using PropertyName = std::string;
 using PropertyMap = std::map<PropertyName, AttributeMap>;
 
-Watch::Watch(sdbusplus::bus_t& bus, IMgr& iMgr) :
-    iMgr(iMgr),
+Watch::Watch(sdbusplus::bus_t& bus, Mgr& mgr) :
+    mgr(mgr),
     addMatch(bus,
              sdbusplus::bus::match::rules::interfacesAdded() +
                  sdbusplus::bus::match::rules::path_namespace(OBJ_LOGGING),
@@ -118,9 +118,19 @@
 
     auto errorType = etype.value();
 
-    std::vector<std::string> fullPaths;
-    fullPaths.push_back(objectPath);
-
+    DumpCreateParams params;
+    using DumpIntr = sdbusplus::common::xyz::openbmc_project::dump::Create;
+    using CreateParameters =
+        sdbusplus::common::xyz::openbmc_project::dump::Create::CreateParameters;
+    using DumpType =
+        sdbusplus::common::xyz::openbmc_project::dump::Create::DumpType;
+    params[DumpIntr::convertCreateParametersToString(
+        CreateParameters::FilePath)] = objectPath;
+    params[DumpIntr::convertCreateParametersToString(
+        CreateParameters::DumpType)] =
+        DumpIntr::convertDumpTypeToString(DumpType::ErrorLog);
+    params[DumpIntr::convertCreateParametersToString(
+        CreateParameters::ErrorType)] = errorType;
     try
     {
         // Save the elog information. This is to avoid dump requests
@@ -128,16 +138,7 @@
         elogList.insert(eId);
 
         phosphor::dump::elog::serialize(elogList);
-
-        auto item = std::find_if(phosphor::dump::bmc::TypeMap.begin(),
-                                 phosphor::dump::bmc::TypeMap.end(),
-                                 [errorType](const auto& err) {
-            return (err.second == errorType);
-        });
-        if (item != phosphor::dump::bmc::TypeMap.end())
-        {
-            iMgr.IMgr::create((*item).first, fullPaths);
-        }
+        mgr.Mgr::createDump(params);
     }
     catch (const QuotaExceeded& e)
     {
diff --git a/elog_watch.hpp b/elog_watch.hpp
index 3806ed8..7b8671f 100644
--- a/elog_watch.hpp
+++ b/elog_watch.hpp
@@ -7,6 +7,7 @@
 #include <cereal/access.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server.hpp>
+#include <xyz/openbmc_project/Dump/Create/server.hpp>
 
 #include <filesystem>
 #include <set>
@@ -18,7 +19,7 @@
 namespace elog
 {
 
-using IMgr = phosphor::dump::bmc::internal::Manager;
+using Mgr = phosphor::dump::bmc::Manager;
 using EId = uint32_t;
 using ElogList = std::set<EId>;
 
@@ -39,9 +40,9 @@
 
     /** @brief constructs watch for elog add and delete signals.
      *  @param[in] bus -  The Dbus bus object
-     *  @param[in] intMgr - Dump internal Manager object
+     *  @param[in] mgr - Dump Manager object
      */
-    Watch(sdbusplus::bus_t& bus, IMgr& iMgr);
+    Watch(sdbusplus::bus_t& bus, Mgr& mgr);
 
   private:
     friend class cereal::access;
@@ -84,8 +85,8 @@
         return std::stoul(path.filename());
     }
 
-    /**  @brief Dump internal Manager object. */
-    IMgr& iMgr;
+    /**  @brief BMC Dump Manager object. */
+    Mgr& mgr;
 
     /** @brief sdbusplus signal match for elog add */
     sdbusplus::bus::match_t addMatch;
