diff --git a/configure.ac b/configure.ac
index bbf5c4f..e195d91 100644
--- a/configure.ac
+++ b/configure.ac
@@ -69,6 +69,10 @@
     AC_SUBST([OESDK_TESTCASE_FLAGS], [$testcase_flags])
 )
 
+AC_ARG_VAR(DNS_ENTRY_FILE, [File having DNS entries supplied by DHCP])
+AS_IF([test "x$DNS_ENTRY_FILE" == "x"], [DNS_ENTRY_FILE="/run/systemd/netif/state"])
+AC_DEFINE_UNQUOTED([DNS_ENTRY_FILE], ["$DNS_ENTRY_FILE"], [File having DNS entries supplied by DHCP])
+
 AC_ARG_VAR(BUSNAME_NETWORK, [The Dbus busname to own])
 AS_IF([test "x$BUSNAME_NETWORK" == "x"], [BUSNAME_NETWORK="xyz.openbmc_project.Network"])
 AC_DEFINE_UNQUOTED([BUSNAME_NETWORK], ["$BUSNAME_NETWORK"], [The DBus busname to own])
diff --git a/dns_updater.cpp b/dns_updater.cpp
index 5c4d058..1b3b8ea 100644
--- a/dns_updater.cpp
+++ b/dns_updater.cpp
@@ -17,8 +17,8 @@
 namespace updater
 {
 
-void processDNSEntries(const fs::path& inFile,
-                       const fs::path& outFile)
+void updateDNSEntries(const fs::path& inFile,
+                      const fs::path& outFile)
 {
     using namespace phosphor::logging;
     using namespace sdbusplus::xyz::openbmc_project::Common::Error;
diff --git a/dns_updater.hpp b/dns_updater.hpp
index 44c0e32..84646c6 100644
--- a/dns_updater.hpp
+++ b/dns_updater.hpp
@@ -20,8 +20,8 @@
  *  @param[in] inFile  - File having DNS entries supplied by DHCP
  *  @param[in] outFile - File to write the nameserver entries to
  */
-void processDNSEntries(const fs::path& inFile,
-                       const fs::path& outFile);
+void updateDNSEntries(const fs::path& inFile,
+                      const fs::path& outFile);
 
 /** @brief User callback handler invoked by inotify watcher
  *
@@ -32,7 +32,7 @@
  */
 inline void processDNSEntries(const fs::path& inFile)
 {
-    return processDNSEntries(inFile, RESOLV_CONF);
+    return updateDNSEntries(inFile, RESOLV_CONF);
 }
 
 } // namepsace updater
diff --git a/netman_watch_dns.c b/netman_watch_dns.c
index 33e6f14..b60b699 100644
--- a/netman_watch_dns.c
+++ b/netman_watch_dns.c
@@ -380,12 +380,20 @@
 
     printf("Watching for changes in DNS settings..\n");
 
-    /* Now that we have checked it once. rest is all notification bases. */
+     /* Commenting since this functionality has been built into network
+      * manager and this file will be deleted in the very next commit
+      */
+    /*
     rc = watch_for_dns_change(netif_dir, state_file);
     if(rc < 0)
     {
         fprintf(stderr,"Error watching for DNS changes\n");
     }
+    */
 
-    return 0;
+    // Returning will result in app getting launched again per Restart
+    // policy in service file
+    pause();
+
+    return rc;
 }
diff --git a/network_manager_main.cpp b/network_manager_main.cpp
index 0c95c8d..b08d5ac 100644
--- a/network_manager_main.cpp
+++ b/network_manager_main.cpp
@@ -2,6 +2,8 @@
 #include "network_manager.hpp"
 #include "rtnetlink_server.hpp"
 #include "timer.hpp"
+#include "watch.hpp"
+#include "dns_updater.hpp"
 
 #include <memory>
 
@@ -83,8 +85,6 @@
                                                          OBJ_NETWORK,
                                                          NETWORK_CONF_DIR);
 
-    phosphor::network::rtnetlink::Server svr(eventPtr);
-
     // create the network interface dbus objects and system config
     phosphor::network::manager->createChildObjects();
 
@@ -99,6 +99,22 @@
         // will create it.
         phosphor::network::restartNetwork();
     }
-    return svr.run();
+
+    // RTNETLINK event handler
+    phosphor::network::rtnetlink::Server svr(eventPtr);
+
+    // DNS entry handler
+    phosphor::network::inotify::Watch watch(eventPtr, DNS_ENTRY_FILE,
+            std::bind(&phosphor::network::dns::updater::processDNSEntries,
+                std::placeholders::_1));
+
+    // At this point, we have registered for the notifications for future
+    // events. However, if the file is already populated before this, then
+    // they won't ever get notified and thus we need to read once before
+    // waiting on change events
+    phosphor::network::dns::updater::processDNSEntries(DNS_ENTRY_FILE);
+
+    // Run the server
+    sd_event_loop(eventPtr.get());
 }
 
diff --git a/rtnetlink_server.cpp b/rtnetlink_server.cpp
index 31dbfd1..c0e5ad5 100644
--- a/rtnetlink_server.cpp
+++ b/rtnetlink_server.cpp
@@ -13,6 +13,8 @@
 #include <unistd.h>
 
 #include <phosphor-logging/log.hpp>
+#include <phosphor-logging/elog-errors.hpp>
+#include <xyz/openbmc_project/Common/error.hpp>
 
 #include <memory>
 
@@ -63,10 +65,11 @@
     return 0;
 }
 
-int Server::run()
+Server::Server(EventPtr& eventPtr)
 {
     using namespace phosphor::logging;
-
+    using InternalFailure = sdbusplus::xyz::openbmc_project::Common::
+                                    Error::InternalFailure;
     struct sockaddr_nl addr {};
 
     int fd = -1;
@@ -132,17 +135,14 @@
         goto finish;
     }
 
-    r = sd_event_loop(eventPtr.get());
-
 finish:
 
     if (r < 0)
     {
         log<level::ERR>("Failure Occured in starting of server:",
                         entry("errno = %d", errno));
+        elog<InternalFailure>();
     }
-
-    return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
 }
 
 
diff --git a/rtnetlink_server.hpp b/rtnetlink_server.hpp
index 51cf7bb..a00e6b7 100644
--- a/rtnetlink_server.hpp
+++ b/rtnetlink_server.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "types.hpp"
+#include "util.hpp"
 
 #include <systemd/sd-event.h>
 
@@ -26,28 +27,18 @@
 
         /** @brief Constructor
          *
-         *  @param[in] event - Unique ptr reference to sd_event.
+         *  @details Sets up the server to handle incoming RTNETLINK events
+         *
+         *  @param[in] eventPtr - Unique ptr reference to sd_event.
          */
+        Server(EventPtr& eventPtr);
 
-        Server(EventPtr& event):
-            eventPtr(event) {};
-
+        Server() = delete;
+        ~Server() = default;
         Server(const Server&) = delete;
         Server& operator=(const Server&) = delete;
         Server(Server&&) = default;
         Server& operator=(Server &&) = default;
-
-        /** @brief Initialise the event loop and add the handler for incoming
-         *         RTNETLINK events.
-         *
-         *  @return EXIT_SUCCESS on success and EXIT_FAILURE on failure.
-         */
-        int run();
-
-    private:
-        /** @brief reference to sd_event wrapped in unique_ptr */
-        EventPtr& eventPtr;
-
 };
 
 } //namespace rtnetlink
diff --git a/test/test_dns_updater.cpp b/test/test_dns_updater.cpp
index 8fb4bcb..5d92cd3 100644
--- a/test/test_dns_updater.cpp
+++ b/test/test_dns_updater.cpp
@@ -53,7 +53,7 @@
  */
 TEST_F(DnsUpdateTest, validateOutFile)
 {
-    phosphor::network::dns::updater::processDNSEntries(IN_FILE, OUT_FILE);
+    phosphor::network::dns::updater::updateDNSEntries(IN_FILE, OUT_FILE);
 
     // Read files and compare
     std::ifstream resolv(OUT_FILE);
