diff --git a/job/tf-ci-gateway/generate_report.sh b/job/tf-ci-gateway/generate_report.sh
index 4f9d8b7..0c3953d 100755
--- a/job/tf-ci-gateway/generate_report.sh
+++ b/job/tf-ci-gateway/generate_report.sh
@@ -62,6 +62,9 @@
 		--meta-data html:coverity.data \
 		|| true
 
-	source $CI_ROOT/script/gen_merge_report.sh "${WORKSPACE}/report.json" \
-		"${WORKSPACE}/report.html"
+    # Only call to merge reports if the test groups are for code coverage
+    if [[ $TEST_GROUPS == *"code-coverage"* ]]; then
+  	   source $CI_ROOT/script/gen_merge_report.sh "${WORKSPACE}/report.json" \
+  		   "${WORKSPACE}/report.html"
+    fi
 fi
diff --git a/script/gen_merge_report.sh b/script/gen_merge_report.sh
index 4cd4f67..630bf5f 100644
--- a/script/gen_merge_report.sh
+++ b/script/gen_merge_report.sh
@@ -33,6 +33,7 @@
 python3 - << EOF
 import json
 import os
+import re
 
 server = os.getenv("JENKINS_URL", "https://jenkins.oss.arm.com/")
 merge_json = {} # json object
@@ -48,6 +49,8 @@
         merge_number += 1
         base_url = "{}job/{}/{}/{}".format(
                         server, data['job'], build_number, "$ARTIFACT_PATH")
+        _group_test_config = re.match(f'^[0-9%]*(?:${TEST_GROUPS}%)?(.+?)\.test', test_files[index])
+        tf_configuration = _group_test_config.groups()[0] if _group_test_config else 'N/A'
         _files.append( {'id': build_number,
                         'config': {
                                     'type': 'http',
@@ -58,7 +61,8 @@
                                     'type': 'http',
                                     'origin': "{}/{}".format(
                                         base_url, "$INFO_PATH")
-                                }
+                                },
+                         'tf-configuration': tf_configuration
                         })
 merge_json = { 'files' : _files }
 with open("$MERGE_CONFIGURATION", 'w') as outfile:
@@ -78,14 +82,6 @@
 confs = ""
 with open("$REPORT_JSON") as json_file:
     data = json.load(json_file)
-test_files = data['test_files']
-test_results = data['test_results']
-for index, build_number in enumerate(test_results):
-  test_file = test_files[index]
-  test_configuration = test_file.rsplit('%', 1)
-  if len(test_configuration) > 1:
-    confs += '<a target="_blank" href="artifact/${jenkins_archive_folder}/${COVERAGE_FOLDER}/{}/index.html">{}</a>'.format(build_number,
-      test_configuration[1])
 
 with open(cov_html, "r") as f:
     html_content = f.read()
@@ -168,14 +164,8 @@
             </tbody>
         </table>
         <p>
-        <button onclick="window.open('artifact/${jenkins_archive_folder}/${COVERAGE_FOLDER}/index.html','_blank');">Total Coverage Report</button>
+        <button onclick="window.open('artifact/${jenkins_archive_folder}/${COVERAGE_FOLDER}/index.html','_blank');">Total Coverage Report (${#list_of_merged_builds[@]} out of ${number_of_files_to_merge})</button>
         </p>
-        <div class="dropdown">
-          <button class="dropbtn">Coverage Reports($number_of_files_to_merge)</button>
-          <div class="dropdown-content">
-          """ + confs + """
-          </div>
-        </div>
     </div>
 
 <script>
@@ -187,6 +177,54 @@
     f.write(s)
 EOF
 }
+
+generate_cols() {
+  echo "List of merged build ids:${list_of_merged_builds[@]}"
+python3 - << EOF
+merged_ids=[int(i) for i in "${list_of_merged_builds[@]}".split()]
+s = """
+
+  <script>
+  window.onload = function() {
+  """ + f"const mergedIds={merged_ids}" + """
+    document.querySelector('#tf-report-main table').querySelectorAll("tr").forEach((row,i) => {
+    const cell = document.createElement(i ? "td" : "th")
+    const button = document.createElement("button")
+    button.textContent = "Report"
+    if (i) {
+        merged = false
+        if (q = row.querySelector('td.success a.buildlink')) {
+          href = q.href
+          buildId = href.split("/").at(-2)
+          if (mergedIds.include(buildId)) {
+              cell.classList.add("success")
+              const url = href.replace('console', 'artifact/trace_report/index.html')
+              button.addEventListener('click', () => {
+                  window.open(url, "_blank")
+              })
+              cell.appendChild(button)
+              merged = true
+          }
+        }
+        if (!merged) {
+            cell.innerText = "N/A"
+            cell.classList.add("failure")
+        }
+    }
+    else {
+        cell.innerText = "Code Coverage"
+    }
+    row.appendChild(cell)
+    })
+  }
+  </script>
+"""
+with open("$1", "a") as f:
+    f.write(s)
+EOF
+}
+
+
 OUTDIR=""
 index=""
 case "$TEST_GROUPS" in
@@ -212,16 +250,18 @@
 mkdir -p $OUTDIR
 pushd $OUTDIR
     number_of_files_to_merge=$(create_merge_cfg)
-    echo "Merging $number_of_files_to_merge coverage files..."
+    echo "Merging from $number_of_files_to_merge code coverage reports..."
     # Only merge when more than 1 test result
     if [ "$number_of_files_to_merge" -lt 2 ] ; then
         echo "Only one file to merge."
         exit 0
     fi
 
-    bash ${WORKSPACE}/qa-tools/coverage-tool/coverage-reporting/merge.sh \
-        -j $MERGE_CONFIGURATION -l ${OUTDIR}/${COVERAGE_FOLDER} -w $WORKSPACE -c -g
+     source ${WORKSPACE}/qa-tools/coverage-tool/coverage-reporting/merge.sh \
+        -j $MERGE_CONFIGURATION -l ${OUTDIR}/${COVERAGE_FOLDER} -w $WORKSPACE -c
 
-    generate_header ${REPORT_HTML}
+    merged_status && generate_header ${REPORT_HTML}
+    generate_cols ${REPORT_HTML}
     cp ${REPORT_HTML} $OUTDIR
+
 popd
