diff --git a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx
index 740bdd6fce4f5afaee93708f72e495291d0882a1..e9955f0047479827d5d0e20dce94be9bf51c0227 100644
--- a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx
+++ b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx
@@ -515,7 +515,7 @@ StatusCode DQTGlobalWZFinderTool::fillHistograms()
 	 
 	 ATH_MSG_DEBUG("Muon accept: " << m_muonSelectionTool->accept(**muonItr));
 	 ATH_MSG_DEBUG("Muon pt: " << (*muonItr)->pt() << " " << m_muonPtCut*GeV);
-	 ATH_MSG_DEBUG("Muon iso: " << m_isolationSelectionTool->accept(**muonItr));
+	 ATH_MSG_DEBUG("Muon iso: " << static_cast<bool> (m_isolationSelectionTool->accept(**muonItr)));
 	 ATH_MSG_DEBUG("Muon d0sig: " << d0sig);
 	 ATH_MSG_DEBUG("Muon Good vtx: " << pVtx);
 	 if (pVtx) 
diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationCloseByCorrectionTool.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationCloseByCorrectionTool.h
index 045472749f6fa22c5084bf914b8a042479e0dcb2..c536f1b80796af7cee8777078a771e9241a9cf0d 100644
--- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationCloseByCorrectionTool.h
+++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationCloseByCorrectionTool.h
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
  */
 
 #ifndef ISOLATIONSELECTION_IISOLATIONCLOSEBYCORRECTIONTOOL_H
@@ -7,7 +7,9 @@
 
 #include <PATInterfaces/CorrectionCode.h>
 #include <IsolationSelection/Defs.h>
-#include <PATCore/TAccept.h>
+
+#include <PATCore/AcceptData.h>
+#include <PATCore/AcceptInfo.h>
 
 #include <xAODEgamma/ElectronContainer.h>
 #include <xAODEgamma/PhotonContainer.h>
@@ -26,20 +28,33 @@ namespace CP {
                 DirectCaloClusters = -1, ParticleCaloCorrection = 0, CaloCorrectionExtCore = 1, CaloCorrectionVarAnulus = 2
             };
 
-            // This function calculates and applies (the particle is not redecorated) the corrections for close-by objects for each isolation variables and tests whether the particle passes the isolation working point after the corrections.
+            // This function calculates and applies (the particle is not redecorated) the corrections 
+            // for close-by objects for each isolation variables and tests whether the particle passes the isolation working point after the corrections.
             // Note that to use this functionality, a IsolationSelectionTool must have been passed to the tool (which must have been intialised indicating which isolation working point to use).
-            // The result returned is a TAccept object which is the decision made by the tool with respect to the particle passing the working point.
-            virtual Root::TAccept acceptCorrected(const xAOD::IParticle& x, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0;
-            virtual Root::TAccept acceptCorrected(const xAOD::IParticle& x, const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0;
+            // The result returned is a AcceptData object which is the decision made by the tool with respect to the particle passing the working point.
+            virtual asg::AcceptData acceptCorrected(const xAOD::IParticle& x, 
+                                                    const std::vector<const xAOD::IParticle*>& closePar, 
+                                                    int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0;
+            virtual asg::AcceptData acceptCorrected(const xAOD::IParticle& x, 
+                                                    const xAOD::IParticleContainer& closePar, 
+                                                    int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0;
 
             // This function calculates the values of the corrections for close-by objects to be applied to the isolation variables (without redecorating the particles).
             // The corrections are returned in a vector (one correction per isolation type provided).
             // This function is intended for experts only who want to check the effects of the corrections.
-            virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, const std::vector<xAOD::Iso::IsolationType>& types, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0;
-            virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, const std::vector<xAOD::Iso::IsolationType>& types, const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const=0;
+            virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, 
+                                                        const std::vector<xAOD::Iso::IsolationType>& types, 
+                                                        const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const = 0;
+            
+            virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, 
+                                                        const xAOD::IParticle& par, 
+                                                        const std::vector<xAOD::Iso::IsolationType>& types, 
+                                                        const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const=0;
 
-            virtual CorrectionCode getCloseByIsoCorrection(xAOD::ElectronContainer* Electrons = nullptr, xAOD::MuonContainer* Muons = nullptr, xAOD::PhotonContainer* Photons = nullptr, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const=0;
-            virtual CorrectionCode subtractCloseByContribution(xAOD::IParticle& x, const xAOD::IParticleContainer& closebyPar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const= 0;
+            virtual CorrectionCode getCloseByIsoCorrection(xAOD::ElectronContainer* Electrons = nullptr, xAOD::MuonContainer* Muons = nullptr, 
+                                                           xAOD::PhotonContainer* Photons = nullptr, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const=0;
+            virtual CorrectionCode subtractCloseByContribution(xAOD::IParticle& x, const xAOD::IParticleContainer& closebyPar, 
+                                                               int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const= 0;
 
             virtual float getOriginalIsolation(const xAOD::IParticle& P, IsoType type) const=0;
             virtual float getOriginalIsolation(const xAOD::IParticle* P, IsoType type) const=0;
diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h
index b4237c7d4586d8e87f7647d0fd66f5f3c806868c..5c24052e99dd85d7a3e74d982fdc7d058f1a07b2 100644
--- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h
+++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IIsolationSelectionTool.h
@@ -1,10 +1,9 @@
 // Dear emacs, this is -*- c++ -*-
 
 /*
- Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
  */
 
-// $Id: IIsolationSelectionTool.h 764207 2016-07-25 18:16:03Z alesage $
 // #ifndef ISOLATIONSELECTION_IISOLATIONSELECTIONTOOL_H
 // #define ISOLATIONSELECTION_IISOLATIONSELECTIONTOOL_H
 #ifndef ISOLATIONSELECTION_IISOLATIONSELECTIONTOOL_H
@@ -12,8 +11,8 @@
 
 // Framework include(s):
 #include "AsgTools/IAsgTool.h"
-#include "PATCore/TAccept.h"
-
+#include "PATCore/AcceptData.h"
+#include "PATCore/AcceptInfo.h"
 // EDM include(s):
 #include "xAODPrimitives/IsolationType.h"
 #include "xAODEgamma/Photon.h"
@@ -44,17 +43,17 @@ namespace CP {
 
         public:
             // Cut on object
-            virtual const Root::TAccept& accept(const xAOD::Photon& x) const = 0;
-            virtual const Root::TAccept& accept(const xAOD::Electron& x) const = 0;
-            virtual const Root::TAccept& accept(const xAOD::Muon& x) const = 0;
-            virtual const Root::TAccept& accept(const strObj& x) const = 0;
-            virtual const Root::TAccept& accept(const xAOD::IParticle& x) const = 0;
+            virtual const asg::AcceptData accept(const xAOD::Photon& x) const = 0;
+            virtual const asg::AcceptData accept(const xAOD::Electron& x) const = 0;
+            virtual const asg::AcceptData accept(const xAOD::Muon& x) const = 0;
+            virtual const asg::AcceptData accept(const strObj& x) const = 0;
+            virtual const asg::AcceptData accept(const xAOD::IParticle& x) const = 0;
             virtual StatusCode setIParticleCutsFrom(xAOD::Type::ObjectType ObjType) = 0;
 
-            virtual const Root::TAccept& getPhotonTAccept() const = 0;
-            virtual const Root::TAccept& getElectronTAccept() const = 0;
-            virtual const Root::TAccept& getMuonTAccept() const = 0;
-            virtual const Root::TAccept& getObjTAccept() const = 0;
+            virtual const asg::AcceptInfo& getPhotonAcceptInfo() const = 0;
+            virtual const asg::AcceptInfo& getElectronAcceptInfo() const = 0;
+            virtual const asg::AcceptInfo& getMuonAcceptInfo() const = 0;
+            virtual const asg::AcceptInfo& getObjAcceptInfo() const = 0;
 
             virtual const std::vector<IsolationWP*>& getMuonWPs() const=0;
             virtual const std::vector<IsolationWP*>& getElectronWPs() const=0;
diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCloseByCorrectionTool.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCloseByCorrectionTool.h
index 7aa5f461a302d3e393692b664529806f74390bbc..20a06454a853e1877c03925ee62a3a70fa43d993 100644
--- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCloseByCorrectionTool.h
+++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationCloseByCorrectionTool.h
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
  */
 
 #ifndef IsolationSelection_IsolationCloseByCorrectionTool_H
@@ -56,8 +56,12 @@ namespace CP {
             virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, const std::vector<xAOD::Iso::IsolationType>& types, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const;
             virtual CorrectionCode getCloseByCorrection(std::vector<float>& corrections, const xAOD::IParticle& par, const std::vector<xAOD::Iso::IsolationType>& types, const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const;
 
-            virtual Root::TAccept acceptCorrected(const xAOD::IParticle& x, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const;
-            virtual Root::TAccept acceptCorrected(const xAOD::IParticle& x, const xAOD::IParticleContainer& closePar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const;
+            virtual asg::AcceptData acceptCorrected(const xAOD::IParticle& x, 
+                                                     const std::vector<const xAOD::IParticle*>& closePar, 
+                                                     int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const;
+            virtual asg::AcceptData acceptCorrected(const xAOD::IParticle& x, 
+                                                    const xAOD::IParticleContainer& closePar, 
+                                                    int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const;
 
             virtual CorrectionCode getCloseByIsoCorrection(xAOD::ElectronContainer* Electrons = nullptr, xAOD::MuonContainer* Muons = nullptr, xAOD::PhotonContainer* Photons = nullptr, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const;
             virtual CorrectionCode subtractCloseByContribution(xAOD::IParticle& x, const xAOD::IParticleContainer& closebyPar, int topoetconeModel = TopoConeCorrectionModel::DirectCaloClusters) const;
@@ -167,6 +171,7 @@ namespace CP {
             //Functionallity to backup the original cone variables if needed
             std::string m_backup_prefix;
 
+            asg::AcceptInfo m_corrAcceptInfo;
             asg::AnaToolHandle<InDet::IInDetTrackSelectionTool> m_trkselTool;
             mutable IsoHelperMap m_isohelpers;
 
diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationSelectionTool.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationSelectionTool.h
index debc23463841004e8bba9b62cb6ed03fb26c5f92..e2294c37154108881090d16224ea539fbe2395a7 100644
--- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationSelectionTool.h
+++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationSelectionTool.h
@@ -1,10 +1,9 @@
 // Dear emacs, this is -*- c++ -*-
 
 /*
- Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
  */
 
-// $Id: IsolationSelectionTool.h 704447 2015-10-29 12:00:39Z jdevivi $
 #ifndef ISOLATIONSELECTION_ISOLATIONSELECTIONTOOL_H
 #define ISOLATIONSELECTION_ISOLATIONSELECTIONTOOL_H
 
@@ -53,16 +52,16 @@ namespace CP {
             enum IsoWPType {
                 Efficiency, Cut
             };
-            virtual const Root::TAccept& accept(const xAOD::Photon& x) const;
-            virtual const Root::TAccept& accept(const xAOD::Electron& x) const;
-            virtual const Root::TAccept& accept(const xAOD::Muon& x) const;
-            virtual const Root::TAccept& accept(const strObj& x) const;
-            virtual const Root::TAccept& accept(const xAOD::IParticle& x) const; // for tracks, and others?
+            virtual const asg::AcceptData accept(const xAOD::Photon& x) const;
+            virtual const asg::AcceptData accept(const xAOD::Electron& x) const;
+            virtual const asg::AcceptData accept(const xAOD::Muon& x) const;
+            virtual const asg::AcceptData accept(const strObj& x) const;
+            virtual const asg::AcceptData accept(const xAOD::IParticle& x) const; // for tracks, and others?
 
-            virtual const Root::TAccept& getPhotonTAccept() const;
-            virtual const Root::TAccept& getElectronTAccept() const;
-            virtual const Root::TAccept& getMuonTAccept() const;
-            virtual const Root::TAccept& getObjTAccept() const;
+            virtual const asg::AcceptInfo& getPhotonAcceptInfo() const;
+            virtual const asg::AcceptInfo& getElectronAcceptInfo() const;
+            virtual const asg::AcceptInfo& getMuonAcceptInfo() const;
+            virtual const asg::AcceptInfo& getObjAcceptInfo() const;
 
             virtual const std::vector<IsolationWP*>& getMuonWPs() const;
             virtual const std::vector<IsolationWP*>& getElectronWPs() const;
@@ -86,7 +85,7 @@ namespace CP {
 
         private:
             //same interface for xAOD::IParticle and StrObj -> use  template
-            template<typename T> void evaluateWP(const T& x, const std::vector<IsolationWP*>& WP, Root::TAccept& accept) const;
+            template<typename T> void evaluateWP(const T& x, const std::vector<IsolationWP*>& WP, asg::AcceptData& accept) const;
             void clearWPs(std::vector<IsolationWP*>& WP);
 
             // Stupid ROOT
@@ -109,15 +108,15 @@ namespace CP {
             std::vector<IsolationWP*> m_phWPs;
             std::vector<IsolationWP*> m_objWPs;
 
-            /// TAccept's
-            mutable Root::TAccept m_photonAccept;
-            mutable Root::TAccept m_electronAccept;
-            mutable Root::TAccept m_muonAccept;
-            mutable Root::TAccept m_objAccept;
+            ///AcceptInfo
+            asg::AcceptInfo m_photonAcceptInfo;
+            asg::AcceptInfo m_electronAcceptInfo;
+            asg::AcceptInfo m_muonAcceptInfo;
+            asg::AcceptInfo m_objAcceptInfo;
 
             /// Iparticle interface
             std::vector<IsolationWP*>* m_iparWPs;
-            mutable Root::TAccept* m_iparAccept;
+            asg::AcceptInfo*  m_iparAcceptInfo;
 
             // for cut interpolation
             bool m_doInterpM, m_doInterpE;
diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationWP.h b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationWP.h
index cb32ed55b7a2f8ea71cd2a0489e751f82593aa71..890745a5ce7fdd20f079b73372ed073c18e02f03 100644
--- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationWP.h
+++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/IsolationWP.h
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
  */
 
 #ifndef ISOLATIONSELECTION_ISOLATIONWP_H
@@ -7,7 +7,8 @@
 
 #include <xAODPrimitives/tools/getIsolationAccessor.h>
 #include <IsolationSelection/IsolationCondition.h>
-#include "PATCore/TAccept.h"
+#include "PATCore/AcceptData.h"
+#include "PATCore/AcceptInfo.h"
 #include <map>
 
 namespace CP {
@@ -19,28 +20,18 @@ namespace CP {
             void name(const std::string &name);
 
 
-            const Root::TAccept& accept(const xAOD::IParticle& p) const;
-            const Root::TAccept& accept(const strObj& p) const;
+            const asg::AcceptData accept(const xAOD::IParticle& p) const;
+            const asg::AcceptData accept(const strObj& p) const;
             void addCut(IsolationCondition* cut);
-            const Root::TAccept& getAccept() const;
+            const asg::AcceptInfo& getAcceptInfo() const;
             const std::vector<IsolationCondition*>& conditions() const;
 
 
-//            void saveCutValues(bool yes = true) {
-//                if (yes && (!m_cutValues)) m_cutValues = new std::map<xAOD::Iso::IsolationType, float>();
-//                else if ((!yes) && m_cutValues) {
-//                    delete m_cutValues;
-//                }
-//            }
-//            std::map<xAOD::Iso::IsolationType, float>* cutValues() {
-//                return m_cutValues;
-//            }
-
         private:
             std::string m_name;
             std::vector<IsolationCondition*> m_cuts;
             std::map<xAOD::Iso::IsolationType, float>* m_cutValues;
-            mutable Root::TAccept m_accept;
+            asg::AcceptInfo m_acceptInfo;
     };
 }
 #endif // ISOLATIONSELECTION_ISOLATIONWP_H
diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx
index 28ad124fb2a278656ec57ffaf6cf2e20a80c0300..a452c52b18ef6263f27445d77851c31d75d67e0f 100644
--- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationCloseByCorrectionTool.cxx
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
  */
 
 #include <IsolationSelection/IsolationCloseByCorrectionTool.h>
@@ -79,8 +79,9 @@ namespace CP {
     }
 
     StatusCode IsolationCloseByCorrectionTool::initialize() {
-
-        //set default properties of track selection tool, if the user hasn't configured it
+      m_corrAcceptInfo.addCut( "NoToolCut", "No IsolationSelectionTool" );
+      m_corrAcceptInfo.addCut("castCut", "Could not cast to right Object type");
+     //set default properties of track selection tool, if the user hasn't configured it
         if (!m_trkselTool.isUserConfigured()) {
             SET_DUAL_TOOL(m_trkselTool, InDet::InDetTrackSelectionTool, "TackParticleSelectionTool");
             ATH_MSG_INFO("No TrackSelectionTool provided, so I will create and configure my own, called: " << m_trkselTool.name());
@@ -172,8 +173,10 @@ namespace CP {
                 ATH_MSG_ERROR("Failed to correct the isolation of particle with pt: " << Particle->pt() / 1.e3 << " GeV" << " eta: " << Particle->eta() << " phi: " << Particle->phi());
                 return CorrectionCode::Error;
             }
-            if (m_dec_isoselection) m_dec_isoselection->operator()(*Particle) = m_selectorTool->accept(*Particle);
-        }
+            if (m_dec_isoselection) {
+              m_dec_isoselection->operator()(*Particle) = static_cast<bool>(m_selectorTool->accept(*Particle));
+            }
+            }
         return CorrectionCode::Ok;
     }
     const IsoVector* IsolationCloseByCorrectionTool::getIsolationTypes(const xAOD::IParticle* particle) const {
@@ -515,27 +518,32 @@ namespace CP {
             }
         }
     }
-    Root::TAccept IsolationCloseByCorrectionTool::acceptCorrected(const xAOD::IParticle& x, const xAOD::IParticleContainer& closePar, int topoetconeModel) const {
-        Root::TAccept accept;
+
+    asg::AcceptData IsolationCloseByCorrectionTool::acceptCorrected(const xAOD::IParticle& x, 
+                                                                  const xAOD::IParticleContainer& closePar, 
+                                                                  int topoetconeModel) const {
+        asg::AcceptData acceptData(&m_corrAcceptInfo);
         if (!m_isInitialised) {
             ATH_MSG_WARNING("The IsolationCloseByCorrectionTool was not initialised!!!");
         }
         if (m_selectorTool.empty()) {
             ATH_MSG_ERROR("Please set the IsolationSelectionTool property with a valid IsolationSelectionTool");
-            accept.clear();
-            if (m_dec_isoselection) m_dec_isoselection->operator()(x) = false;
-            return accept;
+            acceptData.clear();
+            acceptData.setCutResult("NoToolCut", false);
+            if (m_dec_isoselection) {m_dec_isoselection->operator()(x) = false;}
+            return acceptData;
         }
         if (!getIsolationTypes(&x)) {
             ATH_MSG_WARNING("Could not cast particle for acceptCorrected. Will return false.");
-            accept.setCutResult("castCut", false);
-            if (m_dec_isoselection) m_dec_isoselection->operator()(x) = false;
-            return accept;
+            acceptData.setCutResult("castCut", false);
+            if (m_dec_isoselection) {m_dec_isoselection->operator()(x) = false;}
+            return acceptData;
         }
 
-        if (closePar.empty()) return m_selectorTool->accept(x);
-
-        accept.clear();
+        if (closePar.empty()) {
+          return m_selectorTool->accept(x);
+        }
+        acceptData.clear();
         strObj strPar;
         strPar.isolationValues.resize(xAOD::Iso::numIsolationTypes);
         strPar.pt = x.pt();
@@ -543,22 +551,22 @@ namespace CP {
         strPar.type = x.type();
         std::vector<float> corrections;
         if (getCloseByCorrection(corrections, x, *getIsolationTypes(&x), closePar, topoetconeModel) == CorrectionCode::Error) {
-            ATH_MSG_WARNING("Could not calculate the corrections. acceptCorrected(x) is done without the corrections.");
-            if (m_dec_isoselection) m_dec_isoselection->operator()(x) = m_selectorTool->accept(x);
-            return m_selectorTool->accept(x);
+          ATH_MSG_WARNING("Could not calculate the corrections. acceptCorrected(x) is done without the corrections.");
+          if (m_dec_isoselection) m_dec_isoselection->operator()(x) = static_cast<bool>(m_selectorTool->accept(x));
+          return m_selectorTool->accept(x);
         }
         for (unsigned int i = 0; i < getIsolationTypes(&x)->size(); i++) {
-            const SG::AuxElement::Accessor<float> *acc = xAOD::getIsolationAccessor(getIsolationTypes(&x)->at(i));
-            float old = acc->operator()(x);
-            ATH_MSG_DEBUG("Correcting " << xAOD::Iso::toCString(getIsolationTypes(&x)->at(i)) << " from " << old << " to " << corrections.at(i));
-            strPar.isolationValues[getIsolationTypes(&x)->at(i)] = corrections.at(i);
+          const SG::AuxElement::Accessor<float> *acc = xAOD::getIsolationAccessor(getIsolationTypes(&x)->at(i));
+          float old = acc->operator()(x);
+          ATH_MSG_DEBUG("Correcting " << xAOD::Iso::toCString(getIsolationTypes(&x)->at(i)) << " from " << old << " to " << corrections.at(i));
+          strPar.isolationValues[getIsolationTypes(&x)->at(i)] = corrections.at(i);
         }
-        accept = m_selectorTool->accept(strPar);
-        if (m_dec_isoselection) m_dec_isoselection->operator()(x) = accept;
-        return accept;
+        acceptData = m_selectorTool->accept(strPar);
+        if (m_dec_isoselection) m_dec_isoselection->operator()(x) = static_cast<bool>(acceptData);
+        return acceptData;
     }
 
-    Root::TAccept IsolationCloseByCorrectionTool::acceptCorrected(const xAOD::IParticle& x, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel) const {
+    asg::AcceptData IsolationCloseByCorrectionTool::acceptCorrected(const xAOD::IParticle& x, const std::vector<const xAOD::IParticle*>& closePar, int topoetconeModel) const {
         xAOD::IParticleContainer Container(SG::VIEW_ELEMENTS);
         for (auto&P : closePar)
             Container.push_back(const_cast<xAOD::IParticle*>(P));
diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationSelectionTool.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationSelectionTool.cxx
index 0b67946f104d626911b8c858946587de509bbef1..c04e13ce2179b7ae4d6c6594d13229da9605c5b5 100644
--- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationSelectionTool.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationSelectionTool.cxx
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
  */
 
 #include <xAODPrimitives/IsolationType.h>
@@ -18,14 +18,12 @@ namespace CP {
                 asg::AsgTool(name),
                 /// input file
                 m_calibFile(nullptr),
-
-                /// TAccept's
-                m_photonAccept("IsolationSelectionToolPhotonTAccept"),
-                m_electronAccept("IsolationSelectionToolElectronTAccept"),
-                m_muonAccept("IsolationSelectionToolMuonTAccept"),
-                m_objAccept("IsolationSelectionToolObjTAccept"),
-                m_iparWPs(0),
-                m_iparAccept(0),
+                m_photonAcceptInfo("IsolationSelectionToolPhotonAccept"),
+                m_electronAcceptInfo("IsolationSelectionToolElectronAccept"),
+                m_muonAcceptInfo("IsolationSelectionToolMuonAccept"),
+                m_objAcceptInfo("IsolationSelectionToolObjAccept"),
+                m_iparWPs(nullptr),
+                m_iparAcceptInfo(nullptr),
                 m_Interp(nullptr),
                 m_TwikiLoc("https://twiki.cern.ch/twiki/bin/view/AtlasProtected/IsolationSelectionTool#List_of_current_official_working") {
         declareProperty("CalibFileName", m_calibFileName = "IsolationSelection/v2/MC15_Z_Jpsi_cutMap.root", "The config file to use");
@@ -123,13 +121,13 @@ namespace CP {
 
     StatusCode IsolationSelectionTool::setIParticleCutsFrom(xAOD::Type::ObjectType ObjType) {
         if (ObjType == xAOD::Type::Electron) {
-            m_iparAccept = &m_electronAccept;
+            m_iparAcceptInfo = &m_electronAcceptInfo;
             m_iparWPs = &m_elWPs;
         } else if (ObjType == xAOD::Type::Muon) {
-            m_iparAccept = &m_muonAccept;
+            m_iparAcceptInfo = &m_muonAcceptInfo;
             m_iparWPs = &m_muWPs;
         } else if (ObjType == xAOD::Type::Photon) {
-            m_iparAccept = &m_photonAccept;
+            m_iparAcceptInfo = &m_photonAcceptInfo;
             m_iparWPs = &m_phWPs;
         } else {
             return StatusCode::FAILURE;
@@ -197,7 +195,7 @@ namespace CP {
             return StatusCode::FAILURE;
         }
         m_muWPs.push_back(wp);
-        m_muonAccept.addCut(wp->name(), wp->name());
+        m_muonAcceptInfo.addCut(wp->name(), wp->name());
         return StatusCode::SUCCESS;
     }
 
@@ -231,7 +229,7 @@ namespace CP {
         }
 
         m_phWPs.push_back(wp);
-        m_photonAccept.addCut(wp->name(), wp->name());
+        m_photonAcceptInfo.addCut(wp->name(), wp->name());
 
         // Return gracefully:
         return StatusCode::SUCCESS;
@@ -281,31 +279,33 @@ namespace CP {
         }
 
         m_elWPs.push_back(wp);
-        m_electronAccept.addCut(wp->name(), wp->name());
+        m_electronAcceptInfo.addCut(wp->name(), wp->name());
 
         // Return gracefully:
         return StatusCode::SUCCESS;
     }
 
-    StatusCode IsolationSelectionTool::addUserDefinedWP(std::string WPname, xAOD::Type::ObjectType ObjType, std::vector<std::pair<xAOD::Iso::IsolationType, std::string> >& cuts, std::string key, IsoWPType type) {
+    StatusCode IsolationSelectionTool::addUserDefinedWP(std::string WPname, xAOD::Type::ObjectType ObjType, 
+                                                        std::vector<std::pair<xAOD::Iso::IsolationType, 
+                                                        std::string> >& cuts, std::string key, IsoWPType type) {
         std::vector<IsolationWP*>* wps(nullptr);
-        Root::TAccept* ac(nullptr);
+        asg::AcceptInfo* ac(nullptr);
         if (ObjType == xAOD::Type::Electron) {
             if (key == "") key = m_elWPKey;
             wps = &m_elWPs;
-            ac = &m_electronAccept;
+            ac = &m_electronAcceptInfo;
         } else if (ObjType == xAOD::Type::Muon) {
             if (key == "") key = m_muWPKey;
             wps = &m_muWPs;
-            ac = &m_muonAccept;
+            ac = &m_muonAcceptInfo;
         } else if (ObjType == xAOD::Type::Photon) {
             if (key == "") key = m_phWPKey;
             wps = &m_phWPs;
-            ac = &m_photonAccept;
+            ac = &m_photonAcceptInfo;
         } else if (ObjType == xAOD::Type::Other) {
             if (key == "") return StatusCode::FAILURE;
             wps = &m_objWPs;
-            ac = &m_objAccept;
+            ac = &m_objAcceptInfo;
         } else {
             return StatusCode::FAILURE;
         }
@@ -322,10 +322,8 @@ namespace CP {
             delete wp;
             return StatusCode::FAILURE;
         }
-
         wps->push_back(wp);
         ac->addCut(wp->name(), wp->name());
-
         return StatusCode::SUCCESS;
     }
 
@@ -343,94 +341,104 @@ namespace CP {
     StatusCode IsolationSelectionTool::addWP(IsolationWP* wp, xAOD::Type::ObjectType ObjType) {
         if (ObjType == xAOD::Type::Electron) {
             m_elWPs.push_back(wp);
-            m_electronAccept.addCut(wp->name(), wp->name());
+            m_electronAcceptInfo.addCut(wp->name(), wp->name());
         } else if (ObjType == xAOD::Type::Muon) {
             m_muWPs.push_back(wp);
-            m_muonAccept.addCut(wp->name(), wp->name());
+            m_muonAcceptInfo.addCut(wp->name(), wp->name());
         } else if (ObjType == xAOD::Type::Photon) {
             m_phWPs.push_back(wp);
-            m_photonAccept.addCut(wp->name(), wp->name());
+            m_photonAcceptInfo.addCut(wp->name(), wp->name());
         } else if (ObjType == xAOD::Type::Other) {
             m_objWPs.push_back(wp);
-            m_objAccept.addCut(wp->name(), wp->name());
+            m_objAcceptInfo.addCut(wp->name(), wp->name());
         } else {
             return StatusCode::FAILURE;
         }
-
         return StatusCode::SUCCESS;
     }
-    template<typename T> void IsolationSelectionTool::evaluateWP(const T& x, const std::vector<IsolationWP*>& WP, Root::TAccept& accept) const {
+    
+    template<typename T> void IsolationSelectionTool::evaluateWP(const T& x, 
+                                                                 const std::vector<IsolationWP*>& WP, 
+                                                                 asg::AcceptData& accept) const {
         accept.clear();
         for (auto& i : WP) {
-            if (i->accept(x)) accept.setCutResult(i->name(), true);
+            if (i->accept(x)) {
+              accept.setCutResult(i->name(), true);
+            }
         }
     }
-    const Root::TAccept& IsolationSelectionTool::accept(const xAOD::Photon& x) const {
-        evaluateWP(x, m_phWPs, m_photonAccept);
-        return m_photonAccept;
+
+    const asg::AcceptData IsolationSelectionTool::accept(const xAOD::Photon& x) const {
+      asg::AcceptData acceptData(&m_photonAcceptInfo);
+      evaluateWP(x, m_phWPs, acceptData);
+      return acceptData;
     }
 
-    const Root::TAccept& IsolationSelectionTool::accept(const xAOD::Electron& x) const {
-        evaluateWP(x, m_elWPs, m_electronAccept);
-        return m_electronAccept;
+    const asg::AcceptData IsolationSelectionTool::accept(const xAOD::Electron& x) const {
+      asg::AcceptData acceptData(&m_electronAcceptInfo);  
+      evaluateWP(x, m_elWPs, acceptData);
+      return acceptData;
     }
 
-    const Root::TAccept& IsolationSelectionTool::accept(const xAOD::Muon& x) const {
-        evaluateWP(x, m_muWPs, m_muonAccept);
-        return m_muonAccept;
+    const asg::AcceptData IsolationSelectionTool::accept(const xAOD::Muon& x) const {
+      asg::AcceptData acceptData(&m_muonAcceptInfo);  
+      evaluateWP(x, m_muWPs, acceptData);
+      return acceptData;
     }
 
-    const Root::TAccept& IsolationSelectionTool::accept(const xAOD::IParticle& x) const {
+    const asg::AcceptData IsolationSelectionTool::accept(const xAOD::IParticle& x) const {
 
-        if (x.type() == xAOD::Type::Electron) {
-            evaluateWP(x, m_elWPs, m_electronAccept);
-            return m_electronAccept;
-        } else if (x.type() == xAOD::Type::Muon) {
-            evaluateWP(x, m_muWPs, m_muonAccept);
-            return m_muonAccept;
-        } else if (x.type() == xAOD::Type::Photon) {
-            evaluateWP(x, m_phWPs, m_photonAccept);
-            return m_photonAccept;
-        }
+      if (x.type() == xAOD::Type::Electron) {
+        const xAOD::Electron& el = static_cast<const xAOD::Electron&> (x);  
+        return accept(el);
+      } else if (x.type() == xAOD::Type::Muon) {
+        const xAOD::Muon& muon = static_cast<const xAOD::Muon&> (x);
+        return accept(muon);
+      } else if (x.type() == xAOD::Type::Photon) {
+        const xAOD::Photon& ph = static_cast<const xAOD::Photon&> (x);
+        return accept(ph);  
+      }
+      else if (m_iparAcceptInfo && m_iparWPs) {
+        asg::AcceptData acceptData(m_iparAcceptInfo);
+        evaluateWP(x, *m_iparWPs, acceptData);
+        return acceptData;
+      }
+      ATH_MSG_ERROR("Someting here makes really no  sense");
+      return asg::AcceptData(&m_objAcceptInfo);
+    }
 
-        else if (m_iparAccept && m_iparWPs) {
-            evaluateWP(x, *m_iparWPs, *m_iparAccept);
-            return *m_iparAccept;
-        }
-        ATH_MSG_ERROR("Someting here makes really no  sense");
-        m_objAccept.clear();
-        return m_objAccept;
-    }
-
-    const Root::TAccept& IsolationSelectionTool::accept(const strObj& x) const {
-        if (x.type == xAOD::Type::Electron) {
-            evaluateWP(x, m_elWPs, m_electronAccept);
-            return m_electronAccept;
-        } else if (x.type == xAOD::Type::Muon) {
-            evaluateWP(x, m_muWPs, m_muonAccept);
-            return m_muonAccept;
-        } else if (x.type == xAOD::Type::Photon) {
-            evaluateWP(x, m_phWPs, m_photonAccept);
-            return m_photonAccept;
-        } else {
-            evaluateWP(x, m_objWPs, m_objAccept);
-        }
-        return m_objAccept;
+    const asg::AcceptData IsolationSelectionTool::accept(const strObj& x) const {
+      if (x.type == xAOD::Type::Electron) {
+        asg::AcceptData acceptData(&m_electronAcceptInfo);  
+        evaluateWP(x, m_elWPs, acceptData);
+        return acceptData;
+      } else if (x.type == xAOD::Type::Muon) {
+        asg::AcceptData acceptData(&m_muonAcceptInfo); 
+        evaluateWP(x, m_muWPs, acceptData);
+        return acceptData;
+      } else if (x.type == xAOD::Type::Photon) {
+        asg::AcceptData acceptData(&m_photonAcceptInfo); 
+        evaluateWP(x, m_phWPs, acceptData);
+        return acceptData;
+      } 
+      asg::AcceptData acceptData(&m_objAcceptInfo);
+      evaluateWP(x, m_objWPs, acceptData);
+      return acceptData;
     }
 
-    const Root::TAccept& IsolationSelectionTool::getPhotonTAccept() const {
-        return m_photonAccept;
+    const asg::AcceptInfo& IsolationSelectionTool::getPhotonAcceptInfo() const {
+        return m_photonAcceptInfo;
     }
 
-    const Root::TAccept& IsolationSelectionTool::getElectronTAccept() const {
-        return m_electronAccept;
+    const asg::AcceptInfo& IsolationSelectionTool::getElectronAcceptInfo() const {
+        return m_electronAcceptInfo;
     }
 
-    const Root::TAccept& IsolationSelectionTool::getMuonTAccept() const {
-        return m_muonAccept;
+    const asg::AcceptInfo& IsolationSelectionTool::getMuonAcceptInfo() const {
+        return m_muonAcceptInfo;
     }
-    const Root::TAccept& IsolationSelectionTool::getObjTAccept() const {
-        return m_objAccept;
+    const asg::AcceptInfo& IsolationSelectionTool::getObjAcceptInfo() const {
+        return m_objAcceptInfo;
     }
 
     TDirectory* IsolationSelectionTool::getTemporaryDirectory(void) const {
diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationWP.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationWP.cxx
index fa7ab1a586773ead4b84b52f000c5833646ea4ed..effb85a62d0231ffcb089e4dc2700353a8250a21 100644
--- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationWP.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/Root/IsolationWP.cxx
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
  */
 
 #include <IsolationSelection/IsolationWP.h>
@@ -16,31 +16,36 @@ namespace CP {
     void IsolationWP::name(const std::string &name) {
         m_name = name;
     }
-    const Root::TAccept& IsolationWP::accept(const xAOD::IParticle& p) const {
-        m_accept.clear();
+    
+    const asg::AcceptData IsolationWP::accept(const xAOD::IParticle& p) const {
+      asg::AcceptData acceptData(&m_acceptInfo);
         for (auto c : m_cuts) {
-            if (c->accept(p, m_cutValues)) m_accept.setCutResult(c->name(), true);
+            if (c->accept(p, m_cutValues)) {
+              acceptData.setCutResult(c->name(), true);
+            }
         }
-        return m_accept;
+        return acceptData;
     }
 
-    const Root::TAccept& IsolationWP::accept(const strObj& p) const {
-        m_accept.clear();
-        for (auto c : m_cuts) {
-            if (c->accept(p, m_cutValues)) {
-                m_accept.setCutResult(c->name(), true);
-            }
+    const asg::AcceptData IsolationWP::accept(const strObj& p) const {
+      asg::AcceptData acceptData(&m_acceptInfo);
+      for (auto c : m_cuts) {
+        if (c->accept(p, m_cutValues)) {
+          acceptData.setCutResult(c->name(), true);
         }
-        return m_accept;
+      }
+      return acceptData;
     }
 
     void IsolationWP::addCut(IsolationCondition* i) {
         m_cuts.push_back(i);
-        m_accept.addCut(i->name(), i->name());
+        m_acceptInfo.addCut(i->name(), i->name());
     }
-    const Root::TAccept& IsolationWP::getAccept() const {
-        return m_accept;
+    
+    const asg::AcceptInfo& IsolationWP::getAcceptInfo() const {
+        return m_acceptInfo;
     }
+    
     const std::vector<IsolationCondition*>& IsolationWP::conditions() const{
         return m_cuts;
     }
@@ -49,6 +54,6 @@ namespace CP {
                             m_name(name),
                             m_cuts(),
                             m_cutValues(nullptr),
-                            m_accept(){
+                            m_acceptInfo(){
                 }
 }
diff --git a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/src/TestIsolationCloseByCorrAthenaAlg.cxx b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/src/TestIsolationCloseByCorrAthenaAlg.cxx
index a78c15614b029789fb7195d765f036aec73745c3..00a2ad8c6177beff586e5b7e29818c21800ce7b5 100644
--- a/PhysicsAnalysis/AnalysisCommon/IsolationSelection/src/TestIsolationCloseByCorrAthenaAlg.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/IsolationSelection/src/TestIsolationCloseByCorrAthenaAlg.cxx
@@ -1,5 +1,5 @@
 /*
- Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
  */
 
 //// Developed by Johannes Josef Junggeburth (jojungge@cern.ch)
@@ -60,7 +60,7 @@ namespace CP {
         ATH_CHECK(CreateContainerLinks("Electrons", Electrons));
         for (const auto ielec : *Electrons) {
             //Store if the electron passes the isolation
-            dec_PassIsol(*ielec) = m_isoSelectorTool->accept(*ielec);
+            dec_PassIsol(*ielec) = static_cast<bool>(m_isoSelectorTool->accept(*ielec));
             //Quality criteria only baseline kinematic selection
             dec_PassQuality(*ielec) = ielec->pt() > 10.e3 && fabs(ielec->eta()) < 2.47;
         }
@@ -68,7 +68,7 @@ namespace CP {
         ATH_CHECK(CreateContainerLinks("Photons", Photons));
         for (const auto iphot : *Photons) {
             //Store if the photon passes the isolation (only needed for later comparisons)
-            dec_PassIsol(*iphot) = m_isoSelectorTool->accept(*iphot);
+            dec_PassIsol(*iphot) = static_cast<bool>(m_isoSelectorTool->accept(*iphot));
             //Quality criteria only baseline kinematic selection
             dec_PassQuality(*iphot) = iphot->pt() > 25.e3 && fabs(iphot->eta()) < 2.35;
         }
@@ -76,7 +76,7 @@ namespace CP {
         ATH_CHECK(CreateContainerLinks("Muons", Muons));
         for (const auto imuon : *Muons) {
             //Store if the muon passes the isolation
-            dec_PassIsol(*imuon) = m_isoSelectorTool->accept(*imuon);
+            dec_PassIsol(*imuon) = static_cast<bool>(m_isoSelectorTool->accept(*imuon));
             //Quality criteria only baseline kinematic selection
             dec_PassQuality(*imuon) = imuon->pt() > 5.e3 && fabs(imuon->eta()) < 2.7;
         }