diff --git a/control/json/triggers/parameter.cpp b/control/json/triggers/parameter.cpp
new file mode 100644
index 0000000..3abe57c
--- /dev/null
+++ b/control/json/triggers/parameter.cpp
@@ -0,0 +1,48 @@
+/**
+ * Copyright © 2021 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "parameter.hpp"
+
+#include "../manager.hpp"
+
+#include <fmt/format.h>
+
+namespace phosphor::fan::control::json::trigger::parameter
+{
+
+using json = nlohmann::json;
+
+enableTrigger
+    triggerParameter(const json& jsonObj, const std::string& eventName,
+                     std::vector<std::unique_ptr<ActionBase>>& actions)
+{
+    if (!jsonObj.contains("parameter"))
+    {
+        auto msg = fmt::format(
+            "Event '{}' parameter trigger is missing 'parameter'", eventName);
+        log<level::ERR>(msg.c_str());
+        throw std::runtime_error(msg);
+    }
+
+    auto name = jsonObj["parameter"].get<std::string>();
+
+    return [name](const std::string& eventName, Manager* mgr,
+                  const std::vector<Group>& groups,
+                  std::vector<std::unique_ptr<ActionBase>>& actions) {
+        Manager::addParameterTrigger(name, actions);
+    };
+}
+
+} // namespace phosphor::fan::control::json::trigger::parameter
diff --git a/control/json/triggers/parameter.hpp b/control/json/triggers/parameter.hpp
new file mode 100644
index 0000000..ed7d4fa
--- /dev/null
+++ b/control/json/triggers/parameter.hpp
@@ -0,0 +1,41 @@
+/**
+ * Copyright © 2021 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "action.hpp"
+#include "group.hpp"
+#include "trigger_aliases.hpp"
+
+#include <nlohmann/json.hpp>
+
+#include <memory>
+#include <vector>
+
+namespace phosphor::fan::control::json::trigger::parameter
+{
+
+/**
+ * @brief Trigger to process an event after a parameter changes
+ *
+ * @param[in] jsonObj - JSON object for the trigger
+ * @param[in] eventName - Name of event associated to the signal
+ * @param[in] actions - Actions associated with the trigger
+ */
+enableTrigger
+    triggerParameter(const json& jsonObj, const std::string& eventName,
+                     std::vector<std::unique_ptr<ActionBase>>& actions);
+
+} // namespace phosphor::fan::control::json::trigger::parameter
diff --git a/control/json/triggers/signal.cpp b/control/json/triggers/signal.cpp
index 491c7a4..19d7f19 100644
--- a/control/json/triggers/signal.cpp
+++ b/control/json/triggers/signal.cpp
@@ -76,8 +76,8 @@
             {
                 // Same SignalObject signal to trigger event actions,
                 // add actions to be run when signal for SignalObject received
-                auto& pkgActions = std::get<SignalActions>(signalPkg);
-                auto& actions = std::get<SignalActions>(pkg);
+                auto& pkgActions = std::get<TriggerActions>(signalPkg);
+                auto& actions = std::get<TriggerActions>(pkg);
                 actions.insert(actions.end(), pkgActions.begin(),
                                pkgActions.end());
                 sameSignal = true;
@@ -92,8 +92,8 @@
     }
 }
 
-void propertiesChanged(Manager* mgr, const Group& group, SignalActions& actions,
-                       const json&)
+void propertiesChanged(Manager* mgr, const Group& group,
+                       TriggerActions& actions, const json&)
 {
     // Groups are optional, but a signal triggered event with no groups
     // will do nothing since signals require a group
@@ -117,7 +117,7 @@
     }
 }
 
-void interfacesAdded(Manager* mgr, const Group& group, SignalActions& actions,
+void interfacesAdded(Manager* mgr, const Group& group, TriggerActions& actions,
                      const json&)
 {
     // Groups are optional, but a signal triggered event with no groups
@@ -141,8 +141,8 @@
     }
 }
 
-void interfacesRemoved(Manager* mgr, const Group& group, SignalActions& actions,
-                       const json&)
+void interfacesRemoved(Manager* mgr, const Group& group,
+                       TriggerActions& actions, const json&)
 {
     // Groups are optional, but a signal triggered event with no groups
     // will do nothing since signals require a group
@@ -164,7 +164,7 @@
     }
 }
 
-void nameOwnerChanged(Manager* mgr, const Group& group, SignalActions& actions,
+void nameOwnerChanged(Manager* mgr, const Group& group, TriggerActions& actions,
                       const json&)
 {
     std::vector<std::string> grpServices;
@@ -213,7 +213,7 @@
     }
 }
 
-void member(Manager* mgr, const Group& group, SignalActions& actions,
+void member(Manager* mgr, const Group& group, TriggerActions& actions,
             const json&)
 {
     // No SignalObject required to associate to this signal
@@ -265,7 +265,7 @@
             jsonObj](const std::string& eventName, Manager* mgr,
                      const std::vector<Group>& groups,
                      std::vector<std::unique_ptr<ActionBase>>& actions) {
-        SignalActions signalActions;
+        TriggerActions signalActions;
         std::for_each(actions.begin(), actions.end(),
                       [&signalActions](auto& action) {
                           signalActions.emplace_back(std::ref(action));
diff --git a/control/json/triggers/signal.hpp b/control/json/triggers/signal.hpp
index 675bd21..ad44f95 100644
--- a/control/json/triggers/signal.hpp
+++ b/control/json/triggers/signal.hpp
@@ -50,8 +50,8 @@
  * @param[in] group - Group to subscribe signal against
  * @param[in] actions - Actions to be run when signal is received
  */
-void propertiesChanged(Manager* mgr, const Group& group, SignalActions& actions,
-                       const json&);
+void propertiesChanged(Manager* mgr, const Group& group,
+                       TriggerActions& actions, const json&);
 
 /**
  * @brief Subscribes to an interfacesAdded signal
@@ -60,7 +60,7 @@
  * @param[in] group - Group to subscribe signal against
  * @param[in] actions - Actions to be run when signal is received
  */
-void interfacesAdded(Manager* mgr, const Group& group, SignalActions& actions,
+void interfacesAdded(Manager* mgr, const Group& group, TriggerActions& actions,
                      const json&);
 
 /**
@@ -70,8 +70,8 @@
  * @param[in] group - Group to subscribe signal against
  * @param[in] actions - Actions to be run when signal is received
  */
-void interfacesRemoved(Manager* mgr, const Group& group, SignalActions& actions,
-                       const json&);
+void interfacesRemoved(Manager* mgr, const Group& group,
+                       TriggerActions& actions, const json&);
 
 /**
  * @brief Subscribes to a nameOwnerChanged signal
@@ -80,7 +80,7 @@
  * @param[in] group - Group to subscribe signal against
  * @param[in] actions - Actions to be run when signal is received
  */
-void nameOwnerChanged(Manager* mgr, const Group& group, SignalActions& actions,
+void nameOwnerChanged(Manager* mgr, const Group& group, TriggerActions& actions,
                       const json&);
 
 /**
@@ -90,12 +90,12 @@
  * @param[in] group - Group to subscribe signal against
  * @param[in] actions - Actions to be run when signal is received
  */
-void member(Manager* mgr, const Group& group, SignalActions& actions,
+void member(Manager* mgr, const Group& group, TriggerActions& actions,
             const json&);
 
 // Match setup function for signals
 using SignalMatch =
-    std::function<void(Manager*, const Group&, SignalActions&, const json&)>;
+    std::function<void(Manager*, const Group&, TriggerActions&, const json&)>;
 
 /* Supported signals to their corresponding match setup functions */
 static const std::unordered_map<std::string, SignalMatch> signals = {
diff --git a/control/json/triggers/trigger.hpp b/control/json/triggers/trigger.hpp
index c8847c4..b462a01 100644
--- a/control/json/triggers/trigger.hpp
+++ b/control/json/triggers/trigger.hpp
@@ -16,6 +16,7 @@
 #pragma once
 
 #include "init.hpp"
+#include "parameter.hpp"
 #include "signal.hpp"
 #include "timer.hpp"
 #include "trigger_aliases.hpp"
@@ -31,6 +32,7 @@
     {"signal", signal::triggerSignal},
     {"init", init::triggerInit},
     {"poweron", init::triggerInit},
-    {"poweroff", init::triggerInit}};
+    {"poweroff", init::triggerInit},
+    {"parameter", parameter::triggerParameter}};
 
 } // namespace phosphor::fan::control::json::trigger
