diff --git a/bindings/pyroot_experimental/PyROOT/src/TTreePyz.cxx b/bindings/pyroot_experimental/PyROOT/src/TTreePyz.cxx
index 40df6d0afccbf2768f4cec2b13f82253bfdd5be6..589f5000fb375d04e82ecf49cd4a0355e0ae75cd 100644
--- a/bindings/pyroot_experimental/PyROOT/src/TTreePyz.cxx
+++ b/bindings/pyroot_experimental/PyROOT/src/TTreePyz.cxx
@@ -6,6 +6,7 @@
 #include "ProxyWrappers.h"
 #include "Converters.h"
 #include "Utility.h"
+#include "PyzCppHelpers.hxx"
 
 // ROOT
 #include "TClass.h"
@@ -21,11 +22,6 @@
 
 using namespace CPyCppyy;
 
-static TClass *GetClass(const CPPInstance *pyobj)
-{
-   return TClass::GetClass(Cppyy::GetFinalName(pyobj->ObjectIsA()).c_str());
-}
-
 static TBranch *SearchForBranch(TTree *tree, const char *name)
 {
    TBranch *branch = tree->GetBranch(name);
@@ -119,7 +115,7 @@ PyObject *GetAttr(const CPPInstance *self, PyObject *pyname)
       return 0;
 
    // get hold of actual tree
-   TTree *tree = (TTree *)GetClass(self)->DynamicCast(TTree::Class(), self->GetObject());
+   auto tree = (TTree *)GetTClass(self)->DynamicCast(TTree::Class(), self->GetObject());
 
    if (!tree) {
       PyErr_SetString(PyExc_ReferenceError, "attempt to access a null-pointer");
@@ -201,7 +197,7 @@ PyObject *PyROOT::SetBranchAddressPyz(PyObject * /* self */, PyObject *args)
    if (argc == 3 && PyArg_ParseTuple(args, const_cast<char *>(argParseStr), &treeObj, &name, &address)) {
 
       auto treeProxy = (CPPInstance *)treeObj;
-      TTree *tree = (TTree *)GetClass(treeProxy)->DynamicCast(TTree::Class(), treeProxy->GetObject());
+      auto tree = (TTree *)GetTClass(treeProxy)->DynamicCast(TTree::Class(), treeProxy->GetObject());
 
       if (!tree) {
          PyErr_SetString(PyExc_TypeError,
@@ -255,7 +251,7 @@ PyObject *TryBranchLeafListOverload(int argc, PyObject *args)
                         &PyInt_Type, &bufsize)) {
 
       auto treeProxy = (CPPInstance *)treeObj;
-      auto tree = (TTree *)GetClass(treeProxy)->DynamicCast(TTree::Class(), treeProxy->GetObject());
+      auto tree = (TTree *)GetTClass(treeProxy)->DynamicCast(TTree::Class(), treeProxy->GetObject());
       if (!tree) {
          PyErr_SetString(PyExc_TypeError, "TTree::Branch must be called with a TTree instance as first argument");
          return nullptr;
@@ -321,7 +317,7 @@ PyObject *TryBranchPtrToPtrOverloads(int argc, PyObject *args)
 
    if (bIsMatch) {
       auto treeProxy = (CPPInstance *)treeObj;
-      auto tree = (TTree *)GetClass(treeProxy)->DynamicCast(TTree::Class(), treeProxy->GetObject());
+      auto tree = (TTree *)GetTClass(treeProxy)->DynamicCast(TTree::Class(), treeProxy->GetObject());
       if (!tree) {
          PyErr_SetString(PyExc_TypeError, "TTree::Branch must be called with a TTree instance as first argument");
          return nullptr;
@@ -337,7 +333,7 @@ PyObject *TryBranchPtrToPtrOverloads(int argc, PyObject *args)
             buf = (void *)&((CPPInstance *)address)->fObject;
 
          if (!clName) {
-            klName = GetClass((CPPInstance *)address)->GetName();
+            klName = GetTClass((CPPInstance *)address)->GetName();
             argc += 1;
          }
       } else {