diff --git a/network_manager.cpp b/network_manager.cpp
index a635952..aff86a0 100644
--- a/network_manager.cpp
+++ b/network_manager.cpp
@@ -8,7 +8,6 @@
 
 #include <algorithm>
 #include <bitset>
-#include <experimental/filesystem>
 #include <map>
 #include <fstream>
 
@@ -24,17 +23,25 @@
 {
 
 using namespace phosphor::logging;
-namespace fs = std::experimental::filesystem;
+using namespace sdbusplus::xyz::openbmc_project::Common::Error;
 
 Manager::Manager(sdbusplus::bus::bus& bus, const char* objPath):
     details::VLANCreateIface(bus, objPath, true),
     bus(bus),
     objectPath(objPath)
 {
+    confDir = NETWORK_CONF_DIR;
+}
+
+void Manager::setConfDir(const fs::path& dir)
+{
+    confDir = dir;
 }
 
 void Manager::createInterfaces()
 {
+    //clear all the interfaces first
+    interfaces.clear();
 
     auto interfaceInfoList = getInterfaceAddrs();
 
@@ -56,6 +63,18 @@
     }
 }
 
+void Manager::createChildObjects()
+{
+    // creates the ethernet interface dbus object.
+    createInterfaces();
+    // create the system conf object.
+    fs::path objPath = objectPath;
+    objPath /= "config";
+    systemConf = std::make_unique<phosphor::network::SystemConfiguration>(
+                        bus, objPath.string(), *this);
+
+}
+
 void Manager::vLAN(IntfName interfaceName, uint16_t id)
 {
 }
@@ -216,7 +235,7 @@
     for (const auto& intf : interfaces)
     {
 
-        fs::path confPath {NETWORK_CONF_DIR};
+        fs::path confPath = confDir;
         std::string fileName = "00-bmc-"s + intf.first + ".network"s;
         confPath /= fileName;
         std::fstream stream;
@@ -238,12 +257,16 @@
                                           addr.second->prefixLength());
 
                 stream << "Address=" << address << "\n";
-                stream << "Gateway=" << addr.second->gateway() << "\n";
+                if (addr.second->gateway() != "0.0.0.0" &&
+                    addr.second->gateway() != "")
+                {
+                    stream << "Gateway=" << addr.second->gateway() << "\n";
+                }
 
             }
         }
-
-        stream << "Gateway=" << this->defaultGateway << "\n";
+        stream << "Gateway=" << systemConf->defaultGateway() << "\n";
+        // write the route section
         stream << "[" << "Route" << "]\n";
         for(const auto& addr : addrs)
         {
@@ -255,8 +278,10 @@
                                             addr.second->address(),
                                             addr.second->prefixLength());
 
-                if (addr.second->gateway() != "0.0.0.0" ||
-                    addr.second->gateway() != "")
+                if (addr.second->gateway() != "0.0.0.0" &&
+                    addr.second->gateway() != "" &&
+                    destination != "0.0.0.0" &&
+                    destination != "")
                 {
 
                     stream << "Gateway=" << addr.second->gateway() << "\n";
diff --git a/network_manager.hpp b/network_manager.hpp
index b19ec72..2d4afe7 100644
--- a/network_manager.hpp
+++ b/network_manager.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "ethernet_interface.hpp"
+#include "system_configuration.hpp"
 #include "types.hpp"
 #include "xyz/openbmc_project/Network/VLAN/Create/server.hpp"
 #include <xyz/openbmc_project/Common/FactoryReset/server.hpp>
@@ -12,12 +13,14 @@
 #include <memory>
 #include <string>
 #include <vector>
+#include <experimental/filesystem>
 
 namespace phosphor
 {
 namespace network
 {
 
+namespace fs = std::experimental::filesystem;
 namespace details
 {
 
@@ -86,11 +89,15 @@
          */
         void createInterfaces();
 
-        /** TODO: would remove it once we implement the system
-         *  conf dbus object.
-         *  openbmc/openbmc#1295
+        /** @brief create child interface object and the system conf object.
          */
-        std::string defaultGateway; // default gateway
+        void createChildObjects();
+
+        /** @brief sets the network conf directory.
+         *  @param[in] dirName - Absolute path of the directory.
+         */
+        void setConfDir(const fs::path& dir);
+
     private:
         /** @brief Get all the interfaces from the system.
          *  @returns list of interface names.
@@ -113,6 +120,12 @@
         /** @brief Path of Object. */
         std::string objectPath;
 
+        /** @brief pointer to system conf object. */
+        std::unique_ptr<SystemConfiguration> systemConf = nullptr;
+
+        /** @brief Network Configuration directory. */
+        fs::path confDir;
+
         friend class TestNetworkManager;
 
 };
diff --git a/network_manager_main.cpp b/network_manager_main.cpp
index a53d32c..d98ab0d 100644
--- a/network_manager_main.cpp
+++ b/network_manager_main.cpp
@@ -12,7 +12,7 @@
 
     phosphor::network::Manager manager(bus, OBJ_NETWORK);
 
-    manager.createInterfaces();
+    manager.createChildObjects();
 
     bus.request_name(BUSNAME_NETWORK);
 
diff --git a/test/Makefile.am b/test/Makefile.am
index 9736ccd..8f951bf 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -31,5 +31,6 @@
 			$(top_builddir)/ipaddress.cpp \
 			$(top_builddir)/routing_table.cpp \
 			$(top_builddir)/util.cpp \
+			$(top_builddir)/system_configuration.cpp \
 			$(top_builddir)/xyz/openbmc_project/Network/VLAN/Create/phosphor_network_manager-server.o \
 			$(top_builddir)/xyz/openbmc_project/Network/IP/Create/phosphor_network_manager-server.o
