diff --git a/cont/src/TContainerConverters.cxx b/cont/src/TContainerConverters.cxx
index 6464843b9a589b62ecdb400900b9a15eda626910..f32b7382623fbd27cf4eefa2beddc9e442be9c14 100644
--- a/cont/src/TContainerConverters.cxx
+++ b/cont/src/TContainerConverters.cxx
@@ -1,4 +1,4 @@
-// @(#)root/cony:$Name:  $:$Id: TContainerConverters.cxx,v 1.7 2007/01/29 15:10:48 brun Exp $
+// @(#)root/cony:$Name:  $:$Id: TContainerConverters.cxx,v 1.8 2007/01/29 15:53:35 brun Exp $
 // Author: Philippe Canal  11/11/2004
 
 /*************************************************************************
@@ -44,7 +44,7 @@ void TConvertClonesArrayToProxy::operator()(TBuffer &b, void *pmember, Int_t siz
 {
    // Read a TClonesArray in the TBuffer b and load it into a (stl) collection
 
-   TStreamerInfo *subinfo = fProxy->GetValueClass()->GetStreamerInfo();
+   TStreamerInfo *subinfo = (TStreamerInfo*)fProxy->GetValueClass()->GetStreamerInfo();
    R__ASSERT(subinfo);
 
    Int_t   nobjects, dummy;
diff --git a/io/src/TContainerConverters.cxx b/io/src/TContainerConverters.cxx
index 6464843b9a589b62ecdb400900b9a15eda626910..f32b7382623fbd27cf4eefa2beddc9e442be9c14 100644
--- a/io/src/TContainerConverters.cxx
+++ b/io/src/TContainerConverters.cxx
@@ -1,4 +1,4 @@
-// @(#)root/cony:$Name:  $:$Id: TContainerConverters.cxx,v 1.7 2007/01/29 15:10:48 brun Exp $
+// @(#)root/cony:$Name:  $:$Id: TContainerConverters.cxx,v 1.8 2007/01/29 15:53:35 brun Exp $
 // Author: Philippe Canal  11/11/2004
 
 /*************************************************************************
@@ -44,7 +44,7 @@ void TConvertClonesArrayToProxy::operator()(TBuffer &b, void *pmember, Int_t siz
 {
    // Read a TClonesArray in the TBuffer b and load it into a (stl) collection
 
-   TStreamerInfo *subinfo = fProxy->GetValueClass()->GetStreamerInfo();
+   TStreamerInfo *subinfo = (TStreamerInfo*)fProxy->GetValueClass()->GetStreamerInfo();
    R__ASSERT(subinfo);
 
    Int_t   nobjects, dummy;
diff --git a/io/src/TStreamerInfoReadBuffer.cxx b/io/src/TStreamerInfoReadBuffer.cxx
index 323780590653a9ae66a3aadb66f42a45984e8a56..57d7722537a1ed8ccd20704992c171e85e071599 100644
--- a/io/src/TStreamerInfoReadBuffer.cxx
+++ b/io/src/TStreamerInfoReadBuffer.cxx
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TStreamerInfoReadBuffer.cxx,v 1.43 2007/01/25 11:51:58 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TStreamerInfoReadBuffer.cxx,v 1.44 2007/01/28 18:31:37 brun Exp $
 // Author: Rene Brun   12/10/2000
 
 /*************************************************************************
@@ -894,7 +894,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
 
                   vers &= ~( TBufferFile::kStreamedMemberWise );
                   TVirtualCollectionProxy *proxy = aElement->GetClassPointer()->GetCollectionProxy();
-                  TStreamerInfo *subinfo = proxy->GetValueClass()->GetStreamerInfo();
+                  TStreamerInfo *subinfo = (TStreamerInfo*)proxy->GetValueClass()->GetStreamerInfo();
                   DOLOOP {
                      void* env;
                      void **contp = (void**)(arr[k]+ioffset);
@@ -950,7 +950,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
 
                   vers &= ~( TBufferFile::kStreamedMemberWise );
                   TVirtualCollectionProxy *proxy = aElement->GetClassPointer()->GetCollectionProxy();
-                  TStreamerInfo *subinfo = proxy->GetValueClass()->GetStreamerInfo();
+                  TStreamerInfo *subinfo = (TStreamerInfo*)proxy->GetValueClass()->GetStreamerInfo();
                   DOLOOP {
                      int objectSize = cle->Size();
                      char *obj = arr[k]+ioffset;
@@ -1029,7 +1029,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
             } else {
 
                Int_t clversion = ((TStreamerBase*)aElement)->GetBaseVersion();
-               cle->GetStreamerInfo(clversion)->ReadBuffer(b,arr,-1,narr,ioffset,arrayMode);
+               ((TStreamerInfo*)cle->GetStreamerInfo(clversion))->ReadBuffer(b,arr,-1,narr,ioffset,arrayMode);
             }
             continue;
 
diff --git a/io/src/TStreamerInfoWriteBuffer.cxx b/io/src/TStreamerInfoWriteBuffer.cxx
index 4396e84f0306a09dcfee9f99afcb237769dcaef3..a2c32b0e3f7775b2b1b607ed92ba3915c8793422 100644
--- a/io/src/TStreamerInfoWriteBuffer.cxx
+++ b/io/src/TStreamerInfoWriteBuffer.cxx
@@ -420,7 +420,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
 
                   UInt_t pos = b.WriteVersionMemberWise(thisVar->IsA(),kTRUE);
                   TVirtualCollectionProxy *proxy = cl->GetCollectionProxy();
-                  TStreamerInfo *subinfo = proxy->GetValueClass()->GetStreamerInfo();
+                  TStreamerInfo *subinfo = (TStreamerInfo*)proxy->GetValueClass()->GetStreamerInfo();
                   DOLOOP {
                      char **contp = (char**)(arr[k]+ioffset);
                      for(int j=0;j<fLength[i];++j) {
@@ -460,7 +460,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
 
                   UInt_t pos = b.WriteVersionMemberWise(thisVar->IsA(),kTRUE);
                   TVirtualCollectionProxy *proxy = cl->GetCollectionProxy();
-                  TStreamerInfo *subinfo = proxy->GetValueClass()->GetStreamerInfo();
+                  TStreamerInfo *subinfo = (TStreamerInfo*)proxy->GetValueClass()->GetStreamerInfo();
                   DOLOOP {
                      char *obj = (char*)(arr[k]+ioffset);
                      Int_t n = fLength[i];
@@ -528,7 +528,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
                }
             } else {
                TClass *cl                 = fComp[i].fClass;
-               cl->GetStreamerInfo()->WriteBufferAux(b,arr,-1,narr,ioffset,arrayMode);
+               ((TStreamerInfo*)cl->GetStreamerInfo())->WriteBufferAux(b,arr,-1,narr,ioffset,arrayMode);
             }
             continue;
 
diff --git a/meta/inc/TStreamerElement.h b/meta/inc/TStreamerElement.h
index 99e5b55f01a5c2474e6c39284b540b555060cf29..5dba5c6641081affb30ab2b48037522902878d1f 100644
--- a/meta/inc/TStreamerElement.h
+++ b/meta/inc/TStreamerElement.h
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TStreamerElement.h,v 1.37 2005/04/21 06:24:46 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TStreamerElement.h,v 1.38 2005/06/23 18:19:26 pcanal Exp $
 // Author: Rene Brun   12/10/2000
 
 /*************************************************************************
@@ -50,8 +50,8 @@ protected:
 
 public:
 
-   enum ESTLtype { kSTL       = 300 /* TStreamerInfo::kSTL */, 
-                   kSTLstring = 365 /* TStreamerInfo::kSTLstring */,   
+   enum ESTLtype { kSTL       = 300 /* TVirtualStreamerInfo::kSTL */, 
+                   kSTLstring = 365 /* TVirtualStreamerInfo::kSTLstring */,   
                    kSTLvector = 1,
                    kSTLlist   =  2,  kSTLdeque   =  3,   kSTLmap    = 4,
                    kSTLset    =  5,  kSTLmultimap=6,     kSTLmultiset=7};
diff --git a/meta/src/TStreamerElement.cxx b/meta/src/TStreamerElement.cxx
index e08c08316277e8150aa12475e866cc42d737312b..43c18af64980f12a1351a630a3f47bfbe918a29f 100644
--- a/meta/src/TStreamerElement.cxx
+++ b/meta/src/TStreamerElement.cxx
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TStreamerElement.cxx,v 1.90 2007/01/15 10:03:12 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TStreamerElement.cxx,v 1.91 2007/01/29 16:09:47 brun Exp $
 // Author: Rene Brun   12/10/2000
 
 /*************************************************************************
@@ -17,7 +17,7 @@
 
 #include "TROOT.h"
 #include "TStreamerElement.h"
-#include "TStreamerInfo.h"
+#include "TVirtualStreamerInfo.h"
 #include "TClass.h"
 #include "TClassEdit.h"
 #include "TBaseClass.h"
@@ -48,11 +48,11 @@ static TStreamerBasicType *InitCounter(const char *countClass, const char *count
 
    if (cl==0) return 0;
 
-   TStreamerBasicType *counter = TStreamerInfo::GetElementCounter(countName,cl);
+   TStreamerBasicType *counter = TVirtualStreamerInfo::GetElementCounter(countName,cl);
 
    //at this point the counter is may be declared to skip
    if (counter) {
-      if (counter->GetType() < TStreamerInfo::kCounter) counter->SetType(TStreamerInfo::kCounter);
+      if (counter->GetType() < TVirtualStreamerInfo::kCounter) counter->SetType(TVirtualStreamerInfo::kCounter);
    }
    return counter;
 }
@@ -209,11 +209,11 @@ Bool_t TStreamerElement::CannotSplit() const
    if (!cl) return kFALSE;  //basic type
 
    switch(fType) {
-      case TStreamerInfo::kAny    +TStreamerInfo::kOffsetL:
-      case TStreamerInfo::kObject +TStreamerInfo::kOffsetL:
-      case TStreamerInfo::kTObject+TStreamerInfo::kOffsetL:
-      case TStreamerInfo::kTString+TStreamerInfo::kOffsetL:
-      case TStreamerInfo::kTNamed +TStreamerInfo::kOffsetL:
+      case TVirtualStreamerInfo::kAny    +TVirtualStreamerInfo::kOffsetL:
+      case TVirtualStreamerInfo::kObject +TVirtualStreamerInfo::kOffsetL:
+      case TVirtualStreamerInfo::kTObject+TVirtualStreamerInfo::kOffsetL:
+      case TVirtualStreamerInfo::kTString+TVirtualStreamerInfo::kOffsetL:
+      case TVirtualStreamerInfo::kTNamed +TVirtualStreamerInfo::kOffsetL:
          return kTRUE;
    }
 
@@ -358,7 +358,7 @@ void TStreamerElement::SetArrayDim(Int_t dim)
    // Set number of array dimensions.
 
    fArrayDim = dim;
-   if (dim) fType += TStreamerInfo::kOffsetL;
+   if (dim) fType += TVirtualStreamerInfo::kOffsetL;
    fNewType = fType;
 }
 
@@ -483,12 +483,12 @@ TStreamerBase::TStreamerBase()
 
 //______________________________________________________________________________
 TStreamerBase::TStreamerBase(const char *name, const char *title, Int_t offset)
-        : TStreamerElement(name,title,offset,TStreamerInfo::kBase,"BASE")
+        : TStreamerElement(name,title,offset,TVirtualStreamerInfo::kBase,"BASE")
 {
    // Create a TStreamerBase object.
 
-   if (strcmp(name,"TObject") == 0) fType = TStreamerInfo::kTObject;
-   if (strcmp(name,"TNamed")  == 0) fType = TStreamerInfo::kTNamed;
+   if (strcmp(name,"TObject") == 0) fType = TVirtualStreamerInfo::kTObject;
+   if (strcmp(name,"TNamed")  == 0) fType = TVirtualStreamerInfo::kTNamed;
    fNewType = fType;
    fBaseClass = TClass::GetClass(GetName());
    fBaseVersion = fBaseClass->GetClassVersion();
@@ -525,7 +525,7 @@ void TStreamerBase::Init(TObject *)
 {
    // Setup the element.
 
-   if (fType == TStreamerInfo::kTObject || fType == TStreamerInfo::kTNamed) return;
+   if (fType == TVirtualStreamerInfo::kTObject || fType == TVirtualStreamerInfo::kTNamed) return;
    fBaseClass = TClass::GetClass(GetName());
    if (!fBaseClass) return;
    if (!fBaseClass->GetMethodAny("StreamerNVirtual")) return;
@@ -674,7 +674,7 @@ TStreamerBasicPointer::TStreamerBasicPointer(const char *name, const char *title
 {
    // Create a TStreamerBasicPointer object.
 
-   fType += TStreamerInfo::kOffsetP;
+   fType += TVirtualStreamerInfo::kOffsetP;
    fCountName    = countName;
    fCountClass   = countClass;
    fCountVersion = countVersion;  //currently unused
@@ -722,7 +722,7 @@ void TStreamerBasicPointer::SetArrayDim(Int_t dim)
    // Set number of array dimensions.
 
    fArrayDim = dim;
-   //if (dim) fType += TStreamerInfo::kOffsetL;
+   //if (dim) fType += TVirtualStreamerInfo::kOffsetL;
    fNewType = fType;
 }
 
@@ -771,7 +771,7 @@ TStreamerLoop::TStreamerLoop() : fCounter(0)
 
 //______________________________________________________________________________
 TStreamerLoop::TStreamerLoop(const char *name, const char *title, Int_t offset, const char *countName, const char *countClass, Int_t countVersion, const char *typeName)
-        : TStreamerElement(name,title,offset,TStreamerInfo::kStreamLoop,typeName)
+        : TStreamerElement(name,title,offset,TVirtualStreamerInfo::kStreamLoop,typeName)
 {
    // Create a TStreamerLoop object.
 
@@ -886,8 +886,8 @@ ULong_t TStreamerBasicType::GetMethod() const
 {
    // return address of counter
 
-   if (fType ==  TStreamerInfo::kCounter ||
-       fType == (TStreamerInfo::kCounter+TStreamerInfo::kSkip)) return (ULong_t)&fCounter;
+   if (fType ==  TVirtualStreamerInfo::kCounter ||
+       fType == (TVirtualStreamerInfo::kCounter+TVirtualStreamerInfo::kSkip)) return (ULong_t)&fCounter;
    return 0;
 }
 
@@ -943,9 +943,9 @@ TStreamerObject::TStreamerObject(const char *name, const char *title, Int_t offs
 {
    // Create a TStreamerObject object.
 
-   fType = TStreamerInfo::kObject;
-   if (strcmp(typeName,"TObject") == 0) fType = TStreamerInfo::kTObject;
-   if (strcmp(typeName,"TNamed")  == 0) fType = TStreamerInfo::kTNamed;
+   fType = TVirtualStreamerInfo::kObject;
+   if (strcmp(typeName,"TObject") == 0) fType = TVirtualStreamerInfo::kTObject;
+   if (strcmp(typeName,"TNamed")  == 0) fType = TVirtualStreamerInfo::kTNamed;
    fNewType = fType;
    Init();
 }
@@ -1029,7 +1029,7 @@ TStreamerObjectAny::TStreamerObjectAny()
 
 //______________________________________________________________________________
 TStreamerObjectAny::TStreamerObjectAny(const char *name, const char *title, Int_t offset, const char *typeName)
-        : TStreamerElement(name,title,offset,TStreamerInfo::kAny,typeName)
+        : TStreamerElement(name,title,offset,TVirtualStreamerInfo::kAny,typeName)
 {
    // Create a TStreamerObjectAny object.
    Init();
@@ -1116,11 +1116,11 @@ TStreamerObjectPointer::TStreamerObjectPointer()
 //______________________________________________________________________________
 TStreamerObjectPointer::TStreamerObjectPointer(const char *name, const char *title,
                                                Int_t offset, const char *typeName)
-   : TStreamerElement(name,title,offset,TStreamerInfo::kObjectP,typeName)
+   : TStreamerElement(name,title,offset,TVirtualStreamerInfo::kObjectP,typeName)
 {
    // Create a TStreamerObjectPointer object.
 
-   if (strncmp(title,"->",2) == 0) fType = TStreamerInfo::kObjectp;
+   if (strncmp(title,"->",2) == 0) fType = TVirtualStreamerInfo::kObjectp;
    fNewType = fType;
    Init();
 }
@@ -1170,7 +1170,7 @@ void TStreamerObjectPointer::SetArrayDim(Int_t dim)
    // Set number of array dimensions.
 
    fArrayDim = dim;
-   //if (dim) fType += TStreamerInfo::kOffsetL;
+   //if (dim) fType += TVirtualStreamerInfo::kOffsetL;
    fNewType = fType;
 }
 
@@ -1214,11 +1214,11 @@ TStreamerObjectAnyPointer::TStreamerObjectAnyPointer()
 //______________________________________________________________________________
 TStreamerObjectAnyPointer::TStreamerObjectAnyPointer(const char *name, const char *title,
                                                      Int_t offset, const char *typeName)
-   : TStreamerElement(name,title,offset,TStreamerInfo::kAnyP,typeName)
+   : TStreamerElement(name,title,offset,TVirtualStreamerInfo::kAnyP,typeName)
 {
    // Create a TStreamerObjectAnyPointer object.
 
-   if (strncmp(title,"->",2) == 0) fType = TStreamerInfo::kAnyp;
+   if (strncmp(title,"->",2) == 0) fType = TVirtualStreamerInfo::kAnyp;
    fNewType = fType;
    Init();
 }
@@ -1268,7 +1268,7 @@ void TStreamerObjectAnyPointer::SetArrayDim(Int_t dim)
    // Set number of array dimensions.
 
    fArrayDim = dim;
-   //if (dim) fType += TStreamerInfo::kOffsetL;
+   //if (dim) fType += TVirtualStreamerInfo::kOffsetL;
    fNewType = fType;
 }
 
@@ -1303,7 +1303,7 @@ TStreamerString::TStreamerString()
 
 //______________________________________________________________________________
 TStreamerString::TStreamerString(const char *name, const char *title, Int_t offset)
-        : TStreamerElement(name,title,offset,TStreamerInfo::kTString,"TString")
+        : TStreamerElement(name,title,offset,TVirtualStreamerInfo::kTString,"TString")
 {
    // Create a TStreamerString object.
 
@@ -1413,7 +1413,7 @@ TStreamerSTL::TStreamerSTL(const char *name, const char *title, Int_t offset,
    else if (strstr(s,"multimap")) fSTLtype = kSTLmultimap;
    else if (strstr(s,"multiset")) fSTLtype = kSTLmultiset;
    if (fSTLtype == 0) { delete [] s; return;}
-   if (dmPointer) fSTLtype += TStreamerInfo::kOffsetP;
+   if (dmPointer) fSTLtype += TVirtualStreamerInfo::kOffsetP;
 
    // find STL contained type
    while (*sopen==' ') sopen++;
@@ -1434,22 +1434,22 @@ TStreamerSTL::TStreamerSTL(const char *name, const char *title, Int_t offset,
    TDataType *dt = (TDataType*)gROOT->GetListOfTypes()->FindObject(sopen);
    if (dt) {
       fCtype = dt->GetType();
-      if (isPointer) fCtype += TStreamerInfo::kOffsetP;
+      if (isPointer) fCtype += TVirtualStreamerInfo::kOffsetP;
    } else {
      // this could also be a nested enums ... which should work ... be let's see.
       TClass *cl = TClass::GetClass(sopen);
       if (cl) {
-         if (isPointer) fCtype = TStreamerInfo::kObjectp;
-         else           fCtype = TStreamerInfo::kObject;
+         if (isPointer) fCtype = TVirtualStreamerInfo::kObjectp;
+         else           fCtype = TVirtualStreamerInfo::kObject;
       } else {
          G__ClassInfo info(sopen);
          if (info.IsValid() && info.Property()&G__BIT_ISENUM) {
-            if (isPointer) fCtype += TStreamerInfo::kOffsetP;
+            if (isPointer) fCtype += TVirtualStreamerInfo::kOffsetP;
          } else {
             if(strcmp(sopen,"string")) {
                // This case can happens when 'this' is a TStreamerElement for
                // a STL container containing something for which we do not have
-               // a TStreamerInfo (This happens in particular is the collection 
+               // a TVirtualStreamerInfo (This happens in particular is the collection 
                // objects themselves are always empty) and we do not have the
                // dictionary/shared library for the container.
                if (GetClassPointer() && GetClassPointer()->IsLoaded()) {
@@ -1461,7 +1461,7 @@ TStreamerSTL::TStreamerSTL(const char *name, const char *title, Int_t offset,
    }
    delete [] s;
 
-   if (TStreamerSTL::IsaPointer()) fType = TStreamerInfo::kSTLp;
+   if (TStreamerSTL::IsaPointer()) fType = TVirtualStreamerInfo::kSTLp;
 }
 
 //______________________________________________________________________________
@@ -1561,10 +1561,10 @@ void TStreamerSTL::SetStreamer(TMemberStreamer  *streamer)
    //set pointer to Streamer function for this element
    //NOTE: we do not take ownership
 
-   if (fType==TStreamerInfo::kSTLp || 1) return;
+   if (fType==TVirtualStreamerInfo::kSTLp || 1) return;
    fStreamer = streamer;
    if (streamer && !IsaPointer() ) {
-      fType = TStreamerInfo::kStreamer;
+      fType = TVirtualStreamerInfo::kStreamer;
       fNewType = fType;
    }
 }
@@ -1586,13 +1586,13 @@ void TStreamerSTL::Streamer(TBuffer &R__b)
          R__b >> fCtype;
          R__b.CheckByteCount(R__s, R__c, TStreamerSTL::IsA());
       }
-      if (IsaPointer()) fType = TStreamerInfo::kSTLp;
-      else fType = TStreamerInfo::kSTL;
+      if (IsaPointer()) fType = TVirtualStreamerInfo::kSTLp;
+      else fType = TVirtualStreamerInfo::kSTL;
       return;
    } else {
       // To enable forward compatibility we actually save with the old value
       Int_t tmp = fType;
-      fType = TStreamerInfo::kStreamer;
+      fType = TVirtualStreamerInfo::kStreamer;
       TStreamerSTL::Class()->WriteBuffer(R__b,this);
       fType = tmp;
    }
@@ -1625,9 +1625,9 @@ TStreamerSTLstring::TStreamerSTLstring(const char *name, const char *title, Int_
    SetTitle(title);
 
    if (dmPointer) {
-      fType = TStreamerInfo::kSTLp;
+      fType = TVirtualStreamerInfo::kSTLp;
    } else {
-      fType = TStreamerInfo::kSTL;
+      fType = TVirtualStreamerInfo::kSTL;
    }
 
    fNewType = fType;
diff --git a/meta/src/TStreamerInfoReadBuffer.cxx b/meta/src/TStreamerInfoReadBuffer.cxx
index 323780590653a9ae66a3aadb66f42a45984e8a56..57d7722537a1ed8ccd20704992c171e85e071599 100644
--- a/meta/src/TStreamerInfoReadBuffer.cxx
+++ b/meta/src/TStreamerInfoReadBuffer.cxx
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TStreamerInfoReadBuffer.cxx,v 1.43 2007/01/25 11:51:58 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TStreamerInfoReadBuffer.cxx,v 1.44 2007/01/28 18:31:37 brun Exp $
 // Author: Rene Brun   12/10/2000
 
 /*************************************************************************
@@ -894,7 +894,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
 
                   vers &= ~( TBufferFile::kStreamedMemberWise );
                   TVirtualCollectionProxy *proxy = aElement->GetClassPointer()->GetCollectionProxy();
-                  TStreamerInfo *subinfo = proxy->GetValueClass()->GetStreamerInfo();
+                  TStreamerInfo *subinfo = (TStreamerInfo*)proxy->GetValueClass()->GetStreamerInfo();
                   DOLOOP {
                      void* env;
                      void **contp = (void**)(arr[k]+ioffset);
@@ -950,7 +950,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
 
                   vers &= ~( TBufferFile::kStreamedMemberWise );
                   TVirtualCollectionProxy *proxy = aElement->GetClassPointer()->GetCollectionProxy();
-                  TStreamerInfo *subinfo = proxy->GetValueClass()->GetStreamerInfo();
+                  TStreamerInfo *subinfo = (TStreamerInfo*)proxy->GetValueClass()->GetStreamerInfo();
                   DOLOOP {
                      int objectSize = cle->Size();
                      char *obj = arr[k]+ioffset;
@@ -1029,7 +1029,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
             } else {
 
                Int_t clversion = ((TStreamerBase*)aElement)->GetBaseVersion();
-               cle->GetStreamerInfo(clversion)->ReadBuffer(b,arr,-1,narr,ioffset,arrayMode);
+               ((TStreamerInfo*)cle->GetStreamerInfo(clversion))->ReadBuffer(b,arr,-1,narr,ioffset,arrayMode);
             }
             continue;
 
diff --git a/meta/src/TStreamerInfoWriteBuffer.cxx b/meta/src/TStreamerInfoWriteBuffer.cxx
index 4396e84f0306a09dcfee9f99afcb237769dcaef3..a2c32b0e3f7775b2b1b607ed92ba3915c8793422 100644
--- a/meta/src/TStreamerInfoWriteBuffer.cxx
+++ b/meta/src/TStreamerInfoWriteBuffer.cxx
@@ -420,7 +420,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
 
                   UInt_t pos = b.WriteVersionMemberWise(thisVar->IsA(),kTRUE);
                   TVirtualCollectionProxy *proxy = cl->GetCollectionProxy();
-                  TStreamerInfo *subinfo = proxy->GetValueClass()->GetStreamerInfo();
+                  TStreamerInfo *subinfo = (TStreamerInfo*)proxy->GetValueClass()->GetStreamerInfo();
                   DOLOOP {
                      char **contp = (char**)(arr[k]+ioffset);
                      for(int j=0;j<fLength[i];++j) {
@@ -460,7 +460,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
 
                   UInt_t pos = b.WriteVersionMemberWise(thisVar->IsA(),kTRUE);
                   TVirtualCollectionProxy *proxy = cl->GetCollectionProxy();
-                  TStreamerInfo *subinfo = proxy->GetValueClass()->GetStreamerInfo();
+                  TStreamerInfo *subinfo = (TStreamerInfo*)proxy->GetValueClass()->GetStreamerInfo();
                   DOLOOP {
                      char *obj = (char*)(arr[k]+ioffset);
                      Int_t n = fLength[i];
@@ -528,7 +528,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
                }
             } else {
                TClass *cl                 = fComp[i].fClass;
-               cl->GetStreamerInfo()->WriteBufferAux(b,arr,-1,narr,ioffset,arrayMode);
+               ((TStreamerInfo*)cl->GetStreamerInfo())->WriteBufferAux(b,arr,-1,narr,ioffset,arrayMode);
             }
             continue;
 
diff --git a/sql/inc/TSQLFile.h b/sql/inc/TSQLFile.h
index 09e438da0f5f8f7e6fa79e713d58191da705e130..a6134aa3b34de4506aefb7833cdb9768a0b3ecb1 100644
--- a/sql/inc/TSQLFile.h
+++ b/sql/inc/TSQLFile.h
@@ -1,4 +1,4 @@
-// @(#)root/sql:$Name:  $:$Id: TSQLFile.h,v 1.9 2006/06/22 08:21:22 brun Exp $
+// @(#)root/sql:$Name:  $:$Id: TSQLFile.h,v 1.10 2006/06/27 14:36:27 brun Exp $
 // Author: Sergey Linev  20/11/2005
 
 /*************************************************************************
@@ -26,7 +26,7 @@
 
 class TList;
 class TStreamerElement;
-class TStreamerInfo;
+class TVirtualStreamerInfo;
 
 class TSQLServer;
 class TSQLStatement;
@@ -111,7 +111,7 @@ protected:
    Bool_t            CreateClassTable(TSQLClassInfo* sqlinfo, TObjArray* colinfos);
    Bool_t            CreateRawTable(TSQLClassInfo* sqlinfo);
    
-   Bool_t            ProduceClassSelectQuery(TStreamerInfo* info, TSQLClassInfo* sqlinfo, TString& columns, TString& tables, Int_t& tablecnt);
+   Bool_t            ProduceClassSelectQuery(TVirtualStreamerInfo* info, TSQLClassInfo* sqlinfo, TString& columns, TString& tables, Int_t& tablecnt);
    void              AddIdEntry(Long64_t tableid, Int_t subid, Int_t type,
                                 const char* name, const char* sqlname, const char* info);
    void              ReadSQLClassInfos();
diff --git a/sql/src/TSQLFile.cxx b/sql/src/TSQLFile.cxx
index 0a738dc74a57eb512f6b3cdc3debd23a25472705..5f0e70a5b2d6a785cd31ddadb989a453a5b5cad0 100644
--- a/sql/src/TSQLFile.cxx
+++ b/sql/src/TSQLFile.cxx
@@ -1,4 +1,4 @@
-// @(#)root/sql:$Name:  $:$Id: TSQLFile.cxx,v 1.15 2006/06/27 14:36:27 brun Exp $
+// @(#)root/sql:$Name:  $:$Id: TSQLFile.cxx,v 1.16 2007/01/22 05:58:29 brun Exp $
 // Author: Sergey Linev  20/11/2005
 
 /*************************************************************************
@@ -174,7 +174,7 @@
 #include "TObjString.h"
 #include "TList.h"
 #include "TArrayC.h"
-#include "TStreamerInfo.h"
+#include "TVirtualStreamerInfo.h"
 #include "TStreamerElement.h"
 #include "TProcessID.h"
 #include "TError.h"
@@ -824,7 +824,7 @@ void TSQLFile::WriteHeader()
 //______________________________________________________________________________
 void TSQLFile::WriteStreamerInfo()
 {
-   // Store all TStreamerInfo, used in file, in sql database
+   // Store all TVirtualStreamerInfo, used in file, in sql database
 
    // return;
 
@@ -838,9 +838,9 @@ void TSQLFile::WriteStreamerInfo()
 
    TIter iter(gROOT->GetListOfStreamerInfo());
 
-   TStreamerInfo* info = 0;
+   TVirtualStreamerInfo* info = 0;
 
-   while ((info = (TStreamerInfo*) iter()) !=0 ) {
+   while ((info = (TVirtualStreamerInfo*) iter()) !=0 ) {
       Int_t uid = info->GetNumber();
       if (fClassIndex->fArray[uid]) {
          if (gDebug>1) Info("WriteStreamerInfo","Add %s",info->GetName());
@@ -848,11 +848,11 @@ void TSQLFile::WriteStreamerInfo()
       }
    }
    if (list.GetSize()==0) return;
-   fClassIndex->fArray[0] = 2; //to prevent adding classes in TStreamerInfo::TagFile
+   fClassIndex->fArray[0] = 2; //to prevent adding classes in TVirtualStreamerInfo::TagFile
 
    WriteSpecialObject(sqlio::Ids_StreamerInfos, &list, "StreamerInfo", "StreamerInfos of this file");
 
-   fClassIndex->fArray[0] = 0; //to prevent adding classes in TStreamerInfo::TagFile
+   fClassIndex->fArray[0] = 0; //to prevent adding classes in TVirtualStreamerInfo::TagFile
 }
 
 //______________________________________________________________________________
@@ -1263,14 +1263,14 @@ TString TSQLFile::MakeSelectQuery(TClass* cl)
 }
 
 //______________________________________________________________________________
-Bool_t TSQLFile::ProduceClassSelectQuery(TStreamerInfo* info, 
+Bool_t TSQLFile::ProduceClassSelectQuery(TVirtualStreamerInfo* info, 
                                          TSQLClassInfo* sqlinfo, 
                                          TString& columns, 
                                          TString& tables, 
                                          Int_t& tablecnt)
 {
    // used by MakeClassSelectQuery method to add columns from table of 
-   // class, specified by TStreamerInfo structure
+   // class, specified by TVirtualStreamerInfo structure
     
    if ((info==0) || (sqlinfo==0)) return kFALSE;
    
@@ -2572,7 +2572,7 @@ Long64_t TSQLFile::StoreObjectInTables(Long64_t keyid, const void* obj, const TC
 const char* TSQLFile::SQLCompatibleType(Int_t typ) const
 {
    // returns sql type name which is most closer to ROOT basic type
-   // typ should be from TStreamerInfo:: constansts like TStreamerInfo::kInt
+   // typ should be from TVirtualStreamerInfo:: constansts like TVirtualStreamerInfo::kInt
 
    return (typ<0) || (typ>18) ? 0 : fBasicTypes[typ];
 }
@@ -2582,7 +2582,7 @@ const char* TSQLFile::SQLIntType() const
 {
    // return SQL integer type
 
-   return SQLCompatibleType(TStreamerInfo::kInt);
+   return SQLCompatibleType(TVirtualStreamerInfo::kInt);
 }
 
 //______________________________________________________________________________
diff --git a/tree/src/TBranch.cxx b/tree/src/TBranch.cxx
index 956f1bc16ca6d774ad7defad19475e6a9755f3d3..95185b0dabb5f949dad2dae2a6a8c850189bdebf 100644
--- a/tree/src/TBranch.cxx
+++ b/tree/src/TBranch.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TBranch.cxx,v 1.120 2007/01/20 19:29:35 brun Exp $
+// @(#)root/tree:$Name:  $:$Id: TBranch.cxx,v 1.121 2007/01/31 07:33:31 brun Exp $
 // Author: Rene Brun   12/01/96
 
 /*************************************************************************
@@ -30,7 +30,6 @@
 #include "TLeafS.h"
 #include "TMessage.h"
 #include "TROOT.h"
-#include "TStreamerInfo.h"
 #include "TSystem.h"
 #include "TMath.h"
 #include "TTree.h"
diff --git a/tree/src/TBranchBrowsable.cxx b/tree/src/TBranchBrowsable.cxx
index 0c1923cc9bc7f49efb710899500c18ed2102b7ae..dc3f040c6822aac5690c9e72fa15bc1d37e5bd24 100644
--- a/tree/src/TBranchBrowsable.cxx
+++ b/tree/src/TBranchBrowsable.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TBranchBrowsable.cxx,v 1.11 2007/01/30 11:24:31 brun Exp $
+// @(#)root/tree:$Name:  $:$Id: TBranchBrowsable.cxx,v 1.12 2007/02/03 18:33:15 brun Exp $
 // Author: Axel Naumann   14/10/2004
 
 /*************************************************************************
@@ -595,7 +595,7 @@ Int_t TNonSplitBrowsable::GetBrowsables(TList& li, const TBranch* branch,
 
    TClass* clContained=0;
    GetCollectionContainedType(branch, parent, clContained);
-   TStreamerInfo* streamerInfo=clContained?clContained->GetStreamerInfo():0;
+   TVirtualStreamerInfo* streamerInfo= clContained?clContained->GetStreamerInfo():0;
    if (!streamerInfo 
       || !streamerInfo->GetElements() 
       || !streamerInfo->GetElements()->GetSize())  return 0;
@@ -638,7 +638,7 @@ Int_t TNonSplitBrowsable::GetBrowsables(TList& li, const TBranch* branch,
          if (!clElements) continue;
 
          // now loop over the class's streamer elements
-         TStreamerInfo* streamerInfo=clElements->GetStreamerInfo();
+         TVirtualStreamerInfo* streamerInfo= clElements->GetStreamerInfo();
          TIter iElem(streamerInfo->GetElements());
          TStreamerElement* elem=0;
          while ((elem=(TStreamerElement*)iElem())) {
diff --git a/tree/src/TBranchElement.cxx b/tree/src/TBranchElement.cxx
index c4a6a8a105a95e08d6f4d9e4a6d8be1543e57c52..ae752c36ae924f52ab5ba9c2101973396f3a497c 100644
--- a/tree/src/TBranchElement.cxx
+++ b/tree/src/TBranchElement.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TBranchElement.cxx,v 1.214 2007/01/30 11:24:31 brun Exp $
+// @(#)root/tree:$Name:  $:$Id: TBranchElement.cxx,v 1.215 2007/01/31 07:33:31 brun Exp $
 // Authors Rene Brun , Philippe Canal, Markus Frank  14/01/2001
 
 /*************************************************************************
@@ -180,7 +180,7 @@ TBranchElement::TBranchElement(const char* bname, TStreamerInfo* sinfo, Int_t id
    //
 
    fEntryOffsetLen = 0;
-   if (btype || (fStreamerType <= TStreamerInfo::kBase) || (fStreamerType == TStreamerInfo::kCharStar) || (fStreamerType == TStreamerInfo::kBits) || (fStreamerType > TStreamerInfo::kBool)) {
+   if (btype || (fStreamerType <= TVirtualStreamerInfo::kBase) || (fStreamerType == TVirtualStreamerInfo::kCharStar) || (fStreamerType == TVirtualStreamerInfo::kBits) || (fStreamerType > TVirtualStreamerInfo::kBool)) {
       fEntryOffsetLen = 1000;
    }
 
@@ -230,7 +230,7 @@ TBranchElement::TBranchElement(const char* bname, TStreamerInfo* sinfo, Int_t id
       // -- We are a sub-branch of a split object.
       ULong_t* elems = sinfo->GetElems();
       TStreamerElement* element = (TStreamerElement*) elems[id];
-      if ((fStreamerType == TStreamerInfo::kObject) || (fStreamerType == TStreamerInfo::kBase) || (fStreamerType == TStreamerInfo::kTNamed) || (fStreamerType == TStreamerInfo::kTObject) || (fStreamerType == TStreamerInfo::kObjectp) || (fStreamerType == TStreamerInfo::kObjectP)) {
+      if ((fStreamerType == TVirtualStreamerInfo::kObject) || (fStreamerType == TVirtualStreamerInfo::kBase) || (fStreamerType == TVirtualStreamerInfo::kTNamed) || (fStreamerType == TVirtualStreamerInfo::kTObject) || (fStreamerType == TVirtualStreamerInfo::kObjectp) || (fStreamerType == TVirtualStreamerInfo::kObjectP)) {
          // -- If we are an object data member which inherits from TObject,
          // flag it so that later during i/o we will register the object
          // with the buffer so that pointers are handled correctly.
@@ -428,7 +428,7 @@ TBranchElement::TBranchElement(const char* bname, TStreamerInfo* sinfo, Int_t id
                BuildTitle(name);
                return;
             }
-         } else if (!strchr(elem_type, '*') && ((fStreamerType == TStreamerInfo::kObject) || (fStreamerType == TStreamerInfo::kAny))) {
+         } else if (!strchr(elem_type, '*') && ((fStreamerType == TVirtualStreamerInfo::kObject) || (fStreamerType == TVirtualStreamerInfo::kAny))) {
             // -- Create sub-branches for members that are classes.
             //
             // Note: This can only happen if we were called directly
@@ -473,7 +473,7 @@ TBranchElement::TBranchElement(const char* bname, TClonesArray* clones, Int_t ba
 , fClassName("TClonesArray")
 , fParentName()
 // FIXME: Bad, the streamer info will be optimized here.
-, fInfo(TClonesArray::Class()->GetStreamerInfo())
+, fInfo((TStreamerInfo*)TClonesArray::Class()->GetStreamerInfo())
 , fCurrentClass()
 , fParentClass()
 , fBranchClass(TClonesArray::Class())
@@ -593,7 +593,7 @@ TBranchElement::TBranchElement(const char* bname, TVirtualCollectionProxy* cont,
    fInfo          = 0;
    fID            = -1;
    fInit          = kTRUE;
-   fStreamerType  = -1; // TStreamerInfo::kSTLp;
+   fStreamerType  = -1; // TVirtualStreamerInfo::kSTLp;
    fType          = 0;
    fClassVersion  = cont->GetCollectionClass()->GetClassVersion();
    fCheckSum      = cont->GetCollectionClass()->GetCheckSum();
@@ -1040,7 +1040,7 @@ void TBranchElement::FillLeaves(TBuffer& b)
          return;
       }
       Int_t n = si->WriteBufferAux(b, &fObject, fID, 1, 0, 0);
-      if ((fStreamerType == TStreamerInfo::kCounter) && (n > fMaximum)) {
+      if ((fStreamerType == TVirtualStreamerInfo::kCounter) && (n > fMaximum)) {
          fMaximum = n;
       }
    } else if (fType == 3) {
@@ -1049,7 +1049,7 @@ void TBranchElement::FillLeaves(TBuffer& b)
          // FIXME: What if GetClonesName() is the zero pointer or an empty string?
          TClass* cl = TClass::GetClass(GetClonesName());
          // FIXME: What if cl is a zero pointer here?
-         TStreamerInfo* si = cl->GetStreamerInfo();
+         TVirtualStreamerInfo* si = cl->GetStreamerInfo();
          if (!si) {
             Error("FillLeaves", "Cannot get streamer info for branch '%s' class '%s'", GetName(), cl->GetName());
             return;
@@ -1126,15 +1126,15 @@ void TBranchElement::FillLeaves(TBuffer& b)
          }
          switch (atype) {
             // Note: Type 0 is a base class and cannot happen here, see Unroll().
-            case TStreamerInfo::kChar     /*  1 */: { b.WriteFastArray((Char_t*)    fAddress, n); break; }
-            case TStreamerInfo::kShort    /*  2 */: { b.WriteFastArray((Short_t*)   fAddress, n); break; }
-            case TStreamerInfo::kInt      /*  3 */: { b.WriteFastArray((Int_t*)     fAddress, n); break; }
-            case TStreamerInfo::kLong     /*  4 */: { b.WriteFastArray((Long_t*)    fAddress, n); break; }
-            case TStreamerInfo::kFloat    /*  5 */: { b.WriteFastArray((Float_t*)   fAddress, n); break; }
-            case TStreamerInfo::kCounter  /*  6 */: { b.WriteFastArray((Int_t*)     fAddress, n); break; }
-            // FIXME: We do nothing with type 7 (TStreamerInfo::kCharStar, char*) here!
-            case TStreamerInfo::kDouble   /*  8 */: { b.WriteFastArray((Double_t*)  fAddress, n); break; }
-            case TStreamerInfo::kDouble32 /*  9 */: {
+            case TVirtualStreamerInfo::kChar     /*  1 */: { b.WriteFastArray((Char_t*)    fAddress, n); break; }
+            case TVirtualStreamerInfo::kShort    /*  2 */: { b.WriteFastArray((Short_t*)   fAddress, n); break; }
+            case TVirtualStreamerInfo::kInt      /*  3 */: { b.WriteFastArray((Int_t*)     fAddress, n); break; }
+            case TVirtualStreamerInfo::kLong     /*  4 */: { b.WriteFastArray((Long_t*)    fAddress, n); break; }
+            case TVirtualStreamerInfo::kFloat    /*  5 */: { b.WriteFastArray((Float_t*)   fAddress, n); break; }
+            case TVirtualStreamerInfo::kCounter  /*  6 */: { b.WriteFastArray((Int_t*)     fAddress, n); break; }
+            // FIXME: We do nothing with type 7 (TVirtualStreamerInfo::kCharStar, char*) here!
+            case TVirtualStreamerInfo::kDouble   /*  8 */: { b.WriteFastArray((Double_t*)  fAddress, n); break; }
+            case TVirtualStreamerInfo::kDouble32 /*  9 */: {
                Double_t* xx = (Double_t*) fAddress;
                for (Int_t ii = 0; ii < n; ++ii) {
                   b << (Float_t) xx[ii];
@@ -1142,15 +1142,15 @@ void TBranchElement::FillLeaves(TBuffer& b)
                break;
             }
             // Note: Type 10 is unused for now.
-            case TStreamerInfo::kUChar    /* 11 */: { b.WriteFastArray((UChar_t*)   fAddress, n); break; }
-            case TStreamerInfo::kUShort   /* 12 */: { b.WriteFastArray((UShort_t*)  fAddress, n); break; }
-            case TStreamerInfo::kUInt     /* 13 */: { b.WriteFastArray((UInt_t*)    fAddress, n); break; }
-            case TStreamerInfo::kULong    /* 14 */: { b.WriteFastArray((ULong_t*)   fAddress, n); break; }
-            // FIXME: This is wrong!!! TStreamerInfo::kBits is a variable length type.
-            case TStreamerInfo::kBits     /* 15 */: { b.WriteFastArray((UInt_t*)    fAddress, n); break; }
-            case TStreamerInfo::kLong64   /* 16 */: { b.WriteFastArray((Long64_t*)  fAddress, n); break; }
-            case TStreamerInfo::kULong64  /* 17 */: { b.WriteFastArray((ULong64_t*) fAddress, n); break; }
-            case TStreamerInfo::kBool     /* 18 */: { b.WriteFastArray((Bool_t*)    fAddress, n); break; }
+            case TVirtualStreamerInfo::kUChar    /* 11 */: { b.WriteFastArray((UChar_t*)   fAddress, n); break; }
+            case TVirtualStreamerInfo::kUShort   /* 12 */: { b.WriteFastArray((UShort_t*)  fAddress, n); break; }
+            case TVirtualStreamerInfo::kUInt     /* 13 */: { b.WriteFastArray((UInt_t*)    fAddress, n); break; }
+            case TVirtualStreamerInfo::kULong    /* 14 */: { b.WriteFastArray((ULong_t*)   fAddress, n); break; }
+            // FIXME: This is wrong!!! TVirtualStreamerInfo::kBits is a variable length type.
+            case TVirtualStreamerInfo::kBits     /* 15 */: { b.WriteFastArray((UInt_t*)    fAddress, n); break; }
+            case TVirtualStreamerInfo::kLong64   /* 16 */: { b.WriteFastArray((Long64_t*)  fAddress, n); break; }
+            case TVirtualStreamerInfo::kULong64  /* 17 */: { b.WriteFastArray((ULong64_t*) fAddress, n); break; }
+            case TVirtualStreamerInfo::kBool     /* 18 */: { b.WriteFastArray((Bool_t*)    fAddress, n); break; }
             // Note: Type 19 is unused for now.
          }
       } else {
@@ -1160,7 +1160,7 @@ void TBranchElement::FillLeaves(TBuffer& b)
          } else {
             TClonesArray* clones = (TClonesArray*) fObject;
             Int_t n = clones->GetEntriesFast();
-            TStreamerInfo* si = GetInfo();
+            TStreamerInfo* si = (TStreamerInfo*)GetInfo();
             if (!si) {
                Error("FillLeaves", "Cannot get streamer info for branch '%s'", GetName());
                return;
@@ -1180,7 +1180,7 @@ void TBranchElement::FillLeaves(TBuffer& b)
          TVirtualCollectionProxy::TPushPop helper(GetCollectionProxy(), fObject);
          n = GetCollectionProxy()->Size();
          // Note: We cannot pop the proxy here because we need it for the i/o.
-         TStreamerInfo* si = GetInfo();
+         TStreamerInfo* si = (TStreamerInfo*)GetInfo();
          if (!si) {
             Error("FillLeaves", "Cannot get streamer info for branch '%s'", GetName());
             return;
@@ -1224,29 +1224,29 @@ void TBranchElement::InitInfo()
          if (cl == TClonesArray::Class()) {
             fClassVersion = TClonesArray::Class()->GetClassVersion();
          }
-         Bool_t optim = TStreamerInfo::CanOptimize();
-         TStreamerInfo::Optimize(kFALSE);
-         fInfo = cl->GetStreamerInfo(fClassVersion);
-         TStreamerInfo::Optimize(optim);
+         Bool_t optim = TVirtualStreamerInfo::CanOptimize();
+         TVirtualStreamerInfo::Optimize(kFALSE);
+         fInfo = (TStreamerInfo*)cl->GetStreamerInfo(fClassVersion);
+         TVirtualStreamerInfo::Optimize(optim);
          // FIXME: Check that the found streamer info checksum matches our branch class checksum here.
          // Check to see if the class code was unloaded/reloaded
          // since we were created.
-         if (fCheckSum && (cl->IsForeign() || (!cl->IsLoaded() && (fClassVersion == 1) && cl->GetStreamerInfos()->At(1) && (fCheckSum != ((TStreamerInfo*) cl->GetStreamerInfos()->At(1))->GetCheckSum())))) {
+         if (fCheckSum && (cl->IsForeign() || (!cl->IsLoaded() && (fClassVersion == 1) && cl->GetStreamerInfos()->At(1) && (fCheckSum != ((TVirtualStreamerInfo*) cl->GetStreamerInfos()->At(1))->GetCheckSum())))) {
             // Try to compensate for a class that got unloaded on us.
             // Search through the streamer infos by checksum
             // and take the first match.
             Int_t ninfos = cl->GetStreamerInfos()->GetEntriesFast();
             for (Int_t i = 1; i < ninfos; ++i) {
-               TStreamerInfo* info = (TStreamerInfo*) cl->GetStreamerInfos()->At(i);
+               TVirtualStreamerInfo* info = (TVirtualStreamerInfo*) cl->GetStreamerInfos()->At(i);
                if (!info) {
                   continue;
                }
                if (info->GetCheckSum() == fCheckSum) {
                   fClassVersion = i;
-                  Bool_t optim = TStreamerInfo::CanOptimize();
-                  TStreamerInfo::Optimize(kFALSE);
-                  fInfo = cl->GetStreamerInfo(fClassVersion);
-                  TStreamerInfo::Optimize(optim);
+                  Bool_t optim = TVirtualStreamerInfo::CanOptimize();
+                  TVirtualStreamerInfo::Optimize(kFALSE);
+                  fInfo = (TStreamerInfo*)cl->GetStreamerInfo(fClassVersion);
+                  TVirtualStreamerInfo::Optimize(optim);
                   break;
                }
             }
@@ -1264,10 +1264,10 @@ void TBranchElement::InitInfo()
          // Streamer info has not yet been compiled.
          //
          // Optimizing does not work with splitting.
-         Bool_t optim = TStreamerInfo::CanOptimize();
-         TStreamerInfo::Optimize(kFALSE);
+         Bool_t optim = TVirtualStreamerInfo::CanOptimize();
+         TVirtualStreamerInfo::Optimize(kFALSE);
          fInfo->Compile();
-         TStreamerInfo::Optimize(optim);
+         TVirtualStreamerInfo::Optimize(optim);
       }
       if (!fInit) {
          // We were read in from a file, figure out what our fID should be,
@@ -1322,7 +1322,7 @@ TVirtualCollectionProxy* TBranchElement::GetCollectionProxy()
          }
       } else {
          // We are not a top-level branch.
-         TStreamerInfo* si = thiscast->GetInfo();
+         TVirtualStreamerInfo* si = thiscast->GetInfo();
          TStreamerElement* se = (TStreamerElement*) si->GetElems()[fID];
          className = se->GetTypeName();
       }
@@ -1350,7 +1350,7 @@ TClass* TBranchElement::GetCurrentClass()
       return cl;
    }
 
-   TStreamerInfo* brInfo = GetInfo();
+   TVirtualStreamerInfo* brInfo = GetInfo();
    if (!brInfo) {
       cl = TClass::GetClass(GetClassName());
       R__ASSERT(cl && cl->GetCollectionProxy());
@@ -1372,7 +1372,7 @@ TClass* TBranchElement::GetCurrentClass()
    if (!dm) {
       // Either the class is not loaded or the data member is gone
       if (! motherCl->IsLoaded()) {
-         TStreamerInfo* newInfo = motherCl->GetStreamerInfo();
+         TVirtualStreamerInfo* newInfo = motherCl->GetStreamerInfo();
          if (newInfo != brInfo) {
             TStreamerElement* newElems = (TStreamerElement*) newInfo->GetElements()->FindObject(currentStreamerElement->GetName());
             newType = newElems->GetClassPointer()->GetName();
@@ -1735,7 +1735,7 @@ void TBranchElement::InitializeOffsets()
          // member of a base class or a split class, in which case our
          // streamer info will be for our containing sub-object, while
          // we are actually a different type.
-         TStreamerInfo* si = GetInfo();
+         TVirtualStreamerInfo* si = GetInfo();
          // Note: We tested to make sure the streamer info was available previously.
          ULong_t* elems = si->GetElems();
          if (!elems) {
@@ -1768,7 +1768,7 @@ void TBranchElement::InitializeOffsets()
             continue;
          }
          TBranchElement* subBranch = (TBranchElement*) aSubBranch;
-         TStreamerInfo* sinfo = subBranch->GetInfo();
+         TVirtualStreamerInfo* sinfo = subBranch->GetInfo();
          if (!sinfo) {
             Warning("InitializeOffsets", "No streamer info for branch: %s subbranch: %s", GetName(), subBranch->GetName());
             fInitOffsets = kTRUE;
@@ -2204,12 +2204,12 @@ void TBranchElement::PrintValue(Int_t lenmax) const
       } else if (fType == 31 || fType == 41) {
          // TClonesArray or STL container sub-branch.
          Int_t n = TMath::Min(10, fNdata);
-         Int_t atype = fStreamerType + TStreamerInfo::kOffsetL;
-         if (fStreamerType == TStreamerInfo::kChar) {
-            // TStreamerInfo::kOffsetL + TStreamerInfo::kChar is
+         Int_t atype = fStreamerType + TVirtualStreamerInfo::kOffsetL;
+         if (fStreamerType == TVirtualStreamerInfo::kChar) {
+            // TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kChar is
             // printed as a string and could print weird characters.
             // So we print an unsigned char instead (not perfect, but better).
-            atype = TStreamerInfo::kOffsetL + TStreamerInfo::kUChar;
+            atype = TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUChar;
          }
          if (atype > 54) {
             // FIXME: More logic required here (like in ReadLeaves)
@@ -2580,7 +2580,7 @@ void TBranchElement::ReadLeaves(TBuffer& b)
          return;
       }
       GetInfo()->ReadBuffer(b, (char**) &fObject, fID);
-      if (fStreamerType == TStreamerInfo::kCounter) {
+      if (fStreamerType == TVirtualStreamerInfo::kCounter) {
          fNdata = (Int_t) GetValue(0, 0);
       }
    }
@@ -2619,8 +2619,8 @@ void TBranchElement::ReleaseObject()
          // -- We are a TClonesArray master branch.
          TClonesArray::Class()->Destructor(fObject);
          fObject = 0;
-         if ((fStreamerType == TStreamerInfo::kObjectp) ||
-             (fStreamerType == TStreamerInfo::kObjectP)) {
+         if ((fStreamerType == TVirtualStreamerInfo::kObjectp) ||
+             (fStreamerType == TVirtualStreamerInfo::kObjectP)) {
             // -- We are a pointer to a TClonesArray.
             // We must zero the pointer in the object.
             *((char**) fAddress) = 0;
@@ -2635,7 +2635,7 @@ void TBranchElement::ReleaseObject()
             proxy->Destructor(fObject);
             fObject = 0;
          }
-         if (fStreamerType == TStreamerInfo::kSTLp) {
+         if (fStreamerType == TVirtualStreamerInfo::kSTLp) {
             // -- We are a pointer to an STL container.
             // We must zero the pointer in the object.
             *((char**) fAddress) = 0;
@@ -2886,16 +2886,16 @@ void TBranchElement::SetAddress(void* add)
                // Reset the proxy.
                fSTLtype = kNone;
                switch(fStreamerType) {
-                  case TStreamerInfo::kAny:
-                  case TStreamerInfo::kSTL:
-                     fStreamerType = TStreamerInfo::kObject;
+                  case TVirtualStreamerInfo::kAny:
+                  case TVirtualStreamerInfo::kSTL:
+                     fStreamerType = TVirtualStreamerInfo::kObject;
                      break;
-                  case TStreamerInfo::kAnyp:
-                  case TStreamerInfo::kSTLp:
-                     fStreamerType = TStreamerInfo::kObjectp;
+                  case TVirtualStreamerInfo::kAnyp:
+                  case TVirtualStreamerInfo::kSTLp:
+                     fStreamerType = TVirtualStreamerInfo::kObjectp;
                      break;
-                  case TStreamerInfo::kAnyP:
-                     fStreamerType = TStreamerInfo::kObjectP;
+                  case TVirtualStreamerInfo::kAnyP:
+                     fStreamerType = TVirtualStreamerInfo::kObjectP;
                      break;
                }
                fClonesName = oldProxy->GetValueClass()->GetName();
@@ -2935,7 +2935,7 @@ void TBranchElement::SetAddress(void* add)
       // -- We are a TClonesArray master branch.
       if (fAddress) {
          // -- We have been given a non-zero address, allocate if necessary.
-         if (fStreamerType == TStreamerInfo::kObject) {
+         if (fStreamerType == TVirtualStreamerInfo::kObject) {
             // -- We are *not* a top-level branch and we are *not* a pointer to a TClonesArray.
             // Case of an embedded TClonesArray.
             fObject = fAddress;
@@ -2948,8 +2948,8 @@ void TBranchElement::SetAddress(void* add)
             // -- We are either a top-level branch or we are a subbranch which is a pointer to a TClonesArray.
             // Streamer type should be -1 (for a top-level branch) or kObject(p|P) here.
             if ((fStreamerType != -1) &&
-                (fStreamerType != TStreamerInfo::kObjectp) &&
-                (fStreamerType != TStreamerInfo::kObjectP)) {
+                (fStreamerType != TVirtualStreamerInfo::kObjectp) &&
+                (fStreamerType != TVirtualStreamerInfo::kObjectP)) {
                Error("SetAddress", "TClonesArray with fStreamerType: %d", fStreamerType);
             } else if (fStreamerType == -1) {
                // -- We are a top-level branch.
@@ -2973,7 +2973,7 @@ void TBranchElement::SetAddress(void* add)
          }
       } else {
          // -- We have been given a zero address, allocate for top-level only.
-         if (fStreamerType == TStreamerInfo::kObject) {
+         if (fStreamerType == TVirtualStreamerInfo::kObject) {
             // -- We are *not* a top-level branch and we are *not* a pointer to a TClonesArray.
             // Case of an embedded TClonesArray.
             Error("SetAddress", "Embedded TClonesArray given a zero address for branch '%s'", GetName());
@@ -2981,8 +2981,8 @@ void TBranchElement::SetAddress(void* add)
             // -- We are either a top-level branch or we are a subbranch which is a pointer to a TClonesArray.
             // Streamer type should be -1 (for a top-level branch) or kObject(p|P) here.
             if ((fStreamerType != -1) &&
-                (fStreamerType != TStreamerInfo::kObjectp) &&
-                (fStreamerType != TStreamerInfo::kObjectP)) {
+                (fStreamerType != TVirtualStreamerInfo::kObjectp) &&
+                (fStreamerType != TVirtualStreamerInfo::kObjectP)) {
                Error("SetAddress", "TClonesArray with fStreamerType: %d", fStreamerType);
             } else if (fStreamerType == -1) {
                // -- We are a top-level branch.
@@ -3003,16 +3003,16 @@ void TBranchElement::SetAddress(void* add)
       TVirtualCollectionProxy* proxy = GetCollectionProxy();
       if (fAddress) {
          // -- We have been given a non-zero address, allocate if necessary.
-         if ((fStreamerType == TStreamerInfo::kObject) ||
-             (fStreamerType == TStreamerInfo::kAny) ||
-             (fStreamerType == TStreamerInfo::kSTL)) {
+         if ((fStreamerType == TVirtualStreamerInfo::kObject) ||
+             (fStreamerType == TVirtualStreamerInfo::kAny) ||
+             (fStreamerType == TVirtualStreamerInfo::kSTL)) {
             // We are *not* a top-level branch and we are *not* a pointer to an STL container.
             // Case of an embedded STL container.
             fObject = fAddress;
          } else {
             // We are either a top-level branch or subbranch which is a pointer to an STL container.
             // Streamer type should be -1 (for a top-level branch) or kSTLp here.
-            if ((fStreamerType != -1) && (fStreamerType != TStreamerInfo::kSTLp)) {
+            if ((fStreamerType != -1) && (fStreamerType != TVirtualStreamerInfo::kSTLp)) {
                Error("SetAddress", "STL container with fStreamerType: %d", fStreamerType);
             } else if (fStreamerType == -1) {
                // -- We are a top-level branch.
@@ -3050,16 +3050,16 @@ void TBranchElement::SetAddress(void* add)
          }
       } else {
          // -- We have been given a zero address, allocate for top-level only.
-         if ((fStreamerType == TStreamerInfo::kObject) ||
-             (fStreamerType == TStreamerInfo::kAny) ||
-             (fStreamerType == TStreamerInfo::kSTL)) {
+         if ((fStreamerType == TVirtualStreamerInfo::kObject) ||
+             (fStreamerType == TVirtualStreamerInfo::kAny) ||
+             (fStreamerType == TVirtualStreamerInfo::kSTL)) {
             // We are *not* a top-level branch and we are *not* a pointer to an STL container.
             // Case of an embedded STL container.
             Error("SetAddress", "Embedded STL container given a zero address for branch '%s'", GetName());
          } else {
             // We are either a top-level branch or sub-branch which is a pointer to an STL container.
             // Streamer type should be -1 (for a top-level branch) or kSTLp here.
-            if ((fStreamerType != -1) && (fStreamerType != TStreamerInfo::kSTLp)) {
+            if ((fStreamerType != -1) && (fStreamerType != TVirtualStreamerInfo::kSTLp)) {
                Error("SetAddress", "STL container with fStreamerType: %d", fStreamerType);
             } else if (fStreamerType == -1) {
                // -- We are a top-level branch, allocate.
@@ -3258,7 +3258,7 @@ void TBranchElement::Streamer(TBuffer& R__b)
       //        something just because we got written to disk.
       TBranchElement::Class()->WriteBuffer(R__b, this);
 
-      // make sure that all TStreamerInfo objects referenced by
+      // make sure that all TVirtualStreamerInfo objects referenced by
       // this class are written to the file
       if (GetInfo()) {
          GetInfo()->ForceWriteInfo((TFile *)R__b.GetParent(), kTRUE);
@@ -3342,12 +3342,12 @@ Int_t TBranchElement::Unroll(const char* name, TClass* clParent, TClass* cl, cha
    //  independently in the tree.
    //
 
-   Bool_t optim = TStreamerInfo::CanOptimize();
+   Bool_t optim = TVirtualStreamerInfo::CanOptimize();
    if (splitlevel > 0) {
-      TStreamerInfo::Optimize(kFALSE);
+      TVirtualStreamerInfo::Optimize(kFALSE);
    }
    TStreamerInfo* sinfo = fTree->BuildStreamerInfo(cl);
-   TStreamerInfo::Optimize(optim);
+   TVirtualStreamerInfo::Optimize(optim);
 
    //
    //  Do nothing if we couldn't build the streamer info for cl.
diff --git a/tree/src/TTree.cxx b/tree/src/TTree.cxx
index 88ae86e054beb015e0ab9c28e83483f4494d1d68..45d246bf0b42e97a921f7413c5016eb23ac3a56a 100644
--- a/tree/src/TTree.cxx
+++ b/tree/src/TTree.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TTree.cxx,v 1.317 2007/01/25 22:53:05 pcanal Exp $
+// @(#)root/tree:$Name:  $:$Id: TTree.cxx,v 1.318 2007/01/30 11:24:32 brun Exp $
 // Author: Rene Brun   12/01/96
 
 /*************************************************************************
@@ -1888,7 +1888,7 @@ TStreamerInfo* TTree::BuildStreamerInfo(TClass* cl, void* pointer /* = 0 */)
       return 0;
    }
    cl->BuildRealData(pointer);
-   TStreamerInfo* sinfo = cl->GetStreamerInfo(cl->GetClassVersion());
+   TStreamerInfo* sinfo = (TStreamerInfo*)cl->GetStreamerInfo(cl->GetClassVersion());
    if (fDirectory) {
       sinfo->ForceWriteInfo(fDirectory->GetFile());
    }
diff --git a/tree/src/TTreeCloner.cxx b/tree/src/TTreeCloner.cxx
index 10f6a0ccaeca88626ae56222f07a1b954b7d6c66..1d9c782616e6dca7b04dd01e7a7482b15ab704a1 100644
--- a/tree/src/TTreeCloner.cxx
+++ b/tree/src/TTreeCloner.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TTreeCloner.cxx,v 1.14 2007/01/25 11:48:59 brun Exp $
+// @(#)root/tree:$Name:  $:$Id: TTreeCloner.cxx,v 1.15 2007/01/30 11:24:32 brun Exp $
 // Author: Philippe Canal 07/11/2005
 
 /*************************************************************************
@@ -305,11 +305,11 @@ void TTreeCloner::CopyStreamerInfos()
       TClass *cl = TClass::GetClass(oldInfo->GetName());
 
       // Insure that the TStreamerInfo is loaded
-      curInfo = cl->GetStreamerInfo(oldInfo->GetClassVersion());
+      curInfo = (TStreamerInfo*)cl->GetStreamerInfo(oldInfo->GetClassVersion());
       if (oldInfo->GetClassVersion()==1) {
          // We may have a Foreign class let's look using the
          // checksum:
-         curInfo = cl->FindStreamerInfo(oldInfo->GetCheckSum());
+         curInfo = (TStreamerInfo*)cl->FindStreamerInfo(oldInfo->GetCheckSum());
       }
       curInfo->TagFile(toFile);
    }
diff --git a/treeplayer/inc/TBranchProxyClassDescriptor.h b/treeplayer/inc/TBranchProxyClassDescriptor.h
index f7cac72c3a98714cd5d0c228cd732775b5439e7a..37db283fc1b4e1ac1c2c1c9e9ac0407f2859f120 100644
--- a/treeplayer/inc/TBranchProxyClassDescriptor.h
+++ b/treeplayer/inc/TBranchProxyClassDescriptor.h
@@ -1,4 +1,4 @@
-// @(#)root/treeplayer:$Name:  $:$Id: TBranchProxyClassDescriptor.h,v 1.6 2005/11/11 23:21:43 pcanal Exp $
+// @(#)root/treeplayer:$Name:  $:$Id: TBranchProxyClassDescriptor.h,v 1.7 2006/05/23 08:37:42 brun Exp $
 // Author: Philippe Canal 06/06/2004
 
 /*************************************************************************
@@ -20,7 +20,7 @@
 #endif
 
 class TTree;
-class TStreamerInfo;
+class TVirtualStreamerInfo;
 
 namespace ROOT {
 
@@ -41,7 +41,7 @@ namespace ROOT {
       TString        fRawSymbol;
       TString        fBranchName;
       TString        fSubBranchPrefix;
-      TStreamerInfo *fInfo;     // TStreamerInfo describing this class
+      TVirtualStreamerInfo *fInfo;     // TVirtualStreamerInfo describing this class
 
       UInt_t  fMaxDatamemberType;
 
@@ -49,11 +49,11 @@ namespace ROOT {
 
    public:
 
-      TBranchProxyClassDescriptor(const char *type, TStreamerInfo *info, const char *branchname,
+      TBranchProxyClassDescriptor(const char *type, TVirtualStreamerInfo *info, const char *branchname,
                                   UInt_t isclones, UInt_t splitlevel);
       TBranchProxyClassDescriptor(const char *branchname);
 
-      TBranchProxyClassDescriptor(const char *type, TStreamerInfo *info, const char *branchname,
+      TBranchProxyClassDescriptor(const char *type, TVirtualStreamerInfo *info, const char *branchname,
                                   const char *branchPrefix, UInt_t isclones,
                                   UInt_t splitlevel);
       TBranchProxyClassDescriptor(const TBranchProxyClassDescriptor &b) :TNamed(b){;}
@@ -64,7 +64,7 @@ namespace ROOT {
 
       const char* GetRawSymbol() const;
       
-      TStreamerInfo *GetInfo() const { return fInfo; }
+      TVirtualStreamerInfo *GetInfo() const { return fInfo; }
 
       UInt_t GetSplitLevel() const;
 
diff --git a/treeplayer/src/TBranchProxyClassDescriptor.cxx b/treeplayer/src/TBranchProxyClassDescriptor.cxx
index 6baca664f038645049cfe23593c16d50427ac1b6..3936401838710698d1aadb340ce8ccb769c81f30 100644
--- a/treeplayer/src/TBranchProxyClassDescriptor.cxx
+++ b/treeplayer/src/TBranchProxyClassDescriptor.cxx
@@ -1,4 +1,4 @@
-// @(#)root/treeplayer:$Name:  $:$Id: TBranchProxyClassDescriptor.cxx,v 1.9 2006/04/19 08:22:26 rdm Exp $
+// @(#)root/treeplayer:$Name:  $:$Id: TBranchProxyClassDescriptor.cxx,v 1.10 2007/01/30 11:24:32 brun Exp $
 // Author: Philippe Canal 06/06/2004
 
 /*************************************************************************
@@ -14,7 +14,7 @@
 
 #include "TClass.h"
 #include "TError.h"
-#include "TStreamerInfo.h"
+#include "TVirtualStreamerInfo.h"
 
 namespace ROOT {
 
@@ -41,7 +41,7 @@ namespace ROOT {
    }
 
    TBranchProxyClassDescriptor::TBranchProxyClassDescriptor(const char *type,
-                                                            TStreamerInfo *info,
+                                                            TVirtualStreamerInfo *info,
                                                             const char *branchname,
                                                             UInt_t isclones,
                                                             UInt_t splitlevel) :
@@ -77,7 +77,7 @@ namespace ROOT {
       if (fSubBranchPrefix.Length() && fSubBranchPrefix[fSubBranchPrefix.Length()-1]=='.') fSubBranchPrefix.Remove(fSubBranchPrefix.Length()-1);
    }
 
-   TBranchProxyClassDescriptor::TBranchProxyClassDescriptor(const char *type, TStreamerInfo *info,
+   TBranchProxyClassDescriptor::TBranchProxyClassDescriptor(const char *type, TVirtualStreamerInfo *info,
                                                             const char *branchname,
                                                             const char *branchPrefix, UInt_t isclones,
                                                             UInt_t splitlevel) :
diff --git a/treeplayer/src/TFormLeafInfo.cxx b/treeplayer/src/TFormLeafInfo.cxx
index 386b88314f133c23e134d380c83cfe551d856ea6..8b6f85ceceb17c952bb5b6e0fc1824a3e9c9f093 100644
--- a/treeplayer/src/TFormLeafInfo.cxx
+++ b/treeplayer/src/TFormLeafInfo.cxx
@@ -1,4 +1,4 @@
-// @(#)root/treeplayer:$Name:  $:$Id: TFormLeafInfo.cxx,v 1.33 2006/09/06 07:53:36 pcanal Exp $
+// @(#)root/treeplayer:$Name:  $:$Id: TFormLeafInfo.cxx,v 1.34 2007/01/30 11:24:32 brun Exp $
 // Author: Philippe Canal 01/06/2004
 
 /*************************************************************************
@@ -470,7 +470,7 @@ Bool_t TFormLeafInfo::Update()
             // A delimiter happened let's see if what we have seen
             // so far does point to a data member.
             *current = '\0';
-            element = cl->GetStreamerInfo()->GetStreamerElement(work,offset);
+            element = ((TStreamerInfo*)cl->GetStreamerInfo())->GetStreamerElement(work,offset);
             if (element) {
                Int_t type = element->GetNewType();
                if (type<60) {
@@ -1016,7 +1016,7 @@ Int_t TFormLeafInfoClones::GetCounterValue(TLeaf* leaf)
    if (!fCounter) {
       TClass *clonesClass = TClonesArray::Class();
       Int_t c_offset;
-      TStreamerElement *counter = clonesClass->GetStreamerInfo()->GetStreamerElement("fLast",c_offset);
+      TStreamerElement *counter = ((TStreamerInfo*)clonesClass->GetStreamerInfo())->GetStreamerElement("fLast",c_offset);
       fCounter = new TFormLeafInfo(clonesClass,c_offset,counter);
    }
    return (Int_t)fCounter->ReadValue((char*)GetLocalValuePointer(leaf)) + 1;
@@ -1030,7 +1030,7 @@ Int_t TFormLeafInfoClones::ReadCounterValue(char* where)
    if (!fCounter) {
       TClass *clonesClass = TClonesArray::Class();
       Int_t c_offset;
-      TStreamerElement *counter = clonesClass->GetStreamerInfo()->GetStreamerElement("fLast",c_offset);
+      TStreamerElement *counter = ((TStreamerInfo*)clonesClass->GetStreamerInfo())->GetStreamerElement("fLast",c_offset);
       fCounter = new TFormLeafInfo(clonesClass,c_offset,counter);
    }
    return (Int_t)fCounter->ReadValue(where) + 1;
@@ -2055,7 +2055,7 @@ TFormLeafInfoMultiVarDim::TFormLeafInfoMultiVarDim( TClass* classptr,
       TStreamerBasicPointer * elem = (TStreamerBasicPointer*)element;
 
       Int_t counterOffset;
-      TStreamerElement* counter = classptr->GetStreamerInfo()->GetStreamerElement(elem->GetCountName(),counterOffset);
+      TStreamerElement* counter = ((TStreamerInfo*)classptr->GetStreamerInfo())->GetStreamerElement(elem->GetCountName(),counterOffset);
       if (!parent) return;
       fCounter2 = parent->DeepCopy();
       TFormLeafInfo ** next = &(fCounter2->fNext);
diff --git a/treeplayer/src/TTreeFormula.cxx b/treeplayer/src/TTreeFormula.cxx
index 4a867a8c3bd52b32688a456b7ed4af5e68c89b01..bd0d27e1b9a690f561c863f712686decb8c9303d 100644
--- a/treeplayer/src/TTreeFormula.cxx
+++ b/treeplayer/src/TTreeFormula.cxx
@@ -1,4 +1,4 @@
-// @(#)root/treeplayer:$Name:  $:$Id: TTreeFormula.cxx,v 1.210 2007/02/02 08:08:54 brun Exp $
+// @(#)root/treeplayer:$Name:  $:$Id: TTreeFormula.cxx,v 1.211 2007/02/03 18:33:15 brun Exp $
 // Author: Rene Brun   19/01/96
 
 /*************************************************************************
@@ -452,7 +452,7 @@ Int_t TTreeFormula::RegisterDimensions(Int_t code, TFormLeafInfo *leafinfo,
       TStreamerBasicPointer *array = (TStreamerBasicPointer*)elem;
       TClass *cl = leafinfo->fClass;
       Int_t offset;
-      TStreamerElement* counter = cl->GetStreamerInfo()->GetStreamerElement(array->GetCountName(),offset);
+      TStreamerElement* counter = ((TStreamerInfo*)cl->GetStreamerInfo())->GetStreamerElement(array->GetCountName(),offset);
       if (maininfo==0 || maininfo==leafinfo || 1) {
          leafinfo->fCounter = new TFormLeafInfo(cl,offset,counter);
       } else {
@@ -470,7 +470,7 @@ Int_t TTreeFormula::RegisterDimensions(Int_t code, TFormLeafInfo *leafinfo,
 
       TClass * clonesClass = TClonesArray::Class();
       Int_t c_offset;
-      TStreamerElement *counter = clonesClass->GetStreamerInfo()->GetStreamerElement("fLast",c_offset);
+      TStreamerElement *counter = ((TStreamerInfo*)clonesClass->GetStreamerInfo())->GetStreamerElement("fLast",c_offset);
       leafinfo->fCounter = new TFormLeafInfo(clonesClass,c_offset,counter);
 
    } else if (!useCollectionObject && elem->GetClassPointer() && elem->GetClassPointer()->GetCollectionProxy() ) {
@@ -1483,7 +1483,7 @@ Int_t TTreeFormula::ParseWithLeaf(TLeaf* leaf, const char* subExpression, Bool_t
             if (!cl) {
                Warning("DefinedVariable","Missing class for %s!",name.Data());
             } else {
-               element = cl->GetStreamerInfo()->GetStreamerElement(work,offset);
+               element = ((TStreamerInfo*)cl->GetStreamerInfo())->GetStreamerElement(work,offset);
             }
 
             if (!element && !prevUseCollectionObject) {
@@ -1494,7 +1494,7 @@ Int_t TTreeFormula::ParseWithLeaf(TLeaf* leaf, const char* subExpression, Bool_t
                while ((curelem = (TStreamerElement*)next())) {
                   if (curelem->GetClassPointer() ==  TClonesArray::Class()) {
                      Int_t clones_offset;
-                     cl->GetStreamerInfo()->GetStreamerElement(curelem->GetName(),clones_offset);
+                     ((TStreamerInfo*)cl->GetStreamerInfo())->GetStreamerElement(curelem->GetName(),clones_offset);
                      TFormLeafInfo* clonesinfo =
                         new TFormLeafInfo(cl, clones_offset, curelem);
                      TClonesArray * clones;
@@ -1509,7 +1509,7 @@ Int_t TTreeFormula::ParseWithLeaf(TLeaf* leaf, const char* subExpression, Bool_t
                      }
 
                      TClass *sub_cl = clones->GetClass();
-                     if (sub_cl) element = sub_cl->GetStreamerInfo()->GetStreamerElement(work,offset);
+                     if (sub_cl) element = ((TStreamerInfo*)sub_cl->GetStreamerInfo())->GetStreamerElement(work,offset);
                      delete clonesinfo;
 
                      if (element) {
@@ -1528,12 +1528,12 @@ Int_t TTreeFormula::ParseWithLeaf(TLeaf* leaf, const char* subExpression, Bool_t
                   } else if (curelem->GetClassPointer() && curelem->GetClassPointer()->GetCollectionProxy()) {
 
                      Int_t coll_offset;
-                     cl->GetStreamerInfo()->GetStreamerElement(curelem->GetName(),coll_offset);
+                     ((TStreamerInfo*)cl->GetStreamerInfo())->GetStreamerElement(curelem->GetName(),coll_offset);
 
                      TClass *sub_cl =
                         curelem->GetClassPointer()->GetCollectionProxy()->GetValueClass();
                      if (sub_cl) {
-                        element = sub_cl->GetStreamerInfo()->GetStreamerElement(work,offset);
+                        element = ((TStreamerInfo*)sub_cl->GetStreamerInfo())->GetStreamerElement(work,offset);
                      }
                      if (element) {
                         if (numberOfVarDim>1) {
@@ -1779,7 +1779,7 @@ Int_t TTreeFormula::ParseWithLeaf(TLeaf* leaf, const char* subExpression, Bool_t
                         Error("DefinedVariable","Failed to access class type of reference target (%s)",element->GetName());
                         return -1;
                      }
-                     element = cl->GetStreamerInfo()->GetStreamerElement(work,offset);
+                     element = ((TStreamerInfo*)cl->GetStreamerInfo())->GetStreamerElement(work,offset);
                   }
                   else  {
                      Error("DefinedVariable","Failed to access class type of reference target (%s)",element->GetName());
@@ -2751,7 +2751,7 @@ TLeaf* TTreeFormula::GetLeafWithDatamember(const char* topchoice, const char* ne
          // Now that we have the class, let's check if the topchoice is of its datamember
          // or if the nextchoice is a datamember of one of its datamember.
          Int_t offset;
-         TStreamerInfo* info =  cl->GetStreamerInfo();
+         TStreamerInfo* info =  (TStreamerInfo*)cl->GetStreamerInfo();
          TStreamerElement* element = info?info->GetStreamerElement(topchoice,offset):0;
          if (!element) {
             TIter next( cl->GetStreamerInfo()->GetElements() );
@@ -2779,7 +2779,7 @@ TLeaf* TTreeFormula::GetLeafWithDatamember(const char* topchoice, const char* ne
                   }
 
                   Int_t clones_offset;
-                  cl->GetStreamerInfo()->GetStreamerElement(curelem->GetName(),clones_offset);
+                  ((TStreamerInfo*)cl->GetStreamerInfo())->GetStreamerElement(curelem->GetName(),clones_offset);
                   TFormLeafInfo* sub_clonesinfo = new TFormLeafInfo(cl, clones_offset, curelem);
                   if (leafinfo)
                      if (leafinfo->fNext) leafinfo->fNext->fNext = sub_clonesinfo;
@@ -2799,7 +2799,7 @@ TLeaf* TTreeFormula::GetLeafWithDatamember(const char* topchoice, const char* ne
                   TClass *sub_cl = clones->GetClass();
 
                   // Now that we finally have the inside class, let's query it.
-                  element = sub_cl->GetStreamerInfo()->GetStreamerElement(nextchoice,offset);
+                  element = ((TStreamerInfo*)sub_cl->GetStreamerInfo())->GetStreamerElement(nextchoice,offset);
                   if (element) break;
                } // if clones array
                else if (curelem->GetClassPointer() && curelem->GetClassPointer()->GetCollectionProxy()) {
@@ -2810,7 +2810,7 @@ TLeaf* TTreeFormula::GetLeafWithDatamember(const char* topchoice, const char* ne
                      sub_cl = sub_cl->GetCollectionProxy()->GetValueClass();
 
                   // Now that we finally have the inside class, let's query it.
-                  if (sub_cl) element = sub_cl->GetStreamerInfo()->GetStreamerElement(nextchoice,offset);
+                  if (sub_cl) element = ((TStreamerInfo*)sub_cl->GetStreamerInfo())->GetStreamerElement(nextchoice,offset);
                   if (element) break;
 
                }
diff --git a/treeplayer/src/TTreeProxyGenerator.cxx b/treeplayer/src/TTreeProxyGenerator.cxx
index ee81dae6e3cfca6f9cd9c651523de27f3399a5bd..4377d1a71fa716335828b76943651b2e395c1251 100644
--- a/treeplayer/src/TTreeProxyGenerator.cxx
+++ b/treeplayer/src/TTreeProxyGenerator.cxx
@@ -1,4 +1,4 @@
-// @(#)root/treeplayer:$Name:  $:$Id: TTreeProxyGenerator.cxx,v 1.26 2007/01/20 19:29:35 brun Exp $
+// @(#)root/treeplayer:$Name:  $:$Id: TTreeProxyGenerator.cxx,v 1.27 2007/01/30 11:24:32 brun Exp $
 // Author: Philippe Canal 06/06/2004
 
 /*************************************************************************
@@ -68,7 +68,7 @@ class TStreamerElement;
 #include "TFriendElement.h"
 #include "TLeaf.h"
 #include "TTree.h"
-#include "TStreamerInfo.h"
+#include "TVirtualStreamerInfo.h"
 #include "TStreamerElement.h"
 #include "TSystem.h"
 #include "TLeafObject.h"
@@ -441,7 +441,7 @@ namespace ROOT {
       Int_t bid = branch->GetID();
 
       TStreamerElement *element = 0;
-      TStreamerInfo *info = branch->GetInfo();
+      TVirtualStreamerInfo *info = branch->GetInfo();
 
       if (bid==-2) {
          Error("AnalyzeBranch","Support for branch ID: %d not yet implement.",
@@ -462,77 +462,77 @@ namespace ROOT {
          Bool_t ispointer = false;
          switch(element->GetType()) {
 
-            case TStreamerInfo::kBool:    { proxyTypeName = "T" + middle + "BoolProxy"; break; }
-            case TStreamerInfo::kChar:    { proxyTypeName = "T" + middle + "CharProxy"; break; }
-            case TStreamerInfo::kShort:   { proxyTypeName = "T" + middle + "ShortProxy"; break; }
-            case TStreamerInfo::kInt:     { proxyTypeName = "T" + middle + "IntProxy"; break; }
-            case TStreamerInfo::kLong:    { proxyTypeName = "T" + middle + "LongProxy"; break; }
-            case TStreamerInfo::kLong64:  { proxyTypeName = "T" + middle + "Long64Proxy"; break; }
-            case TStreamerInfo::kFloat:   { proxyTypeName = "T" + middle + "FloatProxy"; break; }
-            case TStreamerInfo::kDouble:  { proxyTypeName = "T" + middle + "DoubleProxy"; break; }
-            case TStreamerInfo::kDouble32:{ proxyTypeName = "T" + middle + "Double32Proxy"; break; }
-            case TStreamerInfo::kUChar:   { proxyTypeName = "T" + middle + "UCharProxy"; break; }
-            case TStreamerInfo::kUShort:  { proxyTypeName = "T" + middle + "UShortProxy"; break; }
-            case TStreamerInfo::kUInt:    { proxyTypeName = "T" + middle + "UIntProxy"; break; }
-            case TStreamerInfo::kULong:   { proxyTypeName = "T" + middle + "ULongProxy"; break; }
-            case TStreamerInfo::kULong64: { proxyTypeName = "T" + middle + "ULong64Proxy"; break; }
-            case TStreamerInfo::kBits:    { proxyTypeName = "T" + middle + "UIntProxy"; break; }
-
-            case TStreamerInfo::kCharStar: { proxyTypeName = GetArrayType(element,"Char",container); break; }
+            case TVirtualStreamerInfo::kBool:    { proxyTypeName = "T" + middle + "BoolProxy"; break; }
+            case TVirtualStreamerInfo::kChar:    { proxyTypeName = "T" + middle + "CharProxy"; break; }
+            case TVirtualStreamerInfo::kShort:   { proxyTypeName = "T" + middle + "ShortProxy"; break; }
+            case TVirtualStreamerInfo::kInt:     { proxyTypeName = "T" + middle + "IntProxy"; break; }
+            case TVirtualStreamerInfo::kLong:    { proxyTypeName = "T" + middle + "LongProxy"; break; }
+            case TVirtualStreamerInfo::kLong64:  { proxyTypeName = "T" + middle + "Long64Proxy"; break; }
+            case TVirtualStreamerInfo::kFloat:   { proxyTypeName = "T" + middle + "FloatProxy"; break; }
+            case TVirtualStreamerInfo::kDouble:  { proxyTypeName = "T" + middle + "DoubleProxy"; break; }
+            case TVirtualStreamerInfo::kDouble32:{ proxyTypeName = "T" + middle + "Double32Proxy"; break; }
+            case TVirtualStreamerInfo::kUChar:   { proxyTypeName = "T" + middle + "UCharProxy"; break; }
+            case TVirtualStreamerInfo::kUShort:  { proxyTypeName = "T" + middle + "UShortProxy"; break; }
+            case TVirtualStreamerInfo::kUInt:    { proxyTypeName = "T" + middle + "UIntProxy"; break; }
+            case TVirtualStreamerInfo::kULong:   { proxyTypeName = "T" + middle + "ULongProxy"; break; }
+            case TVirtualStreamerInfo::kULong64: { proxyTypeName = "T" + middle + "ULong64Proxy"; break; }
+            case TVirtualStreamerInfo::kBits:    { proxyTypeName = "T" + middle + "UIntProxy"; break; }
+
+            case TVirtualStreamerInfo::kCharStar: { proxyTypeName = GetArrayType(element,"Char",container); break; }
 
                // array of basic types  array[8]
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kBool:    { proxyTypeName = GetArrayType(element,"Bool",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kChar:    { proxyTypeName = GetArrayType(element,"Char",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kShort:   { proxyTypeName = GetArrayType(element,"Short",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kInt:     { proxyTypeName = GetArrayType(element,"Int",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kLong:    { proxyTypeName = GetArrayType(element,"Long",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kLong64:  { proxyTypeName = GetArrayType(element,"Long64",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kFloat:   { proxyTypeName = GetArrayType(element,"Float",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble:  { proxyTypeName = GetArrayType(element,"Double",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble32:{ proxyTypeName = GetArrayType(element,"Double32",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kUChar:   { proxyTypeName = GetArrayType(element,"UChar",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kUShort:  { proxyTypeName = GetArrayType(element,"UShort",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kUInt:    { proxyTypeName = GetArrayType(element,"UInt",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kULong:   { proxyTypeName = GetArrayType(element,"ULong",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kULong64: { proxyTypeName = GetArrayType(element,"ULong64",container ); break; }
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kBits:    { proxyTypeName = GetArrayType(element,"UInt",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kBool:    { proxyTypeName = GetArrayType(element,"Bool",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kChar:    { proxyTypeName = GetArrayType(element,"Char",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kShort:   { proxyTypeName = GetArrayType(element,"Short",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kInt:     { proxyTypeName = GetArrayType(element,"Int",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kLong:    { proxyTypeName = GetArrayType(element,"Long",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kLong64:  { proxyTypeName = GetArrayType(element,"Long64",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kFloat:   { proxyTypeName = GetArrayType(element,"Float",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kDouble:  { proxyTypeName = GetArrayType(element,"Double",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kDouble32:{ proxyTypeName = GetArrayType(element,"Double32",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUChar:   { proxyTypeName = GetArrayType(element,"UChar",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUShort:  { proxyTypeName = GetArrayType(element,"UShort",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUInt:    { proxyTypeName = GetArrayType(element,"UInt",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kULong:   { proxyTypeName = GetArrayType(element,"ULong",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kULong64: { proxyTypeName = GetArrayType(element,"ULong64",container ); break; }
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kBits:    { proxyTypeName = GetArrayType(element,"UInt",container ); break; }
 
                // pointer to an array of basic types  array[n]
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kBool:    { proxyTypeName = GetArrayType(element,"Bool",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kChar:    { proxyTypeName = GetArrayType(element,"Char",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kShort:   { proxyTypeName = GetArrayType(element,"Short",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kInt:     { proxyTypeName = GetArrayType(element,"Int",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kLong:    { proxyTypeName = GetArrayType(element,"Long",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kLong64:  { proxyTypeName = GetArrayType(element,"Long64",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kFloat:   { proxyTypeName = GetArrayType(element,"Float",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble:  { proxyTypeName = GetArrayType(element,"Double",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble32:{ proxyTypeName = GetArrayType(element,"Double32",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kUChar:   { proxyTypeName = GetArrayType(element,"UChar",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kUShort:  { proxyTypeName = GetArrayType(element,"UShort",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kUInt:    { proxyTypeName = GetArrayType(element,"UInt",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kULong:   { proxyTypeName = GetArrayType(element,"ULong",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kULong64: { proxyTypeName = GetArrayType(element,"ULong64",container ); break; }
-            case TStreamerInfo::kOffsetP + TStreamerInfo::kBits:    { proxyTypeName = GetArrayType(element,"UInt",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kBool:    { proxyTypeName = GetArrayType(element,"Bool",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kChar:    { proxyTypeName = GetArrayType(element,"Char",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kShort:   { proxyTypeName = GetArrayType(element,"Short",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kInt:     { proxyTypeName = GetArrayType(element,"Int",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kLong:    { proxyTypeName = GetArrayType(element,"Long",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kLong64:  { proxyTypeName = GetArrayType(element,"Long64",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kFloat:   { proxyTypeName = GetArrayType(element,"Float",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kDouble:  { proxyTypeName = GetArrayType(element,"Double",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kDouble32:{ proxyTypeName = GetArrayType(element,"Double32",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUChar:   { proxyTypeName = GetArrayType(element,"UChar",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUShort:  { proxyTypeName = GetArrayType(element,"UShort",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUInt:    { proxyTypeName = GetArrayType(element,"UInt",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kULong:   { proxyTypeName = GetArrayType(element,"ULong",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kULong64: { proxyTypeName = GetArrayType(element,"ULong64",container ); break; }
+            case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kBits:    { proxyTypeName = GetArrayType(element,"UInt",container ); break; }
 
                // array counter //[n]
-            case TStreamerInfo::kCounter: { proxyTypeName = "T" + middle + "IntProxy"; break; }
+            case TVirtualStreamerInfo::kCounter: { proxyTypeName = "T" + middle + "IntProxy"; break; }
 
 
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kObjectp:
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kObjectP:
-            case TStreamerInfo::kObjectp:
-            case TStreamerInfo::kObjectP:
-            case TStreamerInfo::kAnyp:
-            case TStreamerInfo::kAnyP:
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kObjectp:
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kObjectP:
+            case TVirtualStreamerInfo::kObjectp:
+            case TVirtualStreamerInfo::kObjectP:
+            case TVirtualStreamerInfo::kAnyp:
+            case TVirtualStreamerInfo::kAnyP:
                // set as pointers and fall through to the next switches
                ispointer = true;
-            case TStreamerInfo::kOffsetL + TStreamerInfo::kObject:
-            case TStreamerInfo::kObject:
-            case TStreamerInfo::kTString:
-            case TStreamerInfo::kTNamed:
-            case TStreamerInfo::kTObject:
-            case TStreamerInfo::kAny:
-            case TStreamerInfo::kBase: {
+            case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kObject:
+            case TVirtualStreamerInfo::kObject:
+            case TVirtualStreamerInfo::kTString:
+            case TVirtualStreamerInfo::kTNamed:
+            case TVirtualStreamerInfo::kTObject:
+            case TVirtualStreamerInfo::kAny:
+            case TVirtualStreamerInfo::kBase: {
                TClass *cl = element->GetClassPointer();
                if (cl) {
                   proxyTypeName = Form("T%sObjProxy<%s >", middle.Data(), cl->GetName());
@@ -604,7 +604,7 @@ namespace ROOT {
 
          TClass *cl = TClass::GetClass(cname);
          if (cl) {
-            TStreamerInfo *info = branch->GetInfo();
+            TVirtualStreamerInfo *info = branch->GetInfo();
             if (strcmp(cl->GetName(),info->GetName())!=0) {
                info = cl->GetStreamerInfo(); // might be the wrong version
             }
@@ -632,7 +632,7 @@ namespace ROOT {
 
          TClass *cl = TClass::GetClass(cname);
          if (cl) {
-            TStreamerInfo *info = branch->GetInfo();
+            TVirtualStreamerInfo *info = branch->GetInfo();
             if (strcmp(cl->GetName(),info->GetName())!=0) {
                info = cl->GetStreamerInfo(); // might be the wrong version
             }
@@ -641,7 +641,7 @@ namespace ROOT {
                                                      isclones, 0 /* unsplit object */);
          }
          if (cldesc) {
-            TStreamerInfo *info = cl->GetStreamerInfo();
+            TVirtualStreamerInfo *info = cl->GetStreamerInfo();
             TStreamerElement *elem = 0;
 
             TIter next(info->GetElements());
@@ -694,7 +694,7 @@ namespace ROOT {
                dataMemberName.Remove(0,strlen(mom->GetName())+1);
             } else {
                TBranchElement *current = mom;
-               TStreamerInfo *momInfo = current->GetInfo();
+               TVirtualStreamerInfo *momInfo = current->GetInfo();
                Int_t bid = current->GetID();
                TStreamerElement *momElement = bid>=0 ? (TStreamerElement *)momInfo->GetElements()->At(bid) : 0;
                while( momElement && momElement->IsBase() ) {
@@ -790,9 +790,9 @@ namespace ROOT {
 
             TStreamerElement* branchStreamerElem = 0;
 
-            TStreamerInfo *momInfo = topdesc ? topdesc->GetInfo() : ((TBranchElement*)branch->GetMother())->GetInfo();
+            TVirtualStreamerInfo *momInfo = topdesc ? topdesc->GetInfo() : ((TBranchElement*)branch->GetMother())->GetInfo();
             if (cname != momInfo->GetName()) {
-               // We do not have the correct TStreamerInfo, this is
+               // We do not have the correct TVirtualStreamerInfo, this is
                // because there is no proper 'branch' holding this sub-object
                // they are all stored in the branch for the owner of the object
 
@@ -946,7 +946,7 @@ namespace ROOT {
 
                   subbranch = (TBranch*)next();
                   if (subbranch) {
-                     // Find the TStreamerInfo
+                     // Find the TVirtualStreamerInfo
                      TString subname = subbranch->GetName();
                      if ( brprefix.Length() != 0 ) {
                         Debug(6,"Base class check %s %s\n",subname.Data(),brprefix.Data());
@@ -1234,7 +1234,7 @@ namespace ROOT {
             }
             if (NeedToEmulate(cl,0) || branchname[strlen(branchname)-1] == '.' || branch->GetSplitLevel()) {
                TBranchElement *be = dynamic_cast<TBranchElement*>(branch);
-               TStreamerInfo *info = (be && !isclones) ? be->GetInfo() : cl->GetStreamerInfo(); // the 2nd hand need to be fixed
+               TVirtualStreamerInfo *info = (be && !isclones) ? be->GetInfo() : cl->GetStreamerInfo(); // the 2nd hand need to be fixed
                desc = new TBranchProxyClassDescriptor(cl->GetName(), info, branchname,
                                                       isclones, branch->GetSplitLevel());
             } else {
@@ -1248,7 +1248,7 @@ namespace ROOT {
                // We have a non-splitted object!
 
                if (desc) {
-                  TStreamerInfo *info = cl->GetStreamerInfo();
+                  TVirtualStreamerInfo *info = cl->GetStreamerInfo();
                   TStreamerElement *elem = 0;
 
                   TIter next(info->GetElements());
@@ -1354,78 +1354,78 @@ namespace ROOT {
       Bool_t ispointer = false;
       switch(element->GetType()) {
 
-         case TStreamerInfo::kBool:    { type = "T" + middle + "BoolProxy"; break; }
-         case TStreamerInfo::kChar:    { type = "T" + middle + "CharProxy"; break; }
-         case TStreamerInfo::kShort:   { type = "T" + middle + "ShortProxy"; break; }
-         case TStreamerInfo::kInt:     { type = "T" + middle + "IntProxy"; break; }
-         case TStreamerInfo::kLong:    { type = "T" + middle + "LongProxy"; break; }
-         case TStreamerInfo::kLong64:  { type = "T" + middle + "Long64Proxy"; break; }
-         case TStreamerInfo::kFloat:   { type = "T" + middle + "FloatProxy"; break; }
-         case TStreamerInfo::kDouble:  { type = "T" + middle + "DoubleProxy"; break; }
-         case TStreamerInfo::kDouble32:{ type = "T" + middle + "Double32Proxy"; break; }
-         case TStreamerInfo::kUChar:   { type = "T" + middle + "UCharProxy"; break; }
-         case TStreamerInfo::kUShort:  { type = "T" + middle + "UShortProxy"; break; }
-         case TStreamerInfo::kUInt:    { type = "T" + middle + "UIntProxy"; break; }
-         case TStreamerInfo::kULong:   { type = "T" + middle + "ULongProxy"; break; }
-         case TStreamerInfo::kULong64: { type = "T" + middle + "ULong64Proxy"; break; }
-         case TStreamerInfo::kBits:    { type = "T" + middle + "UIntProxy"; break; }
-
-         case TStreamerInfo::kCharStar: { type = GetArrayType(element,"Char",container); break; }
+         case TVirtualStreamerInfo::kBool:    { type = "T" + middle + "BoolProxy"; break; }
+         case TVirtualStreamerInfo::kChar:    { type = "T" + middle + "CharProxy"; break; }
+         case TVirtualStreamerInfo::kShort:   { type = "T" + middle + "ShortProxy"; break; }
+         case TVirtualStreamerInfo::kInt:     { type = "T" + middle + "IntProxy"; break; }
+         case TVirtualStreamerInfo::kLong:    { type = "T" + middle + "LongProxy"; break; }
+         case TVirtualStreamerInfo::kLong64:  { type = "T" + middle + "Long64Proxy"; break; }
+         case TVirtualStreamerInfo::kFloat:   { type = "T" + middle + "FloatProxy"; break; }
+         case TVirtualStreamerInfo::kDouble:  { type = "T" + middle + "DoubleProxy"; break; }
+         case TVirtualStreamerInfo::kDouble32:{ type = "T" + middle + "Double32Proxy"; break; }
+         case TVirtualStreamerInfo::kUChar:   { type = "T" + middle + "UCharProxy"; break; }
+         case TVirtualStreamerInfo::kUShort:  { type = "T" + middle + "UShortProxy"; break; }
+         case TVirtualStreamerInfo::kUInt:    { type = "T" + middle + "UIntProxy"; break; }
+         case TVirtualStreamerInfo::kULong:   { type = "T" + middle + "ULongProxy"; break; }
+         case TVirtualStreamerInfo::kULong64: { type = "T" + middle + "ULong64Proxy"; break; }
+         case TVirtualStreamerInfo::kBits:    { type = "T" + middle + "UIntProxy"; break; }
+
+         case TVirtualStreamerInfo::kCharStar: { type = GetArrayType(element,"Char",container); break; }
 
             // array of basic types  array[8]
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool:    { type = GetArrayType(element,"Bool",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kChar:    { type = GetArrayType(element,"Char",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kShort:   { type = GetArrayType(element,"Short",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kInt:     { type = GetArrayType(element,"Int",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kLong:    { type = GetArrayType(element,"Long",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kLong64:  { type = GetArrayType(element,"Long64",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kFloat:   { type = GetArrayType(element,"Float",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble:  { type = GetArrayType(element,"Double",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble32:{ type = GetArrayType(element,"Double32",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kUChar:   { type = GetArrayType(element,"UChar",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kUShort:  { type = GetArrayType(element,"UShort",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kUInt:    { type = GetArrayType(element,"UInt",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kULong:   { type = GetArrayType(element,"ULong",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kULong64: { type = GetArrayType(element,"ULong64",container ); break; }
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kBits:    { type = GetArrayType(element,"UInt",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kBool:    { type = GetArrayType(element,"Bool",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kChar:    { type = GetArrayType(element,"Char",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kShort:   { type = GetArrayType(element,"Short",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kInt:     { type = GetArrayType(element,"Int",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kLong:    { type = GetArrayType(element,"Long",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kLong64:  { type = GetArrayType(element,"Long64",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kFloat:   { type = GetArrayType(element,"Float",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kDouble:  { type = GetArrayType(element,"Double",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kDouble32:{ type = GetArrayType(element,"Double32",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUChar:   { type = GetArrayType(element,"UChar",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUShort:  { type = GetArrayType(element,"UShort",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUInt:    { type = GetArrayType(element,"UInt",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kULong:   { type = GetArrayType(element,"ULong",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kULong64: { type = GetArrayType(element,"ULong64",container ); break; }
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kBits:    { type = GetArrayType(element,"UInt",container ); break; }
 
             // pointer to an array of basic types  array[n]
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool:    { type = GetArrayType(element,"Bool",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kChar:    { type = GetArrayType(element,"Char",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kShort:   { type = GetArrayType(element,"Short",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kInt:     { type = GetArrayType(element,"Int",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kLong:    { type = GetArrayType(element,"Long",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kLong64:  { type = GetArrayType(element,"Long64",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kFloat:   { type = GetArrayType(element,"Float",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble:  { type = GetArrayType(element,"Double",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble32:{ type = GetArrayType(element,"Double32",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kUChar:   { type = GetArrayType(element,"UChar",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kUShort:  { type = GetArrayType(element,"UShort",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kUInt:    { type = GetArrayType(element,"UInt",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kULong:   { type = GetArrayType(element,"ULong",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kULong64: { type = GetArrayType(element,"ULong64",container ); break; }
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kBits:    { type = GetArrayType(element,"UInt",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kBool:    { type = GetArrayType(element,"Bool",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kChar:    { type = GetArrayType(element,"Char",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kShort:   { type = GetArrayType(element,"Short",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kInt:     { type = GetArrayType(element,"Int",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kLong:    { type = GetArrayType(element,"Long",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kLong64:  { type = GetArrayType(element,"Long64",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kFloat:   { type = GetArrayType(element,"Float",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kDouble:  { type = GetArrayType(element,"Double",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kDouble32:{ type = GetArrayType(element,"Double32",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUChar:   { type = GetArrayType(element,"UChar",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUShort:  { type = GetArrayType(element,"UShort",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUInt:    { type = GetArrayType(element,"UInt",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kULong:   { type = GetArrayType(element,"ULong",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kULong64: { type = GetArrayType(element,"ULong64",container ); break; }
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kBits:    { type = GetArrayType(element,"UInt",container ); break; }
 
             // array counter //[n]
-         case TStreamerInfo::kCounter: { type = "T" + middle + "IntProxy"; break; }
+         case TVirtualStreamerInfo::kCounter: { type = "T" + middle + "IntProxy"; break; }
 
 
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kObjectp:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kObjectP:
-         case TStreamerInfo::kObjectp:
-         case TStreamerInfo::kObjectP:
-         case TStreamerInfo::kAnyp:
-         case TStreamerInfo::kAnyP:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kObjectp:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kObjectP:
+         case TVirtualStreamerInfo::kObjectp:
+         case TVirtualStreamerInfo::kObjectP:
+         case TVirtualStreamerInfo::kAnyp:
+         case TVirtualStreamerInfo::kAnyP:
             // set as pointers and fall through to the next switches
             ispointer = true;
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kObject:
-         case TStreamerInfo::kObject:
-         case TStreamerInfo::kTString:
-         case TStreamerInfo::kTNamed:
-         case TStreamerInfo::kTObject:
-         case TStreamerInfo::kAny:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kAny:
-         case TStreamerInfo::kBase: {
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kObject:
+         case TVirtualStreamerInfo::kObject:
+         case TVirtualStreamerInfo::kTString:
+         case TVirtualStreamerInfo::kTNamed:
+         case TVirtualStreamerInfo::kTObject:
+         case TVirtualStreamerInfo::kAny:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kAny:
+         case TVirtualStreamerInfo::kBase: {
             TClass *cl = element->GetClassPointer();
             if (cl) {
                type = Form("T%sObjProxy<%s >",
@@ -1503,7 +1503,7 @@ namespace ROOT {
                                                      branch->GetName(),
                                                      isclones, 0 /* non-split object */);
 
-            TStreamerInfo *info = cl->GetStreamerInfo();
+            TVirtualStreamerInfo *info = cl->GetStreamerInfo();
             TStreamerElement *elem = 0;
 
             TString subpath = path;
diff --git a/xml/src/TXMLPlayer.cxx b/xml/src/TXMLPlayer.cxx
index c21ea62b05b4a24fa7e7e2f6d4e03a88dd923807..5ac4ff82d98d4bffe3edb8bd90411ce627176481 100644
--- a/xml/src/TXMLPlayer.cxx
+++ b/xml/src/TXMLPlayer.cxx
@@ -1,4 +1,4 @@
-// @(#)root/xml:$Name:  $:$Id: TXMLPlayer.cxx,v 1.12 2007/01/29 15:10:49 brun Exp $
+// @(#)root/xml:$Name:  $:$Id: TXMLPlayer.cxx,v 1.13 2007/01/30 11:24:32 brun Exp $
 // Author: Sergey Linev, Rene Brun  10.05.2004
 
 /*************************************************************************
@@ -106,7 +106,7 @@
 #include "Riostream.h"
 #include "TROOT.h"
 #include "TClass.h"
-#include "TStreamerInfo.h"
+#include "TVirtualStreamerInfo.h"
 #include "TStreamerElement.h"
 #include "TObjArray.h"
 #include "TObjString.h"
@@ -249,27 +249,27 @@ TString TXMLPlayer::GetBasicTypeName(TStreamerElement* el)
 {
    // return simple data types for given TStreamerElement object
 
-   if (el->GetType() == TStreamerInfo::kCounter) return "int";
+   if (el->GetType() == TVirtualStreamerInfo::kCounter) return "int";
 
    switch (el->GetType() % 20) {
-      case TStreamerInfo::kChar:     return "char";
-      case TStreamerInfo::kShort:    return "short";
-      case TStreamerInfo::kInt:      return "int";
-      case TStreamerInfo::kLong:     return "long";
-      case TStreamerInfo::kLong64:   return "long long";
-      case TStreamerInfo::kFloat:    return "float";
-      case TStreamerInfo::kDouble32:
-      case TStreamerInfo::kDouble:   return "double";
-      case TStreamerInfo::kUChar: {
+      case TVirtualStreamerInfo::kChar:     return "char";
+      case TVirtualStreamerInfo::kShort:    return "short";
+      case TVirtualStreamerInfo::kInt:      return "int";
+      case TVirtualStreamerInfo::kLong:     return "long";
+      case TVirtualStreamerInfo::kLong64:   return "long long";
+      case TVirtualStreamerInfo::kFloat:    return "float";
+      case TVirtualStreamerInfo::kDouble32:
+      case TVirtualStreamerInfo::kDouble:   return "double";
+      case TVirtualStreamerInfo::kUChar: {
          char first = el->GetTypeNameBasic()[0];
          if ((first=='B') || (first=='b')) return "bool";
          return "unsigned char";
       }
-      case TStreamerInfo::kBool:     return "bool";
-      case TStreamerInfo::kUShort:   return "unsigned short";
-      case TStreamerInfo::kUInt:     return "unsigned int";
-      case TStreamerInfo::kULong:    return "unsigned long";
-      case TStreamerInfo::kULong64:  return "unsigned long long";
+      case TVirtualStreamerInfo::kBool:     return "bool";
+      case TVirtualStreamerInfo::kUShort:   return "unsigned short";
+      case TVirtualStreamerInfo::kUInt:     return "unsigned int";
+      case TVirtualStreamerInfo::kULong:    return "unsigned long";
+      case TVirtualStreamerInfo::kULong64:  return "unsigned long long";
    }
    return "int";
 }
@@ -279,29 +279,29 @@ TString TXMLPlayer::GetBasicTypeReaderMethodName(Int_t type, const char* realnam
 {
    // return functions name to read simple data type from xml file
 
-   if (type == TStreamerInfo::kCounter) return "ReadInt";
+   if (type == TVirtualStreamerInfo::kCounter) return "ReadInt";
 
    switch (type % 20) {
-      case TStreamerInfo::kChar:     return "ReadChar";
-      case TStreamerInfo::kShort:    return "ReadShort";
-      case TStreamerInfo::kInt:      return "ReadInt";
-      case TStreamerInfo::kLong:     return "ReadLong";
-      case TStreamerInfo::kLong64:   return "ReadLong64";
-      case TStreamerInfo::kFloat:    return "ReadFloat";
-      case TStreamerInfo::kDouble32:
-      case TStreamerInfo::kDouble:   return "ReadDouble";
-      case TStreamerInfo::kUChar: {
+      case TVirtualStreamerInfo::kChar:     return "ReadChar";
+      case TVirtualStreamerInfo::kShort:    return "ReadShort";
+      case TVirtualStreamerInfo::kInt:      return "ReadInt";
+      case TVirtualStreamerInfo::kLong:     return "ReadLong";
+      case TVirtualStreamerInfo::kLong64:   return "ReadLong64";
+      case TVirtualStreamerInfo::kFloat:    return "ReadFloat";
+      case TVirtualStreamerInfo::kDouble32:
+      case TVirtualStreamerInfo::kDouble:   return "ReadDouble";
+      case TVirtualStreamerInfo::kUChar: {
          Bool_t isbool = false;
          if (realname!=0)
             isbool = (TString(realname).Index("bool",0, TString::kIgnoreCase)>=0);
          if (isbool) return "ReadBool";
          return "ReadUChar";
       }
-      case TStreamerInfo::kBool:     return "ReadBool";
-      case TStreamerInfo::kUShort:   return "ReadUShort";
-      case TStreamerInfo::kUInt:     return "ReadUInt";
-      case TStreamerInfo::kULong:    return "ReadULong";
-      case TStreamerInfo::kULong64:  return "ReadULong64";
+      case TVirtualStreamerInfo::kBool:     return "ReadBool";
+      case TVirtualStreamerInfo::kUShort:   return "ReadUShort";
+      case TVirtualStreamerInfo::kUInt:     return "ReadUInt";
+      case TVirtualStreamerInfo::kULong:    return "ReadULong";
+      case TVirtualStreamerInfo::kULong64:  return "ReadULong64";
    }
    return "ReadValue";
 }
@@ -407,7 +407,7 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
    // Produce source code of streamer function for specified class
 
    if (cl==0) return;
-   TStreamerInfo* info = cl->GetStreamerInfo();
+   TVirtualStreamerInfo* info = cl->GetStreamerInfo();
    TObjArray* elements = info->GetElements();
    if (elements==0) return;
 
@@ -454,21 +454,21 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
 
       switch (typ) {
          // basic types
-         case TStreamerInfo::kBool:
-         case TStreamerInfo::kChar:
-         case TStreamerInfo::kShort:
-         case TStreamerInfo::kInt:
-         case TStreamerInfo::kLong:
-         case TStreamerInfo::kLong64:
-         case TStreamerInfo::kFloat:
-         case TStreamerInfo::kDouble:
-         case TStreamerInfo::kUChar:
-         case TStreamerInfo::kUShort:
-         case TStreamerInfo::kUInt:
-         case TStreamerInfo::kULong:
-         case TStreamerInfo::kULong64:
-         case TStreamerInfo::kDouble32:
-         case TStreamerInfo::kCounter: {
+         case TVirtualStreamerInfo::kBool:
+         case TVirtualStreamerInfo::kChar:
+         case TVirtualStreamerInfo::kShort:
+         case TVirtualStreamerInfo::kInt:
+         case TVirtualStreamerInfo::kLong:
+         case TVirtualStreamerInfo::kLong64:
+         case TVirtualStreamerInfo::kFloat:
+         case TVirtualStreamerInfo::kDouble:
+         case TVirtualStreamerInfo::kUChar:
+         case TVirtualStreamerInfo::kUShort:
+         case TVirtualStreamerInfo::kUInt:
+         case TVirtualStreamerInfo::kULong:
+         case TVirtualStreamerInfo::kULong64:
+         case TVirtualStreamerInfo::kDouble32:
+         case TVirtualStreamerInfo::kCounter: {
             char endch[5];
             fs << tab2 << ElementSetter(cl, el->GetName(), endch);
             fs << "buf." << GetBasicTypeReaderMethodName(el->GetType(), 0)
@@ -477,20 +477,20 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // array of basic types like bool[10]
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kChar:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kShort:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kInt:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kLong:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kLong64:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kFloat:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kUChar:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kUShort:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kUInt:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kULong:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kULong64:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble32: {
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kBool:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kChar:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kShort:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kInt:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kLong:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kLong64:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kFloat:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kDouble:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUChar:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUShort:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUInt:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kULong:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kULong64:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kDouble32: {
             fs << tab2 << "buf.ReadArray("
                        << ElementGetter(cl, el->GetName(), (el->GetArrayDim()>1) ? 1 : 0);
             fs         << ", " << el->GetArrayLength()
@@ -499,20 +499,20 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // array of basic types like bool[n]
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kChar:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kShort:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kInt:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kLong:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kLong64:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kFloat:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kUChar:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kUShort:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kUInt:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kULong:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kULong64:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble32: {
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kBool:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kChar:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kShort:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kInt:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kLong:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kLong64:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kFloat:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kDouble:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUChar:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUShort:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUInt:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kULong:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kULong64:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kDouble32: {
             TStreamerBasicPointer* elp = dynamic_cast<TStreamerBasicPointer*> (el);
             if (elp==0) {
                cout << "fatal error with TStreamerBasicPointer" << endl;
@@ -527,7 +527,7 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
             continue;
          }
 
-         case TStreamerInfo::kCharStar: {
+         case TVirtualStreamerInfo::kCharStar: {
             char endch[5];
             fs << tab2 << ElementSetter(cl, el->GetName(), endch);
             fs         << "buf.ReadCharStar(" << ElementGetter(cl, el->GetName());
@@ -535,7 +535,7 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
             continue;
          }
 
-         case TStreamerInfo::kBase: {
+         case TVirtualStreamerInfo::kBase: {
             fs << tab2 << GetStreamerName(el->GetClassPointer())
                << "(buf, dynamic_cast<" << el->GetClassPointer()->GetName()
                << "*>(obj), false);" << endl;
@@ -543,8 +543,8 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // Class*   Class not derived from TObject and with comment field //->
-         case TStreamerInfo::kAnyp:
-         case TStreamerInfo::kAnyp    + TStreamerInfo::kOffsetL: {
+         case TVirtualStreamerInfo::kAnyp:
+         case TVirtualStreamerInfo::kAnyp    + TVirtualStreamerInfo::kOffsetL: {
             if (el->GetArrayLength()>0) {
                fs << tab2 << "buf.ReadObjectArr(" << ElementGetter(cl, el->GetName());
                fs         << ", " << el->GetArrayLength() << ", -1"
@@ -559,8 +559,8 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // Class*   Class not derived from TObject and no comment
-         case TStreamerInfo::kAnyP:
-         case TStreamerInfo::kAnyP + TStreamerInfo::kOffsetL: {
+         case TVirtualStreamerInfo::kAnyP:
+         case TVirtualStreamerInfo::kAnyP + TVirtualStreamerInfo::kOffsetL: {
             if (el->GetArrayLength()>0) {
                fs << tab2 << "for (int n=0;n<" << el->GetArrayLength() << ";n++) "
                           << "delete (" << ElementGetter(cl, el->GetName()) << ")[n];" << endl;
@@ -582,7 +582,7 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // Class  NOT derived from TObject
-         case TStreamerInfo::kAny: {
+         case TVirtualStreamerInfo::kAny: {
             fs << tab2 << "buf.ReadObject(" << ElementGetter(cl, el->GetName(), 2);
             fs         << ", \"" << el->GetName() << "\", "
                        << GetStreamerName(el->GetClassPointer()) << ");" << endl;
@@ -590,7 +590,7 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // Class  NOT derived from TObject, array
-         case TStreamerInfo::kAny + TStreamerInfo::kOffsetL: {
+         case TVirtualStreamerInfo::kAny + TVirtualStreamerInfo::kOffsetL: {
             fs << tab2 << "buf.ReadObjectArr(" << ElementGetter(cl, el->GetName());
             fs         << ", " << el->GetArrayLength()
                        << ", sizeof(" << el->GetClassPointer()->GetName()
@@ -600,10 +600,10 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // container with no virtual table (stl) and no comment
-         case TStreamerInfo::kSTLp:
-         case TStreamerInfo::kSTL:
-         case TStreamerInfo::kSTLp + TStreamerInfo::kOffsetL:
-         case TStreamerInfo::kSTL + TStreamerInfo::kOffsetL: {
+         case TVirtualStreamerInfo::kSTLp:
+         case TVirtualStreamerInfo::kSTL:
+         case TVirtualStreamerInfo::kSTLp + TVirtualStreamerInfo::kOffsetL:
+         case TVirtualStreamerInfo::kSTL + TVirtualStreamerInfo::kOffsetL: {
             TStreamerSTL* elstl = dynamic_cast<TStreamerSTL*> (el);
             if (elstl==0) break; // to make skip
 
@@ -653,23 +653,23 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
 
       switch (typ) {
          // write basic types
-         case TStreamerInfo::kBool:
-         case TStreamerInfo::kChar:
-         case TStreamerInfo::kShort:
-         case TStreamerInfo::kInt:
-         case TStreamerInfo::kLong:
-         case TStreamerInfo::kLong64:
-         case TStreamerInfo::kFloat:
-         case TStreamerInfo::kDouble:
-         case TStreamerInfo::kUChar:
-         case TStreamerInfo::kUShort:
-         case TStreamerInfo::kUInt:
-         case TStreamerInfo::kULong:
-         case TStreamerInfo::kULong64:
-         case TStreamerInfo::kDouble32:
-         case TStreamerInfo::kCounter: {
+         case TVirtualStreamerInfo::kBool:
+         case TVirtualStreamerInfo::kChar:
+         case TVirtualStreamerInfo::kShort:
+         case TVirtualStreamerInfo::kInt:
+         case TVirtualStreamerInfo::kLong:
+         case TVirtualStreamerInfo::kLong64:
+         case TVirtualStreamerInfo::kFloat:
+         case TVirtualStreamerInfo::kDouble:
+         case TVirtualStreamerInfo::kUChar:
+         case TVirtualStreamerInfo::kUShort:
+         case TVirtualStreamerInfo::kUInt:
+         case TVirtualStreamerInfo::kULong:
+         case TVirtualStreamerInfo::kULong64:
+         case TVirtualStreamerInfo::kDouble32:
+         case TVirtualStreamerInfo::kCounter: {
             fs << tab2 << "buf.WriteValue(";
-            if (typ==TStreamerInfo::kUChar)
+            if (typ==TVirtualStreamerInfo::kUChar)
                fs <<"(unsigned char) " << ElementGetter(cl, el->GetName());
             else
                fs << ElementGetter(cl, el->GetName());
@@ -678,20 +678,20 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // array of basic types
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kChar:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kShort:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kInt:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kLong:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kLong64:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kFloat:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kUChar:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kUShort:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kUInt:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kULong:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kULong64:
-         case TStreamerInfo::kOffsetL + TStreamerInfo::kDouble32: {
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kBool:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kChar:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kShort:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kInt:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kLong:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kLong64:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kFloat:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kDouble:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUChar:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUShort:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kUInt:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kULong:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kULong64:
+         case TVirtualStreamerInfo::kOffsetL + TVirtualStreamerInfo::kDouble32: {
             fs << tab2 << "buf.WriteArray("
                        << ElementGetter(cl, el->GetName(), (el->GetArrayDim()>1) ? 1 : 0);
             fs         << ", " << el->GetArrayLength()
@@ -699,20 +699,20 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
             continue;
          }
 
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kChar:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kShort:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kInt:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kLong:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kLong64:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kFloat:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kUChar:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kUShort:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kUInt:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kULong:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kULong64:
-         case TStreamerInfo::kOffsetP + TStreamerInfo::kDouble32: {
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kBool:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kChar:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kShort:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kInt:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kLong:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kLong64:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kFloat:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kDouble:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUChar:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUShort:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kUInt:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kULong:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kULong64:
+         case TVirtualStreamerInfo::kOffsetP + TVirtualStreamerInfo::kDouble32: {
             TStreamerBasicPointer* elp = dynamic_cast<TStreamerBasicPointer*> (el);
             if (elp==0) {
                cout << "fatal error with TStreamerBasicPointer" << endl;
@@ -724,13 +724,13 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
             continue;
          }
 
-         case TStreamerInfo::kCharStar: {
+         case TVirtualStreamerInfo::kCharStar: {
             fs << tab2 << "buf.WriteCharStar(" << ElementGetter(cl, el->GetName())
                        << ", \"" << el->GetName() << "\");" << endl;
             continue;
          }
 
-         case TStreamerInfo::kBase: {
+         case TVirtualStreamerInfo::kBase: {
             fs << tab2 << GetStreamerName(el->GetClassPointer())
                << "(buf, dynamic_cast<" << el->GetClassPointer()->GetName()
                << "*>(obj), false);" << endl;
@@ -738,8 +738,8 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // Class*   Class not derived from TObject and with comment field //->
-         case TStreamerInfo::kAnyp:
-         case TStreamerInfo::kAnyp    + TStreamerInfo::kOffsetL: {
+         case TVirtualStreamerInfo::kAnyp:
+         case TVirtualStreamerInfo::kAnyp    + TVirtualStreamerInfo::kOffsetL: {
             if (el->GetArrayLength()>0) {
                fs << tab2 << "buf.WriteObjectArr(" << ElementGetter(cl, el->GetName());
                fs         << ", " << el->GetArrayLength() << ", -1"
@@ -754,8 +754,8 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // Class*   Class not derived from TObject and no comment
-         case TStreamerInfo::kAnyP:
-         case TStreamerInfo::kAnyP + TStreamerInfo::kOffsetL: {
+         case TVirtualStreamerInfo::kAnyP:
+         case TVirtualStreamerInfo::kAnyP + TVirtualStreamerInfo::kOffsetL: {
             if (el->GetArrayLength()>0) {
                fs << tab2 << "buf.WriteObjectPtrArr((void**) " << ElementGetter(cl, el->GetName(), 3);
                fs         << ", " << el->GetArrayLength()
@@ -769,14 +769,14 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
             continue;
          }
 
-         case TStreamerInfo::kAny: {    // Class  NOT derived from TObject
+         case TVirtualStreamerInfo::kAny: {    // Class  NOT derived from TObject
             fs << tab2 << "buf.WriteObject(" << ElementGetter(cl, el->GetName(), 2);
             fs         << ", \"" << el->GetName() << "\", "
                        << GetStreamerName(el->GetClassPointer()) << ");" << endl;
             continue;
          }
 
-         case TStreamerInfo::kAny    + TStreamerInfo::kOffsetL: {
+         case TVirtualStreamerInfo::kAny    + TVirtualStreamerInfo::kOffsetL: {
             fs << tab2 << "buf.WriteObjectArr(" << ElementGetter(cl, el->GetName());
             fs         << ", " << el->GetArrayLength()
                        << ", sizeof(" << el->GetClassPointer()->GetName()
@@ -786,10 +786,10 @@ void TXMLPlayer::ProduceStreamerSource(ostream& fs, TClass* cl, TList* cllist)
          }
 
          // container with no virtual table (stl) and no comment
-         case TStreamerInfo::kSTLp + TStreamerInfo::kOffsetL:
-         case TStreamerInfo::kSTL + TStreamerInfo::kOffsetL:
-         case TStreamerInfo::kSTLp:
-         case TStreamerInfo::kSTL: {
+         case TVirtualStreamerInfo::kSTLp + TVirtualStreamerInfo::kOffsetL:
+         case TVirtualStreamerInfo::kSTL + TVirtualStreamerInfo::kOffsetL:
+         case TVirtualStreamerInfo::kSTLp:
+         case TVirtualStreamerInfo::kSTL: {
             TStreamerSTL* elstl = dynamic_cast<TStreamerSTL*> (el);
             if (elstl==0) break; // to make skip
 
@@ -824,27 +824,27 @@ void TXMLPlayer::ReadSTLarg(ostream& fs,
    // Produce code to read argument of stl container from xml file
 
    switch(argtyp) {
-      case TStreamerInfo::kBool:
-      case TStreamerInfo::kChar:
-      case TStreamerInfo::kShort:
-      case TStreamerInfo::kInt:
-      case TStreamerInfo::kLong:
-      case TStreamerInfo::kLong64:
-      case TStreamerInfo::kFloat:
-      case TStreamerInfo::kDouble:
-      case TStreamerInfo::kUChar:
-      case TStreamerInfo::kUShort:
-      case TStreamerInfo::kUInt:
-      case TStreamerInfo::kULong:
-      case TStreamerInfo::kULong64:
-      case TStreamerInfo::kDouble32:
-      case TStreamerInfo::kCounter: {
+      case TVirtualStreamerInfo::kBool:
+      case TVirtualStreamerInfo::kChar:
+      case TVirtualStreamerInfo::kShort:
+      case TVirtualStreamerInfo::kInt:
+      case TVirtualStreamerInfo::kLong:
+      case TVirtualStreamerInfo::kLong64:
+      case TVirtualStreamerInfo::kFloat:
+      case TVirtualStreamerInfo::kDouble:
+      case TVirtualStreamerInfo::kUChar:
+      case TVirtualStreamerInfo::kUShort:
+      case TVirtualStreamerInfo::kUInt:
+      case TVirtualStreamerInfo::kULong:
+      case TVirtualStreamerInfo::kULong64:
+      case TVirtualStreamerInfo::kDouble32:
+      case TVirtualStreamerInfo::kCounter: {
          fs << tname << " " << argname << " = buf."
             << GetBasicTypeReaderMethodName(argtyp, tname.Data()) << "(0);" << endl;
          break;
       }
 
-      case TStreamerInfo::kObject: {
+      case TVirtualStreamerInfo::kObject: {
          fs << tname << (isargptr ? " ": " *") << argname << " = "
             << "(" << argcl->GetName() << "*)"
             << "buf.ReadObjectPtr(0, "
@@ -859,7 +859,7 @@ void TXMLPlayer::ReadSTLarg(ostream& fs,
          break;
       }
 
-      case TStreamerInfo::kSTLstring: {
+      case TVirtualStreamerInfo::kSTLstring: {
          fs << "string *" << argname << " = "
             << "buf.ReadSTLstring();" << endl;
          if (!isargptr) {
@@ -883,26 +883,26 @@ void TXMLPlayer::WriteSTLarg(ostream& fs, const char* accname, int argtyp, Bool_
    // Produce code to write argument of stl container to xml file
 
    switch(argtyp) {
-      case TStreamerInfo::kBool:
-      case TStreamerInfo::kChar:
-      case TStreamerInfo::kShort:
-      case TStreamerInfo::kInt:
-      case TStreamerInfo::kLong:
-      case TStreamerInfo::kLong64:
-      case TStreamerInfo::kFloat:
-      case TStreamerInfo::kDouble:
-      case TStreamerInfo::kUChar:
-      case TStreamerInfo::kUShort:
-      case TStreamerInfo::kUInt:
-      case TStreamerInfo::kULong:
-      case TStreamerInfo::kULong64:
-      case TStreamerInfo::kDouble32:
-      case TStreamerInfo::kCounter: {
+      case TVirtualStreamerInfo::kBool:
+      case TVirtualStreamerInfo::kChar:
+      case TVirtualStreamerInfo::kShort:
+      case TVirtualStreamerInfo::kInt:
+      case TVirtualStreamerInfo::kLong:
+      case TVirtualStreamerInfo::kLong64:
+      case TVirtualStreamerInfo::kFloat:
+      case TVirtualStreamerInfo::kDouble:
+      case TVirtualStreamerInfo::kUChar:
+      case TVirtualStreamerInfo::kUShort:
+      case TVirtualStreamerInfo::kUInt:
+      case TVirtualStreamerInfo::kULong:
+      case TVirtualStreamerInfo::kULong64:
+      case TVirtualStreamerInfo::kDouble32:
+      case TVirtualStreamerInfo::kCounter: {
          fs << "buf.WriteValue(" << accname << ", 0);" << endl;
          break;
       }
 
-      case TStreamerInfo::kObject: {
+      case TVirtualStreamerInfo::kObject: {
          fs << "buf.WriteObjectPtr(";
          if (isargptr)
             fs << accname;
@@ -912,7 +912,7 @@ void TXMLPlayer::WriteSTLarg(ostream& fs, const char* accname, int argtyp, Bool_
          break;
       }
 
-      case TStreamerInfo::kSTLstring: {
+      case TVirtualStreamerInfo::kSTLstring: {
          fs << "buf.WriteSTLstring(";
          if (isargptr)
             fs << accname;
@@ -1001,10 +1001,10 @@ Bool_t TXMLPlayer::ProduceSTLstreamer(ostream& fs, TClass* cl, TStreamerSTL* el,
             TDataType *dt = (TDataType*)gROOT->GetListOfTypes()->FindObject(buf);
             if (dt) argtype[n] = dt->GetType(); else
             if (buf=="string")
-               argtype[n] = TStreamerInfo::kSTLstring;
+               argtype[n] = TVirtualStreamerInfo::kSTLstring;
             else {
                argcl[n] = TClass::GetClass(buf);
-               if (argcl[n]!=0) argtype[n]=TStreamerInfo::kObject;
+               if (argcl[n]!=0) argtype[n]=TVirtualStreamerInfo::kObject;
             }
             if (argtype[n]<0) stltyp = -1;
          } // for narg