diff --git a/control/json/event.cpp b/control/json/event.cpp
index d5ec01f..4adced8 100644
--- a/control/json/event.cpp
+++ b/control/json/event.cpp
@@ -19,6 +19,7 @@
 #include "config_base.hpp"
 #include "group.hpp"
 #include "manager.hpp"
+#include "sdbusplus.hpp"
 #include "triggers/trigger.hpp"
 
 #include <fmt/format.h>
@@ -36,11 +37,11 @@
 using json = nlohmann::json;
 using namespace phosphor::logging;
 
-Event::Event(const json& jsonObj, sdbusplus::bus::bus& bus, Manager* mgr,
+Event::Event(const json& jsonObj, Manager* mgr,
              std::map<configKey, std::unique_ptr<Group>>& groups,
              std::map<configKey, std::unique_ptr<Zone>>& zones) :
     ConfigBase(jsonObj),
-    _bus(bus), _manager(mgr), _zones(zones)
+    _bus(util::SDBusPlus::getBus()), _manager(mgr), _zones(zones)
 {
     // Event could have a precondition
     if (!jsonObj.contains("precondition"))
diff --git a/control/json/event.hpp b/control/json/event.hpp
index 9b108fe..2608014 100644
--- a/control/json/event.hpp
+++ b/control/json/event.hpp
@@ -74,12 +74,11 @@
      * Parses and populates a configuration event from JSON object data
      *
      * @param[in] jsonObj - JSON object
-     * @param[in] bus - sdbusplus bus object
      * @param[in] mgr - Manager of this event
      * @param[in] groups - Available groups that can be used
      * @param[in] zones - Reference to the configured zones
      */
-    Event(const json& jsonObj, sdbusplus::bus::bus& bus, Manager* mgr,
+    Event(const json& jsonObj, Manager* mgr,
           std::map<configKey, std::unique_ptr<Group>>& groups,
           std::map<configKey, std::unique_ptr<Zone>>& zones);
 
diff --git a/control/json/fan.cpp b/control/json/fan.cpp
index edd8514..673859a 100644
--- a/control/json/fan.cpp
+++ b/control/json/fan.cpp
@@ -32,8 +32,8 @@
 constexpr auto FAN_SENSOR_PATH = "/xyz/openbmc_project/sensors/fan_tach/";
 constexpr auto FAN_TARGET_PROPERTY = "Target";
 
-Fan::Fan(const json& jsonObj, sdbusplus::bus::bus& bus) :
-    ConfigBase(jsonObj), _bus(bus)
+Fan::Fan(const json& jsonObj) :
+    ConfigBase(jsonObj), _bus(util::SDBusPlus::getBus())
 {
     setInterface(jsonObj);
     setSensors(jsonObj);
diff --git a/control/json/fan.hpp b/control/json/fan.hpp
index e2bf985..55cb167 100644
--- a/control/json/fan.hpp
+++ b/control/json/fan.hpp
@@ -58,9 +58,8 @@
      * Parses and populates a zone fan from JSON object data
      *
      * @param[in] jsonObj - JSON object
-     * @param[in] bus - sdbusplus bus object
      */
-    Fan(const json& jsonObj, sdbusplus::bus::bus& bus);
+    Fan(const json& jsonObj);
 
     /**
      * @brief Get the zone
diff --git a/control/json/group.cpp b/control/json/group.cpp
index 01390b1..3b7f990 100644
--- a/control/json/group.cpp
+++ b/control/json/group.cpp
@@ -24,8 +24,7 @@
 using json = nlohmann::json;
 using namespace phosphor::logging;
 
-Group::Group(const json& jsonObj, sdbusplus::bus::bus&) :
-    ConfigBase(jsonObj), _service("")
+Group::Group(const json& jsonObj) : ConfigBase(jsonObj), _service("")
 {
     setMembers(jsonObj);
     // Setting the group's service name is optional
diff --git a/control/json/group.hpp b/control/json/group.hpp
index ce8d12c..dd5c6a0 100644
--- a/control/json/group.hpp
+++ b/control/json/group.hpp
@@ -55,9 +55,8 @@
      * Parses and populates a configuration group from JSON object data
      *
      * @param[in] jsonObj - JSON object
-     * @param[in] sdbusplus bus object not used
      */
-    Group(const json& jsonObj, sdbusplus::bus::bus&);
+    Group(const json& jsonObj);
 
     /**
      * Copy Constructor
diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index 2365a7d..3653300 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -23,6 +23,7 @@
 #include "group.hpp"
 #include "json_config.hpp"
 #include "profile.hpp"
+#include "sdbusplus.hpp"
 #include "zone.hpp"
 
 #include <nlohmann/json.hpp>
@@ -53,12 +54,12 @@
          std::map<std::string, std::map<std::string, PropertyVariantType>>>
     Manager::_objects;
 
-Manager::Manager(sdbusplus::bus::bus& bus, const sdeventplus::Event& event) :
-    _bus(bus), _event(event)
+Manager::Manager(const sdeventplus::Event& event) :
+    _bus(util::SDBusPlus::getBus()), _event(event)
 {
     // Manager JSON config file is optional
     auto confFile =
-        fan::JsonConfig::getConfFile(bus, confAppName, confFileName, true);
+        fan::JsonConfig::getConfFile(_bus, confAppName, confFileName, true);
     if (!confFile.empty())
     {
         _jsonObj = fan::JsonConfig::load(confFile);
@@ -68,10 +69,10 @@
     setProfiles();
 
     // Load the zone configurations
-    _zones = getConfig<Zone>(false, bus, event, this);
+    _zones = getConfig<Zone>(false, event, this);
 
     // Load the fan configurations and move each fan into its zone
-    auto fans = getConfig<Fan>(false, bus);
+    auto fans = getConfig<Fan>(false);
     for (auto& fan : fans)
     {
         configKey fanProfile =
@@ -93,12 +94,12 @@
     }
 
     // Load the configured groups that are copied into events where they're used
-    auto groups = getConfig<Group>(true, bus);
+    auto groups = getConfig<Group>(true);
 
     // Load any events configured
-    _events = getConfig<Event>(true, bus, this, groups, _zones);
+    _events = getConfig<Event>(true, this, groups, _zones);
 
-    bus.request_name(CONTROL_BUSNAME);
+    _bus.request_name(CONTROL_BUSNAME);
 }
 
 const std::vector<std::string>& Manager::getActiveProfiles()
diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index 74683a9..657f51a 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -21,6 +21,7 @@
 #include "group.hpp"
 #include "json_config.hpp"
 #include "profile.hpp"
+#include "sdbusplus.hpp"
 #include "zone.hpp"
 
 #include <nlohmann/json.hpp>
@@ -128,10 +129,9 @@
      * Constructor
      * Parses and populates the fan control manager attributes from a json file
      *
-     * @param[in] bus - sdbusplus bus object
      * @param[in] event - sdeventplus event loop
      */
-    Manager(sdbusplus::bus::bus& bus, const sdeventplus::Event& event);
+    Manager(const sdeventplus::Event& event);
 
     /**
      * @brief Get the active profiles of the system where an empty list
@@ -143,19 +143,6 @@
     static const std::vector<std::string>& getActiveProfiles();
 
     /**
-     * @brief Extract bus from first location in argument pack
-     *
-     * @param[in] args - Argument pack
-     *
-     * @return - The first argument(sdbusplus bus object) from argument pack
-     */
-    template <typename... Args>
-    static decltype(auto) getBus(Args&&... args)
-    {
-        return std::get<0>(std::forward_as_tuple(args...));
-    }
-
-    /**
      * @brief Load the configuration of a given JSON class object based on the
      * active profiles
      *
@@ -172,9 +159,9 @@
     {
         std::map<configKey, std::unique_ptr<T>> config;
 
-        auto confFile = fan::JsonConfig::getConfFile(
-            getBus(std::forward<Args>(args)...), confAppName, T::confFileName,
-            isOptional);
+        auto confFile =
+            fan::JsonConfig::getConfFile(util::SDBusPlus::getBus(), confAppName,
+                                         T::confFileName, isOptional);
         if (!confFile.empty())
         {
             for (const auto& entry : fan::JsonConfig::load(confFile))
diff --git a/control/json/zone.cpp b/control/json/zone.cpp
index 4d353d5..8db1b4e 100644
--- a/control/json/zone.cpp
+++ b/control/json/zone.cpp
@@ -18,6 +18,7 @@
 #include "zone.hpp"
 
 #include "fan.hpp"
+#include "sdbusplus.hpp"
 
 #include <cereal/archives/json.hpp>
 #include <cereal/cereal.hpp>
@@ -50,10 +51,10 @@
                                 {{supportedProp, zone::property::supported},
                                  {currentProp, zone::property::current}}}};
 
-Zone::Zone(const json& jsonObj, sdbusplus::bus::bus& bus,
-           const sdeventplus::Event& event, Manager* mgr) :
+Zone::Zone(const json& jsonObj, const sdeventplus::Event& event, Manager* mgr) :
     ConfigBase(jsonObj),
-    ThermalObject(bus, (fs::path{CONTROL_OBJPATH} /= getName()).c_str(), true),
+    ThermalObject(util::SDBusPlus::getBus(),
+                  (fs::path{CONTROL_OBJPATH} /= getName()).c_str(), true),
     _manager(mgr), _incDelay(0), _floor(0), _target(0), _incDelta(0),
     _decDelta(0), _requestTargetBase(0), _isActive(true),
     _incTimer(event, std::bind(&Zone::incTimerExpired, this)),
diff --git a/control/json/zone.hpp b/control/json/zone.hpp
index d9d6815..670781b 100644
--- a/control/json/zone.hpp
+++ b/control/json/zone.hpp
@@ -78,12 +78,10 @@
      * Parses and populates a zone from JSON object data
      *
      * @param[in] jsonObj - JSON object
-     * @param[in] bus - sdbusplus bus object
      * @param[in] event - sdeventplus event loop
      * @param[in] mgr - Manager of this zone
      */
-    Zone(const json& jsonObj, sdbusplus::bus::bus& bus,
-         const sdeventplus::Event& event, Manager* mgr);
+    Zone(const json& jsonObj, const sdeventplus::Event& event, Manager* mgr);
 
     /**
      * @brief Get the default ceiling
diff --git a/control/main.cpp b/control/main.cpp
index 9170baf..1dcc0b5 100644
--- a/control/main.cpp
+++ b/control/main.cpp
@@ -33,7 +33,6 @@
 int main(int argc, char* argv[])
 {
     auto event = sdeventplus::Event::get_default();
-    auto bus = sdbusplus::bus::new_default();
 
 #ifndef CONTROL_USE_JSON
     phosphor::fan::util::ArgumentParser args(argc, argv);
@@ -62,14 +61,15 @@
 
     // Attach the event object to the bus object so we can
     // handle both sd_events (for the timers) and dbus signals.
-    bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
+    phosphor::fan::util::SDBusPlus::getBus().attach_event(
+        event.get(), SD_EVENT_PRIORITY_NORMAL);
 
     try
     {
 #ifdef CONTROL_USE_JSON
-        json::Manager manager(bus, event);
+        json::Manager manager(event);
 #else
-        Manager manager(bus, event, mode);
+        Manager manager(phosphor::fan::util::SDBusPlus::getBus(), event, mode);
 
         // Init mode will just set fans to max and delay
         if (mode == Mode::init)
