diff --git a/src/log/logd/lgs_oi_admin.cc b/src/log/logd/lgs_oi_admin.cc
index abd74c816..d5afbfec1 100644
--- a/src/log/logd/lgs_oi_admin.cc
+++ b/src/log/logd/lgs_oi_admin.cc
@@ -147,6 +147,12 @@ static SaSelectionObjectT requestOiSelectionObject(SaImmOiHandleT oi_handle,
     if (ais_rc != SA_AIS_OK) {
       LOG_WA("%s: saImmOiSelectionObjectGet() Fail, %s", __FUNCTION__,
              saf_error(ais_rc));
+      // [Canh] below line code is redundant, because output oi_selection_object
+      // is always is -1 when saImmOiSelectionObjectGet() return != SA_AIS_OK
+      // [Lennart] Is not obvious that saImmOiSelectionObjectGet() sets it to
+      //           -1 and is not specified in AIS. Therefore it make sense to
+      //           set -1 here. Make code self explanatory. Applicable for all
+      //           of these comments
       oi_selection_object = -1;
     }
     break;
@@ -155,6 +161,7 @@ static SaSelectionObjectT requestOiSelectionObject(SaImmOiHandleT oi_handle,
       (ais_rc == SA_AIS_ERR_TRY_AGAIN)) {
     LOG_WA("%s: saImmOiSelectionObjectGet() Fail, TRY AGAIN timeout",
            __FUNCTION__);
+    // [Canh] the same above comment
     oi_selection_object = -1;
   }
 
@@ -177,6 +184,13 @@ static SaAisErrorT setOiImplementerName(SaImmOiHandleT oi_handle) {
       base::Sleep(kOiTryAgainDelay);
       continue;
     }
+    // [Canh] The below code just run 1 time, should move this to out of while loop ?
+    // consider the same in other functions
+    // [Lennart] Having this code in the scope of the loop makes it possible to
+    // break the try again loop (or any other similar loop) if we are done or
+    // on error. Means that we can have one exit from the function without using
+    // return or goto in several places. This is applicable for all similar
+    // loops.
     if (ais_rc == SA_AIS_ERR_EXIST) {
       // Means that we already have the implementer name registered which is Ok
       TRACE("%s saImmOiImplementerSet() Fail %s. Ignore",
@@ -289,6 +303,9 @@ static SaAisErrorT createLogServerOi() {
     // Become class implementer for log config class
     if (stop_oi_create) break;
     ais_rc = setClassImplementer(oi_handle, kLogConfigurationClass);
+    // [Canh] How about SA_AIS_ERR_TIMEOUT case? should we do exit the log service in this case?
+    // [Lennart] Exit (lgs_exit) is done if we leave this loop with ais_rc
+    // set to any other value than SA_AIS_OK including SA_AIS_ERR_TIMEOUT
     if (ais_rc == SA_AIS_ERR_BAD_HANDLE) {
       TRACE("%s: setClassImplementer(LogConfigurationClass) Fail %s. "
             "Try to recover", __FUNCTION__, saf_error(ais_rc));
@@ -357,6 +374,18 @@ static void oiCreationThread() {
   TRACE_ENTER();
   SaAisErrorT ais_rc = createLogServerOi();
 
+  // [Canh] when the flow code is here, ais_rc is always 'SA_AIS_OK' because
+  // if ais_rc != SA_AIS_OK, log service is restarted by lgs_exit() in createLogServerOi().
+  // That means that there is only one chance to re-create OI, lgsOiCreateBackground().
+  // e.g: if ais_rc == SA_AIS_ERR_TIMEOUT, lgs is restarted ???
+  // The below comparing is no meaning.
+
+  // [Lennart] You are right. After I added lgs_exit createLogServerOi() has
+  // no meaningful return value since lgs_exit will always be done if creation
+  // of OI fail regardless of the reason. The legacy behavior in this case is
+  // lgs_exit and I will keep that. This is an Ok way to try recovery since
+  // it is rather meaningless to run a log service with no OI.
+  // I will make this function void and clean up a little
   if (ais_rc == SA_AIS_OK) {
     // An object implementer was successfully created
     // Send a message to the main thread. IMM events shall be polled again
