diff --git a/tree/tree/src/TBranchElement.cxx b/tree/tree/src/TBranchElement.cxx
index 2759af0631256c23aac6eb6b22eaf2c25aee7794..08bdfd8429b83bd032a4757e8ddeee59fd717937 100644
--- a/tree/tree/src/TBranchElement.cxx
+++ b/tree/tree/src/TBranchElement.cxx
@@ -4726,6 +4726,12 @@ Int_t TBranchElement::Unroll(const char* name, TClass* clParent, TClass* cl, cha
    for (Int_t elemID = 0; elemID < ndata; ++elemID) {
       // -- Loop over all the streamer elements and create sub-branches as needed.
       TStreamerElement* elem = (TStreamerElement*) elems[elemID];
+      if (elem->IsA() == TStreamerArtificial::Class()) {
+         continue;
+      }
+      if (elem->TestBit(TStreamerElement::kRepeat)) {
+         continue;
+      }
       Int_t offset = elem->GetOffset();
       // FIXME: An STL container as a base class gets TStreamerSTL as its class, so this test is not enough.
       // See InitializeOffsets() for the proper test.