diff --git a/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/IMCTruthClassifier.h b/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/IMCTruthClassifier.h
index da668ad98059727c791f502a804aafdcb6691706..83b0f24ee27f0e08d7349ec2309b3379bf4e28dd 100644
--- a/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/IMCTruthClassifier.h
+++ b/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/IMCTruthClassifier.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -38,6 +38,7 @@
 
 #ifndef XAOD_ANALYSIS // Can not be used in AnalysisBase
 #include <AtlasHepMC/GenParticle.h>
+class HepMcParticleLink;
 #endif
 
 #if !defined(XAOD_ANALYSIS) &&                                                 \
@@ -133,7 +134,12 @@ public:
 
 
 
-#ifndef XAOD_ANALYSIS /*This can not run in Analysis Base*/
+#ifndef XAOD_ANALYSIS /*These can not run in Analysis Base*/
+  virtual std::pair<MCTruthPartClassifier::ParticleType,
+                    MCTruthPartClassifier::ParticleOrigin>
+  particleTruthClassifier(const HepMcParticleLink& theLink,
+                          Info* info = nullptr) const = 0;
+
   virtual std::pair<MCTruthPartClassifier::ParticleType,
                     MCTruthPartClassifier::ParticleOrigin>
   particleTruthClassifier(HepMC::ConstGenParticlePtr,
diff --git a/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifier.h b/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifier.h
index f9f068a05b2a96bc2bc91dab8f0e09e556f0ae48..4e63261177d0cba28dd097af44981f43439ab562 100644
--- a/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifier.h
+++ b/PhysicsAnalysis/MCTruthClassifier/MCTruthClassifier/MCTruthClassifier.h
@@ -112,10 +112,15 @@ public:
   }
 
 
-#ifndef XAOD_ANALYSIS /*This can not run in Analysis Base*/
+#ifndef XAOD_ANALYSIS /*These can not run in Analysis Base*/
+  virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin> particleTruthClassifier(
+                                                                                    const HepMcParticleLink& theLink,
+    Info* info = nullptr) const override;
+
   virtual std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin> particleTruthClassifier(
     HepMC::ConstGenParticlePtr,
     Info* info = nullptr) const override;
+
   bool compareTruthParticles(HepMC::ConstGenParticlePtr genPart, const xAOD::TruthParticle* truthPart) const;
 #endif
 
diff --git a/PhysicsAnalysis/MCTruthClassifier/Root/MCTruthClassifierGen.cxx b/PhysicsAnalysis/MCTruthClassifier/Root/MCTruthClassifierGen.cxx
index 25899c583159c8134558c95390ccbd5a88d76b13..eef97f174566e055adaeec83e0909ed42b74d099 100644
--- a/PhysicsAnalysis/MCTruthClassifier/Root/MCTruthClassifierGen.cxx
+++ b/PhysicsAnalysis/MCTruthClassifier/Root/MCTruthClassifierGen.cxx
@@ -13,6 +13,31 @@ using namespace MCTruthPartClassifier;
 using std::abs;
 
 #ifndef XAOD_ANALYSIS
+std::pair<ParticleType, ParticleOrigin>
+MCTruthClassifier::particleTruthClassifier(const HepMcParticleLink& theLink, Info* info /*= nullptr*/) const
+{
+  // Retrieve the links between HepMC and xAOD::TruthParticle
+  const EventContext& ctx =
+    info ? info->eventContext : Gaudi::Hive::currentContext();
+
+  SG::ReadHandle<xAODTruthParticleLinkVector> truthParticleLinkVecReadHandle(
+    m_truthLinkVecReadHandleKey, ctx);
+  if (!truthParticleLinkVecReadHandle.isValid()) {
+    ATH_MSG_WARNING(
+      " Invalid ReadHandle for xAODTruthParticleLinkVector with key: "
+      << truthParticleLinkVecReadHandle.key());
+    return std::make_pair(Unknown, NonDefined);
+  }
+
+  ElementLink<xAOD::TruthParticleContainer> tplink = truthParticleLinkVecReadHandle->find (theLink);
+  if (tplink.isValid()) {
+    return particleTruthClassifier (*tplink, info);
+  }
+
+  return std::make_pair(Unknown, NonDefined);
+}
+
+
 std::pair<ParticleType, ParticleOrigin>
 MCTruthClassifier::particleTruthClassifier(HepMC::ConstGenParticlePtr thePart, Info* info /*= nullptr*/) const
 {
@@ -36,9 +61,10 @@ MCTruthClassifier::particleTruthClassifier(HepMC::ConstGenParticlePtr thePart, I
     return std::make_pair(partType, partOrig);
   }
 
+  int theBC = HepMC::barcode(thePart);
   for (const auto entry : *truthParticleLinkVecReadHandle) {
     if (entry->first.isValid() && entry->second.isValid() &&
-        HepMC::barcode(entry->first.cptr()) == HepMC::barcode(thePart)) {
+        entry->first.barcode() == theBC) {
       const xAOD::TruthParticle* truthParticle = *entry->second;
       if (!compareTruthParticles(thePart, truthParticle)) {
         // if the barcode/pdg id / status of the pair does not match