diff --git a/power-control-x86/src/power_control.cpp b/power-control-x86/src/power_control.cpp
index d7899b3..bcc0914 100644
--- a/power-control-x86/src/power_control.cpp
+++ b/power-control-x86/src/power_control.cpp
@@ -606,12 +606,10 @@
             return "xyz.openbmc_project.State.Host.RestartCause.WatchdogTimer";
             break;
         case RestartCause::powerPolicyOn:
-            return "xyz.openbmc_project.State.Host.RestartCause."
-                   "PowerPolicyAlwaysOn";
+            return "xyz.openbmc_project.State.Host.RestartCause.PowerPolicyAlwaysOn";
             break;
         case RestartCause::powerPolicyRestore:
-            return "xyz.openbmc_project.State.Host.RestartCause."
-                   "PowerPolicyPreviousState";
+            return "xyz.openbmc_project.State.Host.RestartCause.PowerPolicyPreviousState";
             break;
         case RestartCause::softReset:
             return "xyz.openbmc_project.State.Host.RestartCause.SoftReset";
@@ -806,8 +804,8 @@
         sendPowerControlEvent(Event::powerOnRequest);
         setRestartCauseProperty(getRestartCause(RestartCause::powerPolicyOn));
     }
-    else if (policy == "xyz.openbmc_project.Control.Power.RestorePolicy."
-                       "Policy.Restore")
+    else if (policy ==
+             "xyz.openbmc_project.Control.Power.RestorePolicy.Policy.Restore")
     {
         if (wasPowerDropped())
         {
@@ -1354,8 +1352,7 @@
         }
 
         phosphor::logging::log<phosphor::logging::level::INFO>(
-            "PCH Power-button override failed. Issuing Unconditional Powerdown "
-            "SMBus command.");
+            "PCH Power-button override failed. Issuing Unconditional Powerdown SMBus command.");
         const static constexpr size_t pchDevBusAddress = 3;
         const static constexpr size_t pchDevSlaveAddress = 0x44;
         const static constexpr size_t pchCmdReg = 0;
@@ -1364,8 +1361,7 @@
                    pchPowerDownCmd) < 0)
         {
             phosphor::logging::log<phosphor::logging::level::ERR>(
-                "Unconditional Powerdown command failed! Not sure what to do "
-                "now.");
+                "Unconditional Powerdown command failed! Not sure what to do now.");
         }
     });
 }
@@ -2201,8 +2197,8 @@
         "/xyz/openbmc_project/Chassis/Control/NMISource",
         "org.freedesktop.DBus.Properties", "Set",
         "xyz.openbmc_project.Chassis.Control.NMISource", "BMCSource",
-        std::variant<std::string>{"xyz.openbmc_project.Chassis.Control."
-                                  "NMISource.BMCSourceSignal.FpBtn"});
+        std::variant<std::string>{
+            "xyz.openbmc_project.Chassis.Control.NMISource.BMCSourceSignal.FpBtn"});
     // set Enable Property
     nmiSetEnableProperty(true);
 }
@@ -2381,8 +2377,7 @@
             else
             {
                 phosphor::logging::log<phosphor::logging::level::ERR>(
-                    "The \'LineName\' field must be defined for GPIO "
-                    "configuration");
+                    "The \'LineName\' field must be defined for GPIO configuration");
                 return -1;
             }
             if (gpioConfig.contains("Polarity"))
@@ -2399,8 +2394,7 @@
                 else
                 {
                     std::string errMsg =
-                        "Polarity defined but not properly setup. Please "
-                        "only ActiveHigh or ActiveLow. Currently set to " +
+                        "Polarity defined but not properly setup. Please only ActiveHigh or ActiveLow. Currently set to " +
                         polarity;
                     phosphor::logging::log<phosphor::logging::level::ERR>(
                         errMsg.c_str());
@@ -2660,8 +2654,7 @@
         else
         {
             phosphor::logging::log<phosphor::logging::level::ERR>(
-                "sioOnControl name should be configured from json"
-                "config file\n");
+                "sioOnControl name should be configured from jsonconfig file\n");
             return -1;
         }
 
@@ -2918,8 +2911,9 @@
                     return 0;
                 }
             }
-            else if (requested == "xyz.openbmc_project.State.Host.Transition."
-                                  "GracefulWarmReboot")
+            else if (
+                requested ==
+                "xyz.openbmc_project.State.Host.Transition.GracefulWarmReboot")
             {
                 // if reset button is masked, ignore this
                 if (!resetButtonMask)
@@ -2935,8 +2929,9 @@
                     return 0;
                 }
             }
-            else if (requested == "xyz.openbmc_project.State.Host.Transition."
-                                  "ForceWarmReboot")
+            else if (
+                requested ==
+                "xyz.openbmc_project.State.Host.Transition.ForceWarmReboot")
             {
                 // if reset button is masked, ignore this
                 if (!resetButtonMask)
@@ -3113,16 +3108,16 @@
                 {
                     slotPowerOff();
                 }
-                else if (requested == "xyz.openbmc_project.State.Chassis."
-                                      "Transition.PowerCycle")
+                else if (
+                    requested ==
+                    "xyz.openbmc_project.State.Chassis.Transition.PowerCycle")
                 {
                     slotPowerCycle();
                 }
                 else
                 {
                     phosphor::logging::log<phosphor::logging::level::ERR>(
-                        "Unrecognized chassis system state transition "
-                        "request.\n");
+                        "Unrecognized chassis system state transition request.\n");
                     throw std::invalid_argument(
                         "Unrecognized Transition Request");
                     return 0;
