diff --git a/a.out b/a.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/a.out
diff --git a/jjb/pipeline/voltha/voltha-2.12/bbsim-tests.groovy b/jjb/pipeline/voltha/voltha-2.12/bbsim-tests.groovy
index b411109..351a22f 100644
--- a/jjb/pipeline/voltha/voltha-2.12/bbsim-tests.groovy
+++ b/jjb/pipeline/voltha/voltha-2.12/bbsim-tests.groovy
@@ -39,14 +39,24 @@
 }
 
 // -----------------------------------------------------------------------
+// Intent: Difficult at times to determine when pipeline jobs have
+//   regenerated.  Hardcode a version string that can be assigned
+//   per-script to be sure latest repository changes are being used.
+// -----------------------------------------------------------------------
+String pipelineVer() {
+    String version = '4f87de8f31d588d8277dc5ea6fbb69e714c66079'
+    return(version)
+}
+
+// -----------------------------------------------------------------------
 // Intent: Due to lack of a reliable stack trace, construct a literal.
 //         Jenkins will re-write the call stack for serialization.S
 // -----------------------------------------------------------------------
 // Note: Hardcoded version string used to visualize changes in jenkins UI
 // -----------------------------------------------------------------------
-tring getIam(String func, Boolean verbose=True) {
+String getIam(String func) {
     String branchName = branchName()
-    String version = '4f87de8f31d588d8277dc5ea6fbb69e714c66079'
+    String version    = pipelineVer()
     String src = [
         'ci-management',
         'jjb',
@@ -61,6 +71,28 @@
 }
 
 // -----------------------------------------------------------------------
+// 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: Determine if working on a release branch.
 //   Note: Conditional is legacy, should also check for *-dev or *-pre
 // -----------------------------------------------------------------------
@@ -71,24 +103,20 @@
 }
 
 // -----------------------------------------------------------------------
-// Intent:
+// Intent: Iterate over a list of test suites and invoke.
 // -----------------------------------------------------------------------
-void execute_test(testTarget, workflow, testLogging, teardown, testSpecificHelmFlags='') {
+void execute_test\
+(
+    String  testTarget,                       // functional-single-kind-dt
+    String  workflow,                         // dt
+    String  testLogging,                      // 'True'
+    Boolean teardown,                         // true
+    String  testSpecificHelmFlags=''
+) {
     String infraNamespace  = 'default'
     String volthaNamespace = 'voltha'
     String logsDir = "$WORKSPACE/${testTarget}"
 
-    stage('IAM')
-    {
-        script
-        {
-            // Announce ourselves for log usability
-            String iam = getIam('execute_test')
-            println("${iam}: ENTER")
-            println("${iam}: LEAVE")
-        }
-    }
-
     // -----------------------------------------------------------------------
     // Intent: Cleanup stale port-forwarding
     // -----------------------------------------------------------------------
@@ -577,8 +605,7 @@
         steps {
 	    script {
 		// Announce ourselves for log usability
-		String iam = getIam('execute_test')
-		println("${iam}: ENTER")
+		enter('Parse and execute tests')
 
                 def tests = readYaml text: testTargets
                 println("** [DEBUG]: tests=$tests")
@@ -620,21 +647,21 @@
 ** -----------------------------------------------------------------------
 """)
 
-		    try {
-			println "Executing test ${target}: ENTER"
-			execute_test(target, workflow, testLogging, teardown, flags)
-		    }
-		    catch (Exception err) {
-			println("** ${iam}: EXCEPTION ${err}")
-		    }
-		    finally {
-			println "Executing test ${target}: LEAVE"
-		    }
+                   try {
+                       leave("execute_test (target=$target)")
+                       execute_test(target, workflow, testLogging, teardown, flags)
+                   }
+                   catch (Exception err) {
+                       println("** ${iam}: EXCEPTION ${err}")
+                   }
+                   finally {
+                       leave("execute_test (target=$target)")
+                   }
 
 		    } // for
 
 		    // Premature exit if this message is not logged
-                    println("${iam}: LEAVE (testing ran to completion)")
+ 		    leave('Parse and execute tests')
                 } // script
             } // steps
 	} // stage
