diff --git a/presence/anyof.cpp b/presence/anyof.cpp
index 4dbf356..b77d6d7 100644
--- a/presence/anyof.cpp
+++ b/presence/anyof.cpp
@@ -13,25 +13,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <algorithm>
-#include <phosphor-logging/log.hpp>
 #include "anyof.hpp"
+
 #include "fan.hpp"
 #include "psensor.hpp"
 
+#include <phosphor-logging/log.hpp>
+
+#include <algorithm>
+
 namespace phosphor
 {
 namespace fan
 {
 namespace presence
 {
-AnyOf::AnyOf(
-        const Fan& fan,
-        const std::vector<std::reference_wrapper<PresenceSensor>>& s)
-        : RedundancyPolicy(fan),
-        state()
+AnyOf::AnyOf(const Fan& fan,
+             const std::vector<std::reference_wrapper<PresenceSensor>>& s) :
+    RedundancyPolicy(fan),
+    state()
 {
-    for (auto& sensor: s)
+    for (auto& sensor : s)
     {
         state.emplace_back(sensor, false);
     }
@@ -40,18 +42,17 @@
 void AnyOf::stateChanged(bool present, PresenceSensor& sensor)
 {
     // Find the sensor that changed state.
-    auto sit = std::find_if(
-            state.begin(),
-            state.end(),
-            [&sensor](const auto& s){ return std::get<0>(s).get() == sensor; });
+    auto sit =
+        std::find_if(state.begin(), state.end(), [&sensor](const auto& s) {
+            return std::get<0>(s).get() == sensor;
+        });
     if (sit != state.end())
     {
         // Update our cache of the sensors state and re-evaluate.
         std::get<bool>(*sit) = present;
-        auto newState = std::any_of(
-                state.begin(),
-                state.end(),
-                [](const auto& s){ return std::get<bool>(s); });
+        auto newState =
+            std::any_of(state.begin(), state.end(),
+                        [](const auto& s) { return std::get<bool>(s); });
         setPresence(fan, newState);
     }
 }
@@ -60,16 +61,14 @@
 {
     // Start all sensors in the anyof redundancy set.
 
-    for (auto& s: state)
+    for (auto& s : state)
     {
-        auto &sensor = std::get<0>(s);
+        auto& sensor = std::get<0>(s);
         std::get<bool>(s) = sensor.get().start();
     }
 
-    auto present = std::any_of(
-            state.begin(),
-            state.end(),
-            [](const auto& s){ return std::get<bool>(s); });
+    auto present = std::any_of(state.begin(), state.end(),
+                               [](const auto& s) { return std::get<bool>(s); });
     setPresence(fan, present);
 }
 
