diff --git a/ubi/activation_ubi.cpp b/ubi/activation_ubi.cpp
index 3bb7c25..fd77b36 100644
--- a/ubi/activation_ubi.cpp
+++ b/ubi/activation_ubi.cpp
@@ -118,8 +118,8 @@
     }
 
     constexpr auto ubimountService = "obmc-flash-bios-ubimount@";
-    auto ubimountServiceFile = std::string(ubimountService) + versionId +
-                               ".service";
+    auto ubimountServiceFile =
+        std::string(ubimountService) + versionId + ".service";
     auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
                                       SYSTEMD_INTERFACE, "StartUnit");
     method.append(ubimountServiceFile, "replace");
@@ -138,8 +138,8 @@
     // Read the msg and populate each variable
     msg.read(newStateID, newStateObjPath, newStateUnit, newStateResult);
 
-    auto ubimountServiceFile = "obmc-flash-bios-ubimount@" + versionId +
-                               ".service";
+    auto ubimountServiceFile =
+        "obmc-flash-bios-ubimount@" + versionId + ".service";
 
     if (newStateUnit == ubimountServiceFile && newStateResult == "done")
     {
@@ -168,8 +168,8 @@
     // Set Redundancy Priority before setting to Active
     if (!redundancyPriority)
     {
-        redundancyPriority = std::make_unique<RedundancyPriorityUbi>(bus, path,
-                                                                     *this, 0);
+        redundancyPriority =
+            std::make_unique<RedundancyPriorityUbi>(bus, path, *this, 0);
     }
 
     activationProgress->progress(100);
diff --git a/ubi/item_updater_ubi.cpp b/ubi/item_updater_ubi.cpp
index 13623d6..32920c2 100644
--- a/ubi/item_updater_ubi.cpp
+++ b/ubi/item_updater_ubi.cpp
@@ -147,8 +147,8 @@
             auto versionPtr = std::make_unique<Version>(
                 bus, path, *this, id, version, purpose, "",
                 std::bind(&ItemUpdaterUbi::erase, this, std::placeholders::_1));
-            versionPtr->deleteObject = std::make_unique<Delete>(bus, path,
-                                                                *versionPtr);
+            versionPtr->deleteObject =
+                std::make_unique<Delete>(bus, path, *versionPtr);
             versions.insert(std::make_pair(id, std::move(versionPtr)));
         }
         else if (0 == iter.path().native().compare(0, PNOR_RW_PREFIX_LEN,
diff --git a/ubi/item_updater_ubi.hpp b/ubi/item_updater_ubi.hpp
index ba80a83..69cc066 100644
--- a/ubi/item_updater_ubi.hpp
+++ b/ubi/item_updater_ubi.hpp
@@ -70,13 +70,12 @@
             Activations activationStatus,
         AssociationList& assocs) override;
 
-    std::unique_ptr<Version>
-        createVersionObject(const std::string& objPath,
-                            const std::string& versionId,
-                            const std::string& versionString,
-                            sdbusplus::xyz::openbmc_project::Software::server::
-                                Version::VersionPurpose versionPurpose,
-                            const std::string& filePath) override;
+    std::unique_ptr<Version> createVersionObject(
+        const std::string& objPath, const std::string& versionId,
+        const std::string& versionString,
+        sdbusplus::xyz::openbmc_project::Software::server::Version::
+            VersionPurpose versionPurpose,
+        const std::string& filePath) override;
 
     bool validateImage(const std::string& path) override;
 
diff --git a/ubi/serialize.cpp b/ubi/serialize.cpp
index 50127a2..4aa492a 100644
--- a/ubi/serialize.cpp
+++ b/ubi/serialize.cpp
@@ -116,8 +116,8 @@
     auto bus = sdbusplus::bus::new_default();
 
     // Clear the environment variable pnor-[versionId].
-    std::string serviceFile = "obmc-flash-bmc-setenv@pnor\\x2d" + versionId +
-                              ".service";
+    std::string serviceFile =
+        "obmc-flash-bmc-setenv@pnor\\x2d" + versionId + ".service";
     auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
                                       SYSTEMD_INTERFACE, "StartUnit");
     method.append(serviceFile, "replace");
diff --git a/ubi/watch.cpp b/ubi/watch.cpp
index 1b68fd1..fa9441a 100644
--- a/ubi/watch.cpp
+++ b/ubi/watch.cpp
@@ -27,8 +27,7 @@
 
 Watch::Watch(sd_event* loop,
              std::function<void(const std::string&)> functionalCallback) :
-    functionalCallback(functionalCallback),
-    fd(inotifyInit())
+    functionalCallback(functionalCallback), fd(inotifyInit())
 
 {
     // Create PNOR_ACTIVE_PATH if doesn't exist.
