diff --git a/monitor/json_parser.cpp b/monitor/json_parser.cpp
index bf37307..20a3bcb 100644
--- a/monitor/json_parser.cpp
+++ b/monitor/json_parser.cpp
@@ -436,8 +436,12 @@
         causes{
             {"missing_fan_frus",
              [count]() { return std::make_unique<MissingFanFRUCause>(count); }},
-            {"nonfunc_fan_rotors", [count]() {
+            {"nonfunc_fan_rotors",
+             [count]() {
         return std::make_unique<NonfuncFanRotorCause>(count);
+    }},
+            {"fan_frus_with_nonfunc_rotors", [count]() {
+        return std::make_unique<FanFRUsWithNonfuncRotorsCause>(count);
     }}};
 
     auto it = causes.find(powerOffCause);
diff --git a/monitor/power_off_cause.hpp b/monitor/power_off_cause.hpp
index 63b0cfd..bc3704f 100644
--- a/monitor/power_off_cause.hpp
+++ b/monitor/power_off_cause.hpp
@@ -138,7 +138,7 @@
      * @brief Constructor
      *
      * @param[in] count - The minimum number of rotors that must be
-     *                    nonfunctional nonfunctional to need a power off.
+     *                    nonfunctional to need a power off.
      */
     explicit NonfuncFanRotorCause(size_t count) :
         PowerOffCause(count, "Nonfunctional Fan Rotors")
@@ -164,4 +164,53 @@
     }
 };
 
+/**
+ * @class FanFRUsWithNonfuncRotorsCause
+ *
+ * This class provides a satisfied() method that checks for
+ * fans with nonfunctional fan rotors in the fan health map.
+ */
+class FanFRUsWithNonfuncRotorsCause : public PowerOffCause
+{
+  public:
+    FanFRUsWithNonfuncRotorsCause() = delete;
+    ~FanFRUsWithNonfuncRotorsCause() = default;
+    FanFRUsWithNonfuncRotorsCause(const FanFRUsWithNonfuncRotorsCause&) =
+        delete;
+    FanFRUsWithNonfuncRotorsCause&
+        operator=(const FanFRUsWithNonfuncRotorsCause&) = delete;
+    FanFRUsWithNonfuncRotorsCause(FanFRUsWithNonfuncRotorsCause&&) = delete;
+    FanFRUsWithNonfuncRotorsCause&
+        operator=(FanFRUsWithNonfuncRotorsCause&&) = delete;
+
+    /**
+     * @brief Constructor
+     *
+     * @param[in] count - The minimum number of fan FRUs with
+     *                    nonfunctional rotors to need a power off.
+     */
+    explicit FanFRUsWithNonfuncRotorsCause(size_t count) :
+        PowerOffCause(count, "Fans with Nonfunctional Rotors")
+    {}
+
+    /**
+     * @brief Returns true if 'count' or more fan FRUs have
+     *        nonfunctional rotors.
+     *
+     * @param[in] fanHealth - The FanHealth map
+     */
+    bool satisfied(const FanHealth& fanHealth) override
+    {
+        size_t count = std::count_if(fanHealth.begin(), fanHealth.end(),
+                                     [](const auto& fan) {
+            const auto& tachs = std::get<sensorFuncHealthPos>(fan.second);
+
+            return std::any_of(tachs.begin(), tachs.end(),
+                               [](bool func) { return !func; });
+        });
+
+        return count >= _count;
+    }
+};
+
 } // namespace phosphor::fan::monitor
diff --git a/monitor/test/power_off_cause_test.cpp b/monitor/test/power_off_cause_test.cpp
index 1c057b2..9016ddb 100644
--- a/monitor/test/power_off_cause_test.cpp
+++ b/monitor/test/power_off_cause_test.cpp
@@ -53,3 +53,56 @@
     health["fan2"] = {false, {true, true}};
     EXPECT_FALSE(cause.satisfied(health));
 }
+
+TEST(PowerOffCauseTest, FansWithNonFuncRotorsTest)
+{
+    {
+        FanHealth health{{"fan0", {true, {true, true}}},
+                         {"fan1", {true, {true, true}}},
+                         {"fan2", {true, {true, true}}},
+                         {"fan3", {true, {true, true}}}};
+
+        FanFRUsWithNonfuncRotorsCause cause{2};
+        EXPECT_FALSE(cause.satisfied(health));
+    }
+
+    {
+        FanHealth health{{"fan0", {true, {true, true}}},
+                         {"fan1", {true, {true, true}}},
+                         {"fan2", {true, {false, true}}},
+                         {"fan3", {true, {true, true}}}};
+
+        FanFRUsWithNonfuncRotorsCause cause{2};
+        EXPECT_FALSE(cause.satisfied(health));
+    }
+
+    {
+        FanHealth health{{"fan0", {true, {true, true}}},
+                         {"fan1", {true, {false, false}}},
+                         {"fan2", {true, {true, true}}},
+                         {"fan3", {true, {true, true}}}};
+
+        FanFRUsWithNonfuncRotorsCause cause{2};
+        EXPECT_FALSE(cause.satisfied(health));
+    }
+
+    {
+        FanHealth health{{"fan0", {true, {true, true}}},
+                         {"fan1", {true, {false, false}}},
+                         {"fan2", {true, {true, true}}},
+                         {"fan3", {true, {true, false}}}};
+
+        FanFRUsWithNonfuncRotorsCause cause{2};
+        EXPECT_TRUE(cause.satisfied(health));
+    }
+
+    {
+        FanHealth health{{"fan0", {true, {false, true}}},
+                         {"fan1", {true, {true, true}}},
+                         {"fan2", {true, {true, false}}},
+                         {"fan3", {true, {true, true}}}};
+
+        FanFRUsWithNonfuncRotorsCause cause{2};
+        EXPECT_TRUE(cause.satisfied(health));
+    }
+}
