diff --git a/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilderFromHit.h b/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilderFromHit.h
index 1c2c238c180a34e3a3e506eead28d04324bce74d..e0b653a6ac19c0c514eedaf4f90e162a0d8e36b0 100644
--- a/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilderFromHit.h
+++ b/TileCalorimeter/TileRecUtils/TileRecUtils/TileCellBuilderFromHit.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TILERECUTILS_TILECELLBUILDERFROMHIT_H
@@ -74,41 +74,38 @@ class IAtRndmGenSvc;
  @brief This class creates Cells from RawChannels and stores them in a container
  
  */
-class TileCellBuilderFromHit: public AthAlgTool, virtual public ICaloCellMakerTool {
+class TileCellBuilderFromHit
+  : public extends<AthAlgTool, ICaloCellMakerTool>
+{
   public:
     TileCellBuilderFromHit(const std::string& type, const std::string& name, const IInterface* parent); //!< Contructor
 
     virtual ~TileCellBuilderFromHit(); //!< Destructor
 
-    virtual StatusCode initialize();                     //!< initialize mehtod
+    virtual StatusCode initialize() override;
 
-    virtual StatusCode finalize(); //!< finalize method
+    virtual StatusCode finalize() override;
 
-    virtual StatusCode process(CaloCellContainer* theCellContainer); // method to process all raw channels and store them in container
-
-    template<class ITERATOR, class COLLECTION>
-    void build(const ITERATOR & begin, const ITERATOR & end, COLLECTION * coll); //!< method to process raw channels from a given vector and store them in collection
-
-    /** method to check if channels are good or bad. Puts zero if both channels are bad
-     or recovers from single-channel failure. It returns true if cell was changed, false otherwise
-     */
-    bool maskBadChannel(TileCell* pCell);
-    bool maskBadChannels(TileCell* pCell, bool single_PMT_C10, bool Ecell);
+    /// method to process all raw channels and store them in container
+    virtual StatusCode process(CaloCellContainer* theCellContainer) override;
 
     //AlgTool InterfaceID
     static const InterfaceID& interfaceID();
     //static const InterfaceID& interfaceID() { return ICaloCellMakerTool; };
 
   private:
+    /// status of every drawer
+    typedef TileDrawerEvtStatus TileDrawerEvtStatusArray[5][64];
 
-    // properties
     // properties
     SG::ReadHandleKey<TileHitContainer> m_hitContainerKey{this, "TileHitContainer", 
                                                           "TileHitCnt", 
                                                           "Input Tile hit container key"};
 
-    SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this, "EventInfo",
-                                                      "EventInfo", "Input Event info key"};
+    SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey{this, "EventInfo", 
+                                                      "EventInfo", 
+                                                      "EventInfo key"};
+
 
     SG::WriteHandleKey<TileCellContainer> m_MBTSContainerKey{this, "MBTSContainer", 
                                                              "MBTSContainer", 
@@ -152,31 +149,47 @@ class TileCellBuilderFromHit: public AthAlgTool, virtual public ICaloCellMakerTo
     const TileDetDescrManager* m_tileMgr; //!< Pointer to TileDetDescrManager
     const MbtsDetDescrManager* m_mbtsMgr; //!< Pointer to MbtsDetDescrManager
 
-    std::vector<TileCell*> m_allCells;  //!< vector to of pointers to TielCells
-    std::vector<TileCell*> m_MBTSVec;   //!< vector to of pointers to MBTS cells
-    std::vector<TileCell*> m_E4prVec;   //!< vector to of pointers to E4' cells
-    std::unique_ptr<TileCellContainer> m_MBTSCells;     //!< Pointer to MBTS cell container
-    std::unique_ptr<TileCellContainer> m_E4prCells;     //!< Pointer to E4'  cell container
-
     TileFragHash::TYPE m_RChType;        //!< Type of TileRawChannels (Fit, OF2, etc.)
     //unsigned int m_bsflags;              //!< other flags stored in TileRawChannelContainer
 
-    TileDrawerEvtStatus m_drawerEvtStatus[5][64]; //!< status of every drawer in every event
-    TileDrawerRunStatus m_drawerRunStatus[5][64]; //!< overall status of drawer in whole run
-    int m_eventErrorCounter[4]; //!< number of events with no errors(0), warnings(1), error(2), total(3)
+    // These were accumulated, but never actually used.
+    // They also spoil reentrancy, so leave them commented-out for now.
+    // If this information is needed in the future, these can be changed
+    // to use atomics.
+    ///TileDrawerRunStatus m_drawerRunStatus[5][64]; //!< overall status of drawer in whole run
+    //int m_eventErrorCounter[4]; //!< number of events with no errors(0), warnings(1), error(2), total(3)
 
     std::vector<CaloAffectedRegionInfo> m_affectedRegionInfo_global;
     std::vector<CaloAffectedRegionInfo> m_affectedRegionInfo_current_run;
 
+    //!< method to process raw channels from a given vector and store them in collection
+    template<class ITERATOR, class COLLECTION>
+    void build(TileDrawerEvtStatusArray& drawerEvtStatus,
+               const ITERATOR & begin,
+               const ITERATOR & end,
+               COLLECTION * coll,
+               TileCellContainer* MBTSCells,
+               TileCellContainer* E4prCells) const;
+               
+
+    /** method to check if channels are good or bad. Puts zero if both channels are bad
+     or recovers from single-channel failure. It returns true if cell was changed, false otherwise
+     */
+    bool maskBadChannel (TileDrawerEvtStatusArray& drawerEvtStatus,
+                         TileCell* pCell) const;
+    bool maskBadChannels (TileDrawerEvtStatusArray& drawerEvtStatus,
+                          TileCell* pCell, bool single_PMT_C10, bool Ecell) const;
+
     void correctCell(TileCell* pCell, int correction, int pmt, int gain, float ener, float time,
-        unsigned char iqual, unsigned char qbit); //!< Compute calibrated energy, time, etc. for TileCell and adjust it.
+        unsigned char iqual, unsigned char qbit) const; //!< Compute calibrated energy, time, etc. for TileCell and adjust it.
 
-    unsigned char iquality(float qual)  {//!< method to compute the cell quality
+    unsigned char iquality(float qual) const  {//!< method to compute the cell quality
          return std::min(255, abs((int) qual));
     } // keep quality within 8 bits make it "unsigned char"
 
-    unsigned char qbits(int ros, int drawer, bool count_over, bool good_time, bool good_ener,
-        bool overflow, bool underflow, bool good_overflowfit); //!< method to compute the cell quality bits
+    unsigned char qbits(TileDrawerEvtStatusArray& drawerEvtStatus,
+                        int ros, int drawer, bool count_over, bool good_time, bool good_ener,
+        bool overflow, bool underflow, bool good_overflowfit) const; //!< method to compute the cell quality bits
 
     int m_RUN2;
     int m_E1_TOWER;
diff --git a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.py b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.py
index ec8476d086edd9939ac28aabba0591ee7ec84bd4..86f1227a3c06575bf46f77e4b9388289f2433151 100644
--- a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.py
+++ b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.py
@@ -429,6 +429,9 @@ ToolSvc += maketool ('tool1', bct1)
 ToolSvc += maketool ('tool2', bct2, maskBadChannels = True)
 ToolSvc += maketool ('tool3', bct1, noise = 0.1)
 
+from xAODEventInfoCnv.xAODEventInfoCnvConf import xAODMaker__EventInfoCnvAlg
+topSequence += xAODMaker__EventInfoCnvAlg (DoBeginRun = False)
+
 testalg1 = TestAlg ('testalg1')
 topSequence += testalg1
 
diff --git a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref
index 0ebec00bd14222552dc1c5f4f6d49efbe95fd7ca..3dc63ae8fc878ea6a966bd824f22a50c337d6286 100644
--- a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref
+++ b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref
@@ -1,14 +1,14 @@
-Mon Dec 17 02:35:03 CET 2018
+Mon Jan 14 15:46:49 EST 2019
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [AthenaWorkDir-22.0.1] [x86_64-slc6-gcc62-dbg] [atlas-work3/d6d3116653c] -- built on [2018-12-16T1848]
+Py:Athena            INFO using release [WorkDir-22.0.1] [x86_64-slc6-gcc8-opt] [master-mt/7f37c8e33ff] -- built on [2019-01-11T2041]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileRecUtils/TileCellBuilderFromHit_test.py"
-[?1034hSetGeometryVersion.py obtained major release version 22
+SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5459 configurables from 51 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5435 configurables from 52 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 EventInfoMgtInit: Got release version  Athena-22.0.1
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
@@ -28,7 +28,7 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v30r5)
-                                          running on lxplus073.cern.ch on Mon Dec 17 02:35:26 2018
+                                          running on spar0101.usatlas.bnl.gov on Mon Jan 14 15:47:18 2019
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : AthenaServices
 ApplicationMgr       INFO Application Manager Configured successfully
@@ -36,7 +36,7 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO  getRegistryEntries: read 6864 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 7343 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
@@ -44,9 +44,9 @@ AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version Athena
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
-DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host lxplus073.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 1 servers found for host spar0101.usatlas.bnl.gov [ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc           WARNING Unable to locate catalog for prfile:poolcond/PoolCat_oflcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables
@@ -83,7 +83,7 @@ IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/STATUS/ADC
 IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/TIME/CHANNELOFFSET/PHY
 IOVDbSvc             INFO Added taginfo remove for /TILE/ONL01/STATUS/ADC
 IOVDbSvc             INFO Added taginfo remove for /LAR/LArCellPositionShift
-ClassIDSvc           INFO  getRegistryEntries: read 1919 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 1595 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO  getRegistryEntries: read 17 CLIDRegistry entries for module ALL
 DetDescrCnvSvc       INFO  initializing 
 DetDescrCnvSvc       INFO Found DetectorStore service
@@ -137,7 +137,7 @@ BarrelConstruction   INFO   Use sagging in geometry  ? 0
   multi-layered version of absorbers activated, mlabs == 1
 ================================================
 EventPersistenc...   INFO Added successfully Conversion service:DetDescrCnvSvc
-ClassIDSvc           INFO  getRegistryEntries: read 2398 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 2389 CLIDRegistry entries for module ALL
 CaloIDHelper_ID...   INFO in createObj: creating a TileTBID helper object in the detector store
 IdDictDetDescrCnv    INFO in initialize
 IdDictDetDescrCnv    INFO in createObj: creating a IdDictManager object in the detector store
@@ -176,7 +176,7 @@ TileDddbManager      INFO n_tileSwitches = 1
 ClassIDSvc           INFO  getRegistryEntries: read 213 CLIDRegistry entries for module ALL
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -188,9 +188,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -217,11 +217,11 @@ TileInfoLoader       INFO Sampling fraction for E2 cells 1/107
 TileInfoLoader       INFO Sampling fraction for E3 cells 1/97
 TileInfoLoader       INFO Sampling fraction for E4 cells 1/75
 TileInfoLoader       INFO Sampling fraction for E4' cells 1/75
-TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulsehi_physics.dat
-TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulselo_physics.dat
-TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulse_adder_tower_physics.dat
-TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulse_adder_muonRcv_physics.dat
-TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/pulse_adder_muon_physics.dat
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulsehi_physics.dat
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulselo_physics.dat
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulse_adder_tower_physics.dat
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulse_adder_muonRcv_physics.dat
+TileInfoLoader       INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/pulse_adder_muon_physics.dat
 CaloIDHelper_ID...   INFO in createObj: creating a CaloLVL1_ID helper object in the detector store
 CaloLVL1_ID          INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -276,9 +276,17 @@ TileSampleNoise...   INFO Creating TileCondProxyCool(TileSampleNoiseCondAlg.Tile
 TileTimingCondA...   INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
 tilecellbuilder...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
 tilecellbuilder...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
+ClassIDSvc           INFO  getRegistryEntries: read 504 CLIDRegistry entries for module ALL
+xAODMaker::Even...   INFO Initializing - Package version: xAODEventInfoCnv-00-00-00
+xAODMaker::Even...   INFO Initializing - Package version: xAODEventInfoCnv-00-00-00
+xAODMaker::Even...WARNING Beam conditions service not available
+xAODMaker::Even...WARNING Will not fill beam spot information into xAOD::EventInfo
+xAODMaker::Even...   INFO Luminosity information not available
+xAODMaker::Even...   INFO Will take information from the EventInfo object
+ClassIDSvc           INFO  getRegistryEntries: read 319 CLIDRegistry entries for module ALL
 PyComponentMgr       INFO Initializing PyComponentMgr...
 testalg1             INFO Initializing testalg1...
-ClassIDSvc           INFO  getRegistryEntries: read 5265 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 4849 CLIDRegistry entries for module ALL
 ToolSvc.tool1        INFO Storing MBTS cells in MBTSContainer
 ToolSvc.tool1        INFO Noise Sigma 0 MeV is selected!
 AtRndmGenSvc         INFO Initializing AtRndmGenSvc - package version RngComps-00-00-00
@@ -287,7 +295,6 @@ AtRndmGenSvc         INFO will be reseeded for every event
 AtRndmGenSvc      WARNING  INITIALISING Tile_DigitsMaker stream with DEFAULT seeds 3591  2309736
 ToolSvc.tool1        INFO max time thr  25 ns
 ToolSvc.tool1        INFO min time thr  -25 ns
-ToolSvc.tool1        INFO size of temp vector set to 5184
 ToolSvc.tool1        INFO taking hits from 'TileHitCnt'
 ToolSvc.tool1        INFO Storing E4'  cells in E4prContainer
 ToolSvc.tool1        INFO TileCellBuilderFromHit initialization completed
@@ -296,7 +303,6 @@ ToolSvc.tool2        INFO Storing MBTS cells in MBTSContainer
 ToolSvc.tool2        INFO Noise Sigma 0 MeV is selected!
 ToolSvc.tool2        INFO max time thr  25 ns
 ToolSvc.tool2        INFO min time thr  -25 ns
-ToolSvc.tool2        INFO size of temp vector set to 5184
 ToolSvc.tool2        INFO taking hits from 'TileHitCnt'
 ToolSvc.tool2        INFO Storing E4'  cells in E4prContainer
 ToolSvc.tool2        INFO TileCellBuilderFromHit initialization completed
@@ -304,7 +310,6 @@ ToolSvc.tool3        INFO Storing MBTS cells in MBTSContainer
 ToolSvc.tool3        INFO Noise Sigma 0.1 MeV is selected!
 ToolSvc.tool3        INFO max time thr  25 ns
 ToolSvc.tool3        INFO min time thr  -25 ns
-ToolSvc.tool3        INFO size of temp vector set to 5184
 ToolSvc.tool3        INFO taking hits from 'TileHitCnt'
 ToolSvc.tool3        INFO Storing E4'  cells in E4prContainer
 ToolSvc.tool3        INFO TileCellBuilderFromHit initialization completed
@@ -349,18 +354,19 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper ob
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
 CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /afs/cern.ch/user/s/ssnyder/atlas-work3/build-x86_64-slc6-gcc62-dbg/x86_64-slc6-gcc62-dbg/share/TileSuperCellNeighbour.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileSuperCellNeighbour.txt
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
 Domain[ROOT_All]     INFO                           /cvmfs/atlas-condb.cern.ch/repo/conditions/cond08/cond08_mc.000003.gen.COND/cond08_mc.000003.gen.COND._0064.pool.root
 RootDatabase.open    INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond08/cond08_mc.000003.gen.COND/cond08_mc.000003.gen.COND._0064.pool.root File version:52200
+xAODMaker::Even...WARNING Algorithm::BeginRun is deprecated. Use Start instead
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #1, run #1 0 events processed so far  <<<===
 IOVDbSvc             INFO Opening COOL connection for COOLOFL_TILE/OFLP200
 IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02CalibCes-SIM-06 for folder /TILE/OFL02/CALIB/CES
@@ -383,8 +389,8 @@ TileBadChannels...   INFO TileBchStatus::isNoisy() is defined by: Large HF noise
 TileBadChannels...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; No PMT connected; No HV; Channel masked for LV1 (unspecified); LV1 channel no gain; LV1 channel noisy; Channel disabled for LV1; 
 TileBadChannels...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
 TileBadChannels...   INFO No drawer trips probabilities found in DB
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/TileNoBad.oflBch"
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileNoBad.oflBch"
 tilecellbuilder...   INFO No TileBchStatus::isBad() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoisy() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -394,8 +400,8 @@ tilecellbuilder...   INFO TileBchStatus::isNoisy() is defined by: Large HF noise
 tilecellbuilder...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; No PMT connected; No HV; Channel masked for LV1 (unspecified); LV1 channel no gain; LV1 channel noisy; Channel disabled for LV1; 
 tilecellbuilder...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
 tilecellbuilder...   INFO No drawer trips probabilities found in DB
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2018-12-15T2259/Athena/22.0.1/InstallArea/x86_64-slc6-gcc62-dbg/share/TileNoBad.oflBch"
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/afs/cern.ch/work/s/ssnyder/builds/atlas-work3/build-x86_64-slc6-gcc62-dbg/TileCalorimeter/TileRecUtils/unitTestRun/tilecellbuilder_bct2.bch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2019-01-07T2353/Athena/22.0.1/InstallArea/x86_64-slc6-gcc8-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/gpfs/mnt/atlasgpfs01/usatlas/data/snyder/atlas-master-mt/build-x86_64-slc6-gcc8-opt/TileCalorimeter/TileRecUtils/unitTestRun/tilecellbuilder_bct2.bch"
 tilecellbuilder...   INFO No TileBchStatus::isBad() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoisy() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -406,12 +412,6 @@ tilecellbuilder...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; N
 tilecellbuilder...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
 tilecellbuilder...   INFO No drawer trips probabilities found in DB
 ClassIDSvc           INFO  getRegistryEntries: read 650 CLIDRegistry entries for module ALL
-IncrementalExecutor::executeFunction: symbol '_ZNK7TileHitcvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEv' unresolved while linking function '__cxx_global_var_initcling_module_5164_'!
-You are probably missing the definition of TileHit::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >() const
-Maybe you need to load the corresponding shared library?
-IncrementalExecutor::executeFunction: symbol '_ZNK7TileHitcvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEv' unresolved while linking function '__cxx_global_var_initcling_module_5179_'!
-You are probably missing the definition of TileHit::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >() const
-Maybe you need to load the corresponding shared library?
 ClassIDSvc           INFO  getRegistryEntries: read 194 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO  getRegistryEntries: read 8 CLIDRegistry entries for module ALL
 AtRndmGenSvc         INFO  Stream =  Tile_DigitsMaker, Seed1 =  288581169, Seed2 = 758068585
@@ -437,23 +437,23 @@ IncidentProcAlg2     INFO Finalize
 AtRndmGenSvc         INFO  FINALISING 
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/1 objs/chan/bytes 1/1/170 ((     3.13 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     1.60 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     1.00 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     1.00 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.99 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.94 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.97 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.78 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     1.62 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.55 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.58 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.07 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 1/1 objs/chan/bytes 1/1/195 ((     1.08 ))s
-IOVDbSvc             INFO  bytes in ((     14.30 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/1 objs/chan/bytes 1/1/170 ((     1.84 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     2.10 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     1.83 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     1.83 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     1.48 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     1.65 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     1.65 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     1.65 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     2.60 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     1.48 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     1.65 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.09 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 1/1 objs/chan/bytes 1/1/195 ((     1.11 ))s
+IOVDbSvc             INFO  bytes in ((     20.96 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 2 nFolders: 2 ReadTime: ((     4.21 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((    10.10 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 2 nFolders: 2 ReadTime: ((     2.95 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((    18.01 ))s
 TileInfoLoader       INFO TileInfoLoader::finalize()
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
@@ -463,9 +463,9 @@ ToolSvc.tool1        INFO Finalizing
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot= 0.86  [s] Ave/Min/Max= 0.43(+- 0.41)/ 0.02/ 0.84  [s] #=  2
-cObj_ALL             INFO Time User   : Tot= 1.11  [s] Ave/Min/Max=0.0854(+-0.251)/    0/ 0.94  [s] #= 13
-ChronoStatSvc        INFO Time User   : Tot= 66.1  [s]                                             #=  1
+cObjR_ALL            INFO Time User   : Tot= 0.55  [s] Ave/Min/Max=0.275(+-0.265)/ 0.01/ 0.54  [s] #=  2
+cObj_ALL             INFO Time User   : Tot= 0.66  [s] Ave/Min/Max=0.0508(+-0.152)/    0/ 0.57  [s] #= 13
+ChronoStatSvc        INFO Time User   : Tot= 43.7  [s]                                             #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx b/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx
index 2d7978825a8b247484520048bfcc369bf79fcd9e..7562651a66d917a82d8481c98d09260af301d427 100644
--- a/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx
+++ b/TileCalorimeter/TileRecUtils/src/TileCellBuilderFromHit.cxx
@@ -70,7 +70,7 @@ const InterfaceID& TileCellBuilderFromHit::interfaceID( ) {
 //Constructor
 TileCellBuilderFromHit::TileCellBuilderFromHit(const std::string& type, const std::string& name,
     const IInterface* parent)
-  : AthAlgTool(type, name, parent)
+  : base_class(type, name, parent)
   , m_infoName("TileInfo")
   , m_eneForTimeCut(35. * MeV) // keep time only for cells above 70 MeV (more than 35 MeV in at least one PMT to be precise)
   , m_eneForTimeCutMBTS(0.03675) // the same cut for MBTS, but in pC, corresponds to 3 ADC counts or 35 MeV
@@ -91,12 +91,10 @@ TileCellBuilderFromHit::TileCellBuilderFromHit(const std::string& type, const st
   , m_mbtsMgr(0)
   , m_RChType(TileFragHash::Default)
 {
-  declareInterface<ICaloCellMakerTool>( this );
   declareInterface<TileCellBuilderFromHit>( this );
 
-  memset(m_drawerEvtStatus, 0, sizeof(m_drawerEvtStatus));
-  memset(m_drawerRunStatus, 0, sizeof(m_drawerRunStatus));
-  memset(m_eventErrorCounter, 0, sizeof(m_eventErrorCounter));
+  //memset(m_drawerRunStatus, 0, sizeof(m_drawerRunStatus));
+  //memset(m_eventErrorCounter, 0, sizeof(m_eventErrorCounter));
 
   // never set energy to zero, but set it to some small number
   // this will help TopoCluster to assign proper weight to the cell if needed
@@ -143,12 +141,10 @@ StatusCode TileCellBuilderFromHit::initialize() {
   // retrieve MBTS and Tile detector manager, TileID helper and TileIfno from det store
   if (m_MBTSContainerKey.key().empty()) {
     m_mbtsMgr = nullptr;
-    m_MBTSVec.resize(0);
   } else {
 
     ATH_CHECK( m_MBTSContainerKey.initialize() );
     ATH_MSG_INFO( "Storing MBTS cells in " << m_MBTSContainerKey.key() );
-    m_MBTSVec.resize(NCELLMBTS);
     
     if (detStore()->retrieve(m_mbtsMgr).isFailure()) {
       ATH_MSG_WARNING( "Unable to retrieve MbtsDetDescrManager from DetectorStore" );
@@ -186,11 +182,8 @@ StatusCode TileCellBuilderFromHit::initialize() {
   ATH_MSG_INFO( "max time thr  " << m_maxTime << " ns" );
   ATH_MSG_INFO( "min time thr  " << m_minTime << " ns" );
   
-  // prepare empty vector for all cell pointers
-  m_allCells.resize(m_tileID->cell_hash_max(), 0);
-  m_E1_TOWER = (m_allCells.size() < 10000) ? 10 : 40;
+  m_E1_TOWER = (m_tileID->cell_hash_max() < 10000) ? 10 : 40;
 
-  ATH_MSG_INFO( "size of temp vector set to " << m_allCells.size() );
   ATH_MSG_INFO( "taking hits from '" << m_hitContainerKey.key() << "'" );
 
   m_cabling = TileCablingService::getInstance();
@@ -199,10 +192,8 @@ StatusCode TileCellBuilderFromHit::initialize() {
   if (m_RUN2 && !m_E4prContainerKey.key().empty()) {
     ATH_CHECK( m_E4prContainerKey.initialize() );
     ATH_MSG_INFO( "Storing E4'  cells in " << m_E4prContainerKey.key() );
-    m_E4prVec.resize(NCELLE4PR);
   } else {
     m_E4prContainerKey = ""; // no E4' container for RUN1
-    m_E4prVec.resize(0);
   }
 
 
@@ -219,14 +210,15 @@ StatusCode TileCellBuilderFromHit::finalize() {
 }
 
 StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer) {
+  const EventContext& ctx = Gaudi::Hive::currentContext();
 
   //**
   //* Get TileHits
   //**
 
-  memset(m_drawerEvtStatus, 0, sizeof(m_drawerEvtStatus));
+  TileDrawerEvtStatusArray drawerEvtStatus;
 
-  SG::ReadHandle<TileHitContainer> hitContainer(m_hitContainerKey);
+  SG::ReadHandle<TileHitContainer> hitContainer(m_hitContainerKey, ctx);
 
   if (!hitContainer.isValid()) {
 
@@ -237,12 +229,14 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer)
     
     ATH_MSG_DEBUG( "Container " << m_hitContainerKey.key() << " with TileHits found ");
 
+    std::unique_ptr<TileCellContainer> MBTSCells;
     if (!m_MBTSContainerKey.key().empty()) {
-      m_MBTSCells = std::make_unique<TileCellContainer>(SG::VIEW_ELEMENTS);
+      MBTSCells = std::make_unique<TileCellContainer>(SG::VIEW_ELEMENTS);
     }
 
+    std::unique_ptr<TileCellContainer> E4prCells;
     if (!m_E4prContainerKey.key().empty()) {
-      m_E4prCells = std::make_unique<TileCellContainer>(SG::VIEW_ELEMENTS);
+      E4prCells = std::make_unique<TileCellContainer>(SG::VIEW_ELEMENTS);
     }
     
     SelectAllObject<TileHitContainer> selAll(hitContainer.cptr());
@@ -251,17 +245,18 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer)
 
     if (begin != end) {
       ATH_MSG_DEBUG( " Calling build() method for hits from " << m_hitContainerKey.key() );
-      build(begin, end, theCellContainer);
+      build (drawerEvtStatus, begin, end, theCellContainer,
+             MBTSCells.get(), E4prCells.get());
     }
     
     if (!m_MBTSContainerKey.key().empty()) {
-      SG::WriteHandle<TileCellContainer> MBTSContainer(m_MBTSContainerKey);
-      ATH_CHECK( MBTSContainer.record(std::move(m_MBTSCells)) );
+      SG::WriteHandle<TileCellContainer> MBTSContainer(m_MBTSContainerKey, ctx);
+      ATH_CHECK( MBTSContainer.record(std::move(MBTSCells)) );
     }
     
     if (!m_E4prContainerKey.key().empty()) {
-      SG::WriteHandle<TileCellContainer> E4prContainer(m_E4prContainerKey);
-      ATH_CHECK( E4prContainer.record(std::move(m_E4prCells)) );
+      SG::WriteHandle<TileCellContainer> E4prContainer(m_E4prContainerKey, ctx);
+      ATH_CHECK( E4prContainer.record(std::move(E4prCells)) );
     }
 
     CaloCell_ID::SUBCALO caloNum = CaloCell_ID::TILE;
@@ -293,8 +288,8 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer)
   int drConsecNum = 0;
 
   for (int p = 1; p < 5; ++p) {
-    TileDrawerEvtStatus * evt = m_drawerEvtStatus[p];
-    TileDrawerRunStatus * run = m_drawerRunStatus[p];
+    TileDrawerEvtStatus * evt = drawerEvtStatus[p];
+    //TileDrawerRunStatus * run = m_drawerRunStatus[p];
     int drAbsent = 0;
     int drMasked = 0;
     int drConsec = 0;
@@ -307,11 +302,11 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer)
       if (evt[d].nChannels == 0) {
         ++drConsec;
         ++drAbsent;
-        ++(run[d].drawerAbsent);
+        //++(run[d].drawerAbsent);
       } else if (evt[d].nMaskedChannels >= evt[d].nChannels) {
         ++drConsec;
         ++drMasked;
-        ++(run[d].drawerMasked);
+        //++(run[d].drawerMasked);
       } else {
         if (drConsec > drConsecMax) {
           drConsecMax = drConsec;
@@ -321,9 +316,9 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer)
           }
         }
         drConsec = 0;
-        if (evt[d].nMaskedChannels > 0) {
-          ++(run[d].channelsMasked);
-        }
+        //if (evt[d].nMaskedChannels > 0) {
+        // ++(run[d].channelsMasked);
+        //}
         if (evt[d].nBadQuality) ++hasBadQ;
         if (evt[d].nOverflow) ++hasOver;
         if (evt[d].nUnderflow) ++hasUnder;
@@ -383,11 +378,11 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer)
   std::cout<<"partition flag 0x0"<<std::hex<<flag<<std::dec<<" error "<<error<<std::endl;
 #endif
 
-  ++m_eventErrorCounter[error]; // error index is 0 or 1 or 2 here
-  ++m_eventErrorCounter[3]; // count separately total number of events
+  //++m_eventErrorCounter[error]; // error index is 0 or 1 or 2 here
+  //++m_eventErrorCounter[3]; // count separately total number of events
   
   // retrieve EventInfo
-  SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfoKey);
+  SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfoKey, ctx);
 
   if (eventInfo.isValid()) {
 
@@ -406,6 +401,9 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer)
     }
 
   }
+  else {
+    ATH_MSG_WARNING( " cannot retrieve EventInfo, will not set Tile information " );
+  }
   
   // Execution completed.
   ATH_MSG_DEBUG( "TileCellBuilderFromHit execution completed." );
@@ -415,7 +413,7 @@ StatusCode TileCellBuilderFromHit::process(CaloCellContainer * theCellContainer)
 
 //************************************************************************
 void TileCellBuilderFromHit::correctCell(TileCell* pCell, int correction, int pmt, int gain
-                                         , float ener, float time, unsigned char iqual, unsigned char qbit) {
+                                         , float ener, float time, unsigned char iqual, unsigned char qbit) const {
 //************************************************************************
 
 // Merge two pmts in one cell if needed
@@ -436,14 +434,15 @@ void TileCellBuilderFromHit::correctCell(TileCell* pCell, int correction, int pm
   }
 }
 
-unsigned char TileCellBuilderFromHit::qbits(int ros, int drawer, bool count_over
-    , bool good_time, bool good_ener, bool overflow, bool underflow, bool overfit) {
+unsigned char TileCellBuilderFromHit::qbits(TileDrawerEvtStatusArray& drawerEvtStatus,
+                                            int ros, int drawer, bool count_over
+    , bool good_time, bool good_ener, bool overflow, bool underflow, bool overfit) const {
 
-  ++m_drawerEvtStatus[ros][drawer].nChannels;
+  ++drawerEvtStatus[ros][drawer].nChannels;
   // new feature in rel 17.2.7 - count underflows and overflows
   if (count_over) {
-    if (overflow) ++m_drawerEvtStatus[ros][drawer].nOverflow;
-    if (underflow) ++m_drawerEvtStatus[ros][drawer].nUnderflow;
+    if (overflow) ++drawerEvtStatus[ros][drawer].nOverflow;
+    if (underflow) ++drawerEvtStatus[ros][drawer].nUnderflow;
   }
 #ifdef ALLOW_DEBUG_COUT
   if (overflow)  std::cout << "channel with overflow " << ((count_over)?"":"MBTS") << std::endl;
@@ -459,7 +458,7 @@ unsigned char TileCellBuilderFromHit::qbits(int ros, int drawer, bool count_over
   if (good_ener) {
     qbit |= TileCell::MASK_AMPL;
     if (count_over) {
-      ++m_drawerEvtStatus[ros][drawer].nSomeSignal;
+      ++drawerEvtStatus[ros][drawer].nSomeSignal;
     }
   }
 
@@ -467,8 +466,10 @@ unsigned char TileCellBuilderFromHit::qbits(int ros, int drawer, bool count_over
 }
 
 // masking for MBTS with single channel
-bool TileCellBuilderFromHit::maskBadChannel(TileCell* pCell) {
-
+bool
+TileCellBuilderFromHit::maskBadChannel (TileDrawerEvtStatusArray& drawerEvtStatus,
+                                        TileCell* pCell) const
+{
   Identifier cell_id = pCell->ID();
 
   HWIdentifier channel_id = m_cabling->s2h_channel_id(cell_id);
@@ -483,7 +484,7 @@ bool TileCellBuilderFromHit::maskBadChannel(TileCell* pCell) {
   // check quality first
   bool bad = ((int) pCell->qual1() > m_qualityCut);
   if (bad) {
-    ++m_drawerEvtStatus[ros][drawer].nBadQuality;
+    ++drawerEvtStatus[ros][drawer].nBadQuality;
 
   } else {
     // check bad status in DB
@@ -493,7 +494,7 @@ bool TileCellBuilderFromHit::maskBadChannel(TileCell* pCell) {
 
   if (bad) {
     // only one channel in this cell and it is bad
-    ++m_drawerEvtStatus[ros][drawer].nMaskedChannels;
+    ++drawerEvtStatus[ros][drawer].nMaskedChannels;
 
     //pCell->setEnergy(m_zeroEnergy,0.0,TileID::LOWGAIN,CaloGain::INVALIDGAIN); // reset energy completely, indicate problem putting low gain
     //pCell->setTime(0.0); // reset time completely
@@ -520,7 +521,9 @@ bool TileCellBuilderFromHit::maskBadChannel(TileCell* pCell) {
 }
   
 // masking for normal cells
-bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C10, bool Ecell) {
+bool
+TileCellBuilderFromHit::maskBadChannels (TileDrawerEvtStatusArray& drawerEvtStatus,
+                                         TileCell* pCell, bool single_PMT_C10, bool Ecell) const {
 
   const CaloDetDescrElement* caloDDE = pCell->caloDDE();
 
@@ -540,7 +543,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1
   // check quality first
   bool bad1 = ((int) pCell->qual1() > m_qualityCut);
   if (bad1) {
-    ++m_drawerEvtStatus[ros1][drawer1].nBadQuality;
+    ++drawerEvtStatus[ros1][drawer1].nBadQuality;
 
   } else {
     // check bad status in DB
@@ -553,7 +556,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1
 
     if (bad1) {
       // only one channel in this cell and it is bad
-      ++m_drawerEvtStatus[ros1][drawer1].nMaskedChannels;
+      ++drawerEvtStatus[ros1][drawer1].nMaskedChannels;
 
       if (gain1 == CaloGain::INVALIDGAIN) {
         pCell->setEnergy(m_zeroEnergy, 0.0, TileID::LOWGAIN, CaloGain::INVALIDGAIN); // reset energy completely, indicate problem putting low gain
@@ -587,7 +590,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1
     // check quality first
     bool bad2 = ((int) pCell->qual2() > m_qualityCut);
     if (bad2) {
-      ++m_drawerEvtStatus[ros2][drawer2].nBadQuality;
+      ++drawerEvtStatus[ros2][drawer2].nBadQuality;
 
     } else {
       // check bad status in DB
@@ -623,7 +626,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1
           pCell->setEnergy(pCell->ene2()/2., pCell->ene2()/2., gain2, gain2);
           //bad1 = bad2;
           bad1 = true;
-          --m_drawerEvtStatus[ros1][drawer1].nMaskedChannels; // since it's fake masking, decrease counter by 1 in advance
+          --drawerEvtStatus[ros1][drawer1].nMaskedChannels; // since it's fake masking, decrease counter by 1 in advance
         }
       } else {
         if (m_RUN2 || !chStatus2.isBad()) {
@@ -636,14 +639,14 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1
           pCell->setEnergy(pCell->ene1()/2., pCell->ene1()/2., gain1, gain1);
           //bad2 = bad1;
           bad2 = true;
-          --m_drawerEvtStatus[ros2][drawer2].nMaskedChannels; // since it's fake masking, decrease counter by 1 in advance
+          --drawerEvtStatus[ros2][drawer2].nMaskedChannels; // since it's fake masking, decrease counter by 1 in advance
         }
       }
     }
     if (bad1 && bad2) {
       // both channels are bad
-      ++m_drawerEvtStatus[ros1][drawer1].nMaskedChannels;
-      ++m_drawerEvtStatus[ros2][drawer2].nMaskedChannels;
+      ++drawerEvtStatus[ros1][drawer1].nMaskedChannels;
+      ++drawerEvtStatus[ros2][drawer2].nMaskedChannels;
 
       if (gain1 == CaloGain::INVALIDGAIN || gain2 == CaloGain::INVALIDGAIN) {
         if (gain1 == CaloGain::INVALIDGAIN) gain1 = 0; // this is TileID::LOWGAIN; - commented out to make Coverity happy
@@ -660,7 +663,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1
 
     } else if (bad1 && !bad2) {
       // first channel is bad
-      ++m_drawerEvtStatus[ros1][drawer1].nMaskedChannels;
+      ++drawerEvtStatus[ros1][drawer1].nMaskedChannels;
 
       float ene2 = pCell->ene2();
       pCell->setEnergy(ene2, ene2, gain2, gain2); // use energy/gain from second pmt for both pmts
@@ -683,7 +686,7 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1
 
     } else if (!bad1 && bad2) {
       // second channel is bad
-      ++m_drawerEvtStatus[ros2][drawer2].nMaskedChannels;
+      ++drawerEvtStatus[ros2][drawer2].nMaskedChannels;
 
       float ene1 = pCell->ene1();
       pCell->setEnergy(ene1, ene1, gain1, gain1);  // use energy/gain from first pmt for both pmts
@@ -733,9 +736,13 @@ bool TileCellBuilderFromHit::maskBadChannels(TileCell* pCell, bool single_PMT_C1
 
 
 template<class ITERATOR, class COLLECTION>
-void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end, COLLECTION * coll) {
-
+void TileCellBuilderFromHit::build(TileDrawerEvtStatusArray& drawerEvtStatus,
+                                   const ITERATOR & begin, const ITERATOR & end, COLLECTION * coll,
+                                   TileCellContainer* MBTSCells,
+                                   TileCellContainer* E4prCells) const
+{
   // disable checks for TileID and remember previous state
+  // FIXME: const violation; MT problem.
   bool do_checks = m_tileID->do_checks();
   m_tileID->set_do_checks(false);
   bool do_checks_tb = m_tileID->do_checks();
@@ -767,6 +774,16 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
   bool overfit = false;
   float ener_min = (m_useNoiseTool) ? 1.0E-30F : 0.0;
 
+  std::vector<TileCell*> allCells (m_tileID->cell_hash_max(), nullptr);
+  std::vector<TileCell*> MBTSVec;   //!< vector to of pointers to MBTS cells
+  if (MBTSCells) {
+    MBTSVec.resize (NCELLMBTS);
+  }
+  std::vector<TileCell*> E4prVec;   //!< vector to of pointers to E4' cells
+  if (E4prCells) {
+    E4prVec.resize (NCELLE4PR);
+  }
+
   for (ITERATOR hitItr = begin; hitItr != end; ++hitItr) {
 
     const TileHit* pHit = (*hitItr);
@@ -857,13 +874,14 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
 
     if (E4pr) { // E4' cells
 
-      if (m_E4prCells) { // do something with them only if contaier existst
+      if (E4prCells) { // do something with them only if contaier existst
         ++nE4pr;
 
         eE4prTot += ener;
         unsigned char iqual = iquality(qual);
         // for E4' cell qbit use only non_zero_time flag and check that energy is above standatd energy threshold in MeV
-        unsigned char qbit = qbits(ros, drawer, true, non_zero_time, (fabs(ener) > m_eneForTimeCut)
+        unsigned char qbit = qbits(drawerEvtStatus,
+                                   ros, drawer, true, non_zero_time, (fabs(ener) > m_eneForTimeCut)
                                    , overflow, underflow, overfit);
         CaloGain::CaloGain cgain = (gain == TileID::HIGHGAIN)
                                    ? CaloGain::TILEONEHIGH
@@ -890,16 +908,16 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
                             << " qbit = 0x" << MSG::hex << (int) qbit << MSG::dec << endmsg;
         }
 
-        if (m_E4prVec[index]) {
+        if (E4prVec[index]) {
           msg(MSG::WARNING) << " double E4' cell_id=" << m_tileTBID->to_string(cell_id)
                             << "  ignoring previous value" << endmsg;
         }
-        m_E4prVec[index] = pCell;
+        E4prVec[index] = pCell;
       }
 
     } else if (MBTS) { // MBTS cells
 
-      if (m_MBTSCells) { // do something with them only if contaier existst
+      if (MBTSCells) { // do something with them only if contaier existst
         ++nMBTS;
 
         // convert energy to pCb
@@ -910,7 +928,8 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
         eMBTSTot += ener;
         unsigned char iqual = iquality(qual);
         // for MBTS qbit use AND of good_time and non_zero_time and check that energy is above MBTS energy threshold in pC
-        unsigned char qbit = qbits(ros, drawer, false, (good_time && non_zero_time)
+        unsigned char qbit = qbits(drawerEvtStatus,
+                                   ros, drawer, false, (good_time && non_zero_time)
            , (fabs(ener) > m_eneForTimeCutMBTS), overflow, underflow, overfit);
         CaloGain::CaloGain cgain = (gain == TileID::HIGHGAIN)
                                    ? CaloGain::TILEONEHIGH
@@ -937,11 +956,11 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
                             << " qbit = 0x" << MSG::hex << (int) qbit << MSG::dec << endmsg;
         }
 
-        if (m_MBTSVec[index]) {
+        if (MBTSVec[index]) {
           msg(MSG::WARNING) << " double MBTS cell_id=" << m_tileTBID->to_string(cell_id)
                             << "  ignoring previous value" << endmsg;
         }
-        m_MBTSVec[index] = pCell;
+        MBTSVec[index] = pCell;
       }
     } else {
 
@@ -949,7 +968,8 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
 
       unsigned char iqual = iquality(qual);
       // for normal cell qbit use only non_zero_time flag and check that energy is above standard energy threshold in MeV
-      unsigned char qbit = qbits(ros, drawer, true, non_zero_time, (fabs(ener) > m_eneForTimeCut)
+     unsigned char qbit = qbits(drawerEvtStatus,
+                                ros, drawer, true, non_zero_time, (fabs(ener) > m_eneForTimeCut)
           , overflow, underflow, overfit);
 
       if (E1_CELL && m_RUN2) {
@@ -960,7 +980,7 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
           int index2 = m_tileID->cell_hash(cell_id2);
           TileCell* pCell2 = NEWTILECELL();
           ++nCell;
-          m_allCells[index2] = pCell2;
+          allCells[index2] = pCell2;
           const CaloDetDescrElement* dde2 = m_tileMgr->get_cell_element(index2);
           pCell2->set(dde2, cell_id2);
           pCell2->setEnergy_nonvirt(0.0, 0.0, CaloGain::INVALIDGAIN, CaloGain::INVALIDGAIN);
@@ -973,13 +993,13 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
         }
       }
 
-      TileCell* pCell = m_allCells[index];
+      TileCell* pCell = allCells[index];
       if (pCell) {
         ++nTwo;
         correctCell(pCell, 2, pmt, gain, ener, time, iqual, qbit); // correct & merge 2 PMTs in one cell
       } else {
         ++nCell;
-        m_allCells[index] = pCell = NEWTILECELL();
+        allCells[index] = pCell = NEWTILECELL();
         const CaloDetDescrElement* dde = m_tileMgr->get_cell_element(index);
         pCell->set(dde, cell_id);
         pCell->setEnergy_nonvirt(0, 0, CaloGain::INVALIDGAIN, CaloGain::INVALIDGAIN);
@@ -1010,9 +1030,9 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
   //**
   // Now store all TileCells
   //**
-  for (unsigned int index = 0; index < m_allCells.size(); ++index) {
+  for (unsigned int index = 0; index < allCells.size(); ++index) {
 
-    TileCell * pCell = m_allCells[index];
+    TileCell * pCell = allCells[index];
     const CaloDetDescrElement* dde = m_tileMgr->get_cell_element(index);
     if(!dde)
     {
@@ -1038,7 +1058,7 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
         ++nCell;
         if (!single_PMT) ++nTwo;
 
-        m_allCells[index] = pCell = NEWTILECELL();
+        allCells[index] = pCell = NEWTILECELL();
         pCell->set(dde, cell_id);
 
         pCell->setEnergy_nonvirt(ener_min, 0.0, TileID::HIGHGAIN, (Ecell)?3:TileID::HIGHGAIN); // reset energy completely
@@ -1053,7 +1073,7 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
     if (pCell) {      // cell exists
 
       if (m_maskBadChannels)
-        if (maskBadChannels(pCell,single_PMT_C10,Ecell))
+        if (maskBadChannels (drawerEvtStatus, pCell,single_PMT_C10,Ecell))
           ATH_MSG_VERBOSE ( "cell with id=" << m_tileID->to_string(pCell->ID(), -2)
                            << " bad channels masked, new energy=" << pCell->energy() );
 
@@ -1108,26 +1128,26 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
         }
       }
       coll->push_back(pCell); // store cell in container
-      m_allCells[index] = 0; // clear pointer for next event
+      allCells[index] = 0; // clear pointer for next event
     }
   }
 
 
-  if (m_MBTSCells) {
+  if (MBTSCells) {
 
     for (int side = 0; side < NSIDE; ++side) {
       for (int phi = 0; phi < NPHI; ++phi) {
         for (int eta = 0; eta < NETA; ++eta) {
 
           int index=mbts_index(side,phi,eta);
-          TileCell * pCell = m_MBTSVec[index];
+          TileCell * pCell = MBTSVec[index];
 
           bool merged_MBTS = ( eta == 1 && (phi&1) == 1 && m_RUN2); // in RUN2 every second outer MBTS does not exist
 
           if (!pCell && !merged_MBTS) {
 
             ++nMBTS;
-            m_MBTSVec[index] = pCell = NEWTILECELL();
+            MBTSVec[index] = pCell = NEWTILECELL();
 
             Identifier cell_id = m_tileTBID->channel_id((side > 0) ? 1 : -1, phi, eta);
             pCell->set((m_mbtsMgr) ? m_mbtsMgr->get_element(cell_id) : NULL, cell_id);
@@ -1138,29 +1158,29 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
           }
           
           if (pCell) {
-            if (m_maskBadChannels && maskBadChannel(pCell))
+            if (m_maskBadChannels && maskBadChannel (drawerEvtStatus, pCell))
                 ATH_MSG_VERBOSE ( "MBTS cell with id=" << m_tileTBID->to_string(pCell->ID())
                                   << " bad channel masked, new energy=" << pCell->energy() );
 
-            m_MBTSCells->push_back(pCell); // store cell in container
-            m_MBTSVec[index] = 0; // clear pointer for next event
+            MBTSCells->push_back(pCell); // store cell in container
+            MBTSVec[index] = 0; // clear pointer for next event
           }
         }
       }
     }
   }
 
-  if (m_E4prCells) {
+  if (E4prCells) {
 
     for (int phi = 0; phi < E4NPHI; ++phi) {
 
       int index = e4pr_index(phi);
-      TileCell * pCell = m_E4prVec[index];
+      TileCell * pCell = E4prVec[index];
 
       if (!pCell) {
 
         ++nE4pr;
-        m_E4prVec[index] = pCell = NEWTILECELL();
+        E4prVec[index] = pCell = NEWTILECELL();
 
         pCell->set(NULL, m_tileTBID->channel_id(E4SIDE, phi, E4ETA));
         pCell->setEnergy_nonvirt(0.0, 0.0, CaloGain::TILEONEHIGH, CaloGain::INVALIDGAIN); // reset energy completely
@@ -1170,12 +1190,12 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
       }
 
       if (pCell) {
-        if (m_maskBadChannels && maskBadChannel(pCell))
+        if (m_maskBadChannels && maskBadChannel (drawerEvtStatus, pCell))
           ATH_MSG_VERBOSE ( "E4pr cell with id=" << m_tileTBID->to_string(pCell->ID())
                              << " bad channel masked, new energy=" << pCell->energy() );
 
-        m_E4prCells->push_back(pCell); // store cell in container
-        m_E4prVec[index] = 0; // clear pointer for next event
+        E4prCells->push_back(pCell); // store cell in container
+        E4prVec[index] = 0; // clear pointer for next event
       }
     }
   }
@@ -1188,10 +1208,10 @@ void TileCellBuilderFromHit::build(const ITERATOR & begin, const ITERATOR & end,
                     << " nFake=" << nFake
                     << " eneTot=" << eCellTot;
 
-    if (m_MBTSCells)
+    if (MBTSCells)
       msg(MSG::DEBUG) << " nMBTS=" << nMBTS
                       << " eMBTS=" << eMBTSTot;
-    if (m_E4prCells)
+    if (E4prCells)
       msg(MSG::DEBUG) << " nE4pr=" << nE4pr
                       << " eE4pr=" << eE4prTot;