diff --git a/src/ethernet_interface.cpp b/src/ethernet_interface.cpp
index f65ebb0..7c1f187 100644
--- a/src/ethernet_interface.cpp
+++ b/src/ethernet_interface.cpp
@@ -3,11 +3,8 @@
 #include "ethernet_interface.hpp"
 
 #include "config_parser.hpp"
-#include "ipaddress.hpp"
-#include "neighbor.hpp"
 #include "network_manager.hpp"
 #include "util.hpp"
-#include "vlan_interface.hpp"
 
 #include <arpa/inet.h>
 #include <fmt/compile.h>
@@ -194,7 +191,7 @@
             addressType, address, addr.prefix, gateway, origin);
 
         this->addrs.insert_or_assign(
-            address, std::make_shared<phosphor::network::IPAddress>(
+            address, std::make_unique<IPAddress>(
                          bus, ipAddressObjectPath.c_str(), *this, addressType,
                          address, origin, addr.prefix, gateway));
     }
@@ -217,10 +214,9 @@
         std::string ip = toString(neighbor.address);
         std::string mac = mac_address::toString(*neighbor.mac);
         std::string objectPath = generateStaticNeighborObjectPath(ip, mac);
-        staticNeighbors.emplace(ip,
-                                std::make_shared<phosphor::network::Neighbor>(
-                                    bus, objectPath.c_str(), *this, ip, mac,
-                                    Neighbor::State::Permanent));
+        staticNeighbors.emplace(
+            ip, std::make_unique<Neighbor>(bus, objectPath.c_str(), *this, ip,
+                                           mac, Neighbor::State::Permanent));
     }
 }
 
@@ -282,10 +278,10 @@
 
     std::string objectPath =
         generateObjectPath(protType, ipaddress, prefixLength, gateway, origin);
-    this->addrs.insert_or_assign(ipaddress,
-                                 std::make_shared<phosphor::network::IPAddress>(
-                                     bus, objectPath.c_str(), *this, protType,
-                                     ipaddress, origin, prefixLength, gateway));
+    this->addrs.insert_or_assign(
+        ipaddress,
+        std::make_unique<IPAddress>(bus, objectPath.c_str(), *this, protType,
+                                    ipaddress, origin, prefixLength, gateway));
 
     writeConfigurationFile();
     manager.reloadConfigs();
@@ -313,10 +309,10 @@
 
     std::string objectPath =
         generateStaticNeighborObjectPath(ipAddress, macAddress);
-    staticNeighbors.emplace(ipAddress,
-                            std::make_shared<phosphor::network::Neighbor>(
-                                bus, objectPath.c_str(), *this, ipAddress,
-                                macAddress, Neighbor::State::Permanent));
+    staticNeighbors.emplace(
+        ipAddress,
+        std::make_unique<Neighbor>(bus, objectPath.c_str(), *this, ipAddress,
+                                   macAddress, Neighbor::State::Permanent));
 
     writeConfigurationFile();
     manager.reloadConfigs();
diff --git a/src/ethernet_interface.hpp b/src/ethernet_interface.hpp
index daedc50..f0931d7 100644
--- a/src/ethernet_interface.hpp
+++ b/src/ethernet_interface.hpp
@@ -1,9 +1,10 @@
 #pragma once
+#include "ipaddress.hpp"
+#include "neighbor.hpp"
 #include "types.hpp"
 #include "xyz/openbmc_project/Network/IP/Create/server.hpp"
 #include "xyz/openbmc_project/Network/Neighbor/CreateStatic/server.hpp"
 
-#include <map>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
 #include <string>
@@ -34,16 +35,12 @@
 using ServerList = std::vector<std::string>;
 using ObjectPath = sdbusplus::message::object_path;
 
-class Manager; // forward declaration of network manager.
+class Manager;
 
 class TestEthernetInterface;
 
 class VlanInterface;
 
-class IPAddress;
-
-class Neighbor;
-
 namespace config
 {
 class Parser;
@@ -59,10 +56,6 @@
 using InterfaceName = std::string;
 using InterfaceInfo =
     std::tuple<LinkSpeed, DuplexMode, Autoneg, LinkUp, NICEnabled, MTU>;
-using AddressMap = std::map<std::string, std::shared_ptr<IPAddress>>;
-using NeighborMap = std::map<std::string, std::shared_ptr<Neighbor>>;
-using VlanInterfaceMap =
-    std::map<InterfaceName, std::unique_ptr<VlanInterface>>;
 
 /** @class EthernetInterface
  *  @brief OpenBMC Ethernet Interface implementation.
@@ -146,7 +139,7 @@
     /* @brief Gets all the ip addresses.
      * @returns the list of ipAddress.
      */
-    const AddressMap& getAddresses() const
+    inline const auto& getAddresses() const
     {
         return addrs;
     }
@@ -154,7 +147,7 @@
     /* @brief Gets all the static neighbor entries.
      * @returns Static neighbor map.
      */
-    const NeighborMap& getStaticNeighbors() const
+    inline const auto& getStaticNeighbors() const
     {
         return staticNeighbors;
     }
@@ -320,13 +313,13 @@
     Manager& manager;
 
     /** @brief Persistent map of IPAddress dbus objects and their names */
-    AddressMap addrs;
+    string_umap<std::unique_ptr<IPAddress>> addrs;
 
     /** @brief Persistent map of Neighbor dbus objects and their names */
-    NeighborMap staticNeighbors;
+    string_umap<std::unique_ptr<Neighbor>> staticNeighbors;
 
     /** @brief Persistent map of VLAN interface dbus objects and their names */
-    VlanInterfaceMap vlanInterfaces;
+    string_umap<std::unique_ptr<VlanInterface>> vlanInterfaces;
 
     /** @brief Dbus object path */
     std::string objPath;
