diff --git a/lava_helper/lava_submit_jobs.py b/lava_helper/lava_submit_jobs.py
index 2e0ab2f..3c91318 100755
--- a/lava_helper/lava_submit_jobs.py
+++ b/lava_helper/lava_submit_jobs.py
@@ -8,7 +8,7 @@
 
 __copyright__ = """
 /*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
+ * Copyright (c) 2020-2021, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -75,20 +75,25 @@
         sys.exit(1)
     return lava
 
-def list_files_from_dir(user_args):
+def list_files_from_dir(user_args, job_dir=""):
+    if job_dir == "":
+        job_dir = user_args.job_dir
     file_list = []
-    for filename in glob.iglob(user_args.job_dir + '**/*.yaml', recursive=True):
+    for filename in glob.iglob(job_dir + '**/*.yaml', recursive=True):
         file_list.append(filename)
         print("Found job {}".format(filename))
     return file_list
 
-def lava_dispatch(user_args):
+def lava_dispatch(user_args, job_dir=""):
     """ Submit a job to LAVA backend, block untill it is completed, and
     fetch the results files if successful. If not, calls sys exit with 1
     return code """
 
+    if job_dir == "":
+        job_dir = user_args.job_dir
+
     lava = test_lava_dispatch_credentials(user_args)
-    file_list = list_files_from_dir(user_args)
+    file_list = list_files_from_dir(user_args, job_dir)
     job_id_list = []
     for job_file in file_list:
         job_id, job_url = lava.submit_job(job_file)
@@ -100,10 +105,11 @@
             print("Job submitted at: " + job_url)
             job_id_list.append(job_id)
 
-    print("JOBS: {}".format(",".join(str(x) for x in job_id_list)))
+    return job_id_list
 
 def main(user_args):
-    lava_dispatch(user_args)
+    job_id_list = lava_dispatch(user_args)
+    print("JOBS: {}".format(",".join(str(x) for x in job_id_list)))
 
 
 def get_cmd_args():
diff --git a/lava_helper/lava_wait_jobs.py b/lava_helper/lava_wait_jobs.py
index 332e20c..a91fcfb 100755
--- a/lava_helper/lava_wait_jobs.py
+++ b/lava_helper/lava_wait_jobs.py
@@ -4,7 +4,7 @@
 
 __copyright__ = """
 /*
- * Copyright (c) 2020, Arm Limited. All rights reserved.
+ * Copyright (c) 2020-2021, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -60,6 +60,15 @@
     job_list = user_args.job_ids.split(",")
     job_list = [int(x) for x in job_list if x != '']
     lava = test_lava_dispatch_credentials(user_args)
+    finished_jobs = get_finished_jobs(job_list, user_args, lava)
+    print_lava_urls(finished_jobs, user_args)
+    job_links(finished_jobs, user_args)
+    boot_report(finished_jobs, user_args)
+    test_report(finished_jobs, user_args, lava)
+    failure_report(finished_jobs, user_args)
+    csv_report(finished_jobs)
+
+def get_finished_jobs(job_list, user_args, lava):
     finished_jobs = lava.block_wait_for_jobs(job_list, user_args.dispatch_timeout, 0.5)
     unfinished_jobs = [item for item in job_list if item not in finished_jobs]
     for job in unfinished_jobs:
@@ -70,12 +79,7 @@
             info['job_dir'] = os.path.join(user_args.artifacts_path, "{}_{}".format(str(job), info['description']))
             finished_jobs[job] = info
     finished_jobs = fetch_artifacts(finished_jobs, user_args, lava)
-    print_lava_urls(finished_jobs, user_args)
-    job_links(finished_jobs, user_args)
-    boot_report(finished_jobs, user_args)
-    test_report(finished_jobs, user_args, lava)
-    failure_report(finished_jobs, user_args)
-    csv_report(finished_jobs)
+    return finished_jobs
 
 def fetch_artifacts(jobs, user_args, lava):
     if not user_args.artifacts_path:
@@ -254,10 +258,10 @@
         "--job-ids", dest="job_ids", action="store", required=True, help="Comma separated list of job IDS"
     )
     cmdargs.add_argument(
-        "--lava-token", dest="token_secret", action="store", help="LAVA auth token"
+        "--lava-token", dest="lava_token", action="store", help="LAVA auth token"
     )
     cmdargs.add_argument(
-        "--lava-user", dest="token_usr", action="store", help="LAVA username"
+        "--lava-user", dest="lava_user", action="store", help="LAVA username"
     )
     cmdargs.add_argument(
         "--use-env", dest="token_from_env", action="store_true", default=False, help="Use LAVA auth info from environment"
