diff --git a/dump_manager.cpp b/dump_manager.cpp
index 3b00119..3d8bdc2 100644
--- a/dump_manager.cpp
+++ b/dump_manager.cpp
@@ -117,13 +117,39 @@
 {
     for (const auto& i : fileInfo)
     {
-        // For any new dump file create dump entry object.
+        // For any new dump file create dump entry object
+        // and associated inotify watch.
         if (IN_CLOSE_WRITE == i.second)
         {
+            removeWatch(i.first);
+
             createEntry(i.first);
         }
+        // Start inotify watch on newly created directory.
+        else if ((IN_CREATE == i.second) && fs::is_directory(i.first))
+        {
+            auto watchObj = std::make_unique<Watch>(
+                                    eventLoop,
+                                    IN_NONBLOCK,
+                                    IN_CLOSE_WRITE,
+                                    EPOLLIN,
+                                    i.first,
+                                    std::bind(
+                                         std::mem_fn(
+                                      &phosphor::dump::Manager::watchCallback),
+                                         this, std::placeholders::_1));
+
+           childWatchMap.emplace(i.first, std::move(watchObj));
+        }
+
     }
 }
 
+void Manager::removeWatch(const fs::path& path)
+{
+    //Delete Watch entry from map.
+    childWatchMap.erase(path);
+}
+
 } //namespace dump
 } //namespace phosphor
diff --git a/dump_manager.hpp b/dump_manager.hpp
index 4e6715b..003d9e4 100644
--- a/dump_manager.hpp
+++ b/dump_manager.hpp
@@ -33,6 +33,8 @@
 
 namespace fs = std::experimental::filesystem;
 
+using Watch = phosphor::dump::inotify::Watch;
+
 /** @class Manager
  *  @brief OpenBMC Dump  manager implementation.
  *  @details A concrete implementation for the
@@ -123,6 +125,11 @@
             //the sd_event_add_child callback.
             return 0;
         }
+        /** @brief Remove specified watch object pointer from the
+          *        watch map and associated entry from the map.
+          *        @param[in] path - unique identifier of the map
+          */
+        void removeWatch(const fs::path& path);
 
         /** @brief sdbusplus DBus bus connection. */
         sdbusplus::bus::bus& bus;
@@ -136,8 +143,13 @@
         /** @brief Id of the last Dump entry */
         uint32_t lastEntryId;
 
-        /** @brief Dump watch object */
-        phosphor::dump::inotify::Watch dumpWatch;
+        /** @brief Dump main watch object */
+        Watch dumpWatch;
+
+        /** @brief Child directory path and its associated watch object map
+          *        [path:watch object]
+          */
+        std::map<fs::path, std::unique_ptr<Watch>> childWatchMap;
 };
 
 } // namespace dump
diff --git a/watch.cpp b/watch.cpp
index bc7fb1f..cec97af 100644
--- a/watch.cpp
+++ b/watch.cpp
@@ -87,7 +87,9 @@
                     uint32_t revents,
                     void* userdata)
 {
-    if (!(revents & static_cast<Watch*>(userdata)->events))
+    auto userData = static_cast<Watch*>(userdata);
+
+    if (!(revents & userData->events))
     {
         return 0;
     }
@@ -115,12 +117,12 @@
     while (offset < bytes)
     {
         auto event = reinterpret_cast<inotify_event*>(&buffer[offset]);
-        auto mask = event->mask & static_cast<Watch*>(userdata)->mask;
+        auto mask = event->mask & userData->mask;
 
-        if (mask && !(event->mask & IN_ISDIR))
+        if (mask)
         {
             userMap.emplace(
-                    (static_cast<Watch*>(userdata)->path / event->name), mask);
+                    (userData->path / event->name), mask);
         }
 
         offset += offsetof(inotify_event, name) + event->len;
@@ -129,7 +131,7 @@
     //Call user call back function incase valid data in the map
     if (!userMap.empty())
     {
-        static_cast<Watch*>(userdata)->userFunc(userMap);
+        userData->userFunc(userMap);
     }
 
     return 0;
