diff --git a/hsbp-manager/src/hsbp_manager.cpp b/hsbp-manager/src/hsbp_manager.cpp
index 4f3f3c5..6e22d2d 100644
--- a/hsbp-manager/src/hsbp_manager.cpp
+++ b/hsbp-manager/src/hsbp_manager.cpp
@@ -120,9 +120,9 @@
     {
         /* Execute below operation only when mode of operation is SMBus. By
          * default the clock buffer is configured to follow OE pin output, so we
-         * need to set the output value to 0 to disable the clock outputs. If
-         * mode of operation is IO, then the IO value will determine the
-         * disable/enable of clock output */
+         * need to set the output value to 0 to disable the clock outputs and 1
+         * to enable clock output. If mode of operation is IO, then the IO value
+         * will determine the disable/enable of clock output */
         if (modeOfOperation == "SMBus")
         {
             if (file < 0)
@@ -172,7 +172,7 @@
                 std::bitset<8> currByte(read);
                 bool writeRequired = false;
 
-                /* Set zero only at bit position that we have a NVMe drive (i.e.
+                /* Set 0/1 only at bit position that we have a NVMe drive (i.e.
                  * ignore where byteMap is "-"). We do not want to touch other
                  * bits */
                 for (uint8_t bit = 0; bit < 8; bit++)
@@ -180,7 +180,12 @@
                     if (byte->second.at(bit) != "-")
                     {
                         writeRequired = true;
-                        currByte.reset(bit);
+                        /* Default to enabling the clock output and once the
+                         * HSBP's are detected the clocks will be
+                         * enabled/disabled depending on the drive status */
+                        /* TODO: This code might require a re-visit in case of
+                         * any signal integrity issues in the future */
+                        currByte.set(bit);
                     }
                 }
 
@@ -347,7 +352,7 @@
     void initialize()
     {
         /* Initialize the IO expander Control register to configure the IO ports
-         * as outputs and set the output to low by default */
+         * as outputs and set the output*/
         if (file < 0)
         {
             file = open(("/dev/i2c-" + std::to_string(bus)).c_str(),
@@ -406,7 +411,7 @@
             std::bitset<8> currCtrlVal(read1);
             std::bitset<8> currOutVal(read2);
 
-            /* Set zero only at bit position that we have a NVMe drive (i.e.
+            /* Set 0/1 only at bit position that we have a NVMe drive (i.e.
              * ignore where ioMap is "-"). We do not want to touch other
              * bits */
             for (uint8_t bit = 0; bit < 8; bit++)
@@ -415,7 +420,11 @@
                 {
                     writeRequired = true;
                     currCtrlVal.reset(bit);
-                    currOutVal.reset(bit);
+                    /* Set the output register to drive the OE pin high thereby
+                     * enabling the clock. Default to enabling the clock output
+                     * and once the HSBP's are detected the clocks will be
+                     * enabled/disabled depending on the drive status */
+                    currOutVal.set(bit);
                 }
             }
 
