diff --git a/bmc/firmware-handler/firmware_handler.cpp b/bmc/firmware-handler/firmware_handler.cpp
index 9268809..d11702f 100644
--- a/bmc/firmware-handler/firmware_handler.cpp
+++ b/bmc/firmware-handler/firmware_handler.cpp
@@ -57,9 +57,10 @@
 
     std::vector<std::string> blobs;
     blobs.reserve(firmwares.size());
-    std::for_each(
-        firmwares.begin(), firmwares.end(),
-        [&blobs](const auto& blob) { blobs.emplace_back(blob.blobName); });
+    std::for_each(firmwares.begin(), firmwares.end(),
+                  [&blobs](const auto& blob) {
+        blobs.emplace_back(blob.blobName);
+    });
 
     if (0 == std::count(blobs.begin(), blobs.end(), hashBlobId))
     {
@@ -421,8 +422,8 @@
     /* How are they expecting to copy this data? */
     auto d = std::find_if(transports.begin(), transports.end(),
                           [&transportFlag](const auto& iter) {
-                              return (iter.bitmask == transportFlag);
-                          });
+        return (iter.bitmask == transportFlag);
+    });
     if (d == transports.end())
     {
         return false;
@@ -449,9 +450,10 @@
      * firmware handers (and file handlers, like this'll know where to write the
      * tarball, etc).
      */
-    auto h = std::find_if(
-        handlers.begin(), handlers.end(),
-        [&path](const auto& iter) { return (iter.blobName == path); });
+    auto h = std::find_if(handlers.begin(), handlers.end(),
+                          [&path](const auto& iter) {
+        return (iter.blobName == path);
+    });
     if (h == handlers.end())
     {
         return false;
diff --git a/bmc/firmware-handler/firmware_handler.hpp b/bmc/firmware-handler/firmware_handler.hpp
index 505f1a7..4f32b29 100644
--- a/bmc/firmware-handler/firmware_handler.hpp
+++ b/bmc/firmware-handler/firmware_handler.hpp
@@ -192,9 +192,10 @@
 
     void addBlobId(const std::string& blob)
     {
-        auto blobIdMatch = std::find_if(
-            blobIDs.begin(), blobIDs.end(),
-            [&blob](const std::string& iter) { return (iter == blob); });
+        auto blobIdMatch = std::find_if(blobIDs.begin(), blobIDs.end(),
+                                        [&blob](const std::string& iter) {
+            return (iter == blob);
+        });
         if (blobIdMatch == blobIDs.end())
         {
             blobIDs.push_back(blob);
diff --git a/bmc/firmware-handler/mapper_errors.hpp b/bmc/firmware-handler/mapper_errors.hpp
index 7717f4b..28be925 100644
--- a/bmc/firmware-handler/mapper_errors.hpp
+++ b/bmc/firmware-handler/mapper_errors.hpp
@@ -9,8 +9,7 @@
 class MapperException : public std::exception
 {
   public:
-    explicit MapperException(const std::string& message) : message(message)
-    {}
+    explicit MapperException(const std::string& message) : message(message) {}
 
     virtual const char* what() const noexcept override
     {
diff --git a/bmc/firmware-handler/net_handler.hpp b/bmc/firmware-handler/net_handler.hpp
index b107e72..4582e26 100644
--- a/bmc/firmware-handler/net_handler.hpp
+++ b/bmc/firmware-handler/net_handler.hpp
@@ -19,8 +19,7 @@
 class NetDataHandler : public DataInterface
 {
   public:
-    NetDataHandler() : listenFd(std::nullopt), connFd(std::nullopt)
-    {}
+    NetDataHandler() : listenFd(std::nullopt), connFd(std::nullopt) {}
 
     bool open() override;
     bool close() override;
