diff --git a/src/ethernet_interface.cpp b/src/ethernet_interface.cpp
index 0f8a3c0..0be63b0 100644
--- a/src/ethernet_interface.cpp
+++ b/src/ethernet_interface.cpp
@@ -235,7 +235,7 @@
         std::string gateway = "";
 
         std::string ipAddressObjectPath = generateObjectPath(
-            addressType, addr.ipaddress, addr.prefix, gateway);
+            addressType, addr.ipaddress, addr.prefix, gateway, origin);
 
         this->addrs.insert_or_assign(
             addr.ipaddress,
@@ -315,7 +315,7 @@
     }
 
     std::string objectPath =
-        generateObjectPath(protType, ipaddress, prefixLength, gateway);
+        generateObjectPath(protType, ipaddress, prefixLength, gateway, origin);
     this->addrs.insert_or_assign(ipaddress,
                                  std::make_shared<phosphor::network::IPAddress>(
                                      bus, objectPath.c_str(), *this, protType,
@@ -426,12 +426,14 @@
 
 std::string EthernetInterface::generateId(const std::string& ipaddress,
                                           uint8_t prefixLength,
-                                          const std::string& gateway)
+                                          const std::string& gateway,
+                                          const std::string& origin)
 {
     std::stringstream hexId;
     std::string hashString = ipaddress;
     hashString += std::to_string(prefixLength);
     hashString += gateway;
+    hashString += origin;
 
     // Only want 8 hex digits.
     hexId << std::hex << ((std::hash<std::string>{}(hashString)) & 0xFFFFFFFF);
@@ -528,7 +530,8 @@
 
 std::string EthernetInterface::generateObjectPath(
     IP::Protocol addressType, const std::string& ipaddress,
-    uint8_t prefixLength, const std::string& gateway) const
+    uint8_t prefixLength, const std::string& gateway,
+    IP::AddressOrigin origin) const
 {
     std::string type = convertForMessage(addressType);
     type = type.substr(type.rfind('.') + 1);
@@ -537,7 +540,8 @@
     std::filesystem::path objectPath;
     objectPath /= objPath;
     objectPath /= type;
-    objectPath /= generateId(ipaddress, prefixLength, gateway);
+    objectPath /=
+        generateId(ipaddress, prefixLength, gateway, convertForMessage(origin));
     return objectPath.string();
 }
 
diff --git a/src/ethernet_interface.hpp b/src/ethernet_interface.hpp
index fef1579..c063777 100644
--- a/src/ethernet_interface.hpp
+++ b/src/ethernet_interface.hpp
@@ -276,6 +276,7 @@
      *  @param[in] ipAddress - IP address.
      *  @param[in] prefixLength - Length of prefix.
      *  @param[in] gateway - Gateway address.
+     *  @param[in] origin - The origin entry of the IP::Address
 
      *  @return path of the address object.
      */
@@ -283,7 +284,8 @@
     std::string generateObjectPath(IP::Protocol addressType,
                                    const std::string& ipAddress,
                                    uint8_t prefixLength,
-                                   const std::string& gateway) const;
+                                   const std::string& gateway,
+                                   IP::AddressOrigin origin) const;
 
     std::string
         generateStaticNeighborObjectPath(const std::string& ipAddress,
@@ -294,12 +296,14 @@
      *  @param[in] ipAddress - IP address.
      *  @param[in] prefixLength - Length of prefix.
      *  @param[in] gateway - Gateway address.
+     *  @param[in] origin - The string of the address origin
      *  @return hash string.
      */
 
     static std::string generateId(const std::string& ipAddress,
                                   uint8_t prefixLength,
-                                  const std::string& gateway);
+                                  const std::string& gateway,
+                                  const std::string& origin);
 
     /** @brief generates the id by doing hash of ipAddress
      *         and the mac address.
diff --git a/test/test_ethernet_interface.cpp b/test/test_ethernet_interface.cpp
index 6f441f7..a84e0eb 100644
--- a/test/test_ethernet_interface.cpp
+++ b/test/test_ethernet_interface.cpp
@@ -90,12 +90,13 @@
     }
 
     std::string getObjectPath(const std::string& ipaddress, uint8_t subnetMask,
-                              const std::string& gateway)
+                              const std::string& gateway,
+                              IP::AddressOrigin origin)
     {
         IP::Protocol addressType = IP::Protocol::IPv4;
 
         return interface.generateObjectPath(addressType, ipaddress, subnetMask,
-                                            gateway);
+                                            gateway, origin);
     }
 
     void createIPObject(IP::Protocol addressType, const std::string& ipaddress,
@@ -147,6 +148,7 @@
     std::string ipaddress = "10.10.10.10";
     uint8_t prefix = 16;
     std::string gateway = "10.10.10.1";
+    IP::AddressOrigin origin = IP::AddressOrigin::Static;
 
     std::string expectedObjectPath = "/xyz/openbmc_test/network/test0/ipv4/";
     std::stringstream hexId;
@@ -154,11 +156,17 @@
     std::string hashString = ipaddress;
     hashString += std::to_string(prefix);
     hashString += gateway;
+    hashString += convertForMessage(origin);
 
     hexId << std::hex << ((std::hash<std::string>{}(hashString)) & 0xFFFFFFFF);
     expectedObjectPath += hexId.str();
 
-    EXPECT_EQ(expectedObjectPath, getObjectPath(ipaddress, prefix, gateway));
+    EXPECT_EQ(expectedObjectPath,
+              getObjectPath(ipaddress, prefix, gateway, origin));
+
+    origin = IP::AddressOrigin::DHCP;
+    EXPECT_NE(expectedObjectPath,
+              getObjectPath(ipaddress, prefix, gateway, origin));
 }
 
 TEST_F(TestEthernetInterface, addStaticNameServers)
