diff --git a/control/json/fan.cpp b/control/json/fan.cpp
index 3641279..cf5a7e3 100644
--- a/control/json/fan.cpp
+++ b/control/json/fan.cpp
@@ -1,5 +1,5 @@
 /**
- * Copyright © 2020 IBM Corporation
+ * Copyright © 2022 IBM Corporation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -89,7 +89,7 @@
 
 void Fan::setTarget(uint64_t target)
 {
-    if (_target == target)
+    if ((_target == target) || !_lockedTargets.empty())
     {
         return;
     }
@@ -113,4 +113,47 @@
     _target = target;
 }
 
+void Fan::lockTarget(uint64_t target)
+{
+    // if multiple locks, take highest, else allow only the
+    // first lock to lower the target
+    if (target >= _target || _lockedTargets.empty())
+    {
+        // setTarget wont work if any locked targets exist
+        decltype(_lockedTargets) temp;
+        _lockedTargets.swap(temp);
+
+        setTarget(target);
+        _lockedTargets.swap(temp);
+    }
+
+    _lockedTargets.push_back(target);
+}
+
+void Fan::unlockTarget(uint64_t target)
+{
+    // find and remove the requested lock
+    auto itr(std::find_if(
+        _lockedTargets.begin(), _lockedTargets.end(),
+        [target](auto lockedTarget) { return target == lockedTarget; }));
+
+    if (_lockedTargets.end() != itr)
+    {
+        _lockedTargets.erase(itr);
+
+        // if additional locks, re-lock at next-highest target
+        if (!_lockedTargets.empty())
+        {
+            itr =
+                std::max_element(_lockedTargets.begin(), _lockedTargets.end());
+
+            // setTarget wont work if any locked targets exist
+            decltype(_lockedTargets) temp;
+            _lockedTargets.swap(temp);
+            setTarget(*itr);
+            _lockedTargets.swap(temp);
+        }
+    }
+}
+
 } // namespace phosphor::fan::control::json
diff --git a/control/json/fan.hpp b/control/json/fan.hpp
index 55cb167..2a10846 100644
--- a/control/json/fan.hpp
+++ b/control/json/fan.hpp
@@ -1,5 +1,5 @@
 /**
- * Copyright © 2020 IBM Corporation
+ * Copyright © 2022 IBM Corporation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -109,6 +109,22 @@
     void setTarget(uint64_t target);
 
   private:
+    /**
+     * Forces all contained sensors to the target (if this target is the
+     * highest. May be overridden by existing or subsequent higher values),
+     * ignoring subsequent setTarget() commands
+     *
+     * @param[in] target - The target lock to set/add
+     */
+    void lockTarget(uint64_t target);
+
+    /**
+     * Removes the provided target lock from the list of locks. Fan will unlock
+     * (become eligible for setTarget()) when all locks are removed from the
+     * list.
+     */
+    void unlockTarget(uint64_t target);
+
     /* The sdbusplus bus object */
     sdbusplus::bus::bus& _bus;
 
@@ -121,6 +137,9 @@
     /* Target for this fan */
     uint64_t _target;
 
+    /* list of locked targets active on this fan */
+    std::vector<uint64_t> _lockedTargets;
+
     /**
      * Map of sensors containing the `Target` property on
      * dbus to the service providing them that make up the fan
