diff --git a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py
index 87d0f6a7782a22a4b3669831e043b1526ad86873..5d3302dabf45d24eb5dac3f3a3ba0225e2234a7b 100644
--- a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py
+++ b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py
@@ -403,11 +403,11 @@ def getPi0ClusterCreator():
     
     from tauRecTools.tauRecToolsConf import TauPi0ClusterCreator
     TauPi0ClusterCreator = TauPi0ClusterCreator(name = _name,
-        InputPi0ClusterContainerName = 'TauPi0SubtractedClusters',
-        OutputPi0ClusterContainerName = 'TauPi0Clusters',
-        NeutralPFOContainerName= 'TauNeutralParticleFlowObjects',
-        HadronicClusterPFOContainerName = 'TauHadronicParticleFlowObjects',
-        )
+                                                Key_Pi0ClusterContainer="TauPi0SubtractedClusters",
+                                                Key_neutralPFOOutputContainer="TauPi0Clusters",
+                                                Key_pi0ClusterOutputContainer="TauNeutralParticleFlowObjects",
+                                                Key_hadronicPFOOutputContainer="TauHadronicParticleFlowObjects"
+                                                )
     
     cached_instances[_name] = TauPi0ClusterCreator
     return TauPi0ClusterCreator
diff --git a/Reconstruction/tauRec/python/TauRecBuilder.py b/Reconstruction/tauRec/python/TauRecBuilder.py
index a70aab4785eecd96a56e6ea07550b39f1ca74869..9d2d81af79df29f7af29a410adff45bbb3324107 100644
--- a/Reconstruction/tauRec/python/TauRecBuilder.py
+++ b/Reconstruction/tauRec/python/TauRecBuilder.py
@@ -138,8 +138,14 @@ class TauRecCoreBuilder ( TauRecConfigured ) :
                 #tools.append(tauRec.TauConversionAlgorithms.getPhotonConversionTool())
                 #tools.append(tauRec.TauConversionAlgorithms.getTauConversionFinderTool())
             
-            #tools.append(taualgs.getContainerLock())
+            # tools.append(taualgs.getContainerLock())
                 
+            ### TauRecPi0EflowProcessor ###
+            # Tools in this section were originally in TauRecPi0EflowProcessor
+            if self.doPi0Clus: tools.append(taualgs.getPi0ClusterCreator())
+
+            ###############################
+
             from tauRec.tauRecFlags import tauFlags
             tools+=tauFlags.tauRecToolsDevToolList()
             TauRecConfigured.AddToolsToToolSvc(self, tools)
diff --git a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx
index 622969b5d67b334ab6af84363b880f871c28cc8f..4b7da959f337c1bdc458fc87d055362361b8c04d 100644
--- a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx
+++ b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.cxx
@@ -29,22 +29,14 @@ using std::string;
 TauPi0ClusterCreator::TauPi0ClusterCreator( const string& name) :
 
     TauRecToolBase(name)
-    , m_inputPi0ClusterContainerName("TauPi0SubtractedClusters")
-    , m_outputPi0ClusterContainerName("TauPi0Clusters")
     , m_neutralPFOContainer(0)
-    , m_neutralPFOContainerName("TauNeutralParticleFlowObjects")
     , m_neutralPFOAuxStore(0)
     , m_hadronicClusterPFOContainer(0)
-    , m_hadronicClusterPFOContainerName("TauHadronicParticleFlowObjects")
     , m_hadronicClusterPFOAuxStore(0)
     , m_clusterEtCut(500.)
-    , m_pOutputPi0CaloClusterContainer(0)
+    , m_pi0CaloClusterContainer(0)
+    , m_pi0CaloClusterAuxContainer(0)
 {
-
-    declareProperty("InputPi0ClusterContainerName",  m_inputPi0ClusterContainerName);
-    declareProperty("OutputPi0ClusterContainerName", m_outputPi0ClusterContainerName);
-    declareProperty("NeutralPFOContainerName",       m_neutralPFOContainerName);
-    declareProperty("HadronicClusterPFOContainerName", m_hadronicClusterPFOContainerName);
     declareProperty("ClusterEtCut",                  m_clusterEtCut);
     declareProperty("AODMode",                       m_AODmode=false);
 }
@@ -60,7 +52,13 @@ TauPi0ClusterCreator::~TauPi0ClusterCreator()
 
 StatusCode TauPi0ClusterCreator::initialize() 
 {
-    return StatusCode::SUCCESS;
+
+  ATH_CHECK( m_pi0ClusterInputContainer.initialize() );
+  ATH_CHECK( m_neutralPFOOutputContainer.initialize() );
+  ATH_CHECK( m_pi0ClusterOutputContainer.initialize() );
+  ATH_CHECK( m_hadronicPFOOutputContainer.initialize() );
+  
+  return StatusCode::SUCCESS;
 }
 
 StatusCode TauPi0ClusterCreator::finalize() 
@@ -73,44 +71,27 @@ StatusCode TauPi0ClusterCreator::eventInitialize()
     // create new CaloClusterContainer 
     // this container will later persistified
     // so it will get ownership of the objects
-    ATH_MSG_VERBOSE("record container " << m_outputPi0ClusterContainerName);
     //---------------------------------------------------------------------
     // Create container for Pi0
     //---------------------------------------------------------------------
-    m_pOutputPi0CaloClusterContainer = CaloClusterStoreHelper::makeContainer(&*evtStore(),   
-									     m_outputPi0ClusterContainerName,    
-									     msg()                  
-									     );
+    m_pi0CaloClusterContainer = new xAOD::CaloClusterContainer();
+    m_pi0CaloClusterAuxContainer = new xAOD::CaloClusterAuxContainer();
+    m_pi0CaloClusterContainer->setStore(m_pi0CaloClusterAuxContainer);
+
 
     //---------------------------------------------------------------------
     // Create neutral PFO container
     //---------------------------------------------------------------------
-    if(!m_AODmode){
-      m_neutralPFOContainer = new xAOD::PFOContainer();
-      m_neutralPFOAuxStore = new xAOD::PFOAuxContainer();
-      m_neutralPFOContainer->setStore(m_neutralPFOAuxStore);
-      CHECK( evtStore()->record(m_neutralPFOContainer, m_neutralPFOContainerName ) );
-      CHECK( evtStore()->record( m_neutralPFOAuxStore, m_neutralPFOContainerName + "Aux." ) );
-    }
-    else {
-      CHECK( evtStore()->retrieve(m_neutralPFOContainer, m_neutralPFOContainerName) );
-      CHECK( evtStore()->retrieve(m_neutralPFOAuxStore, m_neutralPFOContainerName+"Aux.") );
-    }
+    m_neutralPFOContainer = new xAOD::PFOContainer();
+    m_neutralPFOAuxStore = new xAOD::PFOAuxContainer();
+    m_neutralPFOContainer->setStore(m_neutralPFOAuxStore);
 
     //---------------------------------------------------------------------
     // Create hadronic cluster PFO container
     //---------------------------------------------------------------------
-    if(!m_AODmode){
-      m_hadronicClusterPFOContainer = new xAOD::PFOContainer();
-      m_hadronicClusterPFOAuxStore = new xAOD::PFOAuxContainer();
-      m_hadronicClusterPFOContainer->setStore(m_hadronicClusterPFOAuxStore);
-      CHECK( evtStore()->record(m_hadronicClusterPFOContainer, m_hadronicClusterPFOContainerName ) );
-      CHECK( evtStore()->record( m_hadronicClusterPFOAuxStore, m_hadronicClusterPFOContainerName + "Aux." ) );
-    }
-    else{
-      CHECK( evtStore()->record(m_hadronicClusterPFOContainer, m_hadronicClusterPFOContainerName) );
-      CHECK( evtStore()->record(m_hadronicClusterPFOAuxStore, m_hadronicClusterPFOContainerName + "Aux.") );
-    }
+    m_hadronicClusterPFOContainer = new xAOD::PFOContainer();
+    m_hadronicClusterPFOAuxStore = new xAOD::PFOAuxContainer();
+    m_hadronicClusterPFOContainer->setStore(m_hadronicClusterPFOAuxStore);
 
     return StatusCode::SUCCESS;
 }
@@ -140,7 +121,12 @@ StatusCode TauPi0ClusterCreator::execute(xAOD::TauJet& pTau)
     // retrieve the CaloClusterContainer created by the CaloClusterMaker
     //---------------------------------------------------------------------
     const xAOD::CaloClusterContainer *pPi0ClusterContainer;
-    CHECK( evtStore()->retrieve(pPi0ClusterContainer, m_inputPi0ClusterContainerName) );
+    SG::ReadHandle<xAOD::CaloClusterContainer> pi0ClusterInHandle( m_pi0ClusterInputContainer );
+    if (!pi0ClusterInHandle.isValid()) {
+      ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << pi0ClusterInHandle.key());
+      return StatusCode::FAILURE;
+    }
+    pPi0ClusterContainer = pi0ClusterInHandle.cptr();
 
     //---------------------------------------------------------------------
     // TODO: May want to use tau vertex in the future to calculate some cluster moments (DELTA_THETA, etc.).
@@ -176,7 +162,7 @@ StatusCode TauPi0ClusterCreator::execute(xAOD::TauJet& pTau)
         xAOD::CaloCluster* pPi0Cluster = new xAOD::CaloCluster( *(*clusterItr) );
 
         // store pi0 calo cluster in the output container
-        m_pOutputPi0CaloClusterContainer->push_back(pPi0Cluster);
+        m_pi0CaloClusterContainer->push_back(pPi0Cluster);
 
         // Calculate input variables for fake supression. 
         // Do this before applying the vertex correction, 
@@ -235,7 +221,7 @@ StatusCode TauPi0ClusterCreator::execute(xAOD::TauJet& pTau)
 
         // Set PFO variables
         ElementLink<xAOD::CaloClusterContainer> clusElementLink;
-        clusElementLink.toContainedElement( *m_pOutputPi0CaloClusterContainer, pPi0Cluster );
+        clusElementLink.toContainedElement( *m_pi0CaloClusterContainer, pPi0Cluster );
         neutralPFO->setClusterLink( clusElementLink );
         
         neutralPFO->setP4( (float) pPi0Cluster->pt(), (float) pPi0Cluster->eta(), (float) pPi0Cluster->phi(), (float) pPi0Cluster->m());
@@ -302,10 +288,25 @@ StatusCode TauPi0ClusterCreator::eventFinalize()
     //----------------------------------------------------------------------
     // Register cluster container in StoreGate
     //----------------------------------------------------------------------
-    CHECK( CaloClusterStoreHelper::finalizeClusters(&(*evtStore()),
-                                                    m_pOutputPi0CaloClusterContainer,
-                                                    m_outputPi0ClusterContainerName,
-                                                    msg()));
+  //CHECK( CaloClusterStoreHelper::finalizeClusters(&(*evtStore()),
+  //m_pOutputPi0CaloClusterContainer,
+  //                                                m_outputPi0ClusterContainerName,
+  //                                                msg()));
+
+    // write PFO container
+    SG::WriteHandle<xAOD::PFOContainer> neutralPFOHandle( m_neutralPFOOutputContainer );
+    ATH_MSG_INFO("  write: " << neutralPFOHandle.key() << " = " << "..." );
+    ATH_CHECK(neutralPFOHandle.record(std::unique_ptr<xAOD::PFOContainer>{m_neutralPFOContainer}, std::unique_ptr<xAOD::PFOAuxContainer>{m_neutralPFOAuxStore}));
+
+    // write PFO container
+    SG::WriteHandle<xAOD::PFOContainer> hadronicPFOHandle( m_hadronicPFOOutputContainer );
+    ATH_MSG_INFO("  write: " << hadronicPFOHandle.key() << " = " << "..." );
+    ATH_CHECK(hadronicPFOHandle.record(std::unique_ptr<xAOD::PFOContainer>{m_hadronicClusterPFOContainer}, std::unique_ptr<xAOD::PFOAuxContainer>{m_hadronicClusterPFOAuxStore}));
+
+    // write calo cluster
+    SG::WriteHandle<xAOD::CaloClusterContainer> pi0ClusHandle( m_pi0ClusterOutputContainer );
+    ATH_MSG_INFO("  write: " << pi0ClusHandle.key() << " = " << "..." );
+    ATH_CHECK(pi0ClusHandle.record(std::unique_ptr<xAOD::CaloClusterContainer>{m_pi0CaloClusterContainer}, std::unique_ptr<xAOD::CaloClusterAuxContainer>{m_pi0CaloClusterAuxContainer}));
   
     return StatusCode::SUCCESS;
 }
diff --git a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h
index f6d7d6153d16b4e0d966abf413025b617fab62ac..f4ff1daaa1a8822641e10a10e578176ebb60b6a6 100644
--- a/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h
+++ b/Reconstruction/tauRecTools/src/TauPi0ClusterCreator.h
@@ -1,4 +1,4 @@
-/*
+1;4205;0c/*
   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
 
@@ -9,6 +9,7 @@
 #include <vector>
 #include "tauRecTools/TauRecToolBase.h"
 #include "xAODPFlow/PFOAuxContainer.h"
+#include "xAODCaloEvent/CaloClusterAuxContainer.h"
 
 
 /**
@@ -66,22 +67,12 @@ private:
     /** @brief get hadronic cluster PFOs*/
     bool setHadronicClusterPFOs(xAOD::TauJet& pTau);
 
-    /** @brief input cluster container of pi0 candidates */
-    // TODO: input cluster container name
-    std::string m_inputPi0ClusterContainerName;
-    
-    /** @brief output cluster container of pi0 candidates */
-    // TODO: output cluster container name
-    std::string m_outputPi0ClusterContainerName;
-
-    /** @brief new neutral PFO container and name */
+    /** @brief new neutral PFO container */
     xAOD::PFOContainer* m_neutralPFOContainer;
-    std::string m_neutralPFOContainerName;
     xAOD::PFOAuxContainer* m_neutralPFOAuxStore;
 
-    /** @brief new hadronic cluster PFO container and name */
+    /** @brief new hadronic cluster PFO container */
     xAOD::PFOContainer* m_hadronicClusterPFOContainer;
-    std::string m_hadronicClusterPFOContainerName;
     xAOD::PFOAuxContainer* m_hadronicClusterPFOAuxStore;
     
 
@@ -92,7 +83,14 @@ private:
     bool m_AODmode;
 
     /** @brief output cluster container */
-    xAOD::CaloClusterContainer*  m_pOutputPi0CaloClusterContainer;
+    xAOD::CaloClusterContainer* m_pi0CaloClusterContainer;
+    xAOD::CaloClusterAuxContainer* m_pi0CaloClusterAuxContainer;
+
+    
+    SG::ReadHandleKey<xAOD::CaloClusterContainer> m_pi0ClusterInputContainer{this,"Key_Pi0ClusterContainer", "TauPi0SubtractedClusters", "input pi0 cluster"};
+    SG::WriteHandleKey<xAOD::PFOContainer> m_neutralPFOOutputContainer{this,"Key_neutralPFOOutputContainer", "TauNeutralParticleFlowObjects", "tau neutral pfo out key"};
+    SG::WriteHandleKey<xAOD::CaloClusterContainer> m_pi0ClusterOutputContainer{this,"Key_pi0ClusterOutputContainer", "TauPi0Clusters", "tau pi0cluster output"};
+    SG::WriteHandleKey<xAOD::PFOContainer> m_hadronicPFOOutputContainer{this,"Key_hadronicPFOOutputContainer", "TauHadronicParticleFlowObjects", "tau hadronic pfo out key"};
 
 };