diff --git a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/CscPrepDataRetriever.cxx b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/CscPrepDataRetriever.cxx
index 92d12ad8d84a06596f09f95ea19eaf3c407f9a35..ee2283274c7ee25375216ee373f620beed81baa3 100644
--- a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/CscPrepDataRetriever.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/CscPrepDataRetriever.cxx
@@ -38,7 +38,11 @@ namespace JiveXML {
     ATH_MSG_VERBOSE("Retrieving " << dataTypeName()); 
 
     SG::ReadHandle<Muon::CscPrepDataContainer> cscContainer(m_sgKey);
-
+    
+    if (!cscContainer.isValid()) {
+      ATH_MSG_WARNING("Unable to retrieve: " << m_sgKey);
+      return(StatusCode::SUCCESS);
+    }
 
     int ndata = 0;
     Muon::CscPrepDataContainer::const_iterator containerIt;
diff --git a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/MMPrepDataRetriever.cxx b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/MMPrepDataRetriever.cxx
index 859ba5b11557aa2e82ef2e2ed38efdc029b7fcb4..42cded98c1942397b5bb3d6e49bb39f7c820a10b 100644
--- a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/MMPrepDataRetriever.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/MMPrepDataRetriever.cxx
@@ -46,6 +46,11 @@ namespace JiveXML {
 
     SG::ReadHandle<Muon::MMPrepDataContainer> mmContainer(m_sgKey);
 
+    if (!mmContainer.isValid()) {
+      ATH_MSG_WARNING("Unable to retrieve: " << m_sgKey);
+      return(StatusCode::SUCCESS);
+    }
+
     int ndata = 0;
     for (const auto mmCollection : *mmContainer){
        ndata += mmCollection->size();
diff --git a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/MdtPrepDataRetriever.cxx b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/MdtPrepDataRetriever.cxx
index 767d3e6fb9daf48f79e38e44e2e13ce9c22d6b87..f9f1fade1240e53d0cab0fb8c38657483e479a60 100644
--- a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/MdtPrepDataRetriever.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/MdtPrepDataRetriever.cxx
@@ -40,7 +40,10 @@ namespace JiveXML {
     ATH_MSG_VERBOSE("Retrieving " << dataTypeName()); 
 
     SG::ReadHandle<Muon::MdtPrepDataContainer> mdtContainer(m_sgKey);
-
+    if (!mdtContainer.isValid()) {
+      ATH_MSG_WARNING("Unable to retrieve: " << m_sgKey);
+      return(StatusCode::SUCCESS);
+    }
 
     int ndata = 0;
     Muon::MdtPrepDataContainer::const_iterator containerIt;
diff --git a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/RpcPrepDataRetriever.cxx b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/RpcPrepDataRetriever.cxx
index 0d6247a68199dbf4144dcd4879f1c98b648a2c8a..e07dc10a5ecad8a54e5c96a6946b827f725639ef 100644
--- a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/RpcPrepDataRetriever.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/RpcPrepDataRetriever.cxx
@@ -40,6 +40,11 @@ namespace JiveXML {
 
     SG::ReadHandle<Muon::RpcPrepDataContainer> rpcContainer(m_sgKey);
 
+    if (!rpcContainer.isValid()) {
+      ATH_MSG_WARNING("Unable to retrieve: " << m_sgKey);
+      return(StatusCode::SUCCESS);
+    }
+
     int ndata = 0;
     Muon::RpcPrepDataContainer::const_iterator containerIt;
     for (containerIt=rpcContainer->begin(); containerIt!=rpcContainer->end(); ++containerIt) {
diff --git a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TgcPrepDataRetriever.cxx b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TgcPrepDataRetriever.cxx
index eeba935c39fa9647f64f01304550418ea0dee695..ed3cb6279c87456dfb5495f55ebbba74ecf29fef 100644
--- a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TgcPrepDataRetriever.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TgcPrepDataRetriever.cxx
@@ -38,6 +38,11 @@ namespace JiveXML {
 
     SG::ReadHandle<Muon::TgcPrepDataContainer> tgcContainer(m_sgKey);
 
+    if (!tgcContainer.isValid()) {
+      ATH_MSG_WARNING("Unable to retrieve: " << m_sgKey);
+      return(StatusCode::SUCCESS);
+    }
+
     int ndata = 0;
     Muon::TgcPrepDataContainer::const_iterator containerIt;
     for (containerIt=tgcContainer->begin(); containerIt!=tgcContainer->end(); ++containerIt) {
diff --git a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TrigMuonROIRetriever.cxx b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TrigMuonROIRetriever.cxx
index 75038032d627d8e5fc5042fec448ecc375e47637..798d0bff9870a435cc776deeb89f34ae86257735 100644
--- a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TrigMuonROIRetriever.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TrigMuonROIRetriever.cxx
@@ -28,7 +28,11 @@ namespace JiveXML {
     if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Retrieving " << dataTypeName() << endmsg; 
 
     SG::ReadHandle<LVL1_ROI> roi(m_sgKey);
-
+    
+    if (!roi.isValid()) {
+      ATH_MSG_WARNING("Unable to retrieve: " << m_sgKey);
+      return(StatusCode::SUCCESS);
+    }
     int nRoIs = roi->getMuonROIs().size();
 
     DataVect phi; phi.reserve(nRoIs);
diff --git a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TrigRpcDataRetriever.cxx b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TrigRpcDataRetriever.cxx
index 0d13e22735b7c7717cf1354476f59169666e81a1..2afc916114c8519811c9997d1db2199fca16e16f 100644
--- a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TrigRpcDataRetriever.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/TrigRpcDataRetriever.cxx
@@ -42,6 +42,11 @@ namespace JiveXML {
     // retrieve the collection of RDO
     SG::ReadHandle<RpcPadContainer> rdoContainer(m_sgKey);
 
+    if (!rdoContainer.isValid()) {
+      ATH_MSG_WARNING("Unable to retrieve: " << m_sgKey);
+      return(StatusCode::SUCCESS);
+    }
+
     int ndata=0;
     for (auto containerIt=rdoContainer->begin(); containerIt!=rdoContainer->end(); ++containerIt) {
       ndata += (*containerIt)->size();
diff --git a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/sTgcPrepDataRetriever.cxx b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/sTgcPrepDataRetriever.cxx
index 6aae6cca1dace1c566b54737423587357b6c0c93..89a2efe02d8ea329c84047d70b8e62c53245aeaa 100644
--- a/MuonSpectrometer/MuonCnv/MuonJiveXML/src/sTgcPrepDataRetriever.cxx
+++ b/MuonSpectrometer/MuonCnv/MuonJiveXML/src/sTgcPrepDataRetriever.cxx
@@ -45,6 +45,11 @@ namespace JiveXML {
 
     SG::ReadHandle<Muon::sTgcPrepDataContainer> stgcContainer(m_sgKey);
 
+    if (!stgcContainer.isValid()) {
+      ATH_MSG_WARNING("Unable to retrieve: " << m_sgKey);
+      return(StatusCode::SUCCESS);
+    }
+
     int ndata = 0;
     for (const auto stgcCollection : *stgcContainer){
        ndata += stgcCollection->size();
diff --git a/graphics/EventDisplaysOnline/python/EventDisplaysOnlineConfig.py b/graphics/EventDisplaysOnline/python/EventDisplaysOnlineConfig.py
index 15cc256fddebf8c1c84aa44f586eccd998d05f81..5ed58d8746ce0f5afb911261c5f8158988114fd2 100644
--- a/graphics/EventDisplaysOnline/python/EventDisplaysOnlineConfig.py
+++ b/graphics/EventDisplaysOnline/python/EventDisplaysOnlineConfig.py
@@ -3,67 +3,43 @@
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from EventDisplaysOnline.EventDisplaysOnlineHelpers import GetRunType, GetBFields, WaitForPartition
-from AthenaConfiguration.Enums import BeamType
+from AthenaCommon.Constants import INFO, DEBUG, ERROR, WARNING
 
-isCosmicData = False
 isHIMode = False #TODO
-isBeamSplashMode = False
-isOfflineTest = False
-testWithoutPartition = False
-HorizontalMuons_quickReco = False
-
-# An explicit list for nominal data taking to exclude some high rate streams
-# Empty list to read all
-streamsWanted = ['express','ZeroBias','CosmicCalo','IDCosmic','CosmicMuons','Background','Standby','L1Calo','Main']
-if isBeamSplashMode:
-    streamsWanted = ['MinBias'] #if trigger fails it will go to debug_HltError
-
-# If testing at p1, write out to /tmp/ to see output
-outputDirectory="/atlas/EventDisplayEvents/"
-#outputDirectory="/tmp/myexley"
-if isOfflineTest:
-    outputDirectory="."
-
-sendToPublicStream = False # Gets set later, overwrite here to True to test it
+#TODO isBeamSplashMode = False
+isOfflineTest = True
+testWithoutPartition = True
 
 ##----------------------------------------------------------------------##
 ## When the ATLAS partition is not running you can use two test         ##
 ## partitions that serve events from a raw data file.                   ##
 ## To see which files will be ran over on the test partitions, at       ##
 ## point 1, see the uncommented lines in:                               ##
-## /det/dqm/GlobalMonitoring/GMTestPartition_oks/tdaq-11-02-01/         ##
+## /det/dqm/GlobalMonitoring/GMTestPartition_oks/tdaq-10-00-00/         ##
 ## without_gatherer/GMTestPartitionT9.data.xml                          ##
 ## and in:                                                              ##
-## /det/dqm/GlobalMonitoring/GMTestPartition_oks/tdaq-11-02-01/         ##
+## /det/dqm/GlobalMonitoring/GMTestPartition_oks/tdaq-10-00-00/         ##
 ## without_gatherer/GMTestPartition.data.xml                            ##
 ##----------------------------------------------------------------------##
-partitionName = 'ATLAS' # 'ATLAS', 'GMTestPartition' or 'GMTestPartitionT9'
+partitionName = 'GMTestPartition' # ''ATLAS', 'GMTestPartitionT9' or 'GMTestPartition' 
+
+# Pause this thread until the partition is up
+if not testWithoutPartition or not isOfflineTest:
+    WaitForPartition(partitionName)
+
+# outputDirectory="/atlas/EventDisplayEvents/"
+outputDirectory="/afs/cern.ch/user/m/myexley/WorkSpace/testCA/run/output/"
 
 if isHIMode:
-    maxEvents=200 # Number of events to keep per stream in /atlas/EventDisplays/stream
-    projectTags=['data24_hi']
-    projectName='data24_hi'
-    publicStreams=['MinBias']
-if isCosmicData:
     maxEvents=200
-    projectTags=['data24_cos']
-    projectName='data24_cos'
-    publicStreams=['IDCosmics']
-if isBeamSplashMode:
-    maxEvents=-1
-    projectTags=['data24_13p6TeV']
-    projectName='data24_13p6TeV'
-    publicStreams=['']
+    projectTags=['data23_hi']
+    projectName='data23_hi'
+    publicStreams=['physics_MinBias']
 else:
     maxEvents=100
-    projectTags=['data24_13p6TeV']
-    projectName='data24_13p6TeV'
-    publicStreams=['Main']
-
-
-# Pause this thread until the partition is up
-if not testWithoutPartition or not isOfflineTest:
-    WaitForPartition(partitionName)
+    projectTags=['data23_13p6TeV']
+    projectName='data23_13p6TeV'
+    publicStreams=['physics_Main']
 
 # Setup unique output files (so that multiple Athena jobs on the same machine don't interfere)
 import os
@@ -83,88 +59,56 @@ flags = initConfigFlags()
 if not isOfflineTest:
     from AthenaConfiguration.AutoConfigOnlineRecoFlags import autoConfigOnlineRecoFlags
     autoConfigOnlineRecoFlags(flags, partitionName)
+flags.Concurrency.NumThreads = 1
 
 # Conditions tag
-flags.IOVDb.DatabaseInstance = "CONDBR2"
 if isOfflineTest:
-    flags.IOVDb.GlobalTag = 'CONDBR2-BLKPA-2023-02'
+    flags.IOVDb.GlobalTag = 'CONDBR2-BLKPA-2023-01'
 else:
     flags.IOVDb.GlobalTag = 'CONDBR2-HLTP-2023-01' # Online conditions tag
+
 flags.GeoModel.Layout="atlas"
 flags.GeoModel.AtlasVersion = 'ATLAS-R3S-2021-03-02-00' # Geometry tag
 
 if isHIMode:
-    flags.Beam.BunchSpacing = 100 # ns
+    flags.Beam.BunchSpacing = 100 # ns    
 else:
     flags.Beam.BunchSpacing = 25 # ns
 flags.Trigger.triggerConfig='DB'
 
-# Test wth a small amount of events and write out to e.g. a tmp dir
+# Test wth a small amount of events and write out to tmp dir
 if testWithoutPartition or partitionName != 'ATLAS' or isOfflineTest:
-    flags.Exec.MaxEvents = 5
+    flags.Exec.MaxEvents = 3
     flags.Output.ESDFileName = outputDirectory + "ESD-%s-%s.pool.root" % (jobId[3], jobId[4])
 else:
-    flags.Exec.MaxEvents = 20000 # hack until we find a way to fix the memory fragmentation ATEAM-896, this resets the memory after 20k events
+    flags.Exec.MaxEvents = -1
     flags.Output.ESDFileName = "ESD-%s-%s.pool.root" % (jobId[3], jobId[4])
 
 flags.Output.doWriteESD = True
-#flags.Output.doJiveXML = True # We call the AlgoJive later on
+#flags.Output.doJiveXML = True
 
-if testWithoutPartition:
-    flags.Input.Files = ['/detwork/dqm/EventDisplays_test_data/data23_13p6TeV.00454188.physics_Main.daq.RAW._lb0633._SFO-12._0002.data']
-if isOfflineTest:
-    flags.Input.Files = ['/eos/home-m/myexley/sharedWithATLASauthors/data23_13p6TeV.00454188.physics_Main.daq.RAW._lb0633._SFO-12._0002.data']
+if testWithoutPartition or isOfflineTest:
+    #flags.Input.Files = ['/detwork/dqm/EventDisplays_test_data/data23_13p6TeV.00454188.physics_Main.daq.RAW._lb0633._SFO-12._0002.data']
+    flags.Input.Files = ['/afs/cern.ch/work/m/myexley/ED-files/nominal/data23_13p6TeV.00454188.physics_Main.daq.RAW._lb0633._SFO-12._0002.data']
 else:
     flags.Input.Files = [] # Files are read from the ATLAS (or GM test) partition
 
-flags.Reco.EnableTrigger = False # TODO test True
-flags.Detector.GeometryForward = False
-flags.Detector.EnableFwdRegion = False
-if isOfflineTest:
-    flags.LAr.doHVCorr = True
-else:
-    flags.LAr.doHVCorr = False # ATLASRECTS-6823
-
-if isBeamSplashMode or HorizontalMuons_quickReco:
-    flags.Reco.EnableJet=False;
-    flags.Reco.EnableMet=False;
-    flags.Reco.EnableTau=False;
-    flags.Reco.EnablePFlow=False;
-    flags.Reco.EnableBTagging=False;
-    flags.Reco.EnableEgamma=False;
-    flags.Reco.EnableCombinedMuon=False;
-
-from AthenaCommon.Constants import INFO
+flags.Reco.EnableTrigger = False
+flags.LAr.doHVCorr = False # ATLASRECTS-6823
 flags.Exec.OutputLevel = INFO
-flags.Concurrency.NumThreads = 0
 
 if isOfflineTest:
     flags.Common.isOnline = False
-else:
-    flags.Common.isOnline = True
 
 if partitionName == 'ATLAS' and not testWithoutPartition and not isOfflineTest:
     # Read run number from the partition
     # For beam plashes when LAr running in 32 samples mode, the current run number to LAr config is needed
     # IS stands for Information Service
-    from ispy import ISObject, IPCPartition, ISInfoAny, ISInfoDictionary
-    part = IPCPartition(partitionName)
-    RunParams = ISObject(part, 'RunParams.RunParams', 'RunParams')
+    from ispy import ISObject, IPCPartition
+    RunParams = ISObject(IPCPartition(partitionName), 'RunParams.RunParams', 'RunParams')
     RunParams.checkout()
-    run_number = RunParams.getAttributeValue('run_number')
-    flags.Input.OverrideRunNumber = True
-    flags.Input.RunNumbers = [run_number]
-
-    # Is the data allowed to be seen by the general public on atlas live
-    ready4physics = ISInfoAny()
-    ISInfoDictionary(part).getValue('RunParams.Ready4Physics', ready4physics)
-    print("Ready for physics: %s " % ready4physics.get())
-    physicsReady = ISObject(part, 'RunParams.Ready4Physics','Ready4PhysicsInfo')
-    physicsReady.checkout()
-    print("Ready for physics: %r" % (physicsReady.ready4physics))
-    if physicsReady.ready4physics and RunParams.T0_project_tag in projectTags:
-        sendToPublicStream = True
-
+    flags.Input.RunNumber = RunParams.run_number
+    
     # Get the B field
     (solenoidOn,toroidOn)=GetBFields()
     flags.BField.override = True
@@ -173,27 +117,33 @@ if partitionName == 'ATLAS' and not testWithoutPartition and not isOfflineTest:
     flags.BField.endcapToroidOn = toroidOn
 
 # GM test partition needs to be given the below info
-if (partitionName == 'GMTestPartition' or partitionName == 'GMTestPartitionT9'):
-    flags.Input.OverrideRunNumber = True
-    flags.Input.RunNumbers = [449604] # keep this number the same as (or close to) the run number of the file you are testing on
-    flags.Input.LumiBlockNumbers = [1]
+if (partitionName == 'GMTestPartition' or partitionName == 'GMTestPartitionT9') or testWithoutPartition:# or isOfflineTest:
+    flags.Input.RunNumber = [412343]
+    flags.Input.LumiBlockNumber = [1]
     flags.Input.ProjectName = projectName
 
 if not testWithoutPartition:
-    if isCosmicData:
-        flags.Beam.Type = BeamType.Cosmics
-    else:
-        flags.Beam.Type = BeamType.Collisions
+    RunType = GetRunType()
+    flags.Beam.Type = RunType # "singlebeam", "collisions" or "cosmics"
+
 flags.lock()
 flags.dump()
 ##----------------------------------------------------------------------##
-
 from RecJobTransforms.RecoSteering import RecoSteering
 acc = RecoSteering(flags)
 
 from IOVDbSvc.IOVDbSvcConfig import addOverride
-if not isOfflineTest:
-    acc.merge(addOverride(flags, "/TRT/Onl/Calib/PID_NN", "TRTCalibPID_NN_v2", db=""))
+acc.merge(addOverride(flags, "/TRT/Onl/Calib/PID_NN", "TRTCalibPID_NN_v2"))
+acc.merge(addOverride(flags,"/TRT/Calib/PID_NN", "TRTCalibPID_NN_v1"))
+
+if isHIMode:
+    maxEvents=200
+    projectTags=['data23_hi']
+    publicStreams=['physics_MinBias']
+else:
+    maxEvents=100
+    projectTags=['data23_13p6TeV']
+    publicStreams=['physics_Main']
 
 if not testWithoutPartition:
     bytestreamConversion = CompFactory.ByteStreamCnvSvc()
@@ -207,91 +157,68 @@ if not testWithoutPartition:
     bytestreamInput.GroupName = "EventDisplaysOnline"
     bytestreamInput.PublishName = "EventDisplays"
     bytestreamInput.Key = "dcm"
-    bytestreamInput.KeyCount = 3
-    bytestreamInput.Timeout = 600000
+    bytestreamInput.KeyCount = 3 # equal or greater than the number of DCMs for beam splashes
+    bytestreamInput.Timeout = 600000 # 144000000 (40 hrs) for beam splashes
     bytestreamInput.UpdatePeriod = 200
     bytestreamInput.BufferSize = 10 # three times of keycount for beam splashes
     bytestreamInput.ISServer = '' # Disable histogramming
-    bytestreamInput.StreamNames = streamsWanted
-    #bytestreamInput.StreamType = "physics" #comment out for all streams, e.g. if you also want claibration streams
+    # Empty stream name list to read all streams
+    # 'MinBias' for beam splashes
+    # An explicit list for nominal data taking to exclude some high rate streams
+    bytestreamInput.StreamNames = ['ZeroBias:CosmicCalo:IDCosmic:CosmicMuons:Background:Standby:L1Calo:Main']
+    bytestreamInput.StreamType = "physics"
     bytestreamInput.StreamLogic = "Or"
 
-    if isBeamSplashMode:
-        bytestreamInput.KeyCount = 62 # equal or greater than the number of DCMs for beam splashes
-        bytestreamInput.BufferSize = 186 # three times of keycount for beam splashes
-        bytestreamInput.Timeout = 144000000 #(40 hrs) for beam splashes
-        bytestreamInput.StreamType = "physics" #if trigger fails it will go to debug_HltError
-
     if partitionName != 'ATLAS':
         bytestreamInput.KeyValue = [ 'Test_emon_push' ]
         bytestreamInput.KeyCount = 1
 
-if isBeamSplashMode or HorizontalMuons_quickReco:
-    # switch of the NSW segment making as it takes too much CPU in beamsplashes
-    acc.getEventAlgo("MuonSegmentMaker").doStgcSegments=False;
-    acc.getEventAlgo("MuonSegmentMaker").doMMSegments=False;
-    acc.getEventAlgo("MuonSegmentMaker_NCB").doStgcSegments=False;
-    acc.getEventAlgo("MuonSegmentMaker_NCB").doMMSegments=False;
-    acc.dropEventAlgo("QuadNSW_MuonSegmentCnvAlg");
-
-onlineEventDisplaysSvc = CompFactory.OnlineEventDisplaysSvc(
-    name = "OnlineEventDisplaysSvc",
-    MaxEvents = maxEvents,                   # Number of events to keep per stream
-    OutputDirectory = outputDirectory,       # Base directory for streams
-    SendToPublicStream = sendToPublicStream, # Allowed to be made public
-    PublicStreams = publicStreams,           # These streams go into public stream when Ready4Physics
-    StreamsWanted = streamsWanted,
-    BeamSplash = isBeamSplashMode,
-)
-acc.addService(onlineEventDisplaysSvc, create=True)
-
-def StreamToFileToolCfg(flags, name='StreamToFileTool',**kwargs):
+def StreamToFileToolCfg(flags, name="StreamToFileTool",**kwargs):
     result = ComponentAccumulator()
-    kwargs.setdefault("OnlineEventDisplaysSvc", acc.getService("OnlineEventDisplaysSvc"))
-    kwargs.setdefault("IsOnline", True)
-    the_tool = CompFactory.JiveXML.StreamToFileTool(**kwargs)
-    result.setPrivateTools(the_tool)
+    # if testing and you need to see the output change below to e.g. /tmp/username
+    OutputDirectory = outputDirectory
+    prefixFileName = "%s/.Unknown/JiveXML" % outputDirectory
+    #set the StreamName as prefix
+    kwargs.setdefault("FileNamePrefix", prefixFileName)
+    the_tool = CompFactory.JiveXML.StreamToFileTool(name,**kwargs)
+    result.addPublicTool(the_tool)
     return result
-streamToFileTool = acc.popToolsAndMerge(StreamToFileToolCfg(flags))
+acc.merge(StreamToFileToolCfg(flags))
 
-streamToServerTool = None
 if not isOfflineTest:
     def StreamToServerToolCfg(flags, name="StreamToServerTool",**kwargs):
         result = ComponentAccumulator()
-        kwargs.setdefault("OnlineEventDisplaysSvc", acc.getService("OnlineEventDisplaysSvc"))
         serverService = CompFactory.JiveXML.ExternalONCRPCServerSvc(name="ExternalONCRPCServerSvc", Hostname = "pc-tdq-mon-29")
         result.addService(serverService)
         kwargs.setdefault("ServerService",serverService)
-        kwargs.setdefault("StreamName",".Unknown")
+        kwargs.setdefault("StreamName","Unknown")
         the_tool = CompFactory.JiveXML.StreamToServerTool(name,**kwargs)
-        result.setPrivateTools(the_tool)
+        result.addPublicTool(the_tool)
         return result
-    streamToServerTool = acc.popToolsAndMerge(StreamToServerToolCfg(flags))
+    acc.merge(StreamToServerToolCfg(flags))
 
 from JiveXML.JiveXMLConfig import AlgoJiveXMLCfg
-acc.merge(AlgoJiveXMLCfg(flags,StreamToFileTool=streamToFileTool,StreamToServerTool=streamToServerTool,OnlineMode= not isOfflineTest))
+acc.merge(AlgoJiveXMLCfg(flags))
 
-if isBeamSplashMode:
-    acc.getPublicTool("CaloLArRetriever").LArlCellThreshold=500.;
-    acc.getPublicTool("CaloHECRetriever").HEClCellThreshold=500.;
+from EventDisplaysOnline.OnlineEventDisplaysSvc import OnlineEventDisplaysSvc
+acc.addService(OnlineEventDisplaysSvc(
+    name = "OnlineEventDisplaysSvc",
+    OutputLevel = DEBUG,               # Verbosity
+    MaxEvents = maxEvents,             # Number of events to keep per stream
+    OutputDirectory = outputDirectory, # Base directory for streams
+    ProjectTags = projectTags,         # Project tags that are allowed to be made public
+    Public = publicStreams,            # These streams go into public stream when Ready4Physics
 
-# This creates an ESD file per event which is renamed and moved to the desired output
-# dir in the VP1 Event Prod alg
-from AthenaServices.OutputStreamSequencerSvcConfig import OutputStreamSequencerSvcCfg
-acc.merge(OutputStreamSequencerSvcCfg(flags,incidentName="EndEvent"))
+), create=True)
 
 StreamESD = acc.getEventAlgo("OutputStreamESD")
-vp1Alg = CompFactory.VP1EventProd(name="VP1EventProd",
-                                  InputPoolFile = StreamESD.OutputFile,
-                                  IsOnline = True,
-                                  MaxNumberOfFiles = -1,
-                                  OnlineEventDisplaysSvc = onlineEventDisplaysSvc)
-acc.addEventAlgo(vp1Alg, primary=True)
+vp1Alg = CompFactory.VP1EventProd(name="VP1EventProd", InputPoolFile = StreamESD.OutputFile)
+acc.addEventAlgo(vp1Alg)
 
 acc.getService("PoolSvc").WriteCatalog = "xmlcatalog_file:PoolFileCatalog_%s_%s.xml" % (jobId[3], jobId[4])
 
 ##----------------------------------------------------------------------##
-## Need line below to fix error that occurs when trying to              ##
+## Neeed line below to fix error that occurs when trying to             ##
 ## get CaloRec::ToolConstants/H1WeightsCone4Topo DataObject             ##
 ##----------------------------------------------------------------------##
 acc.getService("PoolSvc").ReadCatalog += ["xmlcatalog_file:/det/dqm/GlobalMonitoring/PoolFileCatalog_M7/PoolFileCatalog.xml"]
diff --git a/graphics/EventDisplaysOnline/python/OnlineEventDisplaysSvc.py b/graphics/EventDisplaysOnline/python/OnlineEventDisplaysSvc.py
new file mode 100644
index 0000000000000000000000000000000000000000..fa1cccd010385913707bbbf1d940cf699c8023fe
--- /dev/null
+++ b/graphics/EventDisplaysOnline/python/OnlineEventDisplaysSvc.py
@@ -0,0 +1,215 @@
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+
+__doc__ = """This service runs in the online Athena event display threads. It
+manages the distribution of incoming events to the right event display streams.
+In order to do that it connects to the different Atlantis and VP1 event output
+algorithms/tools and manipulates their job options during the run.
+"""
+__version__ = "0.1"
+__author__  = "Eric Jansen <eric.jansen@cern.ch>"
+
+import os, grp, stat, random
+from ipc import IPCPartition
+from ispy import ISInfoDictionary, ISInfoAny, ISObject
+from AthenaPython import PyAthena
+from AthenaPython.PyAthena import StatusCode
+from PyAnalysisCore import PyEventTools
+from EventDisplaysOnline import EventUtils
+
+class OnlineEventDisplaysSvc( PyAthena.Svc ):
+
+        def __init__(self, name = 'OnlineEventDisplaysSvc', **kw):
+                kw['name'] = name
+                self.output = kw.get('OutputDirectory')
+                self.maxevents = kw.get('MaxEvents')
+                self.public = kw.get('Public')
+                self.projecttags = kw.get('ProjectTags')
+
+                self.zpgid = None
+                self.partition = None
+
+                self.StreamToFileTool = None
+                self.StreamToServerTool = None
+                self.VP1EventProducer = None
+
+                self.run = 0
+                self.event = 0
+                self.stream = ''
+                self.directory = ''
+
+                super(OnlineEventDisplaysSvc,self).__init__(**kw)
+
+        def initialize(self):
+                incidentSvc = PyAthena.py_svc('IncidentSvc', iface='IIncidentSvc')
+                incidentSvc.addListener(self, 'BeginEvent')
+                incidentSvc.addListener(self, 'StoreCleared')
+
+                self.partition = IPCPartition('ATLAS')
+                self.dict = ISInfoDictionary(self.partition)
+                self.zpgid = grp.getgrnam("zp").gr_gid
+                return StatusCode.Success
+
+        def finalize(self):
+                return StatusCode.Success
+
+        def getJobOptions(self):
+                self.StreamToFileTool = PyAthena.py_tool('JiveXML::StreamToFileTool', iface='IProperty')
+                self.StreamToServerTool = PyAthena.py_tool('JiveXML::StreamToServerTool', iface='IProperty')
+
+                # Some casting magic is needed to access algorithm properties
+                from GaudiPython.Bindings import gbl, InterfaceCast
+                vp1alg = PyAthena.py_alg('VP1EventProd')
+                self.VP1EventProducer = InterfaceCast(gbl.IProperty).cast(vp1alg)
+
+                self.msg.info("StreamToFileTool: %s", self.StreamToFileTool)
+                self.msg.info("StreamToServerTool: %s", self.StreamToServerTool)
+                self.msg.info("VP1EventProducer: %s", self.VP1EventProducer)
+
+        def beginEvent(self):
+                if not (self.StreamToFileTool and self.StreamToServerTool and self.VP1EventProducer):
+                        self.getJobOptions()
+
+                try:
+                        eventInfo = PyEventTools.getEventInfo('EventInfo')
+                except LookupError as err:
+                        self.msg.error("Could not retrieve EventInfo: %s", err)
+                        return StatusCode.Recoverable
+
+                try:
+                        # Read event info
+                        self.run = eventInfo.runNumber()
+                        self.event = eventInfo.eventNumber()
+
+                        # Retrieve trigger info
+                        streamTags = eventInfo.streamTags()
+                except Exception as err:
+                        self.msg.error("Exception occured while reading event/trigger info: %s", err)
+                        return StatusCode.Recoverable
+
+                # Retrieve the physics stream names from the trigger info
+                streams = []
+                for tag in streamTags:
+                        
+                        ## Added 08/03/15 - sjiggins - Wanted to see if events had physics stream tag or was from random trigger
+                        if tag.name():
+                                self.msg.debug("Event %d/%d has the corresponding streamTags: %s", self.run, self.event, tag.type())
+                        ##################################################################################
+                        if tag.type() == 'express' and tag.name():
+                                streams += [tag.type()+'_'+tag.name()]
+
+                        if tag.type() == 'physics' and tag.name():
+                                streams += [tag.type()+'_'+tag.name()]
+
+                # Add special streams to the list Public
+                """
+                try:
+                        for stream in streams:
+                                if stream in self.public:
+                                        ready4physics = ISInfoAny()
+                                        self.dict.getValue('RunParams.Ready4Physics', ready4physics)
+                                        print("Ready for physics: %s " % ready4physics.get())
+                                        runparams = ISObject(self.partition, 'RunParams.RunParams','RunParams')
+                                        runparams.checkout()
+                                        physicsReady = ISObject(self.partition, 'RunParams.Ready4Physics','Ready4PhysicsInfo')
+                                        physicsReady.checkout()
+                                        print("Ready for physics: %r" % (physicsReady.ready4physics))
+                                        #if ready4physics.get() and physicsReady.ready4physics and runparams.T0_project_tag in self.projecttags:
+                                        if physicsReady.ready4physics and runparams.T0_project_tag in self.projecttags:
+                                                streams += ['Public']
+                                        else:
+                                                self.msg.debug("RunParams.Ready4Physics is not set, run number is not set, or T0_project_tag is not set to any of %s", ", ".join(self.projecttags))
+                                                break
+                except Exception as err:
+                        self.msg.error("Exception occured while reading RunParams.Ready4Physics: %s", err)
+                """
+                # Randomize list of streams
+                random.shuffle(streams)
+                self.msg.debug("Event %d/%d has event display stream tags: %s", self.run, self.event, ", ".join(streams))
+
+                ## for beam splash, give priority to MinBias
+                #if 'physics_MinBias' in streams:
+                #       streams = ['physics_MinBias']
+                #       self.msg.debug("Modified stream tag: %s", ", ".join(streams))
+
+                # Start from the beginning and send the event to the first stream that passes our directory checks
+                self.directory = ''
+                for self.stream in streams:
+                        self.directory = "%s/%s" % (self.output, self.stream)
+                        if os.access(self.directory, os.F_OK):
+                                if os.path.isdir(self.directory) and os.access(self.directory, os.W_OK):
+                                        self.msg.debug("Going to write file to existing directory: %s", self.directory)
+                                        if os.stat(self.directory).st_gid != self.zpgid:
+                                                self.msg.debug("Setting group to 'zp' for directory: %s", self.directory)
+                                                os.chown(self.directory, -1, self.zpgid)
+                                        break
+                                else:
+                                        self.msg.warning("Directory \'%s\' is not usable, trying next alternative", self.directory)
+                                        self.directory = ''
+                        else:
+                                try:
+                                        os.mkdir(self.directory)
+                                        os.chmod(self.directory, stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH | stat.S_IXOTH)
+                                        os.chown(self.directory, -1, self.zpgid)
+                                        self.msg.info("Created output directory \'%s\' for stream \'%s\'", self.directory, self.stream)
+                                        break
+                                except OSError as err:
+                                        self.msg.warning("Failed to create output directory \'%s\' for stream \'%s\': %s", (self.directory, self.stream, err.strerror))
+                                        self.directory = ''
+
+                # Check if a suitable directory was found
+                if self.directory:
+                        self.msg.debug("Event %d/%d will be streamed to: %s", self.run, self.event, self.stream)
+                        self.msg.debug("Directory: %s", self.directory)
+                else:
+                        # This event is hopelessly lost, send StatusCode.Recoverable in an attempt to abort.
+                        # But if Athena chooses to ignore that, set the output to the "Unknown" trashcan stream.
+                        self.stream = 'Unknown'
+                        self.directory = "%s/.Unknown" % self.output
+                try:
+                        # Set output stream for JiveXML event streaming (file and server)
+                        self.StreamToServerTool.getProperty('StreamName').setValue("%s" % self.stream)
+                        self.StreamToFileTool.getProperty('FileNamePrefix').setValue("%s/JiveXML" % self.directory)
+                        self.msg.debug("Directory in try: %s", self.directory)
+                except Exception as err:
+                        self.msg.error("Exception occured while setting job options: %s", err)
+                        return StatusCode.Failure
+
+                if not self.directory:
+                        return StatusCode.Recoverable
+
+        def endEvent(self):
+                # VP1 copied its ESD file of the previous event to the destination directory.
+                # So we set the directory of the current event in endEvent to pass it to the next event.
+                if self.VP1EventProducer:
+                        self.VP1EventProducer.getProperty('DestinationDirectory').setValue(self.directory)
+
+                # Prune events and make index file for atlas-live.cern.ch
+                if self.directory:
+                        # If VP1 event producer is missing, skip the pair check to make cleanup/sync work
+                        if self.VP1EventProducer:
+                                EventUtils.cleanDirectory(self.msg, self.directory, self.maxevents, checkpair=True)
+                        else:
+                                EventUtils.cleanDirectory(self.msg, self.directory, self.maxevents, checkpair=False)
+
+                        ## for beam splashes, disable prepareFilesForTransfer() in EventUtils.py
+                        ## Activate these lines to zip and transfer every JiveXML file.
+                        #event = "%05d" % int(self.event)
+                        #EventUtils.zipXMLFile(self.msg, self.directory, f'JiveXML_{self.run}_{event}.xml')
+
+                # And cleanup the variables
+                self.run = 0
+                self.event = 0
+                self.stream = ''
+                self.directory = ''
+
+        def handle(self, incident):
+                self.msg.verbose("Received incident %s from %s" % (incident.type(), incident.source()))
+
+                # Event and trigger info present, decide stream
+                if incident.type() == 'BeginEvent' and incident.source() == 'BeginIncFiringAlg':
+                        self.beginEvent()
+
+                # VP1 writes its file at EndEvent, so we can do cleanup at StoreCleared
+                if incident.type() == 'StoreCleared' and incident.source() == 'StoreGateSvc':
+                        self.endEvent()
+
diff --git a/graphics/JiveXML/JiveXML/AlgoJiveXML.h b/graphics/JiveXML/JiveXML/AlgoJiveXML.h
index 9416c0f6becfa98966a9dcc075ba671fc71b11dd..de5b07159a10c1505a4339aa1ff60534e5f0269a 100755
--- a/graphics/JiveXML/JiveXML/AlgoJiveXML.h
+++ b/graphics/JiveXML/JiveXML/AlgoJiveXML.h
@@ -42,32 +42,42 @@ namespace JiveXML {
       StatusCode finalize();
     private:
 
+      StatusCode chooseStream(const std::vector< xAOD::EventInfo::StreamTag >);
+
+      //Configurable properties
+      Gaudi::Property<bool> m_wantPublicStreams {this, "WantPublicStreams", false, "If running online, is the Public stream wanted."};
+      Gaudi::Property<bool> m_wantCalibrationStreams {this, "WantCalibrationStreams", false, "If running online, are the calibration streams wanted."};
+      Gaudi::Property<bool> m_wantMonitoringStreams {this, "WantMonitoringStreams", false, "If running online, are the monitoring streams wanted."};
+      Gaudi::Property<bool> m_wantPhysicsStreams {this, "WantPhysicsStreams", true, "If running online, are the physics streams wanted."};
+
       Gaudi::Property<std::string> m_AtlasRelease {this, "AtlasRelease", "unknown", "The Athena release number"};
       Gaudi::Property<std::vector<std::string>> m_dataTypes {this, "DataTypes", {}, "List of data retriever names to be run"}; 
       Gaudi::Property<bool> m_writeToFile {this, "WriteToFile", true, "Whether XML files shall be produced"};
       Gaudi::Property<bool> m_onlineMode {this, "OnlineMode", false, "Whether an XMLRPC server shall be started"};
       Gaudi::Property<bool> m_writeGeometry {this, "WriteGeometry", false, "Whether Geometry-XML files shall be produced"};
       Gaudi::Property<std::string> m_geometryVersionIn {this, "GeometryVersion", "default", "Geometry version as read from Athena"};
-    Gaudi::Property<std::vector<std::string>> m_GeoWriterNames {this, "GeoWriterNames", {"JiveXML::GeometryWriter/GeometryWriter","JiveXML::MuonGeometryWriter/MuonGeometryWriter"}, "The names of the geometry-writer tools"};
-    /**
-     * The list of DataRetrievers. This is initialised using the list of names
-     * supplied by the jobOptions. DataRetrievers are AlgTools residing in the
-     * corresponding sub-detector packages (e.g. TrackRetriever in InDetJiveXML).
-     **/
-    ToolHandleArray<JiveXML::IDataRetriever> m_DataRetrievers; 
+      Gaudi::Property<std::vector<std::string>> m_GeoWriterNames {this, "GeoWriterNames", {"JiveXML::GeometryWriter/GeometryWriter","JiveXML::MuonGeometryWriter/MuonGeometryWriter"}, "The names of the geometry-writer tools"};
+
+    protected:
 
-    /** 
-     * Handle to the formatting tool, which is passed on to
-     * the data retrievers and converts the data into XML
-     **/
-    ToolHandle<JiveXML::IFormatTool> m_FormatTool {this, "FormatTool", "JiveXML::XMLFormatTool/XMLFormatTool", "Format tool"};
+      /** 
+       * The list of DataRetrievers. This is initialised using the list of names
+       * supplied by the jobOptions. DataRetrievers are AlgTools residing in the
+       * corresponding sub-detector packages (e.g. TrackRetriever in InDetJiveXML).
+       **/
+      ToolHandleArray<JiveXML::IDataRetriever> m_DataRetrievers;
+      
+      /** 
+       * Handle to the formatting tool, which is passed on to
+       * the data retrievers and converts the data into XML
+       **/
+      ToolHandle<JiveXML::IFormatTool> m_FormatTool;
 
-    /**
-     * Streaming tools that pass the formatted XML text
-     * into a file, to a server, etc.
-     **/
-    ToolHandle<JiveXML::IStreamTool> m_StreamToFileTool {this, "StreamToFileTool", "JiveXML::StreamToFileTool", "Stream to file tool"};
-    ToolHandle<JiveXML::IStreamTool> m_StreamToServerTool {this, "StreamToServerTool", "JiveXML::StreamToServerTool", "Stream to server tool"};
+      /**
+       * List of streaming tools that pass the formatted XML text
+       * into a file, to a server, etc.
+       **/
+      ToolHandleArray<JiveXML::IStreamTool> m_StreamTools;
 
   };
 
diff --git a/graphics/JiveXML/JiveXML/StreamToFileTool.h b/graphics/JiveXML/JiveXML/StreamToFileTool.h
index a4ed1c52ed4c38f3f4ff72deb2da278274cbe85c..0c197307c3f7f7e86fc2ccb04f95e99527cbb654 100644
--- a/graphics/JiveXML/JiveXML/StreamToFileTool.h
+++ b/graphics/JiveXML/JiveXML/StreamToFileTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef JIVEXML__STREAMTOFILETOOL_H
@@ -8,8 +8,6 @@
 //IAlgTool interface
 #include "JiveXML/IStreamTool.h"
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/ServiceHandle.h"
-#include "EventDisplaysOnline/IOnlineEventDisplaysSvc.h"
 
 namespace JiveXML {
   
@@ -19,7 +17,7 @@ namespace JiveXML {
    *
    * @author Sebastian Boeser
    */
-  class StreamToFileTool : virtual public IStreamTool, public AthAlgTool {
+  class StreamToFileTool : virtual public IStreamTool, public AthAlgTool{
 
     public:
       
@@ -37,24 +35,21 @@ namespace JiveXML {
 
     private:
 
-    ServiceHandle<IOnlineEventDisplaysSvc> m_onlineEDsvc{this, "OnlineEventDisplaysSvc", "Online Event Displays Service"};
-
-    Gaudi::Property<bool> m_isOnline {this, "IsOnline", false, "If running at point 1"};
-
-    /** Prefix put in front of JiveXML file name */
-    std::string m_FileNamePrefix;
+      Gaudi::Property<std::string> m_mytest {this, "MyTest", "", "My test"};
+      /** Prefix put in front of file name */
+      std::string m_FileNamePrefix;
       
-    /** Suffix put at the end of the file name (including type)*/
-    std::string m_FileNameSuffix;
+      /** Suffix put at the end of the file name (including type)*/
+      std::string m_FileNameSuffix;
       
-    /** Generate a file name */
-    std::string MakeFileName( const unsigned long EventNumber, const unsigned int RunNumber ) const;
+      /** Generate a file name */
+      std::string MakeFileName( const unsigned long EventNumber, const unsigned int RunNumber ) const;
       
-    /** Creates a new output stream to write XML to */
-    StatusCode NewFile( const unsigned long EventNumber, const unsigned  int RunNumber, std::ofstream *& outFile ) const ;
+      /** Creates a new output stream to write XML to */
+      StatusCode NewFile( const unsigned long EventNumber, const unsigned  int RunNumber, std::ofstream *& outFile ) const ;
 
-    /** Closes output stream */
-    StatusCode CloseFile( std::ofstream *& outFile ) const ;
+      /** Closes output stream */
+      StatusCode CloseFile( std::ofstream *& outFile ) const ;
       
   };
 
diff --git a/graphics/JiveXML/python/JiveXMLConfig.py b/graphics/JiveXML/python/JiveXMLConfig.py
index c5f3d10afd136e128a7fd23942666f9434acf814..c1421b4051a5e4453fe2c88018ef157e1a57c949 100644
--- a/graphics/JiveXML/python/JiveXMLConfig.py
+++ b/graphics/JiveXML/python/JiveXMLConfig.py
@@ -4,7 +4,6 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from AthenaConfiguration.Enums import Format
 
-
 def getATLASVersion():
     import os
 
@@ -19,21 +18,20 @@ def getDataTypes(flags, haveRDO=False, readAOD=False):
     data_types = []  # These need to match the tools added later
     if flags.Detector.EnableID:
         # General ID types
-        if flags.Detector.GeometryPixel and flags.Detector.GeometrySCT:
-            data_types += ["JiveXML::SiSpacePointRetriever/SiSpacePointRetriever"]
-            data_types += ["JiveXML::SiClusterRetriever/SiClusterRetriever"]
+        data_types += ["JiveXML::SiSpacePointRetriever/SiSpacePointRetriever"]
+        data_types += ["JiveXML::SiClusterRetriever/SiClusterRetriever"]
         data_types += ["JiveXML::VertexRetriever/VertexRetriever"]
         # These options will retrieve any available collection of segments/tracks from storegate
         data_types += ["JiveXML::SegmentRetriever/SegmentRetriever"]
         data_types += ["JiveXML::TrackRetriever/TrackRetriever"]
 
-    if flags.Detector.EnablePixel and flags.Detector.GeometryPixel:
+    if flags.Detector.EnablePixel:
         data_types += ["JiveXML::PixelClusterRetriever/PixelClusterRetriever"]
         if haveRDO:
             data_types += ["JiveXML::PixelRDORetriever/PixelRDORetriever"]
-    if flags.Detector.EnableTRT and flags.Detector.GeometryTRT:
+    if flags.Detector.EnableTRT:
         data_types += ["JiveXML::TRTRetriever/TRTRetriever"]
-    if haveRDO and flags.Detector.EnableSCT and flags.Detector.GeometrySCT:
+    if haveRDO and flags.Detector.EnableSCT:
         data_types += ["JiveXML::SCTRDORetriever/SCTRDORetriever"]
 
     # TODO this datatype is not yet understood by Atlantis
@@ -44,36 +42,34 @@ def getDataTypes(flags, haveRDO=False, readAOD=False):
         data_types += ["JiveXML::TruthTrackRetriever/TruthTrackRetriever"]
     data_types += ["JiveXML::TruthMuonTrackRetriever/TruthMuonTrackRetriever"]
 
-    if flags.Detector.EnableCalo and flags.Detector.GeometryCalo:
+    if flags.Detector.EnableCalo:
         # Taken from CaloJiveXML_DataTypes.py
         # TODO find correct flag and check the LArDigitRetriever is doing what we want it to do
         #if doLArDigits:
-            #data_types += ["JiveXML::LArDigitRetriever/LArDigitRetriever"]
+       # data_types += ["JiveXML::LArDigitRetriever/LArDigitRetriever"]
         #else:
-        if flags.Detector.EnableLAr and flags.Detector.GeometryLAr:        
-            data_types += ["JiveXML::CaloFCalRetriever/CaloFCalRetriever"]
-            data_types += ["JiveXML::CaloHECRetriever/CaloHECRetriever"]
-            data_types += ["JiveXML::CaloLArRetriever/CaloLArRetriever"]
+        data_types += ["JiveXML::CaloFCalRetriever/CaloFCalRetriever"]
+        data_types += ["JiveXML::CaloLArRetriever/CaloLArRetriever"]
+        data_types += ["JiveXML::CaloHECRetriever/CaloHECRetriever"]
         #end of else
-        if flags.Detector.EnableMBTS and flags.Detector.GeometryMBTS:
-            data_types += ["JiveXML::CaloMBTSRetriever/CaloMBTSRetriever"]
-        if flags.Detector.EnableTile and flags.Detector.GeometryTile:
-            data_types += ["JiveXML::CaloTileRetriever/CaloTileRetriever"]
+        data_types += ["JiveXML::CaloMBTSRetriever/CaloMBTSRetriever"]
+        data_types += ["JiveXML::CaloTileRetriever/CaloTileRetriever"]
         data_types += ["JiveXML::CaloClusterRetriever/CaloClusterRetriever"]
 
-    if flags.Detector.EnableMuon and flags.Detector.GeometryMuon:
+    if flags.Detector.EnableMuon:
         # Taken from MuonJiveXML_DataTypes.py
-        if flags.Detector.EnableMDT and flags.Detector.GeometryMDT:
+        if flags.Detector.EnableMDT:
             data_types += ["JiveXML::MdtPrepDataRetriever/MdtPrepDataRetriever"]
-        if flags.Detector.EnableTGC and flags.Detector.GeometryTGC:
+        if flags.Detector.EnableTGC:
             data_types += ["JiveXML::TgcPrepDataRetriever/TgcPrepDataRetriever"]
-            data_types += ["JiveXML::sTgcPrepDataRetriever/sTgcPrepDataRetriever"]
-        if flags.Detector.EnableRPC and flags.Detector.GeometryRPC:
+        if flags.Detector.EnableRPC:
             data_types += ["JiveXML::RpcPrepDataRetriever/RpcPrepDataRetriever"]
-        if flags.Detector.EnableCSC and flags.Detector.GeometryCSC:
+        if flags.Detector.EnableCSC:
             data_types += ["JiveXML::CSCClusterRetriever/CSCClusterRetriever"]
             data_types += ["JiveXML::CscPrepDataRetriever/CscPrepDataRetriever"]
-        if flags.Detector.EnableMM and flags.Detector.GeometryMM:
+        if flags.Detector.EnablesTGC:
+            data_types += ["JiveXML::sTgcPrepDataRetriever/sTgcPrepDataRetriever"]
+        if flags.Detector.EnableMM:
             data_types += ["JiveXML::MMPrepDataRetriever/MMPrepDataRetriever"]
         # TODO Not sure if below are still needed?
         # data_types += ["JiveXML::TrigMuonROIRetriever/TrigMuonROIRetriever"]
@@ -107,16 +103,15 @@ def InDetRetrieversCfg(flags):
     result = ComponentAccumulator()
     # Do we need to add equivalent of InDetFlags.doSlimming=False (in JiveXML_RecEx_config.py)? If so, why?
     # Following is based on InDetJiveXML_DataTypes.py and TrkJiveXML_DataTypes.py
-    if flags.Detector.EnablePixel and flags.Detector.GeometryPixel:
+    if flags.Detector.EnablePixel:
         result.merge(PixelClusterRetrieverCfg(flags))
 
-    if flags.Detector.EnableID and flags.Detector.GeometryID:
-        if flags.Detector.GeometryPixel and flags.Detector.GeometrySCT:
-            result.merge(SiClusterRetrieverCfg(flags))
-            result.merge(SiSpacePointRetrieverCfg(flags))
+    if flags.Detector.EnableID:
+        result.merge(SiClusterRetrieverCfg(flags))
+        result.merge(SiSpacePointRetrieverCfg(flags))
         result.merge(TrackRetrieverCfg(flags))
 
-    if flags.Detector.EnableTRT and flags.Detector.GeometryTRT:
+    if flags.Detector.EnableTRT:
         result.merge(TRTRetrieverCfg(flags))
 
     result.merge(BeamSpotRetrieverCfg(flags))
@@ -182,6 +177,11 @@ def TrackRetrieverCfg(flags, name="TrackRetriever", **kwargs):
     # kwargs.setdefault("DoWriteHLT", True)
     ### switch residual data off:
     kwargs.setdefault("DoWriteResiduals", False)
+    if flags.Common.isOnline:    
+        doHitsDetails = False
+    else:
+        doHitsDetails = True
+    kwargs.setdefault("DoHitsDetails", doHitsDetails)
     the_tool = CompFactory.JiveXML.TrackRetriever(name, **kwargs)
     result.addPublicTool(the_tool)
     return result
@@ -213,128 +213,95 @@ def CaloRetrieversCfg(flags, **kwargs):
     from LArRecUtils.LArADC2MeVCondAlgConfig import LArADC2MeVCondAlgCfg
     result.merge(LArADC2MeVCondAlgCfg (flags))
 
-    from AthenaConfiguration.Enums import Format
-    if flags.Input.Format is Format.BS:
-        tileDigitsContainer = "TileDigitsCnt"
-
-        if flags.Tile.doOpt2:
-            tileRawChannelContainer = 'TileRawChannelOpt2'
-        elif flags.Tile.doOptATLAS:
-            tileRawChannelContainer = 'TileRawChannelFixed'
-        elif flags.Tile.doFitCOOL:
-            tileRawChannelContainer = 'TileRawChannelFitCool'
-        elif flags.Tile.doFit:
-            tileRawChannelContainer = 'TileRawChannelFit'
-        else:
-            tileRawChannelContainer = 'TileRawChannelCnt'
-
-    else:
-        if "TileDigitsCnt" in flags.Input.Collections:
-            tileDigitsContainer = "TileDigitsCnt"
-        elif "TileDigitsFlt" in flags.Input.Collections:
-            tileDigitsContainer = "TileDigitsFlt"
-
-        if "TileRawChannelOpt2" in flags.Input.Collections:
-            tileRawChannelContainer = 'TileRawChannelOpt2'
-        elif "TileRawChannelFitCool" in flags.Input.Collections:
-            tileRawChannelContainer = 'TileRawChannelFitCool'
-        elif "TileRawChannelFit" in flags.Input.Collections:
-            tileRawChannelContainer = 'TileRawChannelFit'
-        elif "TileRawChannelCnt" in flags.Input.Collections:
-            tileRawChannelContainer = 'TileRawChannelCnt'
-
-    from CaloJiveXML.CaloJiveXMLConf import JiveXML__LArDigitRetriever
-    theLArDigitRetriever = JiveXML__LArDigitRetriever(name="LArDigitRetriever")
-    theLArDigitRetriever.DoLArDigit = False
-    theLArDigitRetriever.DoHECDigit = False
-    theLArDigitRetriever.DoFCalDigit = False
-
-    if (theLArDigitRetriever.DoLArDigit or theLArDigitRetriever.DoHECDigit or theLArDigitRetriever.DoFCalDigit):
-        result.addPublicTool(
-            CompFactory.JiveXML.LArDigitRetriever(
-                name="LArDigitRetriever",
-                DoLArDigit=False,
-                DoHECDigit=False,
-                DoFCalDigit=False,
-            )
-        )
- 
-    else:
-        result.addPublicTool(
-            CompFactory.JiveXML.CaloFCalRetriever(
-                name="CaloFCalRetriever",
-                DoFCalCellDetails=False,
-                DoBadFCal=False,
-            )
-        )
-
-        result.addPublicTool(
-            CompFactory.JiveXML.CaloLArRetriever(
-                name="CaloLArRetriever",
-                DoLArCellDetails=False,
-                DoBadLAr=False,
-            )
-        )
-
-        result.addPublicTool(
-            CompFactory.JiveXML.CaloHECRetriever(
-                name="CaloHECRetriever",
-                DoHECCellDetails=False,
-                DoBadHEC=False,
-            )
-        )
+    rawChannelContainer = flags.Tile.RawChannelContainer
+    digitsContainer = "TileDigitsCnt"
+    if "TileDigitsFlt" in flags.Input.Collections:
+        digitsContainer = "TileDigitsFlt"
 
     result.addPublicTool(
         CompFactory.JiveXML.CaloClusterRetriever(name = "CaloClusterRetriever",**kwargs
         )
     )
     
+    if flags.Common.isOnline:
+        doTileCellDetails = True
+        doTileDigit = True
+    else:
+        doTileCellDetails = False
+        doTileDigit = False
     result.addPublicTool(
         CompFactory.JiveXML.CaloTileRetriever(
             name = "CaloTileRetriever",
-            TileDigitsContainer = tileDigitsContainer,
-            TileRawChannelContainer = tileRawChannelContainer,
-            DoTileCellDetails = False,
-            DoTileDigit = False,
+            TileDigitsContainer = digitsContainer,
+            TileRawChannelContainer = rawChannelContainer,
+            DoTileCellDetails = doTileCellDetails,
+            DoTileDigit = doTileDigit,
             DoBadTile = False,
         )
     )
 
+    if flags.Common.isOnline:
+        doMBTSDigits = True
+        doMBTSCellDetails = True
+    else:
+        doMBTSDigits = False
+        doMBTSCellDetails = False
+
     result.addPublicTool(
         CompFactory.JiveXML.CaloMBTSRetriever(
             name = "CaloMBTSRetriever",
-            TileDigitsContainer= tileDigitsContainer,
-            TileRawChannelContainer = tileRawChannelContainer,
-            DoMBTSDigits = False,
+            TileDigitsContainer= digitsContainer,
+            TileRawChannelContainer = rawChannelContainer,
+            DoMBTSDigits = doMBTSDigits,
+            DoMBTSCellDetails = doMBTSCellDetails,
+        )
+    )
+
+    result.addPublicTool(
+        CompFactory.JiveXML.CaloFCalRetriever(
+            name = "CaloFCalRetriever",
+            DoFCalCellDetails = False,
+            DoBadFCal = False,
+        )
+    )
+
+    result.addPublicTool(
+        CompFactory.JiveXML.CaloLArRetriever(
+            name = "CaloLArRetriever",
+            DoLArCellDetails = False,
+            DoBadLAr = False,
+        )
+    )
+
+    result.addPublicTool(
+        CompFactory.JiveXML.CaloHECRetriever(
+            name = "CaloHECRetriever",
+            DoHECCellDetails = False,
+            DoBadHEC = False,
         )
     )
 
+    result.addPublicTool(
+        CompFactory.JiveXML.LArDigitRetriever(
+            name = "LArDigitRetriever",
+            DoLArDigit = False,
+            DoHECDigit = False,
+            DoFCalDigit = False,
+        )
+    )
     return result
 
 
 def MuonRetrieversCfg(flags, **kwargs):
     result = ComponentAccumulator()
+    # TODO add in other retrievers
+    # Based on MuonJiveXML_DataTypes.py
     #kwargs.setdefault("StoreGateKey", "MDT_DriftCircles")
 
-    if flags.Detector.EnableMuon and flags.Detector.GeometryMuon:
-        # Taken from MuonJiveXML_DataTypes.py
-        if flags.Detector.EnableMDT and flags.Detector.GeometryMDT:
-            result.addPublicTool(CompFactory.JiveXML.MdtPrepDataRetriever(name="MdtPrepDataRetriever"), **kwargs)
-        if flags.Detector.EnableTGC and flags.Detector.GeometryTGC:
-            result.addPublicTool(CompFactory.JiveXML.TgcPrepDataRetriever(name="TgcPrepDataRetriever"), **kwargs)
-            result.addPublicTool(CompFactory.JiveXML.sTgcPrepDataRetriever(name="sTgcPrepDataRetriever"), **kwargs)
-        if flags.Detector.EnableRPC and flags.Detector.GeometryRPC:
-            result.addPublicTool(CompFactory.JiveXML.RpcPrepDataRetriever(name="RpcPrepDataRetriever"), **kwargs)
-        if flags.Detector.EnableCSC and flags.Detector.GeometryCSC:
-            result.addPublicTool(CompFactory.JiveXML.CSCClusterRetriever(name="CSCClusterRetriever"), **kwargs)
-            result.addPublicTool(CompFactory.JiveXML.CscPrepDataRetriever(name="CscPrepDataRetriever"), **kwargs)
-        if flags.Detector.EnableMM and flags.Detector.GeometryMM:
-            result.addPublicTool(CompFactory.JiveXML.MMPrepDataRetriever(name="MMPrepDataRetriever"), **kwargs)
-        # TODO Not sure if below are still needed?
-        # data_types += ["JiveXML::TrigMuonROIRetriever/TrigMuonROIRetriever"]
-        # data_types += ["JiveXML::MuidTrackRetriever/MuidTrackRetriever]
-        # data_types += ["JiveXML::TrigRpcDataRetriever/TrigRpcDataRetriever"]
-
+    result.addPublicTool(
+        CompFactory.JiveXML.MdtPrepDataRetriever(name = "MdtPrepDataRetriever",**kwargs
+        )
+    )
     return result
 
 
@@ -417,6 +384,7 @@ def xAODRetrieversCfg(flags):
     )
     return result
 
+
 def TriggerRetrieversCfg(flags):
     result = ComponentAccumulator()
     if flags.Reco.EnableTrigger:
@@ -460,7 +428,8 @@ def TriggerRetrieversCfg(flags):
         )
     return result
 
-def AlgoJiveXMLCfg(flags, name="MuonCombinePatternTool", **kwargs):
+
+def AlgoJiveXMLCfg(flags, name="AlgoJiveXML", **kwargs):
     # This is based on a few old-style configuation files:
     # JiveXML_RecEx_config.py
     # JiveXML_jobOptionBase.py
@@ -468,8 +437,12 @@ def AlgoJiveXMLCfg(flags, name="MuonCombinePatternTool", **kwargs):
 
     kwargs.setdefault("AtlasRelease", getATLASVersion())
     kwargs.setdefault("WriteToFile", True)
-    ### Enable this to recreate the geometry XML files for Atlantis
+    # Enable this to recreate the geometry XML files for Atlantis
     kwargs.setdefault("WriteGeometry", False)
+    if flags.Common.isOnline:
+        kwargs.setdefault("OnlineMode", True)
+    else:
+        kwargs.setdefault("OnlineMode", False)
 
     # This next bit sets the data types, then we set the associated public tools
     readAOD = False  # FIXME - set this properly
@@ -483,13 +456,13 @@ def AlgoJiveXMLCfg(flags, name="MuonCombinePatternTool", **kwargs):
         result.merge(TruthTrackRetrieverCfg(flags))
 
     if haveRDO or readESD:
-        if flags.Detector.EnableID and flags.Detector.GeometryID:
+        if flags.Detector.EnableID:
             result.merge(InDetRetrieversCfg(flags))
 
-        if flags.Detector.EnableCalo and flags.Detector.GeometryCalo:
+        if flags.Detector.EnableCalo:
             result.merge(CaloRetrieversCfg(flags))
 
-        if flags.Detector.EnableMuon and flags.Detector.GeometryMuon:
+        if flags.Detector.EnableMuon:
             result.merge(MuonRetrieversCfg(flags))
 
     result.merge(xAODRetrieversCfg(flags))
@@ -498,4 +471,6 @@ def AlgoJiveXMLCfg(flags, name="MuonCombinePatternTool", **kwargs):
 
     the_alg = CompFactory.JiveXML.AlgoJiveXML(name="AlgoJiveXML", **kwargs)
     result.addEventAlgo(the_alg, primary=True)
+    
+    
     return result
diff --git a/graphics/JiveXML/src/AlgoJiveXML.cxx b/graphics/JiveXML/src/AlgoJiveXML.cxx
index be39b369814a71364c84aaa2a635dc7fa029204e..33f0fad4bb8968a8753e0209b8b762d2f1b8190a 100755
--- a/graphics/JiveXML/src/AlgoJiveXML.cxx
+++ b/graphics/JiveXML/src/AlgoJiveXML.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "JiveXML/AlgoJiveXML.h"
@@ -19,7 +19,17 @@
 namespace JiveXML{
 
   AlgoJiveXML::AlgoJiveXML(const std::string& name, ISvcLocator* pSvcLocator) :
-    AthAlgorithm(name, pSvcLocator) {}
+    AthAlgorithm(name, pSvcLocator) {
+
+    //Array of tools that retrieve the data, set public and createIf as default
+    declareProperty("DataRetrievers", m_DataRetrievers = ToolHandleArray<IDataRetriever>( NULL ,true));
+
+    //Generate XMLFormatTool as default privat format tool
+    declareProperty("FormatTool", m_FormatTool = ToolHandle<IFormatTool>("JiveXML::XMLFormatTool/XMLFormatTool",this));
+
+    //Array of tools for streaming events, set public and createIf as default
+    declareProperty("StreamTools", m_StreamTools = ToolHandleArray<IStreamTool>(NULL,true));
+  }
 
   /**
    * Initialize - called once in the beginning
@@ -27,7 +37,8 @@ namespace JiveXML{
    * - Get GeometryWriters and write geometry if asked for
    * - Get the formatting tool
    * - Get the data retrievers
-   * - Get the streaming tools, including defaults if asked for   */
+   * - Get the streaming tools, including defaults if asked for
+   */
   StatusCode AlgoJiveXML::initialize(){
 
     //be verbose
@@ -80,15 +91,23 @@ namespace JiveXML{
      */
     ATH_MSG_DEBUG("Retrieving streaming tools");
     if (m_writeToFile){
-      ATH_MSG_INFO("Retrieving default file streaming tool");
-      ATH_CHECK(m_StreamToFileTool.retrieve());
+      ATH_MSG_INFO("Adding default file streaming tool");
+      m_StreamTools.push_back("JiveXML::StreamToFileTool/StreamToFileTool");
     }
     /// Get the streaming tools
     if (m_onlineMode == true){
-      ATH_MSG_INFO("Retrieving default server streaming tool");
-      ATH_CHECK(m_StreamToFileTool.retrieve());
+      m_StreamTools.push_back("JiveXML::StreamToServerTool/StreamToServerTool");
    }
 
+    if (m_StreamTools.size() == 0) {
+      ATH_MSG_WARNING("No streaming tools defined, events will be created but not stored!");
+    } else {
+      if (m_StreamTools.retrieve().isFailure()){
+        ATH_MSG_ERROR("Unable to retrieve streaming tools !");
+        return StatusCode::FAILURE;
+      }
+    }
+
     /**
      * Get the IDataRetrievers requested in the m_dataTypes list from the toolSvc 
      * and store them in the ToolHandleArray
@@ -118,13 +137,18 @@ namespace JiveXML{
     ATH_MSG_INFO("Retrieving data from " << m_DataRetrievers.size() << " tools" );
 
     ATH_MSG_INFO("List property settings: ");
+    ATH_MSG_INFO("WantPublicStreams: " << m_wantPublicStreams);
+    ATH_MSG_INFO("WantCalibrationStreams: " << m_wantCalibrationStreams);
+    ATH_MSG_INFO("WantMonitoringStreams: " << m_wantMonitoringStreams);
+    ATH_MSG_INFO("WantPhysicsStreams: " << m_wantPhysicsStreams);
     ATH_MSG_INFO("AtlasRelease: " << m_AtlasRelease);
     ATH_MSG_INFO("DataTypes: " << m_dataTypes );
     ATH_MSG_INFO("WriteToFile: " << m_writeToFile);
     ATH_MSG_INFO("OnlineMode: " << m_onlineMode);
     ATH_MSG_INFO("WriteGeometry: " << m_writeGeometry);
     ATH_MSG_INFO("GeometryVersion: " << m_geometryVersionIn);
-    ATH_MSG_INFO("GeoWriterNames: " << m_GeoWriterNames);
+    ATH_MSG_INFO("GeoWriterNames: "  << m_GeoWriterNames );
+
     return StatusCode::SUCCESS;
   }
 
@@ -135,6 +159,7 @@ namespace JiveXML{
    * - pass formatted events to streamers
    */
   StatusCode AlgoJiveXML::execute() {
+
     /** 
      * Firstly retrieve all the event header information 
      */
@@ -157,7 +182,7 @@ namespace JiveXML{
       return StatusCode::FAILURE;
     }else{
     // Event/xAOD/xAODEventInfo/trunk/xAODEventInfo/versions/EventInfo_v1.h
-     ATH_MSG_INFO(" xAODEventInfo: runNumber: "  << eventInfo->runNumber()  // is '222222' for mc events ?
+     ATH_MSG_VERBOSE(" xAODEventInfo: runNumber: "  << eventInfo->runNumber()  // is '222222' for mc events ?
           << ", eventNumber: " << eventInfo->eventNumber()
           << ", mcChannelNumber: " << eventInfo->mcChannelNumber()
           << ", mcEventNumber: "  << eventInfo->mcEventNumber() // MC: use this instead of runNumber
@@ -289,17 +314,16 @@ namespace JiveXML{
     /**
      * Now stream the events to all registered streaming tools
      */
-
-    ATH_MSG_INFO("Streaming event to file");
-    if ( (m_StreamToFileTool->StreamEvent(eventNo, runNo, m_FormatTool->getFormattedEvent()).isFailure() )){
-	  ATH_MSG_WARNING( "Could not stream event to file" );
-    }
-    if(m_onlineMode==true){
-      ATH_MSG_INFO("Streaming event to server");
-      if ( (m_StreamToServerTool->StreamEvent(eventNo, runNo, m_FormatTool->getFormattedEvent()).isFailure() )){
-	ATH_MSG_WARNING( "Could not stream event to server" );
-      }
+    ATH_MSG_DEBUG( "Starting loop over event streamers" );
+    //Loop over streaming tools
+    ToolHandleArray<IStreamTool>::iterator StreamToolsItr = m_StreamTools.begin();
+    for ( ; StreamToolsItr != m_StreamTools.end(); ++StreamToolsItr ){
+      ATH_MSG_INFO("Streaming event to " << (*StreamToolsItr)->name() );
+        if ( (*StreamToolsItr)->StreamEvent(eventNo, runNo, m_FormatTool->getFormattedEvent()).isFailure() ){
+           ATH_MSG_WARNING( "Could not stream event to " << (*StreamToolsItr)->name() );
+        } 
     }
+    ATH_MSG_DEBUG( "Finished loop over event streamers" );
 
     return StatusCode::SUCCESS;
   }
@@ -315,9 +339,31 @@ namespace JiveXML{
     /// Release all the tools
     m_DataRetrievers.release().ignore();
     m_FormatTool.release().ignore();
-    m_StreamToFileTool.release().ignore();
-    m_StreamToServerTool.release().ignore();
-    
+    m_StreamTools.release().ignore();
+
+    return StatusCode::SUCCESS;
+  }
+
+  StatusCode AlgoJiveXML::chooseStream(const std::vector< xAOD::EventInfo::StreamTag > evtStreamTags){
+    std::vector<std::string> wantedStreamTypes;
+    if (m_wantPublicStreams){
+      wantedStreamTypes.emplace_back("Public");
+    }
+    if (m_wantCalibrationStreams){
+      wantedStreamTypes.emplace_back("calibration");
+    }
+    if (m_wantMonitoringStreams){
+      wantedStreamTypes.emplace_back("monitoring");
+    }
+    if (m_wantPhysicsStreams){
+      wantedStreamTypes.emplace_back("physics");
+    }
+      std::vector< xAOD::EventInfo::StreamTag > goodStreams;
+    for (const auto& evtStreamTag : evtStreamTags) {
+      ATH_MSG_INFO( "Stream Tag in function: " << evtStreamTag.type() << "_" << evtStreamTag.name());
+      // if evtStreamTag.type() is in wantedStreamTypes add to goodStreams
+    }
+    //randomize goodStreams and return first value as choosen Stream
     return StatusCode::SUCCESS;
   }
 } //namespace
diff --git a/graphics/JiveXML/src/StreamToFileTool.cxx b/graphics/JiveXML/src/StreamToFileTool.cxx
index 9786caebeca6ec4346a9aadde61739b8ee22e060..f0af88937b032259fa3f0554765fd7869e752bed 100644
--- a/graphics/JiveXML/src/StreamToFileTool.cxx
+++ b/graphics/JiveXML/src/StreamToFileTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
 */
 
 #include <JiveXML/StreamToFileTool.h>
@@ -10,13 +10,13 @@
 namespace JiveXML {
 
   /**
-   * Constructor
+   * Constructor 
    * - setup message service
    * - initialize properties
    */
   StreamToFileTool::StreamToFileTool( const std::string& type , const std::string& name, const IInterface* p):
     AthAlgTool(type,name,p){
-
+    
     //Provide interface
     declareInterface<IStreamTool>(this);
 
@@ -24,7 +24,6 @@ namespace JiveXML {
     declareProperty("FileNamePrefix", m_FileNamePrefix = "JiveXML");
     /// The file name suffix
     declareProperty("FileNameSuffix", m_FileNameSuffix = ".xml");
-
   }
 
   /**
@@ -32,12 +31,6 @@ namespace JiveXML {
    */
   StatusCode StreamToFileTool::initialize(){
     return StatusCode::SUCCESS;
-    if(m_isOnline){
-      if( m_onlineEDsvc.retrieve().isFailure()){
-	ATH_MSG_ERROR("Could not locate the online event displays service");
-	return StatusCode::FAILURE;
-      }
-    }
   }
 
   /**
@@ -53,27 +46,27 @@ namespace JiveXML {
    * @param RunNumber the run number
    * @param EventBuffer the string holding the complete event
    */
-   StatusCode StreamToFileTool::StreamEvent( const unsigned long EventNumber, const unsigned int RunNumber, const std::ostringstream* EventBuffer ) {
-     if(m_isOnline){
-       m_FileNamePrefix = m_onlineEDsvc->getFileNamePrefix();
-       ATH_MSG_INFO("m_FileNamePrefix: " << m_FileNamePrefix << " EventNumber: " << EventNumber);
-     }
+   StatusCode StreamToFileTool::StreamEvent( const unsigned long EventNumber, const unsigned int RunNumber, const std::ostringstream* EventBuffer ) { 
+   
+     if (msgLvl(MSG::INFO)) msg(MSG::INFO) << " m_FileNamePrefix: " << m_FileNamePrefix << endmsg;
      /// Get a pointer to a new file
      std::ofstream* outFile;
      StatusCode sc = NewFile(EventNumber,RunNumber,outFile);
      if (sc.isFailure()){
-       ATH_MSG_WARNING("Could not open file for event " << EventNumber << " from run " << RunNumber);
+        if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Could not open file for event " 
+           << EventNumber << " from run " << RunNumber << endmsg;
        return sc;
      }
-     /// Stream this event into the file
+     /// Stream this event into the file 
      (*outFile) << EventBuffer->str();
      outFile->flush();
      /// Check wether we could write the event
      if (!outFile->good()){
-       ATH_MSG_WARNING("Could not open file for event " << EventNumber << " from run " << RunNumber);
+       if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Could not write event " 
+           << EventNumber << " from run " << RunNumber << endmsg;
        return StatusCode::FAILURE;
      }
-
+     
      /// Finally close the file
      sc = CloseFile(outFile);
      return sc;
@@ -85,24 +78,24 @@ namespace JiveXML {
    * @param EventNumber the event number
    * @param RunNumber the run number
    */
-   std::string StreamToFileTool::MakeFileName(const unsigned long EventNumber, const unsigned int RunNumber) const {
+   std::string StreamToFileTool::MakeFileName( const unsigned long EventNumber, const unsigned int RunNumber) const {
 
      //Generate a the return string with file prefix
      std::ostringstream name;
-
+     
      //Assemble file name
      name << m_FileNamePrefix << std::setfill('0');
      name << "_" << std::setw(5) << RunNumber;
      name << "_" << std::setw(5) << EventNumber;
-     name << m_FileNameSuffix;
+     name << m_FileNameSuffix; 
      return name.str();
    }
 
-   /**
+   /** 
     * Open a new file
     */
    StatusCode StreamToFileTool::NewFile( const unsigned long EventNumber, const unsigned int RunNumber, std::ofstream *& outputFile) const {
-
+      
       // Generate the file name
       std::string filename = MakeFileName(EventNumber,RunNumber);
 
@@ -111,24 +104,24 @@ namespace JiveXML {
 
       // check if it worked
       if ( !(outputFile->good()) ){
-	ATH_MSG_WARNING("Unable to create output file with name " << filename);
-	return StatusCode::FAILURE;
+        if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Unable to create output file with name " << filename << endmsg;
+        return StatusCode::FAILURE;
       }
 
       return StatusCode::SUCCESS;
     }
 
    /**
-    * Close the file
-    */
+    * Close the file 
+    */   
    StatusCode StreamToFileTool::CloseFile( std::ofstream *& outputFile ) const {
 
     //Try to close the file
     outputFile->close();
-
+    
     //See if it worked
     if (!outputFile->good()){
-      ATH_MSG_WARNING("Unable to close file");
+      if (msgLvl(MSG::WARNING)) msg(MSG::WARNING)  << "Unable to close file" << endmsg;
     }
 
     //In any case delete object