diff --git a/bmc/buildjson.cpp b/bmc/buildjson.cpp
index 61a97b7..873eba2 100644
--- a/bmc/buildjson.cpp
+++ b/bmc/buildjson.cpp
@@ -30,8 +30,8 @@
 namespace ipmi_flash
 {
 
-std::unique_ptr<TriggerableActionInterface>
-    buildFileSystemd(const nlohmann::json& data)
+std::unique_ptr<TriggerableActionInterface> buildFileSystemd(
+    const nlohmann::json& data)
 {
     /* This type of action requires a path and unit, and optionally a mode. */
     const auto& path = data.at("path");
@@ -49,8 +49,8 @@
         sdbusplus::bus::new_default(), path, unit, systemdMode);
 }
 
-std::unique_ptr<TriggerableActionInterface>
-    buildSystemd(const nlohmann::json& data)
+std::unique_ptr<TriggerableActionInterface> buildSystemd(
+    const nlohmann::json& data)
 {
     /* This type of action requires a unit, and optionally a mode. */
     const auto& unit = data.at("unit");
diff --git a/bmc/buildjson.hpp b/bmc/buildjson.hpp
index 1ef00ef..ae1c6bc 100644
--- a/bmc/buildjson.hpp
+++ b/bmc/buildjson.hpp
@@ -16,14 +16,14 @@
 /**
  * build a systemd file triggerable action from json data
  */
-std::unique_ptr<TriggerableActionInterface>
-    buildFileSystemd(const nlohmann::json& data);
+std::unique_ptr<TriggerableActionInterface> buildFileSystemd(
+    const nlohmann::json& data);
 
 /**
  * build a systemd triggerable action from json data
  */
-std::unique_ptr<TriggerableActionInterface>
-    buildSystemd(const nlohmann::json& data);
+std::unique_ptr<TriggerableActionInterface> buildSystemd(
+    const nlohmann::json& data);
 
 constexpr std::array defaultConfigPaths = {
     "/usr/share/phosphor-ipmi-flash",
@@ -108,7 +108,7 @@
      * @param[in] data - json data from a json file.
      * @return list of HandlerConfig objects.
      */
-    virtual std::vector<HandlerConfig<T>>
-        buildHandlerFromJson(const nlohmann::json& data) = 0;
+    virtual std::vector<HandlerConfig<T>> buildHandlerFromJson(
+        const nlohmann::json& data) = 0;
 };
 } // namespace ipmi_flash
diff --git a/bmc/file_handler.cpp b/bmc/file_handler.cpp
index 8005b8f..829f92c 100644
--- a/bmc/file_handler.cpp
+++ b/bmc/file_handler.cpp
@@ -52,8 +52,8 @@
     return file.good();
 }
 
-std::optional<std::vector<uint8_t>>
-    FileHandler::read(std::uint32_t offset, std::uint32_t size)
+std::optional<std::vector<uint8_t>> FileHandler::read(std::uint32_t offset,
+                                                      std::uint32_t size)
 {
     uint32_t file_size = getSize();
     if (offset > file_size)
diff --git a/bmc/file_handler.hpp b/bmc/file_handler.hpp
index a0c23af..3abbba3 100644
--- a/bmc/file_handler.hpp
+++ b/bmc/file_handler.hpp
@@ -27,8 +27,8 @@
     void close() override;
     bool write(std::uint32_t offset,
                const std::vector<std::uint8_t>& data) override;
-    virtual std::optional<std::vector<uint8_t>>
-        read(std::uint32_t offset, std::uint32_t size) override;
+    virtual std::optional<std::vector<uint8_t>> read(
+        std::uint32_t offset, std::uint32_t size) override;
     int getSize() override;
 
   private:
diff --git a/bmc/firmware-handler/firmware_handlers_builder.hpp b/bmc/firmware-handler/firmware_handlers_builder.hpp
index 6cfb649..40be15c 100644
--- a/bmc/firmware-handler/firmware_handlers_builder.hpp
+++ b/bmc/firmware-handler/firmware_handlers_builder.hpp
@@ -11,7 +11,7 @@
 class FirmwareHandlersBuilder : public HandlersBuilderIfc<ActionPack>
 {
   public:
-    std::vector<HandlerConfig<ActionPack>>
-        buildHandlerFromJson(const nlohmann::json& data) override;
+    std::vector<HandlerConfig<ActionPack>> buildHandlerFromJson(
+        const nlohmann::json& data) override;
 };
 } // namespace ipmi_flash
diff --git a/bmc/firmware-handler/lpc_aspeed.hpp b/bmc/firmware-handler/lpc_aspeed.hpp
index 1a547c9..22ce66e 100644
--- a/bmc/firmware-handler/lpc_aspeed.hpp
+++ b/bmc/firmware-handler/lpc_aspeed.hpp
@@ -15,8 +15,8 @@
 class LpcMapperAspeed : public HardwareMapperInterface
 {
   public:
-    static std::unique_ptr<HardwareMapperInterface>
-        createAspeedMapper(std::uint32_t regionAddress, std::size_t regionSize);
+    static std::unique_ptr<HardwareMapperInterface> createAspeedMapper(
+        std::uint32_t regionAddress, std::size_t regionSize);
 
     /* NOTE: This object is created and then never destroyed (unless ipmid
      * stops/crashes, etc)
diff --git a/bmc/firmware-handler/lpc_nuvoton.cpp b/bmc/firmware-handler/lpc_nuvoton.cpp
index dcf9eaa..b0d2a4e 100644
--- a/bmc/firmware-handler/lpc_nuvoton.cpp
+++ b/bmc/firmware-handler/lpc_nuvoton.cpp
@@ -97,8 +97,8 @@
  *   - WindowOffset = 4 and WindowSize = len - 4 if (addr & 0x7) == 0
  *   - WindowSize = 0 means that the region cannot be mapped otherwise
  */
-WindowMapResult
-    LpcMapperNuvoton::mapWindow(std::uint32_t address, std::uint32_t length)
+WindowMapResult LpcMapperNuvoton::mapWindow(std::uint32_t address,
+                                            std::uint32_t length)
 {
     WindowMapResult result = {};
 
diff --git a/bmc/firmware-handler/test/crc_mock.hpp b/bmc/firmware-handler/test/crc_mock.hpp
index c33188d..5dbe1ee 100644
--- a/bmc/firmware-handler/test/crc_mock.hpp
+++ b/bmc/firmware-handler/test/crc_mock.hpp
@@ -10,8 +10,8 @@
   public:
     virtual ~CrcInterface() = default;
 
-    virtual std::uint16_t
-        generateCrc(const std::vector<std::uint8_t>& data) const = 0;
+    virtual std::uint16_t generateCrc(
+        const std::vector<std::uint8_t>& data) const = 0;
 };
 
 class CrcMock : public CrcInterface
diff --git a/bmc/general_systemd.hpp b/bmc/general_systemd.hpp
index 48e5177..523f623 100644
--- a/bmc/general_systemd.hpp
+++ b/bmc/general_systemd.hpp
@@ -14,9 +14,9 @@
 class SystemdNoFile : public TriggerableActionInterface
 {
   public:
-    static std::unique_ptr<TriggerableActionInterface>
-        CreateSystemdNoFile(sdbusplus::bus_t&& bus, const std::string& service,
-                            const std::string& mode);
+    static std::unique_ptr<TriggerableActionInterface> CreateSystemdNoFile(
+        sdbusplus::bus_t&& bus, const std::string& service,
+        const std::string& mode);
 
     SystemdNoFile(sdbusplus::bus_t&& bus, const std::string& service,
                   const std::string& mode) :
diff --git a/bmc/image_handler.hpp b/bmc/image_handler.hpp
index 59944c6..f52455a 100644
--- a/bmc/image_handler.hpp
+++ b/bmc/image_handler.hpp
@@ -50,8 +50,8 @@
      * on failure otherwise returns a vector filled with the bytes read.
      *
      */
-    virtual std::optional<std::vector<std::uint8_t>>
-        read(std::uint32_t offset, std::uint32_t size) = 0;
+    virtual std::optional<std::vector<std::uint8_t>> read(
+        std::uint32_t offset, std::uint32_t size) = 0;
 
     /**
      * return the size of the file (if that notion makes sense).
diff --git a/bmc/log-handler/log_handlers_builder.hpp b/bmc/log-handler/log_handlers_builder.hpp
index 552758d..fe124a9 100644
--- a/bmc/log-handler/log_handlers_builder.hpp
+++ b/bmc/log-handler/log_handlers_builder.hpp
@@ -29,7 +29,7 @@
 class LogHandlersBuilder : public HandlersBuilderIfc<LogBlobHandler::ActionPack>
 {
   public:
-    std::vector<HandlerConfig<LogBlobHandler::ActionPack>>
-        buildHandlerFromJson(const nlohmann::json& data) override;
+    std::vector<HandlerConfig<LogBlobHandler::ActionPack>> buildHandlerFromJson(
+        const nlohmann::json& data) override;
 };
 } // namespace ipmi_flash
