diff --git a/vars/pkill_port_forward.groovy b/vars/pkill_port_forward.groovy
index d935701..286e341 100644
--- a/vars/pkill_port_forward.groovy
+++ b/vars/pkill_port_forward.groovy
@@ -123,11 +123,12 @@
     }
     catch (Exception err) {  // groovylint-disable-line CatchException
         ans = false
+        String iam = getIam(name)
         println("** ${iam}: EXCEPTION ${err}")
         throw err
     }
     finally {
-        enter('main')
+        leave('main')
     }
 
     return(ans)
diff --git a/vars/volthaDeploy.groovy b/vars/volthaDeploy.groovy
index 42c482a..a545da1 100644
--- a/vars/volthaDeploy.groovy
+++ b/vars/volthaDeploy.groovy
@@ -18,32 +18,64 @@
 // If you need to deploy different configurations you can use the volthaInfraDeploy and volthaStackDeploy keywords
 // -----------------------------------------------------------------------
 
+// -----------------------------------------------------------------------
+// -----------------------------------------------------------------------
+String getIam(String func) {
+    // Cannot rely on a stack trace due to jenkins manipulation
+    String src = 'vars/volthaDeploy.groovy'
+    String iam = [src, func].join('::')
+    return iam
+}
+
+// -----------------------------------------------------------------------
+// Intent: Log progress message
+// -----------------------------------------------------------------------
+void enter(String name) {
+    // Announce ourselves for log usability
+    String iam = getIam(name)
+    println("${iam}: ENTER")
+    return
+}
+
+// -----------------------------------------------------------------------
+// Intent: Log progress message
+// -----------------------------------------------------------------------
+void leave(String name) {
+    // Announce ourselves for log usability
+    String iam = getIam(name)
+    println("${iam}: LEAVE")
+    return
+}
+
+// -----------------------------------------------------------------------
+// Intent: Perform volthaDeploy stuff
+// -----------------------------------------------------------------------
 def call(Map config) {
 
-    String iam = 'vars/volthaDeploy.groovy'
-    println("** ${iam}: ENTER")
+    // String iam = 'vars/volthaDeploy.groovy'
+    enter('main')
 
     // note that I can't define this outside the function as there's no global scope in Groovy
     // [joey] A class method or library call can be used in place of globals, fqdn needed.
     def defaultConfig = [
-      onosReplica: 1,
-      atomixReplica: 1,
-      kafkaReplica: 1,
-      etcdReplica: 1,
-      bbsimReplica: 1,
-      infraNamespace: "infra",
-      volthaNamespace: "voltha",
-      stackName: "voltha",
-      stackId: 1,
-      workflow: "att",
-      withMacLearning: false,
-      withFttb: false,
-      extraHelmFlags: "",
-      localCharts: false, // wether to use locally cloned charts or upstream one (for local we assume they are stored in $WORKSPACE/voltha-helm-charts)
-      dockerRegistry: "", // use a different docker registry for all images, eg: "mirror.registry.opennetworking.org"
-      kubeconfig: null, // location of the kubernetes config file, if null we assume it's stored in the $KUBECONFIG environment variable
-      withVolthaInfra: true,
-      withVolthaStack: true,
+        onosReplica: 1,
+        atomixReplica: 1,
+        kafkaReplica: 1,
+        etcdReplica: 1,
+        bbsimReplica: 1,
+        infraNamespace: "infra",
+        volthaNamespace: "voltha",
+        stackName: "voltha",
+        stackId: 1,
+        workflow: "att",
+        withMacLearning: false,
+        withFttb: false,
+        extraHelmFlags: "",
+        localCharts: false, // wether to use locally cloned charts or upstream one (for local we assume they are stored in $WORKSPACE/voltha-helm-charts)
+        dockerRegistry: "", // use a different docker registry for all images, eg: "mirror.registry.opennetworking.org"
+        kubeconfig: null, // location of the kubernetes config file, if null we assume it's stored in the $KUBECONFIG environment variable
+        withVolthaInfra: true,
+        withVolthaStack: true,
     ]
 
     if (!config) {
@@ -53,37 +85,38 @@
     def cfg = defaultConfig + config
 
     if (cfg.dockerRegistry != "") {
-      def registryFlags = " --set global.image_registry=${cfg.dockerRegistry}/ "
-      registryFlags += " --set etcd.image.registry=${cfg.dockerRegistry} "
-      registryFlags += " --set kafka.image.registry=${cfg.dockerRegistry} "
-      registryFlags += " --set kafka.zookeper.image.registry=${cfg.dockerRegistry} "
-      registryFlags += " --set onos-classic.image.repository=${cfg.dockerRegistry}/voltha/voltha-onos "
-      registryFlags += " --set onos-classic.atomix.image.repository=${cfg.dockerRegistry}/atomix/atomix "
-      registryFlags += " --set freeradius.images.radius.registry=${cfg.dockerRegistry}/ "
+        def registryFlags = " --set global.image_registry=${cfg.dockerRegistry}/ "
+        registryFlags += " --set etcd.image.registry=${cfg.dockerRegistry} "
+        registryFlags += " --set kafka.image.registry=${cfg.dockerRegistry} "
+        registryFlags += " --set kafka.zookeper.image.registry=${cfg.dockerRegistry} "
+        registryFlags += " --set onos-classic.image.repository=${cfg.dockerRegistry}/voltha/voltha-onos "
+        registryFlags += " --set onos-classic.atomix.image.repository=${cfg.dockerRegistry}/atomix/atomix "
+        registryFlags += " --set freeradius.images.radius.registry=${cfg.dockerRegistry}/ "
 
-      // we want to always leave the user provided flags at the end, to override changes
-      cfg.extraHelmFlags = registryFlags + " " + cfg.extraHelmFlags
+        // we want to always leave the user provided flags at the end, to override changes
+        cfg.extraHelmFlags = registryFlags + " " + cfg.extraHelmFlags
     }
 
     // Add helm repositories
     println "Updating helm repos"
 
-    sh """
-      helm repo add onf https://charts.opencord.org
-      helm repo update
-    """
+    sh(label  : 'Configure helm repo',
+       script : """
+helm repo add onf https://charts.opencord.org
+helm repo update
+""")
 
     println "Deploying VOLTHA with the following parameters: ${cfg}."
 
     if (cfg.withVolthaInfra) {
-      volthaInfraDeploy(cfg)
+        volthaInfraDeploy(cfg)
     }
 
     if (cfg.withVolthaStack) {
-      volthaStackDeploy(cfg)
+        volthaStackDeploy(cfg)
     }
 
-    println("** ${iam}: LEAVE")
+    leave('main')
 }
 
 // [EOF]
diff --git a/vars/volthaInfraDeploy.groovy b/vars/volthaInfraDeploy.groovy
index c476fd5..db17b42 100644
--- a/vars/volthaInfraDeploy.groovy
+++ b/vars/volthaInfraDeploy.groovy
@@ -35,13 +35,33 @@
     return iam
 }
 
+
+// -----------------------------------------------------------------------
+// Intent: Log progress message
+// -----------------------------------------------------------------------
+void enter(String name) {
+    // Announce ourselves for log usability
+    String iam = getIam(name)
+    println("${iam}: ENTER")
+    return
+}
+
+// -----------------------------------------------------------------------
+// Intent: Log progress message
+// -----------------------------------------------------------------------
+void leave(String name) {
+    // Announce ourselves for log usability
+    String iam = getIam(name)
+    println("${iam}: LEAVE")
+    return
+}
+
 // -----------------------------------------------------------------------
 // Intent: Display and interact with kubernetes namespaces.
 // -----------------------------------------------------------------------
 def doKubeNamespaces()
 {
-    String iam = getIam('doKubeNamespaces')
-    println("** ${iam}: ENTER")
+    enter('doKubeNamespaces')
 
     /*
      [joey] - should pre-existing hint the env is tainted (?)
@@ -50,13 +70,13 @@
      05:24:57  error: failed to create configmap: configmaps "kube-config" already exists
 
      [joey] Thinking we should:
-            o A special case exists  (create namespace)
-            o helm upgrade --install (inital update)
+     o A special case exists  (create namespace)
+     o helm upgrade --install (inital update)
      */
 
     sh('kubectl get namespaces || true')
 
-    println("** ${iam}: LEAVE")    
+    leave('doKubeNamespaces')
     return
 }
 
@@ -64,22 +84,21 @@
 // -----------------------------------------------------------------------
 def process(Map config)
 {
-    String iam = getIam('process')
-    println("** ${iam}: ENTER")
+    enter('process')
 
     // NOTE use params or directule extraHelmFlags??
     def defaultConfig = [
-      onosReplica: 1,
-      atomixReplica: 1,
-      kafkaReplica: 1,
-      etcdReplica: 1,
-      infraNamespace: "infra",
-      workflow: "att",
-      withMacLearning: false,
-      withFttb: false,
-      extraHelmFlags: "",
-      localCharts: false,
-      kubeconfig: null, // location of the kubernetes config file, if null we assume it's stored in the $KUBECONFIG environment variable
+        onosReplica: 1,
+        atomixReplica: 1,
+        kafkaReplica: 1,
+        etcdReplica: 1,
+        infraNamespace: "infra",
+        workflow: "att",
+        withMacLearning: false,
+        withFttb: false,
+        extraHelmFlags: "",
+        localCharts: false,
+        kubeconfig: null, // location of the kubernetes config file, if null we assume it's stored in the $KUBECONFIG environment variable
     ]
 
     def cfg = defaultConfig + config
@@ -87,47 +106,51 @@
     def volthaInfraChart = "onf/voltha-infra"
 
     if (cfg.localCharts) {
-      volthaInfraChart = "$WORKSPACE/voltha-helm-charts/voltha-infra"
+        volthaInfraChart = "$WORKSPACE/voltha-helm-charts/voltha-infra"
 
-      sh """
-      pushd $WORKSPACE/voltha-helm-charts/voltha-infra
-      helm dep update
-      popd
-      """
+        sh(label  : 'HELM: Update deps',
+           script : """
+pushd $WORKSPACE/voltha-helm-charts/voltha-infra
+helm dep update
+popd
+""")
     }
 
     println "Deploying VOLTHA Infra with the following parameters: ${cfg}."
 
     def kubeconfig = cfg.kubeconfig
     if (kubeconfig == null) {
-      kubeconfig = env.KUBECONFIG
+        kubeconfig = env.KUBECONFIG
     }
 
     doKubeNamespaces() // WIP: joey
 
-    sh """
-    kubectl create namespace ${cfg.infraNamespace} || true
-    kubectl create configmap -n ${cfg.infraNamespace} kube-config "--from-file=kube_config=${kubeconfig}"  || true
-    """
+    sh(label  : 'KUBE: Create namespace',
+       script : """
+kubectl create namespace ${cfg.infraNamespace} || true
+kubectl create configmap -n ${cfg.infraNamespace} kube-config "--from-file=kube_config=${kubeconfig}"  || true
+""")
 
     def serviceConfigFile = cfg.workflow
     if (cfg.withMacLearning && cfg.workflow == 'tt') {
-      serviceConfigFile = "tt-maclearner"
+        serviceConfigFile = "tt-maclearner"
     } else if (cfg.withFttb && cfg.workflow == 'dt') {
-      serviceConfigFile = "dt-fttb"
+        serviceConfigFile = "dt-fttb"
     }
 
     // bitnamic/etch has change the replica format between the currently used 5.4.2 and the latest 6.2.5
     // for now put both values in the extra helm chart flags
-    sh """
+    sh(label  : 'HELM: upgrade --install',
+       script : """
     helm upgrade --install --create-namespace -n ${cfg.infraNamespace} voltha-infra ${volthaInfraChart} \
           --set onos-classic.replicas=${cfg.onosReplica},onos-classic.atomix.replicas=${cfg.atomixReplica} \
           --set kafka.replicaCount=${cfg.kafkaReplica},kafka.zookeeper.replicaCount=${cfg.kafkaReplica} \
           --set etcd.statefulset.replicaCount=${cfg.etcdReplica} \
           --set etcd.replicaCount=${cfg.etcdReplica} \
           -f $WORKSPACE/voltha-helm-charts/examples/${serviceConfigFile}-values.yaml ${cfg.extraHelmFlags}
-    """
+""")
 
+    leave('process')
     return
 }
 
@@ -135,8 +158,7 @@
 // -----------------------------------------------------------------------
 def call(Map config)
 {
-    String iam = getIam('main')
-    println("** ${iam}: ENTER")
+    enter('main')
 
     if (!config) {
         config = [:]
@@ -144,18 +166,19 @@
 
     try
     {
-	process(config)
+	    process(config)
     }
     catch (Exception err)
     {
-	println("** ${iam}: EXCEPTION ${err}")
-	// Cannot re-throw ATM: too many potential shell errors.
-	// throw err
+        String iam = getIam(name)
+	    println("** ${iam}: EXCEPTION ${err}")
+	    throw err
     }
     finally
     {
-	println("** ${iam}: LEAVE")
+	    leave('main')
     }
+
     return
 }
 
