diff --git a/core_manager.cpp b/core_manager.cpp
index 8a91a27..f48e8dc 100644
--- a/core_manager.cpp
+++ b/core_manager.cpp
@@ -1,7 +1,7 @@
-#include <unistd.h>
-#include <sys/inotify.h>
+#include <phosphor-logging/log.hpp>
 
 #include "core_manager.hpp"
+#include "config.h"
 
 namespace phosphor
 {
@@ -12,16 +12,67 @@
 namespace manager
 {
 
+using namespace phosphor::logging;
+using namespace std;
+
 void watchCallback(const UserMap& fileInfo)
 {
+    vector<string> files;
+
     for (const auto& i : fileInfo)
     {
-        // For any new dump file create dump entry object.
+        // Get list of debug files.
         if (IN_CLOSE_WRITE == i.second)
         {
-            //TODO openbmc/openbmc#1795 Enable Dump collection function here
+            files.push_back(i.first.string());
         }
     }
+    if(!files.empty())
+    {
+        createHelper(files);
+    }
+}
+
+void createHelper(const vector<string>& files)
+{
+    constexpr auto MAPPER_BUSNAME = "xyz.openbmc_project.ObjectMapper";
+    constexpr auto MAPPER_PATH = "/xyz/openbmc_project/object_mapper";
+    constexpr auto MAPPER_INTERFACE = "xyz.openbmc_project.ObjectMapper";
+    constexpr auto IFACE_INTERNAL("xyz.openbmc_project.Dump.Internal.Create");
+    constexpr auto APPLICATION_CORED =
+              "xyz.openbmc_project.Dump.Internal.Create.Type.ApplicationCored";
+
+    auto b = sdbusplus::bus::new_default();
+    auto mapper = b.new_method_call(
+                      MAPPER_BUSNAME,
+                      MAPPER_PATH,
+                      MAPPER_INTERFACE,
+                      "GetObject");
+    mapper.append(OBJ_INTERNAL, vector<string>({IFACE_INTERNAL}));
+
+    auto mapperResponseMsg = b.call(mapper);
+    if (mapperResponseMsg.is_method_error())
+    {
+        log<level::ERR>("Error in mapper call");
+        return;
+    }
+
+    map<string, vector<string>> mapperResponse;
+    mapperResponseMsg.read(mapperResponse);
+    if (mapperResponse.empty())
+    {
+        log<level::ERR>("Error reading mapper response");
+        return;
+    }
+
+    const auto& host = mapperResponse.cbegin()->first;
+    auto m = b.new_method_call(
+                 host.c_str(),
+                 OBJ_INTERNAL,
+                 IFACE_INTERNAL,
+                 "Create");
+    m.append(APPLICATION_CORED, files);
+    b.call_noreply(m);
 }
 
 } // namespace manager
diff --git a/core_manager.hpp b/core_manager.hpp
index 19658a5..84818e5 100644
--- a/core_manager.hpp
+++ b/core_manager.hpp
@@ -21,6 +21,12 @@
   */
 void watchCallback(const UserMap& fileInfo);
 
+/** @brief Helper function for initiating dump request using
+ *         D-bus internal create interface.
+ *  @param [in] files - Core files list
+ */
+void createHelper(const std::vector<std::string>& files);
+
 } // namespace manager
 } // namepsace core
 } // namespace dump
diff --git a/dump_internal.hpp b/dump_internal.hpp
index 0688b78..d13ae24 100644
--- a/dump_internal.hpp
+++ b/dump_internal.hpp
@@ -14,6 +14,7 @@
 
 using CreateIface = sdbusplus::server::object::object<
           sdbusplus::xyz::openbmc_project::Dump::Internal::server::Create>;
+using Mgr = phosphor::dump::Manager;
 
 /** @class Manager
  *  @brief Implementation for the
@@ -31,10 +32,12 @@
 
         /** @brief Constructor to put object onto bus at a dbus path.
          *  @param[in] bus - Bus to attach to.
+         *  @param[in] dumpMgr - Dump Manager object
          *  @param[in] path - Path to attach at.
          */
-        Manager(sdbusplus::bus::bus& bus, const char* path) :
-            CreateIface(bus, path) {};
+        Manager(sdbusplus::bus::bus& bus, Mgr& dumpMgr, const char* path):
+            CreateIface(bus, path),
+            dumpMgr(dumpMgr) {};
 
         /**  @brief Implementation for Create
           *  Create BMC Dump based on the Dump type.
@@ -46,7 +49,9 @@
         void create(
             Type type,
             std::vector<std::string> fullPaths) override;
-
+    private:
+        /**  @brief Dump Manager object. */
+        Mgr& dumpMgr;
 };
 
 } // namespace internal
diff --git a/dump_manager.cpp b/dump_manager.cpp
index d5150d3..571ced5 100644
--- a/dump_manager.cpp
+++ b/dump_manager.cpp
@@ -23,8 +23,7 @@
     Type type,
     std::vector<std::string> fullPaths)
 {
-    // TODO openbmc/openbmc#1795
-    // Add implementaion of internal create function.
+    dumpMgr.phosphor::dump::Manager::captureDump(type, fullPaths);
 }
 
 } //namepsace internal
diff --git a/dump_manager_main.cpp b/dump_manager_main.cpp
index 2cb6d2b..89aa6d4 100644
--- a/dump_manager_main.cpp
+++ b/dump_manager_main.cpp
@@ -33,7 +33,7 @@
     try
     {
         phosphor::dump::Manager manager(bus, eventP, DUMP_OBJPATH);
-        phosphor::dump::internal::Manager mgr(bus, OBJ_INTERNAL);
+        phosphor::dump::internal::Manager mgr(bus, manager, OBJ_INTERNAL);
         bus.attach_event(eventP.get(), SD_EVENT_PRIORITY_NORMAL);
 
         auto rc = sd_event_loop(eventP.get());
