diff --git a/analyzer/analyzer_main.cpp b/analyzer/analyzer_main.cpp
index 24839eb..218d38d 100644
--- a/analyzer/analyzer_main.cpp
+++ b/analyzer/analyzer_main.cpp
@@ -210,7 +210,7 @@
             // will be reserved for MP-IPLs during TI analysis.
             // TODO: Need ID from root cause. At the moment, HUID does not exist
             //       in devtree. Will need a better ID definition.
-            o_dump.unitId   = 0;
+            o_dump.unitId = 0;
             o_dump.dumpType = attn::DumpType::Hardware;
         }
     }
diff --git a/analyzer/callout.hpp b/analyzer/callout.hpp
index 76c1dcf..59e1728 100644
--- a/analyzer/callout.hpp
+++ b/analyzer/callout.hpp
@@ -78,21 +78,21 @@
     // Can also reference `extensions/openpower-pels/pel_values.cpp` from
     // `openbmc/phosphor-logging` for the full list of these values.
 
-    PROCESSOR      = 0x10,
-    PROCESSOR_FRU  = 0x11,
+    PROCESSOR = 0x10,
+    PROCESSOR_FRU = 0x11,
     PROCESSOR_UNIT = 0x13,
-    PROCESSOR_BUS  = 0x14,
+    PROCESSOR_BUS = 0x14,
 
     MEMORY_CTLR = 0x21,
-    MEMORY_BUS  = 0x22,
+    MEMORY_BUS = 0x22,
     MEMORY_DIMM = 0x23,
-    MEMORY_FRU  = 0x24,
+    MEMORY_FRU = 0x24,
 
     PHB = 0x38,
 
     CEC_HARDWARE = 0x50,
-    CEC_CLOCKS   = 0x58,
-    CEC_TOD      = 0x5A,
+    CEC_CLOCKS = 0x58,
+    CEC_TOD = 0x5A,
 
     OTHERS = 0x70,
 };
diff --git a/analyzer/create_pel.cpp b/analyzer/create_pel.cpp
index 741b375..6d42e1a 100644
--- a/analyzer/create_pel.cpp
+++ b/analyzer/create_pel.cpp
@@ -24,11 +24,11 @@
 
 enum FfdcSubType_t : uint8_t
 {
-    FFDC_SIGNATURES      = 0x01,
-    FFDC_REGISTER_DUMP   = 0x02,
-    FFDC_CALLOUT_FFDC    = 0x03,
+    FFDC_SIGNATURES = 0x01,
+    FFDC_REGISTER_DUMP = 0x02,
+    FFDC_CALLOUT_FFDC = 0x03,
     FFDC_HB_SCRATCH_REGS = 0x04,
-    FFDC_SCRATCH_SIG     = 0x05,
+    FFDC_SCRATCH_SIG = 0x05,
 
     // For the callout section, the value of '0xCA' is required per the
     // phosphor-logging openpower-pel extention spec.
@@ -59,12 +59,12 @@
         // [ 0:15] chip position
         // [16:23] node position
         // [24:31] signature attention type
-        auto chipPos    = util::pdbg::getChipPos(i_signature.getChip());
+        auto chipPos = util::pdbg::getChipPos(i_signature.getChip());
         uint8_t nodePos = 0; // TODO: multi-node support
-        auto attn       = i_signature.getAttnType();
+        auto attn = i_signature.getAttnType();
 
-        o_word7 =
-            (chipPos & 0xffff) << 16 | (nodePos & 0xff) << 8 | (attn & 0xff);
+        o_word7 = (chipPos & 0xffff) << 16 | (nodePos & 0xff) << 8 |
+                  (attn & 0xff);
 
         // [ 0:15] signature ID
         // [16:23] signature instance
@@ -179,7 +179,7 @@
 
     for (const auto& entry : dump)
     {
-        auto chip    = entry.first;
+        auto chip = entry.first;
         auto regList = entry.second;
 
         // Each chip will have the following information:
@@ -190,9 +190,9 @@
         // Then the data for each register will follow.
 
         uint32_t chipType = chip.getType();
-        uint16_t chipPos  = util::pdbg::getChipPos(chip);
-        uint8_t nodePos   = 0; // TODO: multi-node support
-        uint32_t numRegs  = regList.size();
+        uint16_t chipPos = util::pdbg::getChipPos(chip);
+        uint8_t nodePos = 0; // TODO: multi-node support
+        uint32_t numRegs = regList.size();
         stream << chipType << chipPos << nodePos << numRegs;
 
         for (const auto& reg : regList)
@@ -238,10 +238,10 @@
 {
     // Get the Hostboot scratch registers from the primary processor.
 
-    uint32_t cfamAddr  = 0x283C;
+    uint32_t cfamAddr = 0x283C;
     uint32_t cfamValue = 0;
 
-    uint64_t scomAddr  = 0x4602F489;
+    uint64_t scomAddr = 0x4602F489;
     uint64_t scomValue = 0;
 
     auto priProc = util::pdbg::getPrimaryProcessor();
@@ -292,11 +292,11 @@
     // signature from the interrupted analysis. If data exists within those
     // registers a user data section will be created in the PEL to record it.
 
-    uint32_t reg9Addr  = 0x2980;
+    uint32_t reg9Addr = 0x2980;
     uint32_t reg10Addr = 0x2981;
 
     uint32_t chipId = 0; // stored in reg9
-    uint32_t sigId  = 0; // stored in reg10
+    uint32_t sigId = 0;  // stored in reg10
 
     auto priProc = util::pdbg::getPrimaryProcessor();
     if (nullptr == priProc)
diff --git a/analyzer/filter-root-cause.cpp b/analyzer/filter-root-cause.cpp
index 5daf7bd..d122a32 100644
--- a/analyzer/filter-root-cause.cpp
+++ b/analyzer/filter-root-cause.cpp
@@ -81,13 +81,13 @@
 {
     using namespace util::pdbg;
 
-    using func  = libhei::NodeId_t (*)(const std::string& i_str);
+    using func = libhei::NodeId_t (*)(const std::string& i_str);
     func __hash = libhei::hash<libhei::NodeId_t>;
 
-    static const auto mc_dstl_fir       = __hash("MC_DSTL_FIR");
-    static const auto mc_ustl_fir       = __hash("MC_USTL_FIR");
+    static const auto mc_dstl_fir = __hash("MC_DSTL_FIR");
+    static const auto mc_ustl_fir = __hash("MC_USTL_FIR");
     static const auto mc_omi_dl_err_rpt = __hash("MC_OMI_DL_ERR_RPT");
-    static const auto srqfir            = __hash("SRQFIR");
+    static const auto srqfir = __hash("SRQFIR");
 
     // First, look for any chip checkstops from the connected OCMBs.
     for (const auto& s : i_list)
@@ -267,8 +267,8 @@
     for (const auto& s : i_list)
     {
         const auto targetType = getTrgtType(getTrgt(s.getChip()));
-        const auto id         = s.getId();
-        const auto attnType   = s.getAttnType();
+        const auto id = s.getId();
+        const auto attnType = s.getAttnType();
 
         // Find any processor with chip checkstop attention that did not
         // originate from the PB_EXT_FIR.
@@ -290,20 +290,20 @@
 {
     using namespace util::pdbg;
 
-    using func  = libhei::NodeId_t (*)(const std::string& i_str);
+    using func = libhei::NodeId_t (*)(const std::string& i_str);
     func __hash = libhei::hash<libhei::NodeId_t>;
 
     // PROC registers
-    static const auto tp_local_fir        = __hash("TP_LOCAL_FIR");
-    static const auto occ_fir             = __hash("OCC_FIR");
-    static const auto pbao_fir            = __hash("PBAO_FIR");
-    static const auto n0_local_fir        = __hash("N0_LOCAL_FIR");
-    static const auto int_cq_fir          = __hash("INT_CQ_FIR");
-    static const auto nx_cq_fir           = __hash("NX_CQ_FIR");
-    static const auto nx_dma_eng_fir      = __hash("NX_DMA_ENG_FIR");
-    static const auto vas_fir             = __hash("VAS_FIR");
-    static const auto n1_local_fir        = __hash("N1_LOCAL_FIR");
-    static const auto mcd_fir             = __hash("MCD_FIR");
+    static const auto tp_local_fir = __hash("TP_LOCAL_FIR");
+    static const auto occ_fir = __hash("OCC_FIR");
+    static const auto pbao_fir = __hash("PBAO_FIR");
+    static const auto n0_local_fir = __hash("N0_LOCAL_FIR");
+    static const auto int_cq_fir = __hash("INT_CQ_FIR");
+    static const auto nx_cq_fir = __hash("NX_CQ_FIR");
+    static const auto nx_dma_eng_fir = __hash("NX_DMA_ENG_FIR");
+    static const auto vas_fir = __hash("VAS_FIR");
+    static const auto n1_local_fir = __hash("N1_LOCAL_FIR");
+    static const auto mcd_fir = __hash("MCD_FIR");
     static const auto pb_station_fir_en_1 = __hash("PB_STATION_FIR_EN_1");
     static const auto pb_station_fir_en_2 = __hash("PB_STATION_FIR_EN_2");
     static const auto pb_station_fir_en_3 = __hash("PB_STATION_FIR_EN_3");
@@ -312,49 +312,49 @@
     static const auto pb_station_fir_es_2 = __hash("PB_STATION_FIR_ES_2");
     static const auto pb_station_fir_es_3 = __hash("PB_STATION_FIR_ES_3");
     static const auto pb_station_fir_es_4 = __hash("PB_STATION_FIR_ES_4");
-    static const auto pb_station_fir_eq   = __hash("PB_STATION_FIR_EQ");
-    static const auto psihb_fir           = __hash("PSIHB_FIR");
-    static const auto pbaf_fir            = __hash("PBAF_FIR");
-    static const auto lpc_fir             = __hash("LPC_FIR");
-    static const auto eq_core_fir         = __hash("EQ_CORE_FIR");
-    static const auto eq_l2_fir           = __hash("EQ_L2_FIR");
-    static const auto eq_l3_fir           = __hash("EQ_L3_FIR");
-    static const auto eq_ncu_fir          = __hash("EQ_NCU_FIR");
-    static const auto eq_local_fir        = __hash("EQ_LOCAL_FIR");
-    static const auto eq_qme_fir          = __hash("EQ_QME_FIR");
-    static const auto iohs_local_fir      = __hash("IOHS_LOCAL_FIR");
-    static const auto iohs_dlp_fir_oc     = __hash("IOHS_DLP_FIR_OC");
-    static const auto iohs_dlp_fir_smp    = __hash("IOHS_DLP_FIR_SMP");
-    static const auto mc_local_fir        = __hash("MC_LOCAL_FIR");
-    static const auto mc_fir              = __hash("MC_FIR");
-    static const auto mc_dstl_fir         = __hash("MC_DSTL_FIR");
-    static const auto mc_ustl_fir         = __hash("MC_USTL_FIR");
-    static const auto nmmu_cq_fir         = __hash("NMMU_CQ_FIR");
-    static const auto nmmu_fir            = __hash("NMMU_FIR");
-    static const auto mc_omi_dl           = __hash("MC_OMI_DL");
-    static const auto pau_local_fir       = __hash("PAU_LOCAL_FIR");
-    static const auto pau_ptl_fir         = __hash("PAU_PTL_FIR");
-    static const auto pau_phy_fir         = __hash("PAU_PHY_FIR");
-    static const auto pau_fir_0           = __hash("PAU_FIR_0");
-    static const auto pau_fir_2           = __hash("PAU_FIR_2");
-    static const auto pci_local_fir       = __hash("PCI_LOCAL_FIR");
-    static const auto pci_iop_fir         = __hash("PCI_IOP_FIR");
-    static const auto pci_nest_fir        = __hash("PCI_NEST_FIR");
+    static const auto pb_station_fir_eq = __hash("PB_STATION_FIR_EQ");
+    static const auto psihb_fir = __hash("PSIHB_FIR");
+    static const auto pbaf_fir = __hash("PBAF_FIR");
+    static const auto lpc_fir = __hash("LPC_FIR");
+    static const auto eq_core_fir = __hash("EQ_CORE_FIR");
+    static const auto eq_l2_fir = __hash("EQ_L2_FIR");
+    static const auto eq_l3_fir = __hash("EQ_L3_FIR");
+    static const auto eq_ncu_fir = __hash("EQ_NCU_FIR");
+    static const auto eq_local_fir = __hash("EQ_LOCAL_FIR");
+    static const auto eq_qme_fir = __hash("EQ_QME_FIR");
+    static const auto iohs_local_fir = __hash("IOHS_LOCAL_FIR");
+    static const auto iohs_dlp_fir_oc = __hash("IOHS_DLP_FIR_OC");
+    static const auto iohs_dlp_fir_smp = __hash("IOHS_DLP_FIR_SMP");
+    static const auto mc_local_fir = __hash("MC_LOCAL_FIR");
+    static const auto mc_fir = __hash("MC_FIR");
+    static const auto mc_dstl_fir = __hash("MC_DSTL_FIR");
+    static const auto mc_ustl_fir = __hash("MC_USTL_FIR");
+    static const auto nmmu_cq_fir = __hash("NMMU_CQ_FIR");
+    static const auto nmmu_fir = __hash("NMMU_FIR");
+    static const auto mc_omi_dl = __hash("MC_OMI_DL");
+    static const auto pau_local_fir = __hash("PAU_LOCAL_FIR");
+    static const auto pau_ptl_fir = __hash("PAU_PTL_FIR");
+    static const auto pau_phy_fir = __hash("PAU_PHY_FIR");
+    static const auto pau_fir_0 = __hash("PAU_FIR_0");
+    static const auto pau_fir_2 = __hash("PAU_FIR_2");
+    static const auto pci_local_fir = __hash("PCI_LOCAL_FIR");
+    static const auto pci_iop_fir = __hash("PCI_IOP_FIR");
+    static const auto pci_nest_fir = __hash("PCI_NEST_FIR");
 
     // OCMB registers
     static const auto ocmb_lfir = __hash("OCMB_LFIR");
-    static const auto mmiofir   = __hash("MMIOFIR");
-    static const auto srqfir    = __hash("SRQFIR");
-    static const auto rdffir    = __hash("RDFFIR");
-    static const auto tlxfir    = __hash("TLXFIR");
-    static const auto omi_dl    = __hash("OMI_DL");
+    static const auto mmiofir = __hash("MMIOFIR");
+    static const auto srqfir = __hash("SRQFIR");
+    static const auto rdffir = __hash("RDFFIR");
+    static const auto tlxfir = __hash("TLXFIR");
+    static const auto omi_dl = __hash("OMI_DL");
 
     for (const auto& signature : i_list)
     {
         const auto targetType = getTrgtType(getTrgt(signature.getChip()));
-        const auto attnType   = signature.getAttnType();
-        const auto id         = signature.getId();
-        const auto bit        = signature.getBit();
+        const auto attnType = signature.getAttnType();
+        const auto id = signature.getId();
+        const auto bit = signature.getBit();
 
         // Only looking for recoverable or unit checkstop attentions.
         if (libhei::ATTN_TYPE_RECOVERABLE != attnType &&
diff --git a/analyzer/initialize_isolator.cpp b/analyzer/initialize_isolator.cpp
index e75f5b3..8d00ae5 100644
--- a/analyzer/initialize_isolator.cpp
+++ b/analyzer/initialize_isolator.cpp
@@ -39,9 +39,9 @@
         libhei::FileKeyword_t keyword;
         libhei::ChipType_t chipType;
 
-        const size_t sz_keyword  = sizeof(keyword);
+        const size_t sz_keyword = sizeof(keyword);
         const size_t sz_chipType = sizeof(chipType);
-        const size_t sz_buffer   = sz_keyword + sz_chipType;
+        const size_t sz_buffer = sz_keyword + sz_chipType;
 
         // Read the keyword and chip type from the file.
         char buffer[sz_buffer];
diff --git a/analyzer/plugins/p10-plugins.cpp b/analyzer/plugins/p10-plugins.cpp
index c841e21..1d5270f 100644
--- a/analyzer/plugins/p10-plugins.cpp
+++ b/analyzer/plugins/p10-plugins.cpp
@@ -33,17 +33,16 @@
     // in this case the bit position is the same as the plugin instance.
     auto itr = std::copy_if(sigList.begin(), sigList.end(), pllList.begin(),
                             [&nodeId, &i_instance](const auto& s) {
-                                return (nodeId == s.getId() &&
-                                        i_instance == s.getBit());
-                            });
+        return (nodeId == s.getId() && i_instance == s.getBit());
+    });
 
     // Shrink the size of the PLL list if necessary.
     pllList.resize(std::distance(pllList.begin(), itr));
 
     // The clock callout priority is dependent on the number of chips with PLL
     // unlock attentions.
-    auto clockPriority =
-        (1 < pllList.size()) ? callout::Priority::HIGH : callout::Priority::MED;
+    auto clockPriority = (1 < pllList.size()) ? callout::Priority::HIGH
+                                              : callout::Priority::MED;
 
     // Callout the clock.
     auto clockCallout = (0 == i_instance) ? callout::ClockType::OSC_REF_CLOCK_0
@@ -62,7 +61,7 @@
 void lpc_timeout_callout(const libhei::Chip& i_chip, ServiceData& io_servData)
 {
     auto target = util::pdbg::getTrgt(i_chip);
-    auto path   = util::pdbg::getPath(target);
+    auto path = util::pdbg::getPath(target);
 
     // Callout the PNOR.
     io_servData.calloutPart(callout::PartType::PNOR, callout::Priority::MED);
@@ -98,7 +97,7 @@
                  ServiceData& io_servData)
 {
     auto target = util::pdbg::getTrgt(i_chip);
-    auto path   = util::pdbg::getPath(target);
+    auto path = util::pdbg::getPath(target);
 
     if (util::pdbg::queryLpcTimeout(target))
     {
@@ -137,8 +136,8 @@
 {
     // Get the OMI target for this instance
     auto procTarget = util::pdbg::getTrgt(i_chip);
-    auto omiTarget =
-        util::pdbg::getChipUnit(procTarget, util::pdbg::TYPE_OMI, i_instance);
+    auto omiTarget = util::pdbg::getChipUnit(procTarget, util::pdbg::TYPE_OMI,
+                                             i_instance);
 
     if (nullptr != omiTarget)
     {
diff --git a/analyzer/plugins/p10-tod-plugins.cpp b/analyzer/plugins/p10-tod-plugins.cpp
index ad401d1..e7aecde 100644
--- a/analyzer/plugins/p10-tod-plugins.cpp
+++ b/analyzer/plugins/p10-tod-plugins.cpp
@@ -33,12 +33,12 @@
 class Data
 {
   public:
-    Data()                       = default;
-    ~Data()                      = default;
-    Data(const Data&)            = default;
-    Data(Data&&)                 = default;
+    Data() = default;
+    ~Data() = default;
+    Data(const Data&) = default;
+    Data(Data&&) = default;
     Data& operator=(const Data&) = default;
-    Data& operator=(Data&&)      = default;
+    Data& operator=(Data&&) = default;
 
   private:
     /** The MDMT chips at fault (only one per topology). */
@@ -122,8 +122,8 @@
 
 enum class Register
 {
-    TOD_ERROR           = 0x00040030,
-    TOD_PSS_MSS_STATUS  = 0x00040008,
+    TOD_ERROR = 0x00040030,
+    TOD_PSS_MSS_STATUS = 0x00040008,
     TOD_PRI_PORT_0_CTRL = 0x00040001,
     TOD_PRI_PORT_1_CTRL = 0x00040002,
     TOD_SEC_PORT_0_CTRL = 0x00040003,
@@ -165,8 +165,8 @@
     auto iohsUnit = getChipUnit(i_chipReportingError, TYPE_IOHS, i_iohsPos);
     if (nullptr != iohsUnit)
     {
-        auto clockSourceUnit =
-            getConnectedTarget(iohsUnit, callout::BusType::SMP_BUS);
+        auto clockSourceUnit = getConnectedTarget(iohsUnit,
+                                                  callout::BusType::SMP_BUS);
         if (nullptr != clockSourceUnit)
         {
             chipSourcingClock = getParentChip(clockSourceUnit);
@@ -226,7 +226,7 @@
         bool isPriTop = (Configuration::PRIMARY == topConfig[top]);
 
         // Determine if this is the MDMT chip.
-        bool isMasterTod    = statusReg.isBitSet(isPriTop ? 13 : 17);
+        bool isMasterTod = statusReg.isBitSet(isPriTop ? 13 : 17);
         bool isMasterDrawer = statusReg.isBitSet(isPriTop ? 14 : 18);
 
         if (isMasterDrawer && isMasterTod)
@@ -234,8 +234,8 @@
             // The master path selects are sourced from the oscilator reference
             // clocks. So, we'll need to determine which one was used at the
             // time of the failure.
-            auto masterPathSelect =
-                statusReg.getFieldRight(isPriTop ? 12 : 16, 1);
+            auto masterPathSelect = statusReg.getFieldRight(isPriTop ? 12 : 16,
+                                                            1);
 
             // Determine if there is a step check fault for this path select.
             if (errorReg.isBitSet((0 == masterPathSelect) ? 14 : 15))
@@ -254,8 +254,8 @@
             // The slave path selects are sourced from other processor chips.
             // So, we'll need to determine which one was used at the time of the
             // failure.
-            auto slavePathSelect =
-                statusReg.getFieldRight(isPriTop ? 15 : 19, 1);
+            auto slavePathSelect = statusReg.getFieldRight(isPriTop ? 15 : 19,
+                                                           1);
 
             // Determine if there is a step check fault for this path select.
             if (errorReg.isBitSet((0 == slavePathSelect) ? 16 : 21))
@@ -274,7 +274,7 @@
                     continue; // try the other topology
                 }
 
-                auto iohsPos           = portCtrl.getFieldRight(0, 3);
+                auto iohsPos = portCtrl.getFieldRight(0, 3);
                 auto chipSourcingClock = getChipSourcingClock(i_chip, iohsPos);
 
                 if (nullptr != chipSourcingClock)
@@ -336,9 +336,9 @@
 
     for (const auto top : {tod::Topology::ACTIVE, tod::Topology::BACKUP})
     {
-        auto mdmtFault      = data.getMdmtFault(top);
+        auto mdmtFault = data.getMdmtFault(top);
         auto internalFaults = data.getInteralFaults(top);
-        auto networkFaults  = data.getNetworkFaults(top);
+        auto networkFaults = data.getNetworkFaults(top);
 
         if (nullptr != mdmtFault) // MDMT fault
         {
diff --git a/analyzer/plugins/plugin.hpp b/analyzer/plugins/plugin.hpp
index 6947810..1a6062d 100644
--- a/analyzer/plugins/plugin.hpp
+++ b/analyzer/plugins/plugin.hpp
@@ -35,9 +35,9 @@
 // These are provided as know chip types for plugin definitions.
 constexpr libhei::ChipType_t EXPLORER_11 = 0x60d20011;
 constexpr libhei::ChipType_t EXPLORER_20 = 0x60d20020;
-constexpr libhei::ChipType_t ODYSSEY_10  = 0x60c00010;
-constexpr libhei::ChipType_t P10_10      = 0x20da0010;
-constexpr libhei::ChipType_t P10_20      = 0x20da0020;
+constexpr libhei::ChipType_t ODYSSEY_10 = 0x60c00010;
+constexpr libhei::ChipType_t P10_10 = 0x20da0010;
+constexpr libhei::ChipType_t P10_20 = 0x20da0020;
 
 /**
  * @brief This is simply a global container for all of the registered plugins.
diff --git a/analyzer/ras-data/ras-data-parser.cpp b/analyzer/ras-data/ras-data-parser.cpp
index c11eab8..de0a60d 100644
--- a/analyzer/ras-data/ras-data-parser.cpp
+++ b/analyzer/ras-data/ras-data-parser.cpp
@@ -63,7 +63,7 @@
         // If the action is another action, recursively call this function
         if ("action" == type)
         {
-            auto name   = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             o_isFlagSet = __checkActionForFlag(name, i_flag, i_data);
             if (o_isFlagSet)
             {
@@ -348,7 +348,7 @@
     if (bus.contains("unit"))
     {
         auto unit = bus.at("unit").get<std::string>();
-        unitPath  = i_data.at("units").at(unit).get<std::string>();
+        unitPath = i_data.at("units").at(unit).get<std::string>();
     }
 
     return std::make_tuple(busType, unitPath);
@@ -382,7 +382,7 @@
         else if ("callout_self" == type)
         {
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             std::string path{}; // Must be empty to callout the chip.
 
@@ -391,9 +391,9 @@
         }
         else if ("callout_unit" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             auto path = i_data.at("units").at(name).get<std::string>();
 
@@ -402,9 +402,9 @@
         }
         else if ("callout_connected" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             auto busData = parseBus(i_data, name);
 
@@ -414,9 +414,9 @@
         }
         else if ("callout_bus" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             auto busData = parseBus(i_data, name);
 
@@ -426,9 +426,9 @@
         }
         else if ("callout_clock" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
-            auto guard    = a.at("guard").get<bool>();
+            auto guard = a.at("guard").get<bool>();
 
             // clang-format off
             static const std::map<std::string, callout::ClockType> m =
@@ -444,7 +444,7 @@
         }
         else if ("callout_procedure" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
 
             // clang-format off
@@ -460,7 +460,7 @@
         }
         else if ("callout_part" == type)
         {
-            auto name     = a.at("name").get<std::string>();
+            auto name = a.at("name").get<std::string>();
             auto priority = a.at("priority").get<std::string>();
 
             // clang-format off
diff --git a/analyzer/service_data.cpp b/analyzer/service_data.cpp
index c571ca5..62cd474 100644
--- a/analyzer/service_data.cpp
+++ b/analyzer/service_data.cpp
@@ -14,9 +14,9 @@
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Hardware Callout";
-    ffdc["Target"]       = util::pdbg::getPhysDevPath(i_target);
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
-    ffdc["Guard"]        = i_guard;
+    ffdc["Target"] = util::pdbg::getPhysDevPath(i_target);
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
+    ffdc["Guard"] = i_guard;
     addCalloutFFDC(ffdc);
     setSrcSubsystem(getTargetSubsystem(i_target), i_priority);
 }
@@ -36,11 +36,11 @@
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Connected Callout";
-    ffdc["Bus Type"]     = i_busType.getString();
-    ffdc["RX Target"]    = util::pdbg::getPhysDevPath(i_rxTarget);
-    ffdc["TX Target"]    = util::pdbg::getPhysDevPath(txTarget);
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
-    ffdc["Guard"]        = i_guard;
+    ffdc["Bus Type"] = i_busType.getString();
+    ffdc["RX Target"] = util::pdbg::getPhysDevPath(i_rxTarget);
+    ffdc["TX Target"] = util::pdbg::getPhysDevPath(txTarget);
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
+    ffdc["Guard"] = i_guard;
     addCalloutFFDC(ffdc);
     setSrcSubsystem(getTargetSubsystem(txTarget), i_priority);
 }
@@ -67,11 +67,11 @@
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Bus Callout";
-    ffdc["Bus Type"]     = i_busType.getString();
-    ffdc["RX Target"]    = util::pdbg::getPhysDevPath(i_rxTarget);
-    ffdc["TX Target"]    = util::pdbg::getPhysDevPath(txTarget);
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
-    ffdc["Guard"]        = i_guard;
+    ffdc["Bus Type"] = i_busType.getString();
+    ffdc["RX Target"] = util::pdbg::getPhysDevPath(i_rxTarget);
+    ffdc["TX Target"] = util::pdbg::getPhysDevPath(txTarget);
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
+    ffdc["Guard"] = i_guard;
     addCalloutFFDC(ffdc);
     setSrcSubsystem(i_busType.getSrcSubsystem(), i_priority);
 }
@@ -91,8 +91,8 @@
     // TODO: Add the target and guard type if guard is ever supported.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Clock Callout";
-    ffdc["Clock Type"]   = i_clockType.getString();
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
+    ffdc["Clock Type"] = i_clockType.getString();
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
     addCalloutFFDC(ffdc);
     setSrcSubsystem(i_clockType.getSrcSubsystem(), i_priority);
 }
@@ -105,14 +105,14 @@
     // Add the actual callout to the service data.
     nlohmann::json callout;
     callout["Procedure"] = i_procedure.getString();
-    callout["Priority"]  = callout::getString(i_priority);
+    callout["Priority"] = callout::getString(i_priority);
     addCallout(callout);
 
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Procedure Callout";
-    ffdc["Procedure"]    = i_procedure.getString();
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
+    ffdc["Procedure"] = i_procedure.getString();
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
     addCalloutFFDC(ffdc);
     setSrcSubsystem(i_procedure.getSrcSubsystem(), i_priority);
 }
@@ -137,8 +137,8 @@
     // Add the callout FFDC.
     nlohmann::json ffdc;
     ffdc["Callout Type"] = "Part Callout";
-    ffdc["Part Type"]    = i_part.getString();
-    ffdc["Priority"]     = callout::getStringFFDC(i_priority);
+    ffdc["Part Type"] = i_part.getString();
+    ffdc["Priority"] = callout::getStringFFDC(i_priority);
     addCalloutFFDC(ffdc);
     setSrcSubsystem(i_part.getSrcSubsystem(), i_priority);
 }
@@ -212,9 +212,9 @@
     nlohmann::json callout;
 
     callout["LocationCode"] = util::pdbg::getLocationCode(i_target);
-    callout["Priority"]     = callout::getString(i_priority);
+    callout["Priority"] = callout::getString(i_priority);
     callout["Deconfigured"] = false;
-    callout["Guarded"]      = false; // default
+    callout["Guarded"] = false; // default
 
     // Check if guard info should be added.
     if (i_guard)
@@ -223,9 +223,9 @@
 
         if (!(callout::GuardType::NONE == guardType))
         {
-            callout["Guarded"]    = true;
+            callout["Guarded"] = true;
             callout["EntityPath"] = util::pdbg::getPhysBinPath(i_target);
-            callout["GuardType"]  = guardType.getString();
+            callout["GuardType"] = guardType.getString();
         }
     }
 
@@ -243,9 +243,9 @@
     nlohmann::json callout;
 
     callout["LocationCode"] = "P0";
-    callout["Priority"]     = callout::getString(i_priority);
+    callout["Priority"] = callout::getString(i_priority);
     callout["Deconfigured"] = false;
-    callout["Guarded"]      = false;
+    callout["Guarded"] = false;
 
     addCallout(callout);
 }
@@ -276,7 +276,7 @@
         (callout::SrcSubsystem::CEC_HARDWARE == iv_srcSubsystem.first &&
          callout::Priority::LOW == iv_srcSubsystem.second))
     {
-        iv_srcSubsystem.first  = i_subsystem;
+        iv_srcSubsystem.first = i_subsystem;
         iv_srcSubsystem.second = i_priority;
     }
 }
