diff --git a/Makefile.am b/Makefile.am
index 6903a75..4c7ab37 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,7 +19,8 @@
 		util.hpp \
 		routing_table.hpp \
 		config_parser.hpp \
-		system_configuration.hpp
+		system_configuration.hpp \
+		dhcp_configuration.hpp
 
 phosphor_network_manager_SOURCES = \
 		ethernet_interface.cpp \
@@ -32,7 +33,8 @@
 		xyz/openbmc_project/Network/IP/Create/server.cpp \
 		util.cpp \
 		routing_table.cpp \
-		config_parser.cpp
+		config_parser.cpp \
+		dhcp_configuration.cpp
 
 CLEANFILES = \
 		xyz/openbmc_project/Network/VLAN/Create/server.cpp \
diff --git a/dhcp_configuration.cpp b/dhcp_configuration.cpp
new file mode 100644
index 0000000..9e88e7c
--- /dev/null
+++ b/dhcp_configuration.cpp
@@ -0,0 +1,58 @@
+#include "config.h"
+#include "dhcp_configuration.hpp"
+#include "network_manager.hpp"
+
+namespace phosphor
+{
+namespace network
+{
+namespace dhcp
+{
+
+bool Configuration::hostNameEnabled(bool value)
+{
+    if (value == hostNameEnabled())
+    {
+        return value;
+    }
+
+    auto name = ConfigIntf::hostNameEnabled(value);
+    manager.writeToConfigurationFile();
+    restartSystemdUnit(phosphor::network::networkdService);
+
+    return name;
+}
+
+bool Configuration::nTPEnabled(bool value)
+{
+    if (value == nTPEnabled())
+    {
+        return value;
+    }
+
+    auto ntp = ConfigIntf::nTPEnabled(value);
+    manager.writeToConfigurationFile();
+    restartSystemdUnit(phosphor::network::networkdService);
+    restartSystemdUnit(phosphor::network::timeSynchdService);
+
+    return ntp;
+}
+
+
+bool Configuration::dNSEnabled(bool value)
+{
+    if (value == dNSEnabled())
+    {
+        return value;
+    }
+
+    auto dns = ConfigIntf::dNSEnabled(value);
+    manager.writeToConfigurationFile();
+    restartSystemdUnit(phosphor::network::networkdService);
+
+    return dns;
+}
+
+}// namespace dhcp
+}// namespace network
+}// namespace phosphor
diff --git a/dhcp_configuration.hpp b/dhcp_configuration.hpp
new file mode 100644
index 0000000..e6e549f
--- /dev/null
+++ b/dhcp_configuration.hpp
@@ -0,0 +1,99 @@
+#pragma once
+
+#include "xyz/openbmc_project/Network/DHCPConfiguration/server.hpp"
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server/object.hpp>
+
+#include <string>
+
+namespace phosphor
+{
+namespace network
+{
+
+constexpr auto networkdService = "systemd-networkd.service";
+constexpr auto timeSynchdService = "systemd-timesyncd.service";
+
+class Manager; // forward declaration of network manager.
+
+namespace dhcp
+{
+
+using ConfigIntf =
+    sdbusplus::xyz::openbmc_project::Network::server::DHCPConfiguration;
+
+using Iface =
+    sdbusplus::server::object::object<ConfigIntf>;
+
+
+/** @class Configuration
+ *  @brief DHCP configuration.
+ *  @details A concrete implementation for the
+ *  xyz.openbmc_project.Network.DHCP DBus interface.
+ */
+class Configuration : public Iface
+{
+    public:
+        Configuration() = default;
+        Configuration(const Configuration&) = delete;
+        Configuration& operator=(const Configuration&) = delete;
+        Configuration(Configuration&&) = delete;
+        Configuration& operator=(Configuration&&) = delete;
+        virtual ~Configuration() = default;
+
+        /** @brief Constructor to put object onto bus at a dbus path.
+         *  @param[in] bus - Bus to attach to.
+         *  @param[in] objPath - Path to attach at.
+         *  @param[in] parent - Parent object.
+         */
+        Configuration(sdbusplus::bus::bus& bus,
+                      const std::string& objPath,
+                      Manager& parent) :
+            Iface(bus, objPath.c_str()),
+            bus(bus),
+            manager(parent){}
+
+        /** @brief If true then DNS servers received from the DHCP server
+         *         will be used and take precedence over any statically
+         *         configured ones.
+         *  @param[in] value - true if DNS server needed from DHCP server
+         *                     else false.
+         */
+        bool dNSEnabled(bool value) override;
+
+        /** @brief If true then NTP servers received from the DHCP server
+                   will be used by systemd-timesyncd.
+         *  @param[in] value - true if NTP server needed from DHCP server
+         *                     else false.
+         */
+        bool nTPEnabled(bool value) override;
+
+        /** @brief If true then Hostname received from the DHCP server will
+         *         be set as the hostname of the system
+         *  @param[in] value - true if hostname needed from the DHCP server
+         *                     else false.
+         *
+         */
+        bool hostNameEnabled(bool value) override;
+
+        /* @brief Network Manager needed the below function to know the
+         *        value of the properties (ntpEnabled,dnsEnabled,hostnameEnabled).
+         *
+         */
+        using ConfigIntf::dNSEnabled;
+        using ConfigIntf::nTPEnabled;
+        using ConfigIntf::hostNameEnabled;
+
+    private:
+
+        /** @brief sdbusplus DBus bus connection. */
+        sdbusplus::bus::bus& bus;
+
+        /** @brief Network Manager object. */
+        phosphor::network::Manager& manager;
+
+};
+
+} // namespace dhcp
+} // namespace network
+} // namespace phosphor
diff --git a/test/Makefile.am b/test/Makefile.am
index bf1a935..c614975 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -33,6 +33,7 @@
 			$(top_builddir)/routing_table.cpp \
 			$(top_builddir)/util.cpp \
 			$(top_builddir)/system_configuration.cpp \
+			$(top_builddir)/dhcp_configuration.cpp \
 			$(top_builddir)/config_parser.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
