diff --git a/monitor/Makefile.am b/monitor/Makefile.am
index 6c3c435..f488859 100644
--- a/monitor/Makefile.am
+++ b/monitor/Makefile.am
@@ -17,14 +17,16 @@
 	$(SDEVENTPLUS_LIBS) \
 	$(PHOSPHOR_LOGGING_LIBS) \
 	${PHOSPHOR_DBUS_INTERFACES_LIBS} \
-	-lstdc++fs
+	-lstdc++fs \
+	$(STDPLUS_LIBS)
 
 phosphor_fan_monitor_CXXFLAGS = \
 	$(SDBUSPLUS_CFLAGS) \
 	$(SDEVENTPLUS_CFLAGS) \
 	$(PHOSPHOR_LOGGING_CFLAGS) \
 	${PHOSPHOR_DBUS_INTERFACES_CFLAGS} \
-	-flto
+	-flto \
+	$(STDPLUS_CFLAGS)
 
 if WANT_JSON
 phosphor_fan_monitor_SOURCES += json_parser.cpp
diff --git a/monitor/main.cpp b/monitor/main.cpp
index 7517d6d..f0458f9 100644
--- a/monitor/main.cpp
+++ b/monitor/main.cpp
@@ -13,6 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include "config.h"
+
 #include "argument.hpp"
 #include "fan.hpp"
 #include "system.hpp"
@@ -21,6 +23,8 @@
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdeventplus/event.hpp>
+#include <sdeventplus/source/signal.hpp>
+#include <stdplus/signal.hpp>
 
 using namespace phosphor::fan::monitor;
 using namespace phosphor::logging;
@@ -58,6 +62,15 @@
 
     System system(mode, bus, event);
 
+#ifdef MONITOR_USE_JSON
+    // Enable SIGHUP handling to reload JSON config
+    stdplus::signal::block(SIGHUP);
+    sdeventplus::source::Signal signal(event, SIGHUP,
+                                       std::bind(&System::sighupHandler,
+                                                 &system, std::placeholders::_1,
+                                                 std::placeholders::_2));
+#endif
+
     if (mode == Mode::init)
     {
         // Fans were initialized to be functional, exit
diff --git a/monitor/system.cpp b/monitor/system.cpp
index 032291f..632b0b2 100644
--- a/monitor/system.cpp
+++ b/monitor/system.cpp
@@ -27,13 +27,16 @@
 #endif
 
 #include <nlohmann/json.hpp>
+#include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdeventplus/event.hpp>
+#include <sdeventplus/source/signal.hpp>
 
 namespace phosphor::fan::monitor
 {
 
 using json = nlohmann::json;
+using namespace phosphor::logging;
 
 System::System(Mode mode, sdbusplus::bus::bus& bus,
                const sdeventplus::Event& event) :
@@ -45,23 +48,34 @@
     jsonObj = getJsonObj(bus);
 #endif
     // Retrieve and set trust groups within the trust manager
-    _trust = std::make_unique<trust::Manager>(getTrustGroups(jsonObj));
-
+    setTrustMgr(getTrustGroups(jsonObj));
     // Retrieve fan definitions and create fan objects to be monitored
-    for (const auto& fanDef : getFanDefinitions(jsonObj))
+    setFans(getFanDefinitions(jsonObj));
+    log<level::INFO>("Configuration loaded");
+}
+
+void System::sighupHandler(sdeventplus::source::Signal&,
+                           const struct signalfd_siginfo*)
+{
+    try
     {
-        // Check if a condition exists on the fan
-        auto condition = std::get<conditionField>(fanDef);
-        if (condition)
-        {
-            // Condition exists, skip adding fan if it fails
-            if (!(*condition)(bus))
-            {
-                continue;
-            }
-        }
-        _fans.emplace_back(
-            std::make_unique<Fan>(mode, bus, event, _trust, fanDef));
+        json jsonObj = json::object();
+#ifdef MONITOR_USE_JSON
+        jsonObj = getJsonObj(_bus);
+#endif
+        auto trustGrps = getTrustGroups(jsonObj);
+        auto fanDefs = getFanDefinitions(jsonObj);
+        // Set configured trust groups
+        setTrustMgr(trustGrps);
+        // Clear/set configured fan definitions
+        _fans.clear();
+        setFans(fanDefs);
+        log<level::INFO>("Configuration reloaded successfully");
+    }
+    catch (std::runtime_error& re)
+    {
+        log<level::ERR>("Error reloading config, no config changes made",
+                        entry("LOAD_ERROR=%s", re.what()));
     }
 }
 
@@ -75,6 +89,11 @@
 #endif
 }
 
+void System::setTrustMgr(const std::vector<CreateGroupFunction>& groupFuncs)
+{
+    _trust = std::make_unique<trust::Manager>(groupFuncs);
+}
+
 const std::vector<FanDefinition> System::getFanDefinitions(const json& jsonObj)
 {
 #ifdef MONITOR_USE_JSON
@@ -84,4 +103,23 @@
 #endif
 }
 
+void System::setFans(const std::vector<FanDefinition>& fanDefs)
+{
+    for (const auto& fanDef : fanDefs)
+    {
+        // Check if a condition exists on the fan
+        auto condition = std::get<conditionField>(fanDef);
+        if (condition)
+        {
+            // Condition exists, skip adding fan if it fails
+            if (!(*condition)(_bus))
+            {
+                continue;
+            }
+        }
+        _fans.emplace_back(
+            std::make_unique<Fan>(_mode, _bus, _event, _trust, fanDef));
+    }
+}
+
 } // namespace phosphor::fan::monitor
diff --git a/monitor/system.hpp b/monitor/system.hpp
index c72f0d5..9757082 100644
--- a/monitor/system.hpp
+++ b/monitor/system.hpp
@@ -23,6 +23,7 @@
 #include <nlohmann/json.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdeventplus/event.hpp>
+#include <sdeventplus/source/signal.hpp>
 
 #include <memory>
 #include <optional>
@@ -54,6 +55,13 @@
     System(Mode mode, sdbusplus::bus::bus& bus,
            const sdeventplus::Event& event);
 
+    /**
+     * @brief Callback function to handle receiving a HUP signal to reload the
+     * JSON configuration.
+     */
+    void sighupHandler(sdeventplus::source::Signal&,
+                       const struct signalfd_siginfo*);
+
   private:
     /* The mode of fan monitor */
     Mode _mode;
@@ -80,6 +88,13 @@
     const std::vector<CreateGroupFunction> getTrustGroups(const json& jsonObj);
 
     /**
+     * @brief Set the trust manager's list of trust group functions
+     *
+     * @param[in] groupFuncs - list of trust group functions
+     */
+    void setTrustMgr(const std::vector<CreateGroupFunction>& groupFuncs);
+
+    /**
      * @brief Retrieve the configured fan definitions
      *
      * @param[in] jsonObj - JSON object to parse from
@@ -87,6 +102,13 @@
      * @return List of fan definition data on the fans configured
      */
     const std::vector<FanDefinition> getFanDefinitions(const json& jsonObj);
+
+    /**
+     * @brief Set the list of fans to be monitored
+     *
+     * @param[in] fanDefs - list of fan definitions to create fans monitored
+     */
+    void setFans(const std::vector<FanDefinition>& fanDefs);
 };
 
 } // namespace phosphor::fan::monitor
