diff --git a/MooreOnlineConf/options/calo.py b/MooreOnlineConf/options/calo.py
index f6d3eec0c455f2a8639e89a763eaf6e04478516c..769ab49cf7b68f0b8c59c2fbcd5158b94fd9f490 100644
--- a/MooreOnlineConf/options/calo.py
+++ b/MooreOnlineConf/options/calo.py
@@ -9,8 +9,9 @@
 # or submit itself to any jurisdiction.                                       #
 #############################################################################
 from PyConf.application import default_raw_banks, default_raw_event
+from PyConf.control_flow import CompositeNode, NodeLogic
 from Moore import options, run_reconstruction
-from PyConf.Algorithms import CaloFutureRawToDigits
+from PyConf.Algorithms import CaloFutureRawToDigits, HltRoutingBitsFilter, OdinTypesFilter
 from RecoConf.calorimeter_reconstruction import make_digits, make_clusters, make_digits
 from RecoConf.reconstruction_objects import reconstruction
 from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_calo_only_reconstruction
@@ -40,23 +41,61 @@ def calo_moni():
         "ecalClusters": ecalClusters,
     }
 
-    data += monitor_calo_digits(
-        calo,
-        adcFilterEcal=-100,
-        adcFilterHcal=-100,
-        HistoMultiplicityMaxEcal=6000,
-        HistoMultiplicityMaxHCal=4000,
-        spectrum=False)
-    data += monitor_calo_clusters(calo, split_clusters=False)
-    data += monitor_calo_time_alignment(
+    rb_phys_filter = HltRoutingBitsFilter(
+        name="RBFilterPhys",
+        RawBanks=default_raw_banks('HltRoutingBits'),
+        RequireMask=(1 << 14, 0, 0),  # Physics events
+        PassOnError=False)
+
+    rb_calib_filter = HltRoutingBitsFilter(
+        name="RBFilterCalib",
+        RawBanks=default_raw_banks('HltRoutingBits'),
+        RequireMask=(1 << 10, 0, 0),  # Calibration events
+        PassOnError=False)
+
+    # digit monitor
+    digitMonitor = monitor_calo_digits(
+        calo, adcFilterEcal=-100, adcFilterHcal=-100, spectrum=False)
+
+    # cluster monitor
+    clusterMonitor = monitor_calo_clusters(calo, split_clusters=False)
+
+    # TAE monitor
+    TAEMonitor = monitor_calo_time_alignment(
+        calo, adcFilterEcal=-100, adcFilterHcal=-100)
+
+    # pedestal monitor
+    pedestalMonitor = monitor_calo_pedestal(
         calo, adcFilterEcal=-100, adcFilterHcal=-100)
-    data += monitor_calo_pedestal(calo, adcFilterEcal=-100, adcFilterHcal=-100)
-    data += monitor_calo_led(calo)
 
+    # pi0 monitoring
     with reconstruction.bind(from_file=False),\
         hlt2_reconstruction.bind(make_reconstruction=make_calo_only_reconstruction),\
         make_digits.bind(calo_raw_bank=True):
-        data += pi0_monitoring(name="calo_only_pi0_moni")
+        pi0Monitor = pi0_monitoring(name="calo_only_pi0_moni")
+
+    data += [
+        CompositeNode(
+            "Phys", [
+                rb_phys_filter, clusterMonitor[0], digitMonitor[0],
+                digitMonitor[1], TAEMonitor[0], TAEMonitor[1],
+                pedestalMonitor[0], pedestalMonitor[1], pi0Monitor[0],
+                pi0Monitor[1]
+            ],
+            combine_logic=NodeLogic.LAZY_AND,
+            force_order=True)
+    ]
+
+    # LED monitor
+    LEDMonitor = monitor_calo_led(calo)
+
+    data += [
+        CompositeNode(
+            "Calib", [rb_calib_filter, LEDMonitor[0], LEDMonitor[1]],
+            combine_logic=NodeLogic.LAZY_AND,
+            force_order=True)
+    ]
+
     return Reconstruction('calo_moni', data, reco_prefilters(gec=False))