diff --git a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.cpp b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.cpp
index 1540e0f..ffacfe5 100644
--- a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.cpp
+++ b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.cpp
@@ -1,8 +1,5 @@
 #include "hyp_network_manager.hpp"
 
-#include "types.hpp"
-#include "util.hpp"
-
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/elog.hpp>
 #include <phosphor-logging/log.hpp>
diff --git a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.hpp b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.hpp
index ca21ece..5eac26f 100644
--- a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.hpp
+++ b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.hpp
@@ -1,12 +1,8 @@
 #pragma once
-
 #include "hyp_sys_config.hpp"
-#include "types.hpp"
-#include "util.hpp"
 
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
-#include <sdeventplus/source/event.hpp>
 
 namespace phosphor
 {
@@ -65,13 +61,10 @@
 
     /** @brief Constructor to put object onto bus at a dbus path.
      *  @param[in] bus - Bus to attach to.
-     *  @param[in] event - event.
      *  @param[in] path - Path to attach at.
      */
-    HypNetworkMgr(sdbusplus::bus_t& bus, sdeventplus::Event& event,
-                  const char* path) :
-        bus(bus),
-        event(event), objectPath(path){};
+    HypNetworkMgr(sdbusplus::bus_t& bus, const char* path) :
+        bus(bus), objectPath(path){};
 
     /** @brief Get the BaseBiosTable attributes
      *
@@ -143,9 +136,6 @@
     /** @brief sdbusplus DBus bus connection. */
     sdbusplus::bus_t& bus;
 
-    /**  sdevent Event handle. */
-    sdeventplus::Event& event;
-
     /** @brief object path */
     std::string objectPath;
 
diff --git a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager_main.cpp b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager_main.cpp
index d28ca11..55d80c2 100644
--- a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager_main.cpp
+++ b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager_main.cpp
@@ -21,8 +21,7 @@
     bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
 
     // Create hypervisor network manager dbus object
-    phosphor::network::HypNetworkMgr manager(bus, event,
-                                             DEFAULT_HYP_NW_OBJPATH);
+    phosphor::network::HypNetworkMgr manager(bus, DEFAULT_HYP_NW_OBJPATH);
 
     // Create the hypervisor eth interface objects
     manager.createIfObjects();
diff --git a/src/ibm/hypervisor-network-mgr-src/hyp_sys_config.hpp b/src/ibm/hypervisor-network-mgr-src/hyp_sys_config.hpp
index f9f7d74..8c3e423 100644
--- a/src/ibm/hypervisor-network-mgr-src/hyp_sys_config.hpp
+++ b/src/ibm/hypervisor-network-mgr-src/hyp_sys_config.hpp
@@ -1,7 +1,5 @@
 #pragma once
-
 #include "hyp_network_manager.hpp"
-#include "system_configuration.hpp"
 
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
diff --git a/src/ibm/hypervisor-network-mgr-src/meson.build b/src/ibm/hypervisor-network-mgr-src/meson.build
index becc10c..08cb0ad 100644
--- a/src/ibm/hypervisor-network-mgr-src/meson.build
+++ b/src/ibm/hypervisor-network-mgr-src/meson.build
@@ -17,7 +17,10 @@
   'hyp_network_manager.cpp',
   'hyp_sys_config.cpp',
   implicit_include_directories: false,
-  dependencies: networkd_dep,
+  dependencies: [
+    networkd_dep,
+    dependency('sdeventplus'),
+  ],
   install: true,
   install_dir: get_option('bindir'))
 
diff --git a/src/meson.build b/src/meson.build
index 93cf1f2..e1033e7 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -35,7 +35,6 @@
   dependency('phosphor-logging'),
   networkd_dbus_dep,
   sdbusplus_dep,
-  dependency('sdeventplus'),
   stdplus_dep,
 ]
 
@@ -58,7 +57,6 @@
   'util.cpp',
   'config_parser.cpp',
   'dhcp_configuration.cpp',
-  'rtnetlink_server.cpp',
   'dns_updater.cpp',
   implicit_include_directories: false,
   include_directories: src_includes,
@@ -73,9 +71,13 @@
 executable(
   'phosphor-network-manager',
   'network_manager_main.cpp',
+  'rtnetlink_server.cpp',
   main_srcs,
   implicit_include_directories: false,
-  dependencies: [networkd_dep] + main_deps,
+  dependencies: main_deps + [
+    networkd_dep,
+    dependency('sdeventplus'),
+  ],
   install: true,
   install_dir: get_option('bindir'))
 
diff --git a/src/network_manager.cpp b/src/network_manager.cpp
index 51863a7..557e826 100644
--- a/src/network_manager.cpp
+++ b/src/network_manager.cpp
@@ -29,7 +29,6 @@
 namespace network
 {
 
-extern std::unique_ptr<Timer> reloadTimer;
 using namespace phosphor::logging;
 using namespace sdbusplus::xyz::openbmc_project::Common::Error;
 using Argument = xyz::openbmc_project::Common::InvalidArgument;
@@ -40,10 +39,11 @@
     "link',interface='org.freedesktop.DBus.Properties',member='"
     "PropertiesChanged',arg0='org.freedesktop.network1.Link',";
 
-Manager::Manager(sdbusplus::bus_t& bus, const char* objPath,
+Manager::Manager(sdbusplus::bus_t& bus, DelayedExecutor& reload,
+                 stdplus::zstring_view objPath,
                  const std::filesystem::path& confDir) :
-    ManagerIface(bus, objPath, ManagerIface::action::defer_emit),
-    bus(bus), objPath(std::string(objPath)), confDir(confDir),
+    ManagerIface(bus, objPath.c_str(), ManagerIface::action::defer_emit),
+    reload(reload), bus(bus), objPath(std::string(objPath)), confDir(confDir),
     systemdNetworkdEnabledMatch(
         bus, enabledMatch, [&](sdbusplus::message_t& m) {
             std::string intf;
@@ -76,6 +76,47 @@
             }
         })
 {
+    reload.setCallback([&]() {
+        for (auto& hook : reloadPreHooks)
+        {
+            try
+            {
+                hook();
+            }
+            catch (const std::exception& ex)
+            {
+                log<level::ERR>("Failed executing reload hook, ignoring",
+                                entry("ERR=%s", ex.what()));
+            }
+        }
+        reloadPreHooks.clear();
+        try
+        {
+            auto method = bus.new_method_call(NETWORKD_BUSNAME, NETWORKD_PATH,
+                                              NETWORKD_INTERFACE, "Reload");
+            bus.call_noreply(method);
+            log<level::INFO>("Reloaded systemd-networkd");
+        }
+        catch (const sdbusplus::exception_t& ex)
+        {
+            log<level::ERR>("Failed to reload configuration",
+                            entry("ERR=%s", ex.what()));
+            reloadPostHooks.clear();
+        }
+        for (auto& hook : reloadPostHooks)
+        {
+            try
+            {
+                hook();
+            }
+            catch (const std::exception& ex)
+            {
+                log<level::ERR>("Failed executing reload hook, ignoring",
+                                entry("ERR=%s", ex.what()));
+            }
+        }
+        reloadPostHooks.clear();
+    });
     std::vector<
         std::tuple<int32_t, std::string, sdbusplus::message::object_path>>
         links;
@@ -463,53 +504,6 @@
     }
 }
 
-void Manager::reloadConfigs()
-{
-    reloadTimer->restartOnce(reloadTimeout);
-}
-
-void Manager::doReloadConfigs()
-{
-    for (auto& hook : reloadPreHooks)
-    {
-        try
-        {
-            hook();
-        }
-        catch (const std::exception& ex)
-        {
-            log<level::ERR>("Failed executing reload hook, ignoring",
-                            entry("ERR=%s", ex.what()));
-        }
-    }
-    reloadPreHooks.clear();
-    try
-    {
-        auto method = bus.new_method_call(NETWORKD_BUSNAME, NETWORKD_PATH,
-                                          NETWORKD_INTERFACE, "Reload");
-        bus.call_noreply(method);
-    }
-    catch (const sdbusplus::exception_t& ex)
-    {
-        log<level::ERR>("Failed to reload configuration",
-                        entry("ERR=%s", ex.what()));
-        reloadPostHooks.clear();
-    }
-    for (auto& hook : reloadPostHooks)
-    {
-        try
-        {
-            hook();
-        }
-        catch (const std::exception& ex)
-        {
-            log<level::ERR>("Failed executing reload hook, ignoring",
-                            entry("ERR=%s", ex.what()));
-        }
-    }
-    reloadPostHooks.clear();
-}
-
 void Manager::handleAdminState(std::string_view state, unsigned ifidx)
 {
     if (state == "initialized" || state == "linger")
diff --git a/src/network_manager.hpp b/src/network_manager.hpp
index 5166f7a..890a837 100644
--- a/src/network_manager.hpp
+++ b/src/network_manager.hpp
@@ -11,6 +11,7 @@
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/bus/match.hpp>
 #include <sdbusplus/message/native_types.hpp>
+#include <stdplus/zstring_view.hpp>
 #include <string>
 #include <string_view>
 #include <vector>
@@ -25,6 +26,15 @@
     sdbusplus::xyz::openbmc_project::Network::VLAN::server::Create,
     sdbusplus::xyz::openbmc_project::Common::server::FactoryReset>;
 
+class DelayedExecutor
+{
+  public:
+    virtual ~DelayedExecutor() = default;
+
+    virtual void schedule() = 0;
+    virtual void setCallback(fu2::unique_function<void()>&& cb) = 0;
+};
+
 /** @class Manager
  *  @brief OpenBMC network manager implementation.
  */
@@ -35,14 +45,15 @@
     Manager& operator=(const Manager&) = delete;
     Manager(Manager&&) = delete;
     Manager& operator=(Manager&&) = delete;
-    virtual ~Manager() = default;
 
     /** @brief Constructor to put object onto bus at a dbus path.
      *  @param[in] bus - Bus to attach to.
+     *  @param[in] reload - The executor for reloading configs
      *  @param[in] objPath - Path to attach at.
      *  @param[in] confDir - Network Configuration directory path.
      */
-    Manager(sdbusplus::bus_t& bus, const char* objPath,
+    Manager(sdbusplus::bus_t& bus, DelayedExecutor& reload,
+            stdplus::zstring_view objPath,
             const std::filesystem::path& confDir);
 
     ObjectPath vlan(std::string interfaceName, uint32_t id) override;
@@ -93,11 +104,10 @@
     /** @brief Arms a timer to tell systemd-network to reload all of the network
      * configurations
      */
-    virtual void reloadConfigs();
-
-    /** @brief Tell systemd-network to reload all of the network configurations
-     */
-    void doReloadConfigs();
+    inline void reloadConfigs()
+    {
+        reload.schedule();
+    }
 
     /** @brief Persistent map of EthernetInterface dbus objects and their names
      */
@@ -119,6 +129,9 @@
     }
 
   protected:
+    /** @brief Handle to the object used to trigger reloads of networkd. */
+    DelayedExecutor& reload;
+
     /** @brief Persistent sdbusplus DBus bus connection. */
     sdbusplus::bus_t& bus;
 
diff --git a/src/network_manager_main.cpp b/src/network_manager_main.cpp
index dc51915..170241d 100644
--- a/src/network_manager_main.cpp
+++ b/src/network_manager_main.cpp
@@ -9,43 +9,49 @@
 
 #include <fmt/format.h>
 
-#include <functional>
-#include <memory>
+#include <chrono>
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/manager.hpp>
+#include <sdeventplus/clock.hpp>
 #include <sdeventplus/event.hpp>
 #include <sdeventplus/source/signal.hpp>
+#include <sdeventplus/utility/timer.hpp>
 #include <stdplus/signal.hpp>
 
 using phosphor::logging::level;
 using phosphor::logging::log;
 
-constexpr char NETWORK_CONF_DIR[] = "/etc/systemd/network";
 constexpr char DEFAULT_OBJPATH[] = "/xyz/openbmc_project/network";
 
-namespace phosphor
-{
-namespace network
+namespace phosphor::network
 {
 
-std::unique_ptr<Manager> manager = nullptr;
-std::unique_ptr<Timer> reloadTimer = nullptr;
-
-void reloadNetworkd()
+class TimerExecutor : public DelayedExecutor
 {
-    if (manager)
+  private:
+    using Timer = sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>;
+
+  public:
+    TimerExecutor(sdeventplus::Event& event, std::chrono::seconds delay) :
+        delay(delay), timer(event, nullptr)
     {
-        log<level::INFO>("Sending networkd reload");
-        manager->doReloadConfigs();
-        log<level::INFO>("Done networkd reload");
     }
-}
 
-void initializeTimers(sdeventplus::Event& event)
-{
-    reloadTimer = std::make_unique<Timer>(event, std::bind(reloadNetworkd));
-}
+    void schedule() override
+    {
+        timer.restartOnce(delay);
+    }
+
+    void setCallback(fu2::unique_function<void()>&& cb) override
+    {
+        timer.set_callback([cb = std::move(cb)](Timer&) mutable { cb(); });
+    }
+
+  private:
+    std::chrono::seconds delay;
+    Timer timer;
+};
 
 void termCb(sdeventplus::source::Signal& signal, const struct signalfd_siginfo*)
 {
@@ -59,30 +65,23 @@
     stdplus::signal::block(SIGTERM);
     sdeventplus::source::Signal(event, SIGTERM, termCb).set_floating(true);
 
-    initializeTimers(event);
-
     auto bus = sdbusplus::bus::new_default();
-    // Attach the bus to sd_event to service user requests
     bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
-
-    // Add sdbusplus Object Manager for the 'root' path of the network manager.
     sdbusplus::server::manager_t objManager(bus, DEFAULT_OBJPATH);
-    bus.request_name(DEFAULT_BUSNAME);
 
-    manager = std::make_unique<Manager>(bus, DEFAULT_OBJPATH, NETWORK_CONF_DIR);
-
-    // RTNETLINK event handler
-    netlink::Server svr(event, *manager);
+    TimerExecutor reload(event, std::chrono::seconds(3));
+    Manager manager(bus, reload, DEFAULT_OBJPATH, "/etc/systemd/network");
+    netlink::Server svr(event, manager);
 
 #ifdef SYNC_MAC_FROM_INVENTORY
-    auto runtime = inventory::watch(bus, *manager);
+    auto runtime = inventory::watch(bus, manager);
 #endif
 
+    bus.request_name(DEFAULT_BUSNAME);
     return event.loop();
 }
 
-} // namespace network
-} // namespace phosphor
+} // namespace phosphor::network
 
 int main(int /*argc*/, char** /*argv*/)
 {
diff --git a/src/types.hpp b/src/types.hpp
index f426f81..8d1daf4 100644
--- a/src/types.hpp
+++ b/src/types.hpp
@@ -5,10 +5,8 @@
 
 #include <algorithm>
 #include <array>
-#include <chrono>
 #include <numeric>
-#include <sdeventplus/clock.hpp>
-#include <sdeventplus/utility/timer.hpp>
+#include <optional>
 #include <string>
 #include <string_view>
 #include <type_traits>
@@ -37,11 +35,6 @@
 namespace network
 {
 
-using namespace std::chrono_literals;
-
-// wait for three seconds before reloading systemd-networkd
-constexpr auto reloadTimeout = 3s;
-
 // Byte representations for common address types in network byte order
 using InAddrAny = std::variant<in_addr, in6_addr>;
 class IfAddr
@@ -85,8 +78,6 @@
     }
 };
 
-using Timer = sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>;
-
 /** @class InterfaceInfo
  *  @brief Information about interfaces from the kernel
  */
diff --git a/src/util.cpp b/src/util.cpp
index 675409f..14a1cb3 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -14,7 +14,6 @@
 #include <phosphor-logging/log.hpp>
 #include <string>
 #include <string_view>
-#include <variant>
 #include <xyz/openbmc_project/Common/error.hpp>
 
 namespace phosphor
