diff --git a/HLT/Event/TrigByteStreamCnvSvc/src/TrigByteStreamCnvSvc.cxx b/HLT/Event/TrigByteStreamCnvSvc/src/TrigByteStreamCnvSvc.cxx
index f400a2ba6f252fd78ccb2c79c82475e987fb1672..cc847ae24ba86fd734b2318f125e06bb1151c0df 100644
--- a/HLT/Event/TrigByteStreamCnvSvc/src/TrigByteStreamCnvSvc.cxx
+++ b/HLT/Event/TrigByteStreamCnvSvc/src/TrigByteStreamCnvSvc.cxx
@@ -53,7 +53,7 @@ namespace {
 // Standard constructor
 // =============================================================================
 TrigByteStreamCnvSvc::TrigByteStreamCnvSvc(const std::string& name, ISvcLocator* svcLoc)
-: ByteStreamCnvSvcBase(name, svcLoc),
+: ByteStreamCnvSvc(name, svcLoc),
   m_evtStore("StoreGateSvc", name),
   m_robDataProviderSvc("ROBDataProviderSvc", name) {}
 
@@ -67,6 +67,7 @@ TrigByteStreamCnvSvc::~TrigByteStreamCnvSvc() {}
 // =============================================================================
 StatusCode TrigByteStreamCnvSvc::initialize() {
   ATH_MSG_VERBOSE("start of " << __FUNCTION__);
+  ATH_CHECK(ByteStreamCnvSvc::initialize());
   ATH_CHECK(m_evtStore.retrieve());
   ATH_CHECK(m_robDataProviderSvc.retrieve());
   ATH_MSG_VERBOSE("end of " << __FUNCTION__);
@@ -83,6 +84,7 @@ StatusCode TrigByteStreamCnvSvc::finalize() {
   if (m_evtStore.release().isFailure())
     ATH_MSG_WARNING("Failed to release service " << m_evtStore.typeAndName());
   ATH_MSG_VERBOSE("end of " << __FUNCTION__);
+  ATH_CHECK(ByteStreamCnvSvc::finalize());
   return StatusCode::SUCCESS;
 }
 
@@ -134,7 +136,7 @@ StatusCode TrigByteStreamCnvSvc::connectOutput(const std::string& outputFile, co
 StatusCode TrigByteStreamCnvSvc::commitOutput(const std::string& /*outputFile*/, bool /*do_commit*/) {
   ATH_MSG_VERBOSE("start of " << __FUNCTION__);
 
-  printRawEvent();
+  if (msgLvl(MSG::DEBUG)) printRawEvent();
 
   // Serialise the output FullEventFragment
   std::unique_ptr<uint32_t[]> rawEventPtr;
diff --git a/HLT/Event/TrigByteStreamCnvSvc/src/TrigByteStreamCnvSvc.h b/HLT/Event/TrigByteStreamCnvSvc/src/TrigByteStreamCnvSvc.h
index 4190112031485c5b66b59e4859e02c8069e137d2..9ad63b849a947cb9cad4ae620f3e95ea4a6c9011 100644
--- a/HLT/Event/TrigByteStreamCnvSvc/src/TrigByteStreamCnvSvc.h
+++ b/HLT/Event/TrigByteStreamCnvSvc/src/TrigByteStreamCnvSvc.h
@@ -5,7 +5,7 @@
 #ifndef TRIGBYTESTREAMCNVSVC_H
 #define TRIGBYTESTREAMCNVSVC_H
 
-#include "ByteStreamCnvSvcBase/ByteStreamCnvSvcBase.h"
+#include "ByteStreamCnvSvc/ByteStreamCnvSvc.h"
 
 // Forward declarations
 class StoreGateSvc;
@@ -13,8 +13,14 @@ class IROBDataProviderSvc;
 
 /** @class TrigByteStreamCnvSvc
  *  @brief A ByteStreamCnvSvc implementation for online use
+ *
+ *  It overrides the connectOutput and commitOutput methods of the base class. In this implementation, they create
+ *  the specific online HLT output and send it out directly to the TDAQ infrastructure without using an output service.
+ *
+ *  It needs to inherit from ByteStreamCnvSvc rather than ByteStreamCnvSvcBase, because some elements of the athena
+ *  framework (particularly converters) rely on the properties or functionality of the offline ByteStreamCnvSvc.
  **/
-class TrigByteStreamCnvSvc : public ByteStreamCnvSvcBase {
+class TrigByteStreamCnvSvc : public ByteStreamCnvSvc {
 public:
   /// Standard constructor
   TrigByteStreamCnvSvc(const std::string& name, ISvcLocator* svcLoc);
diff --git a/HLT/Trigger/TrigControl/TrigServices/python/TriggerUnixStandardSetup.py b/HLT/Trigger/TrigControl/TrigServices/python/TriggerUnixStandardSetup.py
index b5a2bcd77b744533b9e3b36fc24865bc7a27dbf3..6b48f061cccec9f6f283ce12dee5049306be2e6b 100644
--- a/HLT/Trigger/TrigControl/TrigServices/python/TriggerUnixStandardSetup.py
+++ b/HLT/Trigger/TrigControl/TrigServices/python/TriggerUnixStandardSetup.py
@@ -84,28 +84,20 @@ def setupCommonServices():
     theApp.CreateSvc += [ svcMgr.DetDescrCnvSvc.getFullName() ]
     svcMgr.EventPersistencySvc.CnvServices += [ "DetDescrCnvSvc" ]
 
-    # ByteStreamCnvSvc configuration
-    from ByteStreamCnvSvc.ByteStreamCnvSvcConf import ByteStreamCnvSvc
-    svcMgr += ByteStreamCnvSvc("ByteStreamCnvSvc")
+    # Online services for ByteStream input/output
+    from TrigByteStreamCnvSvc.TrigByteStreamCnvSvcConf import TrigByteStreamCnvSvc, TrigByteStreamInputSvc, TrigEventSelectorByteStream
+    svcMgr += TrigByteStreamCnvSvc("ByteStreamCnvSvc") # this name is hard-coded in some converters
     svcMgr.EventPersistencySvc.CnvServices += [ "ByteStreamCnvSvc" ]
-
-    from TrigByteStreamCnvSvc.TrigByteStreamCnvSvcConf import TrigByteStreamInputSvc
     svcMgr += TrigByteStreamInputSvc("ByteStreamInputSvc")
-
-    from TrigByteStreamCnvSvc.TrigByteStreamCnvSvcConf import TrigEventSelectorByteStream
-    svcMgr += TrigEventSelectorByteStream("EventSelector",
-                                          ByteStreamInputSvc = svcMgr.ByteStreamInputSvc)
+    svcMgr += TrigEventSelectorByteStream("EventSelector", ByteStreamInputSvc = svcMgr.ByteStreamInputSvc)
     theApp.EvtSel = "EventSelector"
 
-    from TrigByteStreamCnvSvc.TrigByteStreamCnvSvcConf import TrigByteStreamCnvSvc
-    svcMgr += TrigByteStreamCnvSvc("TrigByteStreamCnvSvc")
-
     # make the HltEventLoopMgr service available
     svcMgr.HltEventLoopMgr = theApp.service( "HltEventLoopMgr" )     # already instantiated
     svcMgr.HltEventLoopMgr.WhiteboardSvc = "EventDataSvc"
     svcMgr.HltEventLoopMgr.SchedulerSvc = AlgScheduler.getScheduler().getName()
     svcMgr.HltEventLoopMgr.EvtSel = svcMgr.EventSelector
-    svcMgr.HltEventLoopMgr.OutputCnvSvc = svcMgr.TrigByteStreamCnvSvc
+    svcMgr.HltEventLoopMgr.OutputCnvSvc = svcMgr.ByteStreamCnvSvc
 
     from TrigOutputHandling.TrigOutputHandlingConfig import HLTResultMTMakerCfg
     svcMgr.HltEventLoopMgr.ResultMaker = HLTResultMTMakerCfg()
diff --git a/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx b/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx
index 151519a2af06a2d9f3493b60185dec22aafed59a..e4b4f0f51c55f2f13512386cbd8a0032604142ac 100644
--- a/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx
+++ b/Trigger/TrigSteer/TrigHLTResultByteStream/src/HLTResultMTByteStreamCnv.cxx
@@ -27,7 +27,7 @@
 HLT::HLTResultMTByteStreamCnv::HLTResultMTByteStreamCnv(ISvcLocator* svcLoc) :
   Converter(ByteStream_StorageType, classID(), svcLoc),
   AthMessaging(msgSvc(), "HLTResultMTByteStreamCnv"),
-  m_ByteStreamEventAccess("TrigByteStreamCnvSvc", "HLTResultMTByteStreamCnv") {
+  m_ByteStreamEventAccess("ByteStreamCnvSvc", "HLTResultMTByteStreamCnv") {
     m_fullEventAssembler.idMap().setDetId(eformat::TDAQ_HLT);
   }
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
index a20e9cc7cbbb6b10b213bb82a5cb78f6afe8fce4..833f7afac3a9b567121c85fc9e3740d8009362e9 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egamma.withViews.py
@@ -398,9 +398,30 @@ l = [ c.split("#")[0].split("_")[0] + "#" + deserialiser.Prefix + c.split("#")[1
 
 
 
+
+
+
+if not hasattr( svcMgr, "ByteStreamAddressProviderSvc" ):
+   from ByteStreamCnvSvcBase.ByteStreamCnvSvcBaseConf import ByteStreamAddressProviderSvc 
+   svcMgr += ByteStreamAddressProviderSvc()
+svcMgr.ByteStreamAddressProviderSvc.TypeNames = ["ROIB::RoIBResult/RoIBResult", ]
+
+from ByteStreamCnvSvc import WriteByteStream
+streamBS = WriteByteStream.getStream("EventStorage","StreamBSFileOutput")
+ServiceMgr.ByteStreamCnvSvc.OutputLevel = VERBOSE
+ServiceMgr.ByteStreamCnvSvc.IsSimulation = True
+ServiceMgr.ByteStreamCnvSvc.InitCnvs += ["HLT::HLTResultMT"]
+streamBS.ItemList += ["HLT::HLTResultMT#HLTResultMT"]
+
+svcMgr.EventPersistencySvc.CnvServices += [ "ByteStreamCnvSvc" ]
+svcMgr.ByteStreamEventStorageOutputSvc.OutputLevel = VERBOSE
+
+
+
+
 ################################################################################
 # assemble top list of algorithms
-hltTop = seqOR( "hltTop", [ steps,  summary,  summMaker, mon, hltResultMakerAlg, deserialiser, StreamESD ] )
+hltTop = seqOR( "hltTop", [ steps,  summary,  summMaker, mon, hltResultMakerAlg, deserialiser, StreamESD, streamBS ] )
 
 
 
@@ -445,5 +466,8 @@ dumpSequence(topSequence)
 print("Dump of serviceMgr")
 dumpSequence(ServiceMgr)
 
+
+
+
 #print theElectronFex
 #print ViewVerify
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/test/test_egamma_run_data.sh b/Trigger/TrigValidation/TrigUpgradeTest/test/test_egamma_run_data.sh
index 44ab78d69adf369e7cc597e99885443cb947c9e6..66a8ac9d77caff25d2fe6eb294d0904b58a5c6c3 100755
--- a/Trigger/TrigValidation/TrigUpgradeTest/test/test_egamma_run_data.sh
+++ b/Trigger/TrigValidation/TrigUpgradeTest/test/test_egamma_run_data.sh
@@ -2,6 +2,9 @@
 # art-type: build
 # art-include: master/Athena
 
-athena --threads=1 --skipEvents=10 --evtMax=20 --filesInput="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1" TrigUpgradeTest/egamma.withViews.py &&
+# clear BS from previous runs
+rm -rf  data_test.*.data
+
+athena --dump-configuration=cfg.txt  --threads=1 --skipEvents=10 --evtMax=20 --filesInput="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1" TrigUpgradeTest/egamma.withViews.py #&&
 checkxAOD.py myESD.pool.root &&
 athena TrigUpgradeTest/checkESD.py