diff --git a/scripts/send_qa_email.py b/scripts/send_qa_email.py
index e3de4b5..e02d47c 100755
--- a/scripts/send_qa_email.py
+++ b/scripts/send_qa_email.py
@@ -150,8 +150,9 @@ def send_qa_email():
 
     utils.filterrepojson(repos)
 
-    resulttool = os.path.dirname(args.repojson) + "/build/layers/openembedded-core/scripts/resulttool"
-    querytool = os.path.dirname(args.repojson) + "/build/layers/openembedded-core/scripts/yocto_testresults_query.py"
+    oecorerepodir = os.path.dirname(args.repojson) + "/build/layers/openembedded-core"
+    resulttool = oecorerepodir + "/scripts/resulttool"
+    querytool = oecorerepodir + "/scripts/yocto_testresults_query.py"
 
     buildtoolsdir = os.path.dirname(args.repojson) + "/build/buildtools"
     if os.path.exists(buildtoolsdir):
@@ -168,8 +169,7 @@ def send_qa_email():
     if 'oecore' in repos and os.path.exists(resulttool) and os.path.exists(querytool) and args.results_dir:
         utils.printheader("Processing test report")
         # Need the finalised revisions (not 'HEAD')
-        targetrepodir = "%s/oecore" % (repodir)
-        revision = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=targetrepodir).decode('utf-8').strip()
+        revision = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=oecorerepodir).decode('utf-8').strip()
         branch = repos['oecore']['branch']
         repo = repos['oecore']['url']
 
@@ -233,10 +233,10 @@ def send_qa_email():
 
             utils.printheader("Processing regression report")
             try:
-                regression_base, regression_target = get_regression_base_and_target(targetbranch, basebranch, args.release, targetrepodir, test_results_url, log)
+                regression_base, regression_target = get_regression_base_and_target(targetbranch, basebranch, args.release, oecorerepodir, test_results_url, log)
                 if regression_base and regression_target:
                     log.info(f"Generating regression report between {regression_base} and {regression_target}")
-                    generate_regression_report(querytool, targetrepodir, regression_base, regression_target, tempdir, args.results_dir, log)
+                    generate_regression_report(querytool, oecorerepodir, regression_base, regression_target, tempdir, args.results_dir, log)
                 else:
                     log.info("Can not guess regression base and/or target, skip regression report")
             except subprocess.CalledProcessError as e:
@@ -257,13 +257,22 @@ def send_qa_email():
 
     utils.printheader("Generating QA email")
 
+    layersdir = os.path.dirname(args.repojson) + "/build/layers/"
     buildhashes = ""
     for repo in sorted(repos.keys()):
         # gplv2 is no longer built/tested in master
         if repo == "meta-gplv2":
             continue
+        layerdir = layersdir + repo "/"
+        if repo == "oecore":
+            layerdir = layersdir + "openembedded-core/"
+        # Try to use bitbake-setup layers, fall back to repos/
+        if os.path.exists(layerdir):
+            targetrepodir = layerdir
+        else:
+            targetrepodir = "%s/%s" % (repodir, repo)
+
         # Need the finalised revisions (not 'HEAD')
-        targetrepodir = "%s/%s" % (repodir, repo)
         revision = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=targetrepodir).decode('utf-8').strip()
         buildhashes += "%s: %s\n" % (repo, revision)
 
