diff --git a/vars/createKubernetesCluster.groovy b/vars/createKubernetesCluster.groovy
index fd22546..a0df895 100644
--- a/vars/createKubernetesCluster.groovy
+++ b/vars/createKubernetesCluster.groovy
@@ -1,6 +1,20 @@
 #!/usr/bin/env groovy
 // -----------------------------------------------------------------------
-// sets up a kubernetes cluster (using kind)
+// Copyright 2021-2023 Open Networking Foundation (ONF) and the ONF Contributors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// -----------------------------------------------------------------------
+// Intent: sets up a kubernetes cluster (using kind)
 // -----------------------------------------------------------------------
 
 // -----------------------------------------------------------------------
@@ -91,12 +105,12 @@
       mkdir -p $HOME/.kube
       kind get kubeconfig --name ${cfg.name} > $HOME/.kube/config
 
-      make -C "$WORKSPACE/voltha-system-tests" KAIL_PATH="$WORKSPACE/bin" kail || true
-
-      # download kail
-      bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/bin"
+      # install kail
+      make -C "$WORKSPACE/voltha-system-tests" KAIL_PATH="$WORKSPACE/bin" kail
   """
 
     println("** ${iam}: LEAVE")
     return
 }
+
+// [EOF]
diff --git a/vars/startComponentsLogs.groovy b/vars/startComponentsLogs.groovy
index a485be4..f62d70f 100644
--- a/vars/startComponentsLogs.groovy
+++ b/vars/startComponentsLogs.groovy
@@ -1,13 +1,47 @@
+#!/usr/bin/env groovy
+// -----------------------------------------------------------------------
+// Copyright 2021-2023 Open Networking Foundation (ONF) and the ONF Contributors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// -----------------------------------------------------------------------
+// Intent:
 // check if kail is installed, if not installs it
 // and then uses it to collect logs on specified containers
-
+//
 // appsToLog is a list of kubernetes labels used by kail to get the logs
 // the generated log file is named with the string after =
 // for example app=bbsim will generate a file called bbsim.log
-
+//
 // to archive the logs use: archiveArtifacts artifacts: '${logsDir}/*.log'
+// -----------------------------------------------------------------------
+
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+def getIam(String func)
+{
+    // Cannot rely on a stack trace due to jenkins manipulation
+    String src = 'vars/startComponentLogs.groovy'
+    String iam = [src, func].join('::')
+    return iam
+}
+
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
 def call(Map config) {
 
+    String iam = getIam('main')
+    println("** ${iam}: ENTER")
+
     def tagPrefix = "jenkins"
 
     def defaultConfig = [
@@ -32,14 +66,9 @@
     def cfg = defaultConfig + config
 
     // check if kail is installed and if not installs it
-    sh """
-    if ! command -v kail &> /dev/null
-    then
-        bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/bin"
-    fi
-    """
+    sh("""make -C "$WORKSPACE/voltha-system-tests" KAIL_PATH="$WORKSPACE/bin" kail""")
 
-    // fi the logsDir does not exists dir() will create it
+    // if logsDir does not exists dir() will create it
     dir(cfg.logsDir) {
         for(int i = 0;i<cfg.appsToLog.size();i++) {
             def label = cfg.appsToLog[i]
@@ -51,4 +80,9 @@
             """
         }
     }
-}
\ No newline at end of file
+
+    println("** ${iam}: LEAVE")
+    return
+}
+
+// [EOF]
