diff --git a/control/json/event.cpp b/control/json/event.cpp
index e7a7bfb..94f860c 100644
--- a/control/json/event.cpp
+++ b/control/json/event.cpp
@@ -15,6 +15,9 @@
  */
 #include "event.hpp"
 
+#include "group.hpp"
+#include "json_parser.hpp"
+
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
@@ -25,8 +28,11 @@
 using json = nlohmann::json;
 using namespace phosphor::logging;
 
+const std::map<configKey, std::unique_ptr<Group>> Event::_availGrps =
+    getConfig<Group>(true);
+
 Event::Event(sdbusplus::bus::bus& bus, const json& jsonObj) :
-    ConfigBase(jsonObj)
+    ConfigBase(jsonObj), _bus(bus)
 {
     if (jsonObj.contains("profiles"))
     {
diff --git a/control/json/event.hpp b/control/json/event.hpp
index 5230fbb..3bc41ae 100644
--- a/control/json/event.hpp
+++ b/control/json/event.hpp
@@ -16,6 +16,8 @@
 #pragma once
 
 #include "config_base.hpp"
+#include "group.hpp"
+#include "json_parser.hpp"
 #include "types.hpp"
 
 #include <nlohmann/json.hpp>
@@ -111,6 +113,12 @@
     }
 
   private:
+    /* Mapping of available group names & profiles to their group object */
+    static const std::map<configKey, std::unique_ptr<Group>> _availGrps;
+
+    /* The sdbusplus bus object */
+    sdbusplus::bus::bus& _bus;
+
     /* A precondition the event has in order to be enabled */
     Precondition _precond;
 
diff --git a/control/json/group.cpp b/control/json/group.cpp
index a022338..f193ef7 100644
--- a/control/json/group.cpp
+++ b/control/json/group.cpp
@@ -17,7 +17,6 @@
 
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/log.hpp>
-#include <sdbusplus/bus.hpp>
 
 namespace phosphor::fan::control::json
 {
@@ -25,8 +24,7 @@
 using json = nlohmann::json;
 using namespace phosphor::logging;
 
-Group::Group(sdbusplus::bus::bus& bus, const json& jsonObj) :
-    ConfigBase(jsonObj), _service("")
+Group::Group(const json& jsonObj) : ConfigBase(jsonObj), _service("")
 {
     if (jsonObj.contains("profiles"))
     {
diff --git a/control/json/group.hpp b/control/json/group.hpp
index 7cc84e9..e8d607f 100644
--- a/control/json/group.hpp
+++ b/control/json/group.hpp
@@ -18,7 +18,6 @@
 #include "config_base.hpp"
 
 #include <nlohmann/json.hpp>
-#include <sdbusplus/bus.hpp>
 
 namespace phosphor::fan::control::json
 {
@@ -56,10 +55,9 @@
      * Constructor
      * Parses and populates a configuration group from JSON object data
      *
-     * @param[in] bus - sdbusplus bus object
      * @param[in] jsonObj - JSON object
      */
-    Group(sdbusplus::bus::bus& bus, const json& jsonObj);
+    Group(const json& jsonObj);
 
     /**
      * @brief Get the members
diff --git a/control/json/profile.cpp b/control/json/profile.cpp
index 696716e..0778820 100644
--- a/control/json/profile.cpp
+++ b/control/json/profile.cpp
@@ -19,7 +19,6 @@
 
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/log.hpp>
-#include <sdbusplus/bus.hpp>
 
 #include <algorithm>
 #include <iterator>
@@ -35,8 +34,7 @@
 const std::map<std::string, methodHandler> Profile::_methods = {
     {"all_of", Profile::allOf}};
 
-Profile::Profile(sdbusplus::bus::bus& bus, const json& jsonObj) :
-    ConfigBase(jsonObj), _bus(bus), _active(false)
+Profile::Profile(const json& jsonObj) : ConfigBase(jsonObj), _active(false)
 {
     setActive(jsonObj);
 }
diff --git a/control/json/profile.hpp b/control/json/profile.hpp
index eacb1dc..dd0aed0 100644
--- a/control/json/profile.hpp
+++ b/control/json/profile.hpp
@@ -18,7 +18,6 @@
 #include "config_base.hpp"
 
 #include <nlohmann/json.hpp>
-#include <sdbusplus/bus.hpp>
 
 namespace phosphor::fan::control::json
 {
@@ -57,7 +56,7 @@
      * @param[in] bus - sdbusplus bus object
      * @param[in] jsonObj - JSON object
      */
-    Profile(sdbusplus::bus::bus& bus, const json& jsonObj);
+    Profile(const json& jsonObj);
 
     /**
      * @brief Get the active state
@@ -70,9 +69,6 @@
     }
 
   private:
-    /* The sdbusplus bus object */
-    sdbusplus::bus::bus& _bus;
-
     /* Active state of the profile */
     bool _active;
 
diff --git a/control/json/zone.cpp b/control/json/zone.cpp
index 33ab048..dd0dbfb 100644
--- a/control/json/zone.cpp
+++ b/control/json/zone.cpp
@@ -22,7 +22,6 @@
 
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/log.hpp>
-#include <sdbusplus/bus.hpp>
 
 #include <iterator>
 #include <map>
@@ -41,8 +40,7 @@
                                 {{supportedProp, zone::property::supported},
                                  {currentProp, zone::property::current}}}};
 
-Zone::Zone(sdbusplus::bus::bus& bus, const json& jsonObj) :
-    ConfigBase(jsonObj), _incDelay(0)
+Zone::Zone(const json& jsonObj) : ConfigBase(jsonObj), _incDelay(0)
 {
     if (jsonObj.contains("profiles"))
     {
diff --git a/control/json/zone.hpp b/control/json/zone.hpp
index 4f7742c..09c1dac 100644
--- a/control/json/zone.hpp
+++ b/control/json/zone.hpp
@@ -19,7 +19,6 @@
 #include "types.hpp"
 
 #include <nlohmann/json.hpp>
-#include <sdbusplus/bus.hpp>
 
 #include <any>
 #include <functional>
@@ -68,10 +67,9 @@
      * Constructor
      * Parses and populates a zone from JSON object data
      *
-     * @param[in] bus - sdbusplus bus object
      * @param[in] jsonObj - JSON object
      */
-    Zone(sdbusplus::bus::bus& bus, const json& jsonObj);
+    Zone(const json& jsonObj);
 
     /**
      * @brief Get the full speed
diff --git a/control/json_parser.cpp b/control/json_parser.cpp
index de7bc26..b69bab1 100644
--- a/control/json_parser.cpp
+++ b/control/json_parser.cpp
@@ -64,18 +64,13 @@
     std::vector<ZoneGroup> zoneGrps;
 
     // Profiles are optional
-    auto profiles = getConfig<json::Profile>(bus, true);
+    auto profiles = getConfig<json::Profile>(true);
     // Fans to be controlled
     auto fans = getConfig<json::Fan>(bus);
     // Zones within the system
-    auto zones = getConfig<json::Zone>(bus);
+    auto zones = getConfig<json::Zone>();
     // Fan control events are optional
     auto events = getConfig<json::Event>(bus, true);
-    if (!events.empty())
-    {
-        // Groups to include in events
-        auto groups = getConfig<json::Group>(bus);
-    }
 
     // Ensure all configurations use the same set of active profiles
     // (In case a profile's active state changes during configuration)
diff --git a/control/json_parser.hpp b/control/json_parser.hpp
index 7c08875..adeacbe 100644
--- a/control/json_parser.hpp
+++ b/control/json_parser.hpp
@@ -42,7 +42,8 @@
 using configKey = std::pair<std::string, std::vector<std::string>>;
 
 /**
- * @brief Load the configuration of a given JSON class object type
+ * @brief Load the configuration of a given JSON class object type that requires
+ * a dbus object
  *
  * @param[in] bus - The dbus bus object
  * @param[in] isOptional - JSON configuration file is optional or not
@@ -72,6 +73,37 @@
 }
 
 /**
+ * @brief Load the configuration of a given JSON class object type that does not
+ * require a dbus object
+ *
+ * @param[in] isOptional - JSON configuration file is optional or not
+ *                         Defaults to false
+ *
+ * @return Map of configuration entries
+ *     Map of configuration keys to their corresponding configuration object
+ */
+template <typename T>
+std::map<configKey, std::unique_ptr<T>> getConfig(bool isOptional = false)
+{
+    // Dbus object is needed to retrieve the JSON configuration file
+    auto bus = sdbusplus::bus::new_default();
+    std::map<configKey, std::unique_ptr<T>> config;
+
+    auto confFile = fan::JsonConfig::getConfFile(bus, confAppName,
+                                                 T::confFileName, isOptional);
+    if (!confFile.empty())
+    {
+        for (const auto& entry : fan::JsonConfig::load(confFile))
+        {
+            auto obj = std::make_unique<T>(entry);
+            config.emplace(std::make_pair(obj->getName(), obj->getProfiles()),
+                           std::move(obj));
+        }
+    }
+    return config;
+}
+
+/**
  * @brief Helper function to determine when a configuration entry is included
  * based on the list of active profiles and its list of profiles
  *
