diff --git a/monitor/nonzero_speed_trust.hpp b/monitor/nonzero_speed_trust.hpp
new file mode 100644
index 0000000..3d14adf
--- /dev/null
+++ b/monitor/nonzero_speed_trust.hpp
@@ -0,0 +1,63 @@
+#pragma once
+
+#include "trust_group.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace trust
+{
+
+/**
+ * @class NonzeroSpeed
+ *
+ * A trust group where the sensors in the group are trusted as long
+ * as at least one of them has a nonzero speed.  If all sensors
+ * have a speed of zero, then no sensor in the group is trusted.
+ */
+class NonzeroSpeed : public Group
+{
+    public:
+
+        NonzeroSpeed() = delete;
+        ~NonzeroSpeed() = default;
+        NonzeroSpeed(const NonzeroSpeed&) = delete;
+        NonzeroSpeed& operator=(const NonzeroSpeed&) = delete;
+        NonzeroSpeed(NonzeroSpeed&&) = default;
+        NonzeroSpeed& operator=(NonzeroSpeed&&) = default;
+
+        /**
+         * Constructor
+         *
+         * @param[in] names - the names of the sensors in the group
+         */
+        explicit NonzeroSpeed(const std::vector<std::string>& names) :
+                Group(names)
+        {
+        }
+
+    private:
+
+        /**
+         * Determines if the group is trusted by checking
+         * if any sensor has a nonzero speed.  If all speeds
+         * are zero, then no sensors in the group are trusted.
+         *
+         * @return bool - if group is trusted or not
+         */
+        bool checkGroupTrust() override
+        {
+            return std::any_of(
+                    _sensors.begin(),
+                    _sensors.end(),
+                    [](const auto& s)
+                    {
+                        return s.get()->getInput() != 0;
+                    });
+        }
+};
+
+}
+}
+}
