diff --git a/ubi/activation_ubi.cpp b/ubi/activation_ubi.cpp
index 205c393..3bb7c25 100644
--- a/ubi/activation_ubi.cpp
+++ b/ubi/activation_ubi.cpp
@@ -24,7 +24,6 @@
 
 auto ActivationUbi::activation(Activations value) -> Activations
 {
-
     if (value != softwareServer::Activation::Activations::Active)
     {
         redundancyPriority.reset(nullptr);
@@ -119,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");
@@ -139,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")
     {
@@ -169,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 dc0c62b..3fc64ae 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/serialize.cpp b/ubi/serialize.cpp
index 4aa492a..50127a2 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.hpp b/ubi/watch.hpp
index 2628e93..eef2b2a 100644
--- a/ubi/watch.hpp
+++ b/ubi/watch.hpp
@@ -41,8 +41,7 @@
      *
      *  @param[in] fd - File descriptor
      */
-    explicit CustomFd(int fd) : fd(fd)
-    {}
+    explicit CustomFd(int fd) : fd(fd) {}
 
     ~CustomFd()
     {
