diff --git a/benchmarks/full/options/full_reconstruction.py b/benchmarks/full/options/full_reconstruction.py
index ed05a1da1c70215ac1b44f4e2bf85583e7980a08..7ff92cfd425eac4f25fdb8990de7116b427144b5 100644
--- a/benchmarks/full/options/full_reconstruction.py
+++ b/benchmarks/full/options/full_reconstruction.py
@@ -122,13 +122,14 @@ ecal_digi = EMCalorimeterDigi("ecal_digi",
         outputHitCollection="EcalBarrelHitsSimpleDigi")
 
 ecal_reco = EMCalReconstruction("ecal_reco",
-        inputHitCollection="EcalBarrelHitsSimpleDigi",
+        inputHitCollection=ecal_digi.outputHitCollection,
         outputHitCollection="EcalBarrelHitsSimpleReco",
         minModuleEdep=0.0*units.MeV)
 
 simple_cluster = SimpleClustering("simple_cluster",
-        inputHitCollection="EcalBarrelHitsSimpleReco",
-        outputClusters="SimpleClusters",
+        inputHitCollection=ecal_reco.outputHitCollection,
+        outputClusterCollection="SimpleClusters",
+        outputProtoClusterCollection="SimpleProtoClusters",
         minModuleEdep=1.0*units.MeV,
         maxDistance=50.0*units.cm)
 
@@ -146,7 +147,7 @@ ce_ecal_digi = CalHitDigi("ce_ecal_digi",
         **ce_ecal_daq)
 
 ce_ecal_reco = CalHitReco("ce_ecal_reco",
-        inputHitCollection="EcalEndcapNHitsDigi",
+        inputHitCollection=ce_ecal_digi.outputHitCollection,
         outputHitCollection="EcalEndcapNHitsReco",
         thresholdFactor=4,          # 4 sigma cut on pedestal sigma
         readoutClass="EcalEndcapNHits",
@@ -154,8 +155,8 @@ ce_ecal_reco = CalHitReco("ce_ecal_reco",
         **ce_ecal_daq)
 
 ce_ecal_cl = IslandCluster("ce_ecal_cl",
-        inputHitCollection="EcalEndcapNHitsReco",
-        outputHitCollection="EcalEndcapNClusterHits",
+        inputHitCollection=ce_ecal_reco.outputHitCollection,
+        outputProtoClusterCollection="EcalEndcapNProtoClusters",
         splitCluster=False,
         minClusterHitEdep=1.0*units.MeV,  # discard low energy hits
         minClusterCenterEdep=30*units.MeV,
@@ -163,7 +164,8 @@ ce_ecal_cl = IslandCluster("ce_ecal_cl",
         dimScaledLocalDistXY=[1.8, 1.8]) # dimension scaled dist is good for hybrid sectors with different module size
 
 ce_ecal_clreco = RecoCoG("ce_ecal_clreco",
-        inputHitCollection="EcalEndcapNClusterHits",
+        inputHitCollection=ce_ecal_cl.inputHitCollection,
+        inputProtoClusterCollection=ce_ecal_cl.outputProtoClusterCollection,
         outputClusterCollection="EcalEndcapNClusters",
         samplingFraction=0.998,      # this accounts for a small fraction of leakage
         logWeightBase=4.6)
@@ -181,29 +183,31 @@ ci_ecal_digi = CalHitDigi("ci_ecal_digi",
         **ci_ecal_daq)
 
 ci_ecal_reco = CalHitReco("ci_ecal_reco",
-        inputHitCollection="EcalEndcapPHitsDigi",
+        inputHitCollection=ci_ecal_digi.outputHitCollection,
         outputHitCollection="EcalEndcapPHitsReco",
         thresholdFactor=5.0,
         **ci_ecal_daq)
 
 # merge hits in different layer (projection to local x-y plane)
 ci_ecal_merger = CalHitsMerger("ci_ecal_merger",
-        inputHitCollection="EcalEndcapPHitsReco",
+        inputHitCollection=ci_ecal_reco.outputHitCollection,
         outputHitCollection="EcalEndcapPHitsRecoXY",
         fields=["layer", "slice"],
         fieldRefNumbers=[1, 0],
         readoutClass="EcalEndcapPHits")
 
 ci_ecal_cl = IslandCluster("ci_ecal_cl",
-        inputHitCollection="EcalEndcapPHitsRecoXY",
-        outputHitCollection="EcalEndcapPClusterHits",
+        inputHitCollection=ci_ecal_merger.outputHitCollection,
+        outputProtoClusterCollection="EcalEndcapPProtoClusters",
         splitCluster=False,
         minClusterCenterEdep=10.*units.MeV,
         localDistXY=[10*units.mm, 10*units.mm])
 
 ci_ecal_clreco = RecoCoG("ci_ecal_clreco",
-        inputHitCollection="EcalEndcapPClusterHits",
+        inputHitCollection=ci_ecal_cl.inputHitCollection,
+        inputProtoClusterCollection=ci_ecal_cl.outputProtoClusterCollection,
         outputClusterCollection="EcalEndcapPClusters",
+        outputInfoCollection="EcalEndcapPClustersInfo",
         logWeightBase=6.2,
         samplingFraction=ci_ecal_sf)
 
@@ -221,7 +225,7 @@ cb_ecal_digi = CalHitDigi("cb_ecal_digi",
         **cb_ecal_daq)
 
 cb_ecal_reco = ImCalPixelReco("cb_ecal_reco",
-        inputHitCollection="EcalBarrelHitsDigi",
+        inputHitCollection=cb_ecal_digi.outputHitCollection,
         outputHitCollection="EcalBarrelHitsReco",
         thresholdFactor=3,  # about 20 keV
         readoutClass="EcalBarrelHits",  # readout class
@@ -230,8 +234,8 @@ cb_ecal_reco = ImCalPixelReco("cb_ecal_reco",
         **cb_ecal_daq)
 
 cb_ecal_cl = ImagingCluster("cb_ecal_cl",
-        inputHitCollection="EcalBarrelHitsReco",
-        outputHitCollection="EcalBarrelClusterHits",
+        inputHitCollection=cb_ecal_reco.outputHitCollection,
+        outputProtoClusterCollection="EcalBarrelProtoClusters",
         localDistXY=[2.*units.mm, 2*units.mm],  # same layer
         layerDistEtaPhi=[10*units.mrad, 10*units.mrad],     # adjacent layer
         neighbourLayersRange=2,                 # id diff for adjacent layer
@@ -239,8 +243,10 @@ cb_ecal_cl = ImagingCluster("cb_ecal_cl",
 
 cb_ecal_clreco = ImagingClusterReco("cb_ecal_clreco",
         samplingFraction=cb_ecal_sf,
-        inputHitCollection="EcalBarrelClusterHits",
+        inputHitCollection=cb_ecal_cl.inputHitCollection,
+        inputProtoClusterCollection=cb_ecal_cl.outputProtoClusterCollection,
         outputClusterCollection="EcalBarrelClusters",
+        outputInfoCollection="EcalBarrelClustersInfo",
         outputLayerCollection="EcalBarrelLayers")
 
 # Central ECAL SciFi
@@ -256,7 +262,7 @@ scfi_barrel_digi = CalHitDigi("scfi_barrel_digi",
         **scfi_barrel_daq)
 
 scfi_barrel_reco = CalHitReco("scfi_barrel_reco",
-        inputHitCollection="EcalBarrelScFiHitsDigi",
+        inputHitCollection=scfi_barrel_digi.outputHitCollection,
         outputHitCollection="EcalBarrelScFiHitsReco",
         thresholdFactor=5.0,
         readoutClass="EcalBarrelScFiHits",
@@ -267,22 +273,24 @@ scfi_barrel_reco = CalHitReco("scfi_barrel_reco",
 
 # merge hits in different layer (projection to local x-y plane)
 scfi_barrel_merger = CalHitsMerger("scfi_barrel_merger",
-         inputHitCollection="EcalBarrelScFiHitsReco",
+         inputHitCollection=scfi_barrel_reco.outputHitCollection,
          outputHitCollection="EcalBarrelScFiGridReco",
          fields=["fiber"],
          fieldRefNumbers=[1],
          readoutClass="EcalBarrelScFiHits")
 
 scfi_barrel_cl = IslandCluster("scfi_barrel_cl",
-         inputHitCollection="EcalBarrelScFiGridReco",
-         outputHitCollection="EcalBarrelScFiClusterHits",
+         inputHitCollection=scfi_barrel_merger.outputHitCollection,
+         outputProtoClusterCollection="EcalBarrelScFiProtoClusters",
          splitCluster=False,
          minClusterCenterEdep=10.*MeV,
          localDistXZ=[30*mm, 30*mm])
 
 scfi_barrel_clreco = RecoCoG("scfi_barrel_clreco",
-         inputHitCollection="EcalBarrelScFiClusterHits",
+         inputHitCollection=scfi_barrel_cl.inputHitCollection,
+         inputProtoClusterCollection=scfi_barrel_cl.outputProtoClusterCollection,
          outputClusterCollection="EcalBarrelScFiClusters",
+         outputInfoCollection="EcalBarrelScFiClustersInfo",
          logWeightBase=6.2,
          samplingFraction= scifi_barrel_sf)
 
@@ -299,7 +307,7 @@ cb_hcal_digi = CalHitDigi("cb_hcal_digi",
          **cb_hcal_daq)
 
 cb_hcal_reco = CalHitReco("cb_hcal_reco",
-        inputHitCollection="HcalBarrelHitsDigi",
+        inputHitCollection=cb_hcal_digi.outputHitCollection,
         outputHitCollection="HcalBarrelHitsReco",
         thresholdFactor=5.0,
         readoutClass="HcalBarrelHits",
@@ -308,22 +316,24 @@ cb_hcal_reco = CalHitReco("cb_hcal_reco",
         **cb_hcal_daq)
 
 cb_hcal_merger = CalHitsMerger("cb_hcal_merger",
-        inputHitCollection="HcalBarrelHitsReco",
+        inputHitCollection=cb_hcal_reco.outputHitCollection,
         outputHitCollection="HcalBarrelHitsRecoXY",
         readoutClass="HcalBarrelHits",
         fields=["layer", "slice"],
         fieldRefNumbers=[1, 0])
 
 cb_hcal_cl = IslandCluster("cb_hcal_cl",
-        inputHitCollection="HcalBarrelHitsRecoXY",
-        outputHitCollection="HcalBarrelClusterHits",
+        inputHitCollection=cb_hcal_merger.outputHitCollection,
+        outputProtoClusterCollection="HcalBarrelProtoClusters",
         splitCluster=False,
         minClusterCenterEdep=30.*units.MeV,
         localDistXY=[15.*units.cm, 15.*units.cm])
 
 cb_hcal_clreco = RecoCoG("cb_hcal_clreco",
-        inputHitCollection="HcalBarrelClusterHits",
+        inputHitCollection=cb_hcal_cl.inputHitCollection,
+        inputProtoClusterCollection=cb_hcal_cl.outputProtoClusterCollection,
         outputClusterCollection="HcalBarrelClusters",
+        outputInfoCollection="HcalBarrelClustersInfo",
         logWeightBase=6.2,
         samplingFraction=cb_hcal_sf)
 
@@ -340,28 +350,30 @@ ci_hcal_digi = CalHitDigi("ci_hcal_digi",
          **ci_hcal_daq)
 
 ci_hcal_reco = CalHitReco("ci_hcal_reco",
-        inputHitCollection="HcalHadronEndcapHitsDigi",
+        inputHitCollection=ci_hcal_digi.outputHitCollection,
         outputHitCollection="HcalHadronEndcapHitsReco",
         thresholdFactor=5.0,
         **ci_hcal_daq)
 
 ci_hcal_merger = CalHitsMerger("ci_hcal_merger",
-        inputHitCollection="HcalHadronEndcapHitsReco",
+        inputHitCollection=ci_hcal_reco.outputHitCollection,
         outputHitCollection="HcalHadronEndcapHitsRecoXY",
         readoutClass="HcalHadronEndcapHits",
         fields=["layer", "slice"],
         fieldRefNumbers=[1, 0])
 
 ci_hcal_cl = IslandCluster("ci_hcal_cl",
-        inputHitCollection="HcalHadronEndcapHitsRecoXY",
-        outputHitCollection="HcalHadronEndcapClusterHits",
+        inputHitCollection=ci_hcal_merger.outputHitCollection,
+        outputProtoClusterCollection="HcalHadronEndcapProtoClusters",
         splitCluster=False,
         minClusterCenterEdep=30.*units.MeV,
         localDistXY=[15.*units.cm, 15.*units.cm])
 
 ci_hcal_clreco = RecoCoG("ci_hcal_clreco",
-        inputHitCollection="HcalHadronEndcapClusterHits",
+        inputHitCollection=ci_hcal_cl.inputHitCollection,
+        inputProtoClusterCollection=ci_hcal_cl.outputProtoClusterCollection,
         outputClusterCollection="HcalHadronEndcapClusters",
+        outputInfoCollection="HcalHadronEndcapClustersInfo",
         logWeightBase=6.2,
         samplingFraction=ci_hcal_sf)
 
@@ -378,28 +390,30 @@ ce_hcal_digi = CalHitDigi("ce_hcal_digi",
         **ce_hcal_daq)
 
 ce_hcal_reco = CalHitReco("ce_hcal_reco",
-        inputHitCollection="HcalElectronEndcapHitsDigi",
+        inputHitCollection=ce_hcal_digi.outputHitCollection,
         outputHitCollection="HcalElectronEndcapHitsReco",
         thresholdFactor=5.0,
         **ce_hcal_daq)
 
 ce_hcal_merger = CalHitsMerger("ce_hcal_merger",
-        inputHitCollection="HcalElectronEndcapHitsReco",
+        inputHitCollection=ce_hcal_reco.outputHitCollection,
         outputHitCollection="HcalElectronEndcapHitsRecoXY",
         readoutClass="HcalElectronEndcapHits",
         fields=["layer", "slice"],
         fieldRefNumbers=[1, 0])
 
 ce_hcal_cl = IslandCluster("ce_hcal_cl",
-        inputHitCollection="HcalElectronEndcapHitsRecoXY",
-        outputHitCollection="HcalElectronEndcapClusterHits",
+        inputHitCollection=ce_hcal_merger.outputHitCollection,
+        outputProtoClusterCollection="HcalElectronEndcapProtoClusters",
         splitCluster=False,
         minClusterCenterEdep=30.*units.MeV,
         localDistXY=[15.*units.cm, 15.*units.cm])
 
 ce_hcal_clreco = RecoCoG("ce_hcal_clreco",
-        inputHitCollection="HcalElectronEndcapClusterHits",
+        inputHitCollection=ce_hcal_cl.inputHitCollection,
+        inputProtoClusterCollection=ce_hcal_cl.outputProtoClusterCollection,
         outputClusterCollection="HcalElectronEndcapClusters",
+        outputInfoCollection="HcalElectronEndcapClustersInfo",
         logWeightBase=6.2,
         samplingFraction=ce_hcal_sf)
 
diff --git a/benchmarks/imaging_shower_ML/options/imaging_ml_data.py b/benchmarks/imaging_shower_ML/options/imaging_ml_data.py
index 1bdc3f2f6632313f83491be910a854afb83e9591..7cf239564edd407c91af246f379a3d0bec8e9adb 100644
--- a/benchmarks/imaging_shower_ML/options/imaging_ml_data.py
+++ b/benchmarks/imaging_shower_ML/options/imaging_ml_data.py
@@ -46,7 +46,7 @@ imcaldigi = CalorimeterHitDigi('imcal_digi',
         dynamicRangeADC=3*units.MeV,
         pedestalSigma=40)
 imcalreco = ImagingPixelReco('imcal_reco',
-        inputHitCollection='EcalBarrelHitsDigi',
+        inputHitCollection=imcaldigi.outputHitCollection,
         outputHitCollection='EcalBarrelHitsReco',
         dynamicRangeADC=3.*units.MeV,
         pedestalSigma=40,
@@ -56,7 +56,7 @@ imcalreco = ImagingPixelReco('imcal_reco',
         sectorField='module')
 imcaldata = ImagingPixelMerger('imcal_merger',
 #        OutputLevel=DEBUG,
-        inputHitCollection='EcalBarrelHitsReco',
+        inputHitCollection=imcalreco.outputHitCollection,
         outputHitCollection='EcalBarrelHitsML',
         etaSize=0.001,
         phiSize=0.001,
diff --git a/options/tracker_reconstruction.py b/options/tracker_reconstruction.py
index a9f0347dfd554b98244a916a1ae4e3984d13a1d2..38dcf0f79620914507e3d3b9d743bfc72a301455 100644
--- a/options/tracker_reconstruction.py
+++ b/options/tracker_reconstruction.py
@@ -86,13 +86,14 @@ ufsd_digi2 = UFSDTrackerDigi("ufsd_digi2",
 
 
 ecal_reco = EMCalReconstruction("ecal_reco", 
-        inputHitCollection="RawEcalBarrelHits", 
+        inputHitCollection=ecal_digi.outputHitCollection, 
         outputHitCollection="RecEcalBarrelHits",
         minModuleEdep=0.0*units.MeV)
         #OutputLevel=DEBUG)
 
 simple_cluster = SimpleClustering("simple_cluster", 
-        inputHitCollection="RecEcalBarrelHits", 
+        inputHitCollection=ecal_reco.outputHitCollection, 
+        outputProtoClusters="SimpleProtoClusters",
         outputClusters="SimpleClusters",
         minModuleEdep=1.0*units.MeV,
         maxDistance=50.0*units.cm)