diff --git a/redfish-core/lib/network_protocol.hpp b/redfish-core/lib/network_protocol.hpp
index de81e5c..f99cfd3 100644
--- a/redfish-core/lib/network_protocol.hpp
+++ b/redfish-core/lib/network_protocol.hpp
@@ -46,8 +46,7 @@
 
 inline void extractNTPServersAndDomainNamesData(
     const dbus::utility::ManagedObjectType& dbusData,
-    std::vector<std::string>& ntpData, std::vector<std::string>& dynamicNtpData,
-    std::vector<std::string>& dnData)
+    std::vector<std::string>& ntpData, std::vector<std::string>& dnData)
 {
     for (const auto& obj : dbusData)
     {
@@ -61,7 +60,7 @@
 
             for (const auto& propertyPair : ifacePair.second)
             {
-                if (propertyPair.first == "StaticNTPServers")
+                if (propertyPair.first == "NTPServers")
                 {
                     const std::vector<std::string>* ntpServers =
                         std::get_if<std::vector<std::string>>(
@@ -71,17 +70,6 @@
                         ntpData = *ntpServers;
                     }
                 }
-                else if (propertyPair.first == "NTPServers")
-                {
-                    const std::vector<std::string>* dynamicNtpServers =
-                        std::get_if<std::vector<std::string>>(
-                            &propertyPair.second);
-                    if (dynamicNtpServers != nullptr)
-                    {
-                        dynamicNtpData = *dynamicNtpServers;
-                    }
-                }
-
                 else if (propertyPair.first == "DomainName")
                 {
                     const std::vector<std::string>* domainNames =
@@ -106,19 +94,17 @@
             const boost::system::error_code errorCode,
             const dbus::utility::ManagedObjectType& dbusData) {
         std::vector<std::string> ntpServers;
-        std::vector<std::string> dynamicNtpServers;
         std::vector<std::string> domainNames;
 
         if (errorCode)
         {
-            callback(false, ntpServers, dynamicNtpServers, domainNames);
+            callback(false, ntpServers, domainNames);
             return;
         }
 
-        extractNTPServersAndDomainNamesData(dbusData, ntpServers,
-                                            dynamicNtpServers, domainNames);
+        extractNTPServersAndDomainNamesData(dbusData, ntpServers, domainNames);
 
-        callback(true, ntpServers, dynamicNtpServers, domainNames);
+        callback(true, ntpServers, domainNames);
         },
         "xyz.openbmc_project.Network", "/xyz/openbmc_project/network",
         "org.freedesktop.DBus.ObjectManager", "GetManagedObjects");
@@ -128,7 +114,7 @@
                            const crow::Request& req)
 {
     asyncResp->res.jsonValue["@odata.type"] =
-        "#ManagerNetworkProtocol.v1_9_0.ManagerNetworkProtocol";
+        "#ManagerNetworkProtocol.v1_5_0.ManagerNetworkProtocol";
     asyncResp->res.jsonValue["@odata.id"] =
         "/redfish/v1/Managers/bmc/NetworkProtocol";
     asyncResp->res.jsonValue["Id"] = "NetworkProtocol";
@@ -154,7 +140,6 @@
     getEthernetIfaceData(
         [hostName, asyncResp](const bool& success,
                               const std::vector<std::string>& ntpServers,
-                              const std::vector<std::string>& dynamicNtpServers,
                               const std::vector<std::string>& domainNames) {
         if (!success)
         {
@@ -163,8 +148,6 @@
             return;
         }
         asyncResp->res.jsonValue["NTP"]["NTPServers"] = ntpServers;
-        asyncResp->res.jsonValue["NTP"]["NetworkSuppliedServers"] =
-            dynamicNtpServers;
         if (!hostName.empty())
         {
             std::string fqdn = hostName;
@@ -366,7 +349,7 @@
                         }
                         },
                         service, objectPath, "org.freedesktop.DBus.Properties",
-                        "Set", interface, "StaticNTPServers",
+                        "Set", interface, "NTPServers",
                         dbus::utility::DbusVariantType{currentNtpServers});
                 }
             }
@@ -529,7 +512,6 @@
                 [asyncResp, ntpServerObjects](
                     const bool success,
                     std::vector<std::string>& currentNtpServers,
-                    std::vector<std::string>& /*dynamicNtpServers*/,
                     const std::vector<std::string>& /*domainNames*/) {
                 if (!success)
                 {
