diff --git a/tools/openqa_trigger/report_job_results.py b/tools/openqa_trigger/report_job_results.py
--- a/tools/openqa_trigger/report_job_results.py
+++ b/tools/openqa_trigger/report_job_results.py
@@ -1,9 +1,11 @@
 import requests
 import argparse
-import os
+import sys
 import time
 import conf_test_suites
 
+from operator import attrgetter
+from wikitcms.wiki import Wiki, ResTuple
 
 API_ROOT = "http://localhost/api/v1"
 SLEEPTIME = 60
@@ -27,65 +29,57 @@
         if running_jobs:
            time.sleep(SLEEPTIME)
 
-    passed_testcases = {} # key = VERSION_BUILD_ARCH
+    passed_testcases = set()
     for job_id in job_ids:
         job = finished_jobs[job_id]
         if job['result'] =='passed':
-            key = (job['settings']['VERSION'], job['settings']['FLAVOR'], job['settings'].get('BUILD', None), job['settings']['ARCH'])
-            passed_testcases.setdefault(key, [])
-            passed_testcases[key].extend(conf_test_suites.TESTSUITES[job['settings']['TEST']])
-
-    for key, value in passed_testcases.iteritems():
-        passed_testcases[key] = sorted(list(set(value)))
-    return passed_testcases
-
-
-def get_relval_commands(passed_testcases):
-    relval_template = "relval report-auto"
-    commands = []
-    for key in passed_testcases:
-        cmd_ = relval_template
-        version, flavor, build, arch = key
-        cmd_ += ' --release "%s" --milestone "%s" --compose "%s"' % tuple(build.split('_'))
-
-        for tc_name in passed_testcases[key]:
-            testcase = conf_test_suites.TESTCASES[tc_name]
-            tc_env = arch if testcase['env'] == '$RUNARCH$' else testcase['env']
-            tc_type = testcase['type']
-            tc_section = testcase['section']
-            if 'name_cb' in testcase:
-                tc_name = testcase['name_cb'](flavor)
-
-            commands.append('%s --environment "%s" --testtype "%s" --section "%s" --testcase "%s" pass' % (cmd_, tc_env, tc_type,  tc_section, tc_name))
-
-    return commands
+            (release, milestone, compose) = job['settings']['BUILD'].split('_')
+            testsuite = job['settings']['TEST']
+            arch = job['settings']['ARCH']
+            flavor = job['settings']['FLAVOR']
+
+            for testcase in conf_test_suites.TESTSUITES[testsuite]:
+                testinst = conf_test_suites.TESTCASES[testcase]
+                testname = ''
+                if 'name_cb' in testinst:
+                    testname = testinst['name_cb'](flavor)
+                env = arch if testinst['env'] == '$RUNARCH$' else testinst['env']
+                result = ResTuple(
+                    testtype=testinst['type'], release=release, milestone=milestone, compose=compose,
+                    testcase=testcase, section=testinst['section'], testname=testname, env=env, status='pass')
+                passed_testcases.add(result)
+
+    return sorted(list(passed_testcases), key=attrgetter('testcase'))
+
+def report_passes(job_ids, printcases=False, report=True):
+    passed_testcases = get_passed_testcases(job_ids)
+    if printcases:
+        for restup in passed_testcases:
+            print(restup)
+
+    if report:
+        print "Reporting test passes:"
+        wiki = Wiki()
+        wiki.login()
+        if not wiki.logged_in:
+            sys.exit("Could not log in to wiki!")
+
+        # Submit the results
+        (insuffs, dupes) = wiki.report_validation_results(passed_testcases)
+        for dupe in dupes:
+            tmpl = "Already reported result for test {0}, env {1}! Will not report dupe."
+            print(tmpl.format(dupe.testcase, dupe.env))
 
+    else:
+        print "\n\n### No reporting is done! ###\n\n"
 
 def report_results(job_ids):
-    commands = get_relval_commands(get_passed_testcases(job_ids))
-    print "Running relval commands:"
-    for command in commands:
-        print command
-        os.system(command)
-
+    report_passes(job_ids)
 
 if __name__ == "__main__":
     parser = argparse.ArgumentParser(description="Evaluate per-testcase results from OpenQA job runs")
     parser.add_argument('jobs', type=int, nargs='+')
     parser.add_argument('--report', default=False, action='store_true')
 
     args = parser.parse_args()
-
-    passed_testcases = get_passed_testcases(args.jobs)
-    commands = get_relval_commands(passed_testcases)
-
-    import pprint
-    pprint.pprint(passed_testcases)
-    if not args.report:
-        print "\n\n### No reporting is done! ###\n\n"
-        pprint.pprint(commands)
-    else:
-        for command in commands:
-            print command
-            os.system(command)
-
+    report_passes(args.jobs, printcases=True, report=args.report)

