diff --git a/item_updater.cpp b/item_updater.cpp
old mode 100755
new mode 100644
index e14bdee..9038471
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -136,7 +136,7 @@
     else
     {
         log<level::INFO>("Software Object with the same version already exists",
-                        entry("VERSION_ID=%s", versionId));
+                         entry("VERSION_ID=%s", versionId));
     }
     return;
 }
@@ -145,7 +145,7 @@
 {
     // Read pnor.toc from folders under /media/
     // to get Active Software Versions.
-    for(const auto& iter : fs::directory_iterator(MEDIA_DIR))
+    for (const auto& iter : fs::directory_iterator(MEDIA_DIR))
     {
         auto activationState = server::Activation::Activations::Active;
 
@@ -214,7 +214,7 @@
                 if (!restoreFromFile(id, priority))
                 {
                     log<level::ERR>("Unable to restore priority from file.",
-                            entry("VERSIONID=%s", id));
+                                    entry("VERSIONID=%s", id));
                 }
                 activations.find(id)->second->redundancyPriority =
                          std::make_unique<RedundancyPriority>(
@@ -299,7 +299,7 @@
 
 void ItemUpdater::reset()
 {
-    for(const auto& it : activations)
+    for (const auto& it : activations)
     {
         removeReadWritePartition(it.first);
         removeFile(it.first);
@@ -313,12 +313,12 @@
     //TODO openbmc/openbmc#1896 Improve the performance of this function
     for (const auto& intf : activations)
     {
-        if(intf.second->redundancyPriority)
+        if (intf.second->redundancyPriority)
         {
             if (intf.second->redundancyPriority.get()->priority() == value &&
                 intf.second->versionId != versionId)
             {
-                intf.second->redundancyPriority.get()->priority(value+1);
+                intf.second->redundancyPriority.get()->priority(value + 1);
             }
         }
     }
@@ -328,7 +328,7 @@
 {
     for (const auto& intf : activations)
     {
-        if(intf.second->redundancyPriority)
+        if (intf.second->redundancyPriority)
         {
             if (intf.second->redundancyPriority.get()->priority() < value)
             {
@@ -353,8 +353,8 @@
     if (it == versions.end())
     {
         log<level::ERR>(("Error: Failed to find version " + entryId + \
-                        " in item updater versions map." \
-                        " Unable to remove.").c_str());
+                         " in item updater versions map." \
+                         " Unable to remove.").c_str());
         return;
     }
     versions.erase(entryId);
@@ -364,8 +364,8 @@
     if (ita == activations.end())
     {
         log<level::ERR>(("Error: Failed to find version " + entryId + \
-                        " in item updater activations map." \
-                        " Unable to remove.").c_str());
+                         " in item updater activations map." \
+                         " Unable to remove.").c_str());
         return;
     }
     activations.erase(entryId);
