diff --git a/configure.ac b/configure.ac
index 9f1ffcf..238ee54 100644
--- a/configure.ac
+++ b/configure.ac
@@ -32,6 +32,7 @@
 PKG_CHECK_MODULES([SYSTEMD], [libsystemd >= 221])
 PKG_CHECK_MODULES([PHOSPHOR_DBUS_INTERFACES], [phosphor-dbus-interfaces])
 PKG_CHECK_MODULES([LIBEVDEV], [libevdev])
+PKG_CHECK_MODULES([STDPLUS], [stdplus])
 
 # Checks for library functions.
 LT_INIT # Required for systemd linking
diff --git a/presence/Makefile.am b/presence/Makefile.am
index 6145699..528de54 100644
--- a/presence/Makefile.am
+++ b/presence/Makefile.am
@@ -19,14 +19,16 @@
 	$(SDEVENTPLUS_LIBS) \
 	$(PHOSPHOR_LOGGING_LIBS) \
 	${PHOSPHOR_DBUS_INTERFACES_LIBS} \
-	$(LIBEVDEV_LIBS)
+	$(LIBEVDEV_LIBS) \
+	$(STDPLUS_LIBS)
 phosphor_fan_presence_tach_CXXFLAGS = \
 	$(SDBUSPLUS_CFLAGS) \
 	$(SDEVENTPLUS_CFLAGS) \
 	$(PHOSPHOR_LOGGING_CFLAGS) \
 	${PHOSPHOR_DBUS_INTERFACES_CFLAGS} \
 	$(LIBEVDEV_CFLAGS) \
-	-flto
+	-flto \
+	$(STDPLUS_CFLAGS)
 
 BUILT_SOURCES = generated.hpp
 TEMPLATES = \
diff --git a/presence/json_config.cpp b/presence/json_config.cpp
index 4c4db11..a13f5f9 100644
--- a/presence/json_config.cpp
+++ b/presence/json_config.cpp
@@ -48,35 +48,11 @@
     {"fallback", rpolicy::getFallback}
 };
 
-JsonConfig::JsonConfig(const std::string& jsonFile)
+JsonConfig::JsonConfig(const std::string& jsonFile) :
+    _defaultFile(fs::path(jsonFile))
 {
-    fs::path confFile{jsonFile};
-    std::ifstream file;
-    json jsonConf;
-
-    if (fs::exists(confFile))
-    {
-        file.open(confFile);
-        try
-        {
-            jsonConf = json::parse(file);
-        }
-        catch (std::exception& e)
-        {
-            log<level::ERR>("Failed to parse JSON config file",
-                            entry("JSON_FILE=%s", jsonFile.c_str()),
-                            entry("JSON_ERROR=%s", e.what()));
-            throw std::runtime_error("Failed to parse JSON config file");
-        }
-    }
-    else
-    {
-        log<level::ERR>("Unable to open JSON config file",
-                        entry("JSON_FILE=%s", jsonFile.c_str()));
-        throw std::runtime_error("Unable to open JSON config file");
-    }
-
-    process(jsonConf);
+    // Load and process the json configuration
+    load();
 }
 
 const policies& JsonConfig::get()
@@ -84,12 +60,64 @@
     return _policies;
 }
 
+void JsonConfig::sighupHandler(sdeventplus::source::Signal& sigSrc,
+                               const struct signalfd_siginfo* sigInfo)
+{
+    try
+    {
+        // Load and process the json configuration
+        load();
+        for (auto& p: _policies)
+        {
+            p->monitor();
+        }
+        log<level::INFO>("Configuration loaded successfully");
+    }
+    catch (std::runtime_error& re)
+    {
+        log<level::ERR>("Error loading config, no config changes made",
+                        entry("LOAD_ERROR=%s", re.what()));
+    }
+}
+
+void JsonConfig::load()
+{
+    std::ifstream file;
+    json jsonConf;
+
+    if (fs::exists(_defaultFile))
+    {
+        file.open(_defaultFile);
+        try
+        {
+            jsonConf = json::parse(file);
+        }
+        catch (std::exception& e)
+        {
+            log<level::ERR>("Failed to parse JSON config file",
+                            entry("JSON_FILE=%s", _defaultFile.c_str()),
+                            entry("JSON_ERROR=%s", e.what()));
+            throw std::runtime_error("Failed to parse JSON config file");
+        }
+    }
+    else
+    {
+        log<level::ERR>("Unable to open JSON config file",
+                        entry("JSON_FILE=%s", _defaultFile.c_str()));
+        throw std::runtime_error("Unable to open JSON config file");
+    }
+
+    process(jsonConf);
+}
+
 void JsonConfig::process(const json& jsonConf)
 {
+    policies policies;
+    std::vector<fanPolicy> fans;
     // Set the expected number of fan entries
     // to be size of the list of fan json config entries
     // (Must be done to eliminate vector reallocation of fan references)
-    _fans.reserve(jsonConf.size());
+    fans.reserve(jsonConf.size());
     for (auto& member : jsonConf)
     {
         if (!member.contains("name") || !member.contains("path") ||
@@ -124,7 +152,7 @@
             if (func != _methods.end())
             {
                 // Call function for method type
-                auto sensor = func->second(_fans.size(), method.value());
+                auto sensor = func->second(fans.size(), method.value());
                 if (sensor)
                 {
                     sensors.emplace_back(std::move(sensor));
@@ -141,21 +169,34 @@
         }
         auto fan = std::make_tuple(member["name"], member["path"]);
         // Create a fan object
-        _fans.emplace_back(std::make_tuple(fan, std::move(sensors)));
+        fans.emplace_back(std::make_tuple(fan, std::move(sensors)));
 
         // Add fan presence policy
-        addPolicy(member["rpolicy"]);
+        auto policy = getPolicy(member["rpolicy"], fans.back());
+        if (policy)
+        {
+            policies.emplace_back(std::move(policy));
+        }
     }
+
+    // Success, refresh fans and policies lists
+    _fans.clear();
+    _fans.swap(fans);
+
+    _policies.clear();
+    _policies.swap(policies);
 }
 
-void JsonConfig::addPolicy(const json& rpolicy)
+std::unique_ptr<RedundancyPolicy> JsonConfig::getPolicy(
+    const json& rpolicy,
+    const fanPolicy& fpolicy)
 {
     if (!rpolicy.contains("type"))
     {
         log<level::ERR>("Missing required fan presence policy type",
                         entry("FAN_NAME=%s",
                             std::get<fanPolicyFanPos>(
-                                std::get<Fan>(_fans.back())).c_str()),
+                                std::get<Fan>(fpolicy)).c_str()),
                         entry("REQUIRED_PROPERTIES=%s", "{type}"));
         throw std::runtime_error("Missing required fan presence policy type");
     }
@@ -167,18 +208,14 @@
     auto func = _rpolicies.find(type);
     if (func != _rpolicies.end())
     {
-        // Call function for redundancy policy type
-        auto policy = func->second(_fans.back());
-        if (policy)
-        {
-            _policies.emplace_back(std::move(policy));
-        }
+        // Call function for redundancy policy type and return the policy
+        return func->second(fpolicy);
     }
     else
     {
         log<level::ERR>("Invalid fan presence policy type",
             entry("FAN_NAME=%s",
-                std::get<fanPolicyFanPos>(std::get<Fan>(_fans.back())).c_str()),
+                std::get<fanPolicyFanPos>(std::get<Fan>(fpolicy)).c_str()),
             entry("RPOLICY_TYPE=%s", type.c_str()));
         throw std::runtime_error("Invalid fan presence methods policy type");
     }
diff --git a/presence/json_config.hpp b/presence/json_config.hpp
index b027dba..a369bd5 100644
--- a/presence/json_config.hpp
+++ b/presence/json_config.hpp
@@ -4,6 +4,8 @@
 #include <vector>
 #include <memory>
 #include <nlohmann/json.hpp>
+#include <filesystem>
+#include <sdeventplus/source/signal.hpp>
 
 #include "config.h"
 #include "rpolicy.hpp"
@@ -17,6 +19,7 @@
 namespace presence
 {
 
+namespace fs = std::filesystem;
 using json = nlohmann::json;
 using policies = std::vector<std::unique_ptr<RedundancyPolicy>>;
 
@@ -57,11 +60,24 @@
          */
         static const policies& get();
 
+        /**
+         * @brief Callback function to handle receiving a HUP signal to
+         * reload the json configuration.
+         *
+         * @param[in] sigSrc - sd_event_source signal wrapper
+         * @param[in] sigInfo - signal info on signal fd
+         */
+        void sighupHandler(sdeventplus::source::Signal& sigSrc,
+                           const struct signalfd_siginfo* sigInfo);
+
     private:
 
         /* Fan presence policies */
         static policies _policies;
 
+        /* Default json configuration file */
+        const fs::path _defaultFile;
+
         /* List of Fan objects to have presence policies */
         std::vector<fanPolicy> _fans;
 
@@ -75,6 +91,11 @@
         static const std::map<std::string, rpolicyHandler> _rpolicies;
 
         /**
+         * @brief Load the json config file
+         */
+        void load();
+
+        /**
          * @brief Process the json config to extract the defined fan presence
          * policies.
          *
@@ -83,11 +104,15 @@
         void process(const json& jsonConf);
 
         /**
-         * @brief Add to the list of policies of presence detection
+         * @brief Get the redundancy policy of presence detection for a fan
          *
-         * @param[in] rpolicy - policy to add
+         * @param[in] rpolicy - policy type to construct
+         * @param[in] fpolicy - fan policy object
+         *
+         * @return - The constructed redundancy policy type for the fan
          */
-        void addPolicy(const json& rpolicy);
+        std::unique_ptr<RedundancyPolicy> getPolicy(const json& rpolicy,
+                                                    const fanPolicy& fpolicy);
 };
 
 /**
diff --git a/presence/tach_detect.cpp b/presence/tach_detect.cpp
index c0bee2b..eb4b895 100644
--- a/presence/tach_detect.cpp
+++ b/presence/tach_detect.cpp
@@ -21,6 +21,9 @@
 #endif
 #include "sdbusplus.hpp"
 #include <sdeventplus/event.hpp>
+#include <functional>
+#include <stdplus/signal.hpp>
+#include <sdeventplus/source/signal.hpp>
 
 int main(void)
 {
@@ -37,6 +40,11 @@
     {
         p->monitor();
     }
+
+    stdplus::signal::block(SIGHUP);
+    sdeventplus::source::Signal signal(event, SIGHUP,
+        std::bind(&presence::JsonConfig::sighupHandler,
+                  &config, std::placeholders::_1, std::placeholders::_2));
 #else
     for (auto& p: presence::ConfigPolicy::get())
     {
