diff --git a/Trigger/TrigValidation/TrigP1Test/python/TrigP1TestSteps.py b/Trigger/TrigValidation/TrigP1Test/python/TrigP1TestSteps.py
index d858ae6f6ac662050b13dc24b5e8a054bf3d78d5..73c798c8d3d4b25c23642c35c32dad44e4c78295 100644
--- a/Trigger/TrigValidation/TrigP1Test/python/TrigP1TestSteps.py
+++ b/Trigger/TrigValidation/TrigP1Test/python/TrigP1TestSteps.py
@@ -7,7 +7,7 @@ Definitions of additional validation steps in Trigger ART tests relevant only fo
 The main common check steps are defined in the TrigValSteering.CheckSteps module.
 '''
 
-from TrigValTools.TrigValSteering import Step
+from TrigValTools.TrigValSteering import Step, CheckSteps
 import os
 import inspect
 
@@ -83,3 +83,41 @@ class TrigBSDumpGrepStep(Step.Step):
         if self.auto_report_result:
             self.report_result()
         return self.result, cmd
+
+
+class ExtractExpertMonitoring(CheckSteps.InputDependentStep):
+    '''
+    Step which extracts the EXPERT directory from an online monitoring file
+    produced by OH server into an offline-like expert-monitoring.root
+    '''
+    def __init__(self, name='ExtractExpertMonitoring'):
+        super(ExtractExpertMonitoring, self).__init__(name)
+        self.input_file = None
+        self.path_prefix = None
+        self.executable = 'rootcp'
+        self.args = '--recreate -r'
+        self.output_stream = Step.Step.OutputStream.STDOUT_ONLY
+
+    def configure(self, test):
+        self.args += ' {:s}:{:s}/HLT-Histogramming/*/EXPERT/* expert-monitoring.root'.format(self.input_file, self.path_prefix or '')
+        super(ExtractExpertMonitoring, self).configure(test)
+
+
+def default_check_steps_OHMon(test, hist_path):
+    steps = []
+    # Extract expert-monitoring.root file from OH server output
+    extract_hist = ExtractExpertMonitoring()
+    hist_path_split = hist_path.split(':')
+    if len(hist_path_split) > 1:
+        extract_hist.input_file = hist_path_split[0]
+        extract_hist.path_prefix = hist_path_split[1]
+    else:
+        extract_hist.input_file = hist_path
+    steps.append(extract_hist)
+    # Default check steps
+    steps.extend(CheckSteps.default_check_steps(test))
+    # Remove histogram merging step
+    matches = [step for step in steps if step.name == 'HistMerge']
+    for hm_step in matches:
+        steps.remove(hm_step)
+    return steps
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_FullMenu_preload_build.py b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_FullMenu_preload_build.py
index f6014a0db48b4f7c621e529d324ec83ada000c16..a0cc1558adab413c642247a5c0579f440b72a03f 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_FullMenu_preload_build.py
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_FullMenu_preload_build.py
@@ -4,7 +4,8 @@
 # art-type: build
 # art-include: master/Athena
 
-from TrigValTools.TrigValSteering import Input, Test, Step, ExecStep, CheckSteps
+from TrigValTools.TrigValSteering import Input, Test, Step, ExecStep
+from TrigP1Test import TrigP1TestSteps
 
 # Input file
 f = Input.get_input('data').paths[0].encode('ascii', 'ignore')
@@ -45,11 +46,7 @@ ex.perfmon = False  # Cannot use PerfMon with -M
 test = Test.Test()
 test.art_type = 'build'
 test.exec_steps = [ex_rm, ex_bs, ex]
-test.check_steps = CheckSteps.default_check_steps(test)
-
-# Overwrite default histogram file name for checks
-for step in [test.get_step(name) for name in ['HistCount', 'RootComp', 'ChainDump']]:
-  step.input_file = 'r0000999999_athenaHLT_HLT-Histogramming.root'
+test.check_steps = TrigP1TestSteps.default_check_steps_OHMon(test, 'r0000999999_athenaHLT_HLT-Histogramming.root:run_999999/lb_-1')
 
 import sys
 sys.exit(test.run())
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_HelloWorld_OHMonitoring_build.py b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_HelloWorld_OHMonitoring_build.py
index e4cebd773522c7e24221489c4a056ed5723f9398..ae8a5a6cf96a4302e86a1a524d9a52f8d3f743dc 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_HelloWorld_OHMonitoring_build.py
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_HelloWorld_OHMonitoring_build.py
@@ -6,7 +6,8 @@
 # Skipping art-output which has no effect for build tests.
 # If you create a grid version, check art-output in existing grid tests.
 
-from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps
+from TrigValTools.TrigValSteering import Test, ExecStep
+from TrigP1Test import TrigP1TestSteps
 
 ex = ExecStep.ExecStep()
 ex.type = 'athenaHLT'
@@ -18,11 +19,7 @@ ex.perfmon = False # perfmon currently not fully supported with athenaHLT -M
 test = Test.Test()
 test.art_type = 'build'
 test.exec_steps = [ex]
-test.check_steps = CheckSteps.default_check_steps(test)
-
-# Overwrite default histogram file name for checks
-for step in [test.get_step(name) for name in ['HistCount', 'RootComp', 'ChainDump']]:
-  step.input_file = 'r0000327265_athenaHLT_HLT-Histogramming.root'
+test.check_steps = TrigP1TestSteps.default_check_steps_OHMon(test, 'r0000360026_athenaHLT_HLT-Histogramming.root:run_360026/lb_-1')
 
 import sys
 sys.exit(test.run())
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_HelloWorld_runStopRun_build.py b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_HelloWorld_runStopRun_build.py
index b967221b0b41c7e14b0d827322b6cffddc5d039f..c7c34da12032ed151bc1becf2c52ed36c1bf7b07 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_HelloWorld_runStopRun_build.py
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_HelloWorld_runStopRun_build.py
@@ -6,7 +6,8 @@
 # Skipping art-output which has no effect for build tests.
 # If you create a grid version, check art-output in existing grid tests.
 
-from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps
+from TrigValTools.TrigValSteering import Test, ExecStep
+from TrigP1Test import TrigP1TestSteps
 
 ex = ExecStep.ExecStep()
 ex.type = 'athenaHLT'
@@ -21,7 +22,7 @@ ex.job_options += ' < `find_data.py run-stop-run-saveHist.trans`'
 test = Test.Test()
 test.art_type = 'build'
 test.exec_steps = [ex]
-test.check_steps = CheckSteps.default_check_steps(test)
+test.check_steps = TrigP1TestSteps.default_check_steps_OHMon(test, 'run_2.root')
 
 # Extra merging pattern for logs produced with -ul option
 logmerge = test.get_step("LogMerge")
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_preload_build.py b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_preload_build.py
index 876e5d68ea5d9ddb5c20f7a693ca7eeda79f54f7..9e403f5a01c5b9500244a0fabc1f5412f97c8b20 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_preload_build.py
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_preload_build.py
@@ -4,7 +4,8 @@
 # art-type: build
 # art-include: master/Athena
 
-from TrigValTools.TrigValSteering import Input, Test, Step, ExecStep, CheckSteps
+from TrigValTools.TrigValSteering import Input, Test, Step, ExecStep
+from TrigP1Test import TrigP1TestSteps
 
 # Input file
 f = Input.get_input('data').paths[0].encode('ascii', 'ignore')
@@ -46,11 +47,7 @@ ex.perfmon = False  # Cannot use PerfMon with -M
 test = Test.Test()
 test.art_type = 'build'
 test.exec_steps = [ex_rm, ex_bs, ex]
-test.check_steps = CheckSteps.default_check_steps(test)
-
-# Overwrite default histogram file name for checks
-for step in [test.get_step(name) for name in ['HistCount', 'RootComp', 'ChainDump']]:
-  step.input_file = 'r0000999999_athenaHLT_HLT-Histogramming.root'
+test.check_steps = TrigP1TestSteps.default_check_steps_OHMon(test, 'r0000999999_athenaHLT_HLT-Histogramming.root:run_999999/lb_-1')
 
 import sys
 sys.exit(test.run())
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_runStopRun_build.py b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_runStopRun_build.py
index 3e76736bbefd419133f4d9c343f9fe94eb19b62f..d11a761fb94bab262ed93e14c62f10473b2599e9 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_runStopRun_build.py
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_runStopRun_build.py
@@ -6,7 +6,8 @@
 # Skipping art-output which has no effect for build tests.
 # If you create a grid version, check art-output in existing grid tests.
 
-from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps
+from TrigValTools.TrigValSteering import Test, ExecStep
+from TrigP1Test import TrigP1TestSteps
 
 ex = ExecStep.ExecStep()
 ex.type = 'athenaHLT'
@@ -21,7 +22,7 @@ ex.job_options += ' < `find_data.py run-stop-run-saveHist.trans`'
 test = Test.Test()
 test.art_type = 'build'
 test.exec_steps = [ex]
-test.check_steps = CheckSteps.default_check_steps(test)
+test.check_steps = TrigP1TestSteps.default_check_steps_OHMon(test, 'run_2.root')
 
 # Extra merging pattern for logs produced with -ul option
 logmerge = test.get_step("LogMerge")
diff --git a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/CheckSteps.py b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/CheckSteps.py
index d186e900c51590024e9ed84d56433258280bb08b..5cbcbd17794c85e7b3cb89f6a580d522120a98c8 100644
--- a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/CheckSteps.py
+++ b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/CheckSteps.py
@@ -12,6 +12,7 @@ import re
 import subprocess
 import json
 import six
+import glob
 
 from TrigValTools.TrigValSteering.Step import Step
 from TrigValTools.TrigValSteering.Common import art_input_eos, art_input_cvmfs
@@ -183,6 +184,12 @@ class RootMergeStep(Step):
             old_name = os.path.splitext(self.merged_file)
             new_name = old_name[0] + self.rename_suffix + old_name[1]
             self.executable = 'mv {} {}; {}'.format(self.merged_file, new_name, self.executable)
+        file_list = self.input_file.split()
+        for file_name in file_list:
+            if len(glob.glob(file_name)) < 1:
+                self.log.warning('%s: file %s requested to be merged but does not exist', self.name, file_name)
+                self.result = 1
+                return self.result, '# (internal) {} in={} out={} -> failed'.format(self.name, self.input_file, self.merged_file)
         return super(RootMergeStep, self).run(dry_run)