diff --git a/src/isolator/hei_isolator.cpp b/src/isolator/hei_isolator.cpp
index e977054..45ca647 100644
--- a/src/isolator/hei_isolator.cpp
+++ b/src/isolator/hei_isolator.cpp
@@ -11,29 +11,29 @@
 namespace libhei
 {
 
-ReturnCode Isolator::initialize( void * i_buffer, size_t i_bufferSize,
-                                 bool i_forceInit )
+ReturnCode Isolator::initialize(void * i_buffer, size_t i_bufferSize,
+                                bool i_forceInit)
 {
     ReturnCode rc;
 
     // BEGIN temporary code
-    HEI_INF( "Isolator::initialize(%p,%lu,%d)", i_buffer, i_bufferSize,
-             i_forceInit );
+    HEI_INF("Isolator::initialize(%p,%lu,%d)", i_buffer, i_bufferSize,
+            i_forceInit);
 
     Flyweight<ScomRegister>   & sfw = Flyweight<ScomRegister>::getSingleton();
     Flyweight<IdScomRegister> & ifw = Flyweight<IdScomRegister>::getSingleton();
 
-    sfw.get( ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
-                            REG_INST_DEFAULT, REG_ACCESS_RW, 0x01234567 } );
-    sfw.get( ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
-                            REG_INST_DEFAULT, REG_ACCESS_RW, 0x00112233 } );
+    sfw.get(ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
+                           REG_INST_DEFAULT, REG_ACCESS_RW, 0x01234567 });
+    sfw.get(ScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
+                           REG_INST_DEFAULT, REG_ACCESS_RW, 0x00112233 });
 
-    ifw.get( IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
-                              REG_INST_DEFAULT, REG_ACCESS_RW,
-                              0x0123456789abcdef } );
-    ifw.get( IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
-                              REG_INST_DEFAULT, REG_ACCESS_RW,
-                              0x0011223344556677 } );
+    ifw.get(IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
+                             REG_INST_DEFAULT, REG_ACCESS_RW,
+                             0x0123456789abcdef });
+    ifw.get(IdScomRegister { CHIP_TYPE_INVALID, REG_ID_INVALID,
+                             REG_INST_DEFAULT, REG_ACCESS_RW,
+                             0x0011223344556677 });
     // END temporary code
 
     return rc;
@@ -54,8 +54,8 @@
     Flyweight<IdScomRegister>::getSingleton().clear();
 }
 
-ReturnCode Isolator::isolate( const std::vector<Chip> & i_chipList,
-                              IsolationData & o_isoData ) const
+ReturnCode Isolator::isolate(const std::vector<Chip> & i_chipList,
+                             IsolationData & o_isoData) const
 {
     ReturnCode rc;
 
@@ -66,11 +66,10 @@
     HardwareRegister::flushAll();
 
     // Analyze active error on each chip.
-    for ( auto const & chip : i_chipList )
+    for (auto const & chip : i_chipList)
     {
         // BEGIN temporary code
-        HEI_INF( "Isolator::isolate(%p,%u)", chip.getChip(),
-                 chip.getType() );
+        HEI_INF("Isolator::isolate(%p,%u)", chip.getChip(), chip.getType());
         // END temporary code
     }
 
