diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index 264eb25..804b15e 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -16,10 +16,12 @@
 #include "manager.hpp"
 
 #include "json_config.hpp"
-#include "json_parser.hpp"
 #include "profile.hpp"
+#include "zone.hpp"
 
+#include <nlohmann/json.hpp>
 #include <sdbusplus/bus.hpp>
+#include <sdeventplus/event.hpp>
 
 #include <filesystem>
 #include <vector>
@@ -27,8 +29,12 @@
 namespace phosphor::fan::control::json
 {
 
+using json = nlohmann::json;
+
+std::vector<std::string> Manager::_activeProfiles;
+
 Manager::Manager(sdbusplus::bus::bus& bus, const sdeventplus::Event& event) :
-    _profiles(getConfig<Profile>(true))
+    _bus(bus), _event(event)
 {
     // Manager JSON config file is optional
     auto confFile =
@@ -38,15 +44,16 @@
         _jsonObj = fan::JsonConfig::load(confFile);
     }
 
-    // Ensure all configurations use the same set of active profiles
-    // (In case a profile's active state changes during configuration)
-    for (const auto& profile : _profiles)
-    {
-        if (profile.second->isActive())
-        {
-            _activeProfiles.emplace_back(profile.first.first);
-        }
-    }
+    // Parse and set the available profiles and which are active
+    setProfiles();
+
+    // Load the zone configurations
+    _zones = getConfig<Zone>(bus);
+}
+
+const std::vector<std::string>& Manager::getActiveProfiles()
+{
+    return _activeProfiles;
 }
 
 unsigned int Manager::getPowerOnDelay()
@@ -62,4 +69,30 @@
     return powerOnDelay;
 }
 
+void Manager::setProfiles()
+{
+    // Profiles JSON config file is optional
+    auto confFile = fan::JsonConfig::getConfFile(_bus, confAppName,
+                                                 Profile::confFileName, true);
+    if (!confFile.empty())
+    {
+        for (const auto& entry : fan::JsonConfig::load(confFile))
+        {
+            auto obj = std::make_unique<Profile>(entry);
+            _profiles.emplace(
+                std::make_pair(obj->getName(), obj->getProfiles()),
+                std::move(obj));
+        }
+    }
+    // Ensure all configurations use the same set of active profiles
+    // (In case a profile's active state changes during configuration)
+    for (const auto& profile : _profiles)
+    {
+        if (profile.second->isActive())
+        {
+            _activeProfiles.emplace_back(profile.first.first);
+        }
+    }
+}
+
 } // namespace phosphor::fan::control::json
diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index 597fdd9..60cf2b7 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -15,8 +15,9 @@
  */
 #pragma once
 
-#include "json_parser.hpp"
+#include "json_config.hpp"
 #include "profile.hpp"
+#include "zone.hpp"
 
 #include <nlohmann/json.hpp>
 #include <sdbusplus/bus.hpp>
@@ -27,6 +28,18 @@
 
 using json = nlohmann::json;
 
+/* Application name to be appended to the path for loading a JSON config file */
+constexpr auto confAppName = "control";
+
+/**
+ * Configuration object key to uniquely map to the configuration object
+ * Pair constructed of:
+ *      std::string = Configuration object's name
+ *      std::vector<std::string> = List of profiles the configuration object
+ *                                 is included in
+ */
+using configKey = std::pair<std::string, std::vector<std::string>>;
+
 /**
  * @class Manager - Represents the fan control manager's configuration
  *
@@ -59,6 +72,69 @@
     Manager(sdbusplus::bus::bus& bus, const sdeventplus::Event& event);
 
     /**
+     * @brief Get the active profiles of the system where an empty list
+     * represents that only configuration entries without a profile defined will
+     * be loaded.
+     *
+     * @return - The list of active profiles
+     */
+    static const std::vector<std::string>& getActiveProfiles();
+
+    /**
+     * @brief Load the configuration of a given JSON class object based on the
+     * active profiles
+     *
+     * @param[in] bus - The sdbusplus bus 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>
+    static std::map<configKey, std::unique_ptr<T>>
+        getConfig(sdbusplus::bus::bus& bus, bool isOptional = false)
+    {
+        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))
+            {
+                if (entry.contains("profiles"))
+                {
+                    std::vector<std::string> profiles;
+                    for (const auto& profile : entry["profiles"])
+                    {
+                        profiles.emplace_back(
+                            profile.template get<std::string>());
+                    }
+                    // Do not create the object if its profiles are not in the
+                    // list of active profiles
+                    if (!std::any_of(profiles.begin(), profiles.end(),
+                                     [](const auto& name) {
+                                         return std::find(
+                                                    getActiveProfiles().begin(),
+                                                    getActiveProfiles().end(),
+                                                    name) !=
+                                                getActiveProfiles().end();
+                                     }))
+                    {
+                        continue;
+                    }
+                }
+                auto obj = std::make_unique<T>(bus, entry);
+                config.emplace(
+                    std::make_pair(obj->getName(), obj->getProfiles()),
+                    std::move(obj));
+            }
+        }
+        return config;
+    }
+
+    /**
      * @brief Get the configured power on delay(OPTIONAL)
      *
      * @return Power on delay in seconds
@@ -73,11 +149,34 @@
     /* The parsed JSON object */
     json _jsonObj;
 
+    /**
+     * The sdbusplus bus object to use
+     */
+    sdbusplus::bus::bus& _bus;
+
+    /**
+     * The sdeventplus even loop to use
+     */
+    sdeventplus::Event _event;
+
     /* List of profiles configured */
-    const std::map<configKey, std::unique_ptr<Profile>> _profiles;
+    std::map<configKey, std::unique_ptr<Profile>> _profiles;
 
     /* List of active profiles */
-    std::vector<std::string> _activeProfiles;
+    static std::vector<std::string> _activeProfiles;
+
+    /* List of zones configured */
+    std::map<configKey, std::unique_ptr<Zone>> _zones;
+
+    /**
+     * @brief Parse and set the configured profiles from the profiles JSON file
+     *
+     * Retrieves the optional profiles JSON configuration file, parses it, and
+     * creates a list of configured profiles available to the other
+     * configuration files. These profiles can be used to remove or include
+     * entries within the other configuration files.
+     */
+    void setProfiles();
 };
 
 } // namespace phosphor::fan::control::json
diff --git a/control/json/zone.cpp b/control/json/zone.cpp
index dd0dbfb..33ab048 100644
--- a/control/json/zone.cpp
+++ b/control/json/zone.cpp
@@ -22,6 +22,7 @@
 
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/log.hpp>
+#include <sdbusplus/bus.hpp>
 
 #include <iterator>
 #include <map>
@@ -40,7 +41,8 @@
                                 {{supportedProp, zone::property::supported},
                                  {currentProp, zone::property::current}}}};
 
-Zone::Zone(const json& jsonObj) : ConfigBase(jsonObj), _incDelay(0)
+Zone::Zone(sdbusplus::bus::bus& bus, const json& jsonObj) :
+    ConfigBase(jsonObj), _incDelay(0)
 {
     if (jsonObj.contains("profiles"))
     {
diff --git a/control/json/zone.hpp b/control/json/zone.hpp
index 09c1dac..4f7742c 100644
--- a/control/json/zone.hpp
+++ b/control/json/zone.hpp
@@ -19,6 +19,7 @@
 #include "types.hpp"
 
 #include <nlohmann/json.hpp>
+#include <sdbusplus/bus.hpp>
 
 #include <any>
 #include <functional>
@@ -67,9 +68,10 @@
      * Constructor
      * Parses and populates a zone from JSON object data
      *
+     * @param[in] bus - sdbusplus bus object
      * @param[in] jsonObj - JSON object
      */
-    Zone(const json& jsonObj);
+    Zone(sdbusplus::bus::bus& bus, const json& jsonObj);
 
     /**
      * @brief Get the full speed
