diff --git a/cont/src/TEmulatedCollectionProxy.cxx b/cont/src/TEmulatedCollectionProxy.cxx
index 282be1619f783426b98ff0d731ccda04d90939a6..d75e95181e46c2b5cfcc3fe27a73a69da65f2070 100644
--- a/cont/src/TEmulatedCollectionProxy.cxx
+++ b/cont/src/TEmulatedCollectionProxy.cxx
@@ -1,4 +1,4 @@
-// @(#)root/cont:$Name:  $:$Id: TEmulatedCollectionProxy.cxx,v 1.5 2004/11/03 16:13:38 brun Exp $
+// @(#)root/cont:$Name:  $:$Id: TEmulatedCollectionProxy.cxx,v 1.6 2004/11/11 06:06:41 brun Exp $
 // Author: Markus Frank 28/10/04
 
 /*************************************************************************
@@ -323,6 +323,7 @@ void TEmulatedCollectionProxy::ReadItems(int nElements, TBuffer &b)  {
     case G__BIT_ISFUNDAMENTAL:  //  Only handle primitives this way
     case G__BIT_ISENUM:
       switch( int(fVal->fKind) )   {
+        case kBool_t:    b.ReadFastArray(&itm->boolean   , nElements); break;
         case kChar_t:    b.ReadFastArray(&itm->s_char    , nElements); break;
         case kShort_t:   b.ReadFastArray(&itm->s_short   , nElements); break;
         case kInt_t:     b.ReadFastArray(&itm->s_int     , nElements); break;
@@ -366,6 +367,7 @@ void TEmulatedCollectionProxy::WriteItems(int nElements, TBuffer &b)  {
     case G__BIT_ISENUM:
       itm = (StreamHelper*)At(0);
       switch( int(fVal->fKind) )   {
+        case kBool_t:    b.WriteFastArray(&itm->boolean   , nElements); break;
         case kChar_t:    b.WriteFastArray(&itm->s_char    , nElements); break;
         case kShort_t:   b.WriteFastArray(&itm->s_short   , nElements); break;
         case kInt_t:     b.WriteFastArray(&itm->s_int     , nElements); break;
diff --git a/cont/src/TEmulatedMapProxy.cxx b/cont/src/TEmulatedMapProxy.cxx
index 2d14bf08736bf045d649c2f1813455f242cbff0a..1db03eb9bb499c4919b4347acabbdd9f98449943 100644
--- a/cont/src/TEmulatedMapProxy.cxx
+++ b/cont/src/TEmulatedMapProxy.cxx
@@ -1,4 +1,4 @@
-// @(#)root/cont:$Name:  $:$Id: TEmulatedMapProxy.cxx,v 1.2 2004/11/01 12:26:07 brun Exp $
+// @(#)root/cont:$Name:  $:$Id: TEmulatedMapProxy.cxx,v 1.3 2004/11/03 16:13:38 brun Exp $
 // Author: Markus Frank 28/10/04
 
 /*************************************************************************
@@ -97,6 +97,7 @@ void TEmulatedMapProxy::ReadMap(int nElements, TBuffer &b)  {
         case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
         case G__BIT_ISENUM:
           switch( int(v->fKind) )   {
+            case kBool_t:    b >> helper->boolean;     break;
             case kChar_t:    b >> helper->s_char;      break;
             case kShort_t:   b >> helper->s_short;     break;
             case kInt_t:     b >> helper->s_int;       break;
@@ -155,6 +156,7 @@ void TEmulatedMapProxy::WriteMap(int nElements, TBuffer &b)  {
         case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
         case G__BIT_ISENUM:
           switch( int(v->fKind) )   {
+            case kBool_t:    b << i->boolean;     break;
             case kChar_t:    b << i->s_char;      break;
             case kShort_t:   b << i->s_short;     break;
             case kInt_t:     b << i->s_int;       break;
diff --git a/cont/src/TGenCollectionStreamer.cxx b/cont/src/TGenCollectionStreamer.cxx
index 9b6024562bc8b9f641a3bdafb8962ba67678d40b..601ebb9a2303f7b6ce8442ce72353295b5c9dd0f 100644
--- a/cont/src/TGenCollectionStreamer.cxx
+++ b/cont/src/TGenCollectionStreamer.cxx
@@ -1,4 +1,4 @@
-// @(#)root/cont:$Name:  $:$Id: TGenCollectionStreamer.cxx,v 1.2 2004/11/02 21:51:10 brun Exp $
+// @(#)root/cont:$Name:  $:$Id: TGenCollectionStreamer.cxx,v 1.3 2004/11/03 16:13:38 brun Exp $
 // Author: Markus Frank 28/10/04
 
 /*************************************************************************
@@ -73,6 +73,7 @@ void TGenCollectionStreamer::ReadPrimitives(int nElements, TBuffer &b)  {
   }
   fEnv->start = itm;
   switch( int(fVal->fKind) )   {
+    case kBool_t:    b.ReadFastArray(&itm->boolean   , nElements); break;
     case kChar_t:    b.ReadFastArray(&itm->s_char    , nElements); break;
     case kShort_t:   b.ReadFastArray(&itm->s_short   , nElements); break;
     case kInt_t:     b.ReadFastArray(&itm->s_int     , nElements); break;
@@ -213,6 +214,7 @@ void TGenCollectionStreamer::ReadMap(int nElements, TBuffer &b)  {
         case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
         case G__BIT_ISENUM:
           switch( int(v->fKind) )   {
+            case kBool_t:    b >> i->boolean;      break;
             case kChar_t:    b >> i->s_char;      break;
             case kShort_t:   b >> i->s_short;     break;
             case kInt_t:     b >> i->s_int;       break;
@@ -280,6 +282,7 @@ void TGenCollectionStreamer::WritePrimitives(int nElements, TBuffer &b)  {
       break;
   }
   switch( int(fVal->fKind) )   {
+    case kBool_t:    b.WriteFastArray(&itm->boolean    , nElements); break;
     case kChar_t:    b.WriteFastArray(&itm->s_char    , nElements); break;
     case kShort_t:   b.WriteFastArray(&itm->s_short   , nElements); break;
     case kInt_t:     b.WriteFastArray(&itm->s_int     , nElements); break;
@@ -372,6 +375,7 @@ void TGenCollectionStreamer::WriteMap(int nElements, TBuffer &b)  {
         case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
         case G__BIT_ISENUM:
           switch( int(v->fKind) )   {
+            case kBool_t:    b << i->boolean;     break;
             case kChar_t:    b << i->s_char;      break;
             case kShort_t:   b << i->s_short;     break;
             case kInt_t:     b << i->s_int;       break;
diff --git a/io/inc/TStreamerInfo.h b/io/inc/TStreamerInfo.h
index 1d254e30641217c86759d72c9d4283ed38375c9e..1d706ed792034ee4e58a8fe092d71915361870b7 100644
--- a/io/inc/TStreamerInfo.h
+++ b/io/inc/TStreamerInfo.h
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TStreamerInfo.h,v 1.58 2004/10/19 11:00:09 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TStreamerInfo.h,v 1.59 2004/10/29 16:07:32 rdm Exp $
 // Author: Rene Brun   12/10/2000
 
 /*************************************************************************
@@ -101,7 +101,7 @@ public:
       kChar     =  1,  kShort   =  2,  kInt     =  3,  kLong    =  4,  kFloat    = 5,
       kDouble   =  8,  kDouble32=  9,
       kUChar    = 11,  kUShort  = 12,  kUInt    = 13,  kULong   = 14,  kBits     = 15,
-      kLong64   = 16,  kULong64 = 17,
+      kLong64   = 16,  kULong64 = 17,  kBool    = 18,
       kObject   = 61,  kAny     = 62,  kObjectp = 63,  kObjectP = 64,  kTString  = 65,
       kTObject  = 66,  kTNamed  = 67,  kAnyp    = 68,  kAnyP    = 69,  kAnyPnoVT = 70,
       kSTLp     = 71,
diff --git a/io/src/TEmulatedCollectionProxy.cxx b/io/src/TEmulatedCollectionProxy.cxx
index 282be1619f783426b98ff0d731ccda04d90939a6..d75e95181e46c2b5cfcc3fe27a73a69da65f2070 100644
--- a/io/src/TEmulatedCollectionProxy.cxx
+++ b/io/src/TEmulatedCollectionProxy.cxx
@@ -1,4 +1,4 @@
-// @(#)root/cont:$Name:  $:$Id: TEmulatedCollectionProxy.cxx,v 1.5 2004/11/03 16:13:38 brun Exp $
+// @(#)root/cont:$Name:  $:$Id: TEmulatedCollectionProxy.cxx,v 1.6 2004/11/11 06:06:41 brun Exp $
 // Author: Markus Frank 28/10/04
 
 /*************************************************************************
@@ -323,6 +323,7 @@ void TEmulatedCollectionProxy::ReadItems(int nElements, TBuffer &b)  {
     case G__BIT_ISFUNDAMENTAL:  //  Only handle primitives this way
     case G__BIT_ISENUM:
       switch( int(fVal->fKind) )   {
+        case kBool_t:    b.ReadFastArray(&itm->boolean   , nElements); break;
         case kChar_t:    b.ReadFastArray(&itm->s_char    , nElements); break;
         case kShort_t:   b.ReadFastArray(&itm->s_short   , nElements); break;
         case kInt_t:     b.ReadFastArray(&itm->s_int     , nElements); break;
@@ -366,6 +367,7 @@ void TEmulatedCollectionProxy::WriteItems(int nElements, TBuffer &b)  {
     case G__BIT_ISENUM:
       itm = (StreamHelper*)At(0);
       switch( int(fVal->fKind) )   {
+        case kBool_t:    b.WriteFastArray(&itm->boolean   , nElements); break;
         case kChar_t:    b.WriteFastArray(&itm->s_char    , nElements); break;
         case kShort_t:   b.WriteFastArray(&itm->s_short   , nElements); break;
         case kInt_t:     b.WriteFastArray(&itm->s_int     , nElements); break;
diff --git a/io/src/TEmulatedMapProxy.cxx b/io/src/TEmulatedMapProxy.cxx
index 2d14bf08736bf045d649c2f1813455f242cbff0a..1db03eb9bb499c4919b4347acabbdd9f98449943 100644
--- a/io/src/TEmulatedMapProxy.cxx
+++ b/io/src/TEmulatedMapProxy.cxx
@@ -1,4 +1,4 @@
-// @(#)root/cont:$Name:  $:$Id: TEmulatedMapProxy.cxx,v 1.2 2004/11/01 12:26:07 brun Exp $
+// @(#)root/cont:$Name:  $:$Id: TEmulatedMapProxy.cxx,v 1.3 2004/11/03 16:13:38 brun Exp $
 // Author: Markus Frank 28/10/04
 
 /*************************************************************************
@@ -97,6 +97,7 @@ void TEmulatedMapProxy::ReadMap(int nElements, TBuffer &b)  {
         case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
         case G__BIT_ISENUM:
           switch( int(v->fKind) )   {
+            case kBool_t:    b >> helper->boolean;     break;
             case kChar_t:    b >> helper->s_char;      break;
             case kShort_t:   b >> helper->s_short;     break;
             case kInt_t:     b >> helper->s_int;       break;
@@ -155,6 +156,7 @@ void TEmulatedMapProxy::WriteMap(int nElements, TBuffer &b)  {
         case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
         case G__BIT_ISENUM:
           switch( int(v->fKind) )   {
+            case kBool_t:    b << i->boolean;     break;
             case kChar_t:    b << i->s_char;      break;
             case kShort_t:   b << i->s_short;     break;
             case kInt_t:     b << i->s_int;       break;
diff --git a/io/src/TGenCollectionStreamer.cxx b/io/src/TGenCollectionStreamer.cxx
index 9b6024562bc8b9f641a3bdafb8962ba67678d40b..601ebb9a2303f7b6ce8442ce72353295b5c9dd0f 100644
--- a/io/src/TGenCollectionStreamer.cxx
+++ b/io/src/TGenCollectionStreamer.cxx
@@ -1,4 +1,4 @@
-// @(#)root/cont:$Name:  $:$Id: TGenCollectionStreamer.cxx,v 1.2 2004/11/02 21:51:10 brun Exp $
+// @(#)root/cont:$Name:  $:$Id: TGenCollectionStreamer.cxx,v 1.3 2004/11/03 16:13:38 brun Exp $
 // Author: Markus Frank 28/10/04
 
 /*************************************************************************
@@ -73,6 +73,7 @@ void TGenCollectionStreamer::ReadPrimitives(int nElements, TBuffer &b)  {
   }
   fEnv->start = itm;
   switch( int(fVal->fKind) )   {
+    case kBool_t:    b.ReadFastArray(&itm->boolean   , nElements); break;
     case kChar_t:    b.ReadFastArray(&itm->s_char    , nElements); break;
     case kShort_t:   b.ReadFastArray(&itm->s_short   , nElements); break;
     case kInt_t:     b.ReadFastArray(&itm->s_int     , nElements); break;
@@ -213,6 +214,7 @@ void TGenCollectionStreamer::ReadMap(int nElements, TBuffer &b)  {
         case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
         case G__BIT_ISENUM:
           switch( int(v->fKind) )   {
+            case kBool_t:    b >> i->boolean;      break;
             case kChar_t:    b >> i->s_char;      break;
             case kShort_t:   b >> i->s_short;     break;
             case kInt_t:     b >> i->s_int;       break;
@@ -280,6 +282,7 @@ void TGenCollectionStreamer::WritePrimitives(int nElements, TBuffer &b)  {
       break;
   }
   switch( int(fVal->fKind) )   {
+    case kBool_t:    b.WriteFastArray(&itm->boolean    , nElements); break;
     case kChar_t:    b.WriteFastArray(&itm->s_char    , nElements); break;
     case kShort_t:   b.WriteFastArray(&itm->s_short   , nElements); break;
     case kInt_t:     b.WriteFastArray(&itm->s_int     , nElements); break;
@@ -372,6 +375,7 @@ void TGenCollectionStreamer::WriteMap(int nElements, TBuffer &b)  {
         case G__BIT_ISFUNDAMENTAL:  // Only handle primitives this way
         case G__BIT_ISENUM:
           switch( int(v->fKind) )   {
+            case kBool_t:    b << i->boolean;     break;
             case kChar_t:    b << i->s_char;      break;
             case kShort_t:   b << i->s_short;     break;
             case kInt_t:     b << i->s_int;       break;
diff --git a/io/src/TStreamerInfo.cxx b/io/src/TStreamerInfo.cxx
index fc607aa9c80c19b9180b9619c9882be12696d48e..1ce0c8dd0d1d6239c835b9e72540a02d6d4ed629 100644
--- a/io/src/TStreamerInfo.cxx
+++ b/io/src/TStreamerInfo.cxx
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TStreamerInfo.cxx,v 1.216 2005/01/04 19:54:31 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TStreamerInfo.cxx,v 1.217 2005/01/12 07:50:02 brun Exp $
 // Author: Rene Brun   12/10/2000
 
 /*************************************************************************
@@ -1645,6 +1645,7 @@ Double_t  TStreamerInfo::GetValueAux(Int_t type, void *ladd, Int_t k, Int_t len)
 {
    switch (type) {
       // basic types
+      case kBool:              {Bool_t *val   = (Bool_t*)ladd;   return Double_t(*val);}
       case kChar:              {Char_t *val   = (Char_t*)ladd;   return Double_t(*val);}
       case kShort:             {Short_t *val  = (Short_t*)ladd;  return Double_t(*val);}
       case kInt:               {Int_t *val    = (Int_t*)ladd;    return Double_t(*val);}
@@ -1665,6 +1666,7 @@ Double_t  TStreamerInfo::GetValueAux(Int_t type, void *ladd, Int_t k, Int_t len)
       case kBits:              {UInt_t *val   = (UInt_t*)ladd;   return Double_t(*val);}
 
          // array of basic types  array[8]
+      case kOffsetL + kBool:    {Bool_t *val   = (Bool_t*)ladd;   return Double_t(val[k]);}
       case kOffsetL + kChar:    {Char_t *val   = (Char_t*)ladd;   return Double_t(val[k]);}
       case kOffsetL + kShort:   {Short_t *val  = (Short_t*)ladd;  return Double_t(val[k]);}
       case kOffsetL + kInt:     {Int_t *val    = (Int_t*)ladd;    return Double_t(val[k]);}
@@ -1699,6 +1701,7 @@ Double_t  TStreamerInfo::GetValueAux(Int_t type, void *ladd, Int_t k, Int_t len)
          }
 
          // pointer to an array of basic types  array[n]
+      case kOffsetP + kBool_t:    READ_ARRAY(Bool_t)
       case kOffsetP + kChar_t:    READ_ARRAY(Char_t)
       case kOffsetP + kShort_t:   READ_ARRAY(Short_t)
       case kOffsetP + kInt_t:     READ_ARRAY(Int_t)
@@ -2076,6 +2079,7 @@ void TStreamerInfo::PrintValueAux(char *ladd, Int_t atype,
 
    switch (atype) {
       // basic types
+      case kBool:              {Bool_t    *val = (Bool_t*   )ladd; printf("%d" ,*val);  break;}
       case kChar:              {Char_t    *val = (Char_t*   )ladd; printf("%d" ,*val);  break;}
       case kShort:             {Short_t   *val = (Short_t*  )ladd; printf("%d" ,*val);  break;}
       case kInt:               {Int_t     *val = (Int_t*    )ladd; printf("%d" ,*val);  break;}
@@ -2092,6 +2096,7 @@ void TStreamerInfo::PrintValueAux(char *ladd, Int_t atype,
       case kBits:              {UInt_t    *val = (UInt_t*   )ladd; printf("%d" ,*val);  break;}
 
          // array of basic types  array[8]
+      case kOffsetL + kBool:    {Bool_t    *val = (Bool_t*   )ladd; for(j=0;j<aleng;j++) { printf("%c " ,val[j]); PrintCR(j,aleng,20); } break;}
       case kOffsetL + kChar:    {Char_t    *val = (Char_t*   )ladd; for(j=0;j<aleng;j++) { printf("%c " ,val[j]); PrintCR(j,aleng,20); } break;}
       case kOffsetL + kShort:   {Short_t   *val = (Short_t*  )ladd; for(j=0;j<aleng;j++) { printf("%d " ,val[j]); PrintCR(j,aleng,10); } break;}
       case kOffsetL + kInt:     {Int_t     *val = (Int_t*    )ladd; for(j=0;j<aleng;j++) { printf("%d " ,val[j]); PrintCR(j,aleng,10); } break;}
@@ -2107,6 +2112,7 @@ void TStreamerInfo::PrintValueAux(char *ladd, Int_t atype,
       case kOffsetL + kULong64: {ULong64_t *val = (ULong64_t*)ladd; for(j=0;j<aleng;j++) { printf("%llu ",val[j]);PrintCR(j,aleng, 5); } break;}
 
          // pointer to an array of basic types  array[n]
+      case kOffsetP + kBool:    {Bool_t   **val = (Bool_t**  )ladd; for(j=0;j<*count;j++) { printf("%d " ,(*val)[j]);  PrintCR(j,aleng,20); } break;}
       case kOffsetP + kChar:    {Char_t   **val = (Char_t**  )ladd; for(j=0;j<*count;j++) { printf("%d " ,(*val)[j]);  PrintCR(j,aleng,20); } break;}
       case kOffsetP + kShort:   {Short_t  **val = (Short_t** )ladd; for(j=0;j<*count;j++) { printf("%d " ,(*val)[j]);  PrintCR(j,aleng,10); } break;}
       case kOffsetP + kInt:     {Int_t    **val = (Int_t**   )ladd; for(j=0;j<*count;j++) { printf("%d " ,(*val)[j]);  PrintCR(j,aleng,10); } break;}
diff --git a/io/src/TStreamerInfoReadBuffer.cxx b/io/src/TStreamerInfoReadBuffer.cxx
index 094bf606eefe2fd1e48af5cf8fe77655cbac2ffb..153ad9ce2daeb5f2d7834a8f04b478ee3e9e25d4 100644
--- a/io/src/TStreamerInfoReadBuffer.cxx
+++ b/io/src/TStreamerInfoReadBuffer.cxx
@@ -145,6 +145,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
    switch (kase) {
 
       // skip basic types
+      case TStreamerInfo::kSkip + TStreamerInfo::kBool:      SkipCBasicType(Bool_t);
       case TStreamerInfo::kSkip + TStreamerInfo::kChar:      SkipCBasicType(Char_t);
       case TStreamerInfo::kSkip + TStreamerInfo::kShort:     SkipCBasicType(Short_t);
       case TStreamerInfo::kSkip + TStreamerInfo::kInt:       SkipCBasicType(Int_t);
@@ -161,6 +162,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
       case TStreamerInfo::kSkip + TStreamerInfo::kBits:      SkipCBasicType(UInt_t);
 
          // skip array of basic types  array[8]
+      case TStreamerInfo::kSkipL + TStreamerInfo::kBool:     SkipCBasicArray(Bool_t);
       case TStreamerInfo::kSkipL + TStreamerInfo::kChar:     SkipCBasicArray(Char_t);
       case TStreamerInfo::kSkipL + TStreamerInfo::kShort:    SkipCBasicArray(Short_t);
       case TStreamerInfo::kSkipL + TStreamerInfo::kInt:      SkipCBasicArray(Int_t);
@@ -176,6 +178,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
       case TStreamerInfo::kSkipL + TStreamerInfo::kULong64:  SkipCBasicArray(ULong64_t);
 
    // skip pointer to an array of basic types  array[n]
+      case TStreamerInfo::kSkipP + TStreamerInfo::kBool:     SkipCBasicPointer(Bool_t);
       case TStreamerInfo::kSkipP + TStreamerInfo::kChar:     SkipCBasicPointer(Char_t);
       case TStreamerInfo::kSkipP + TStreamerInfo::kShort:    SkipCBasicPointer(Short_t);
       case TStreamerInfo::kSkipP + TStreamerInfo::kInt:      SkipCBasicPointer(Int_t);
@@ -323,6 +326,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
          name u;                                                          \
          b >> u;                                                          \
          switch(fNewType[i]) {                                            \
+            case TStreamerInfo::kBool:    {Bool_t   *x=(Bool_t*)(arr[k]+ioffset);   *x = (Bool_t)u;   break;} \
             case TStreamerInfo::kChar:    {Char_t   *x=(Char_t*)(arr[k]+ioffset);   *x = (Char_t)u;   break;} \
             case TStreamerInfo::kShort:   {Short_t  *x=(Short_t*)(arr[k]+ioffset);  *x = (Short_t)u;  break;} \
             case TStreamerInfo::kInt:     {Int_t    *x=(Int_t*)(arr[k]+ioffset);    *x = (Int_t)u;    break;} \
@@ -355,6 +359,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
       DOLOOP {                                                            \
           b.ReadFastArray(readbuf, len);                                  \
           switch(newtype) {                                               \
+             case TStreamerInfo::kBool:     ConvCBasicArrayTo(Bool_t);    \
              case TStreamerInfo::kChar:     ConvCBasicArrayTo(Char_t);    \
              case TStreamerInfo::kShort:    ConvCBasicArrayTo(Short_t);   \
              case TStreamerInfo::kInt:      ConvCBasicArrayTo(Int_t);     \
@@ -401,6 +406,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
          Int_t *l = (Int_t*)(arr[k]+imethod);                             \
          if (*l>0) readbuf = new name[*l];                                \
          switch(newtype) {                                                \
+            case TStreamerInfo::kBool:     ConvCBasicPointerTo(Bool_t);   \
             case TStreamerInfo::kChar:     ConvCBasicPointerTo(Char_t);   \
             case TStreamerInfo::kShort:    ConvCBasicPointerTo(Short_t);  \
             case TStreamerInfo::kInt:      ConvCBasicPointerTo(Int_t);    \
@@ -446,6 +452,7 @@ Int_t TStreamerInfo::ReadBufferConv(TBuffer &b, const T &arr,  Int_t i, Int_t ka
    switch (kase) {
 
       // convert basic types
+      case TStreamerInfo::kConv + TStreamerInfo::kBool:    ConvCBasicType(Bool_t);
       case TStreamerInfo::kConv + TStreamerInfo::kChar:    ConvCBasicType(Char_t);
       case TStreamerInfo::kConv + TStreamerInfo::kShort:   ConvCBasicType(Short_t);
       case TStreamerInfo::kConv + TStreamerInfo::kInt:     ConvCBasicType(Int_t);
@@ -466,6 +473,7 @@ Int_t TStreamerInfo::ReadBufferConv(TBuffer &b, const T &arr,  Int_t i, Int_t ka
       case TStreamerInfo::kConv + TStreamerInfo::kBits:    ConvCBasicType(UInt_t);
 
          // convert array of basic types  array[8]
+      case TStreamerInfo::kConvL + TStreamerInfo::kBool:    ConvCBasicArray(Bool_t);
       case TStreamerInfo::kConvL + TStreamerInfo::kChar:    ConvCBasicArray(Char_t);
       case TStreamerInfo::kConvL + TStreamerInfo::kShort:   ConvCBasicArray(Short_t);
       case TStreamerInfo::kConvL + TStreamerInfo::kInt:     ConvCBasicArray(Int_t);
@@ -485,6 +493,7 @@ Int_t TStreamerInfo::ReadBufferConv(TBuffer &b, const T &arr,  Int_t i, Int_t ka
 #endif
 
    // convert pointer to an array of basic types  array[n]
+      case TStreamerInfo::kConvP + TStreamerInfo::kBool:    ConvCBasicPointer(Bool_t);
       case TStreamerInfo::kConvP + TStreamerInfo::kChar:    ConvCBasicPointer(Char_t);
       case TStreamerInfo::kConvP + TStreamerInfo::kShort:   ConvCBasicPointer(Short_t);
       case TStreamerInfo::kConvP + TStreamerInfo::kInt:     ConvCBasicPointer(Int_t);
@@ -584,6 +593,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
       switch (kase + typeOffset) {
 
          // read basic types
+         case TStreamerInfo::kBool:               ReadBasicType(Bool_t);    continue;
          case TStreamerInfo::kChar:               ReadBasicType(Char_t);    continue;
          case TStreamerInfo::kShort:              ReadBasicType(Short_t);   continue;
          case TStreamerInfo::kInt:                ReadBasicType(Int_t);     continue;
@@ -602,6 +612,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kBool   + kHaveLoop: ReadBasicTypeLoop(Bool_t);    continue;
          case TStreamerInfo::kChar   + kHaveLoop: ReadBasicTypeLoop(Char_t);    continue;
          case TStreamerInfo::kShort  + kHaveLoop: ReadBasicTypeLoop(Short_t);   continue;
          case TStreamerInfo::kInt    + kHaveLoop: ReadBasicTypeLoop(Int_t);     continue;
@@ -623,6 +634,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
          }
 
          // read array of basic types  like array[8]
+         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool:   ReadBasicArray(Bool_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar:   ReadBasicArray(Char_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort:  ReadBasicArray(Short_t);   continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt:    ReadBasicArray(Int_t);     continue;
@@ -640,6 +652,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool    + kHaveLoop: ReadBasicArrayLoop(Bool_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar    + kHaveLoop: ReadBasicArrayLoop(Char_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort   + kHaveLoop: ReadBasicArrayLoop(Short_t);   continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt     + kHaveLoop: ReadBasicArrayLoop(Int_t);     continue;
@@ -660,6 +673,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
          }
 
          // read pointer to an array of basic types  array[n]
+         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool:   ReadBasicPointer(Bool_t);  continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar:   ReadBasicPointer(Char_t);  continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort:  ReadBasicPointer(Short_t);  continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt:    ReadBasicPointer(Int_t);  continue;
@@ -688,6 +702,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool    + kHaveLoop: ReadBasicPointerLoop(Bool_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar    + kHaveLoop: ReadBasicPointerLoop(Char_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort   + kHaveLoop: ReadBasicPointerLoop(Short_t);   continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt     + kHaveLoop: ReadBasicPointerLoop(Int_t);     continue;
diff --git a/io/src/TStreamerInfoWriteBuffer.cxx b/io/src/TStreamerInfoWriteBuffer.cxx
index 35d6e9203c520b71ad5f7ff49b03b5daeb3ba89c..e95cb1c9bf934dbb5b982ebaf80b1649eecbd3b8 100644
--- a/io/src/TStreamerInfoWriteBuffer.cxx
+++ b/io/src/TStreamerInfoWriteBuffer.cxx
@@ -135,6 +135,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
          // 'break' to avoid running the 2nd switch (see later in this
          // function).
 
+         case TStreamerInfo::kBool:                WriteBasicType(Bool_t);    continue;
          case TStreamerInfo::kChar:                WriteBasicType(Char_t);    continue;
          case TStreamerInfo::kShort:               WriteBasicType(Short_t);   continue;
          case TStreamerInfo::kInt:                 WriteBasicType(Int_t);     continue;
@@ -153,6 +154,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kBool    + kHaveLoop: WriteBasicTypeLoop(Bool_t);    continue;
          case TStreamerInfo::kChar    + kHaveLoop: WriteBasicTypeLoop(Char_t);    continue;
          case TStreamerInfo::kShort   + kHaveLoop: WriteBasicTypeLoop(Short_t);   continue;
          case TStreamerInfo::kInt     + kHaveLoop: WriteBasicTypeLoop(Int_t);     continue;
@@ -174,6 +176,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
          }
 
          // write array of basic types  array[8]
+         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool:   WriteBasicArray(Bool_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar:   WriteBasicArray(Char_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort:  WriteBasicArray(Short_t);   continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt:    WriteBasicArray(Int_t);     continue;
@@ -191,6 +194,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool    + kHaveLoop: WriteBasicArrayLoop(Bool_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar    + kHaveLoop: WriteBasicArrayLoop(Char_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort   + kHaveLoop: WriteBasicArrayLoop(Short_t);   continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt     + kHaveLoop: WriteBasicArrayLoop(Int_t);     continue;
@@ -211,6 +215,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
          }
 
          // write pointer to an array of basic types  array[n]
+         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool:   WriteBasicPointer(Bool_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar:   WriteBasicPointer(Char_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort:  WriteBasicPointer(Short_t);   continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt:    WriteBasicPointer(Int_t);     continue;
@@ -237,6 +242,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool    + kHaveLoop: WriteBasicPointerLoop(Bool_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar    + kHaveLoop: WriteBasicPointerLoop(Char_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort   + kHaveLoop: WriteBasicPointerLoop(Short_t);   continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt     + kHaveLoop: WriteBasicPointerLoop(Int_t);     continue;
diff --git a/meta/inc/TDataType.h b/meta/inc/TDataType.h
index e9b077bcc6795935f253e6de1e7f6b57454df9ed..469a6c4514b4552a3d3fddbbe11129d0473cbc2f 100644
--- a/meta/inc/TDataType.h
+++ b/meta/inc/TDataType.h
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TDataType.h,v 1.10 2005/01/12 07:50:02 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TDataType.h,v 1.11 2005/01/12 20:04:36 brun Exp $
 // Author: Rene Brun   04/02/95
 
 /*************************************************************************
@@ -34,7 +34,7 @@ enum EDataType {
    kChar_t   = 1,  kUChar_t  = 11, kShort_t    = 2,  kUShort_t = 12,
    kInt_t    = 3,  kUInt_t   = 13, kLong_t     = 4,  kULong_t  = 14,
    kFloat_t  = 5,  kDouble_t =  8, kDouble32_t = 9,  kchar     = 10,
-   kBool_t   = 11, kLong64_t = 16, kULong64_t  = 17, kOther_t  = -1,
+   kBool_t   = 18, kLong64_t = 16, kULong64_t  = 17, kOther_t  = -1,
    kNoType_t = 0,
    kCounter =  6,  kCharStar = 7,  kBits     = 15 /* for compatibility with TStreamerInfo */
 };
diff --git a/meta/inc/TStreamerInfo.h b/meta/inc/TStreamerInfo.h
index 1d254e30641217c86759d72c9d4283ed38375c9e..1d706ed792034ee4e58a8fe092d71915361870b7 100644
--- a/meta/inc/TStreamerInfo.h
+++ b/meta/inc/TStreamerInfo.h
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TStreamerInfo.h,v 1.58 2004/10/19 11:00:09 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TStreamerInfo.h,v 1.59 2004/10/29 16:07:32 rdm Exp $
 // Author: Rene Brun   12/10/2000
 
 /*************************************************************************
@@ -101,7 +101,7 @@ public:
       kChar     =  1,  kShort   =  2,  kInt     =  3,  kLong    =  4,  kFloat    = 5,
       kDouble   =  8,  kDouble32=  9,
       kUChar    = 11,  kUShort  = 12,  kUInt    = 13,  kULong   = 14,  kBits     = 15,
-      kLong64   = 16,  kULong64 = 17,
+      kLong64   = 16,  kULong64 = 17,  kBool    = 18,
       kObject   = 61,  kAny     = 62,  kObjectp = 63,  kObjectP = 64,  kTString  = 65,
       kTObject  = 66,  kTNamed  = 67,  kAnyp    = 68,  kAnyP    = 69,  kAnyPnoVT = 70,
       kSTLp     = 71,
diff --git a/meta/src/TDataType.cxx b/meta/src/TDataType.cxx
index 265fc6b6036c693de304af8f51ae1d2a055dfec8..761966c8883c87338330c6f400d1469c7bb8b49f 100644
--- a/meta/src/TDataType.cxx
+++ b/meta/src/TDataType.cxx
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TDataType.cxx,v 1.16 2005/01/12 07:50:02 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TDataType.cxx,v 1.17 2005/01/12 20:04:36 brun Exp $
 // Author: Rene Brun   04/02/95
 
 /*************************************************************************
@@ -86,6 +86,7 @@ const char *TDataType::GetTypeName(EDataType type)
       case 15: return "UInt_t"; 
       case 16: return "Long64_t";
       case 17: return "ULong64_t";
+      case 18: return "Bool_t";
       case kOther_t:  return "";
       case kNoType_t: return "";
       case kchar:     return "Char_t";
@@ -148,7 +149,7 @@ EDataType TDataType::GetType(const type_info &typeinfo)
    } else if (!strcmp(typeid(char).name(), typeinfo.name())) {
       retType = kChar_t;
    } else if (!strcmp(typeid(bool).name(), typeinfo.name())) {
-      retType = kUChar_t;
+      retType = kBool_t;
    } else if (!strcmp(typeid(float).name(), typeinfo.name())) {
       retType = kFloat_t;
    } else if (!strcmp(typeid(double).name(), typeinfo.name())) {
@@ -255,8 +256,8 @@ void TDataType::SetType(const char *name)
       fType = kChar_t;
       fSize = sizeof(Char_t);
    } else if (!strcmp("bool", name)) {
-      fType = kUChar_t;
-      fSize = sizeof(UChar_t);
+      fType = kBool_t;
+      fSize = sizeof(Bool_t);
    } else if (!strcmp("float", name)) {
       fType = kFloat_t;
       fSize = sizeof(Float_t);
diff --git a/meta/src/TStreamerInfo.cxx b/meta/src/TStreamerInfo.cxx
index fc607aa9c80c19b9180b9619c9882be12696d48e..1ce0c8dd0d1d6239c835b9e72540a02d6d4ed629 100644
--- a/meta/src/TStreamerInfo.cxx
+++ b/meta/src/TStreamerInfo.cxx
@@ -1,4 +1,4 @@
-// @(#)root/meta:$Name:  $:$Id: TStreamerInfo.cxx,v 1.216 2005/01/04 19:54:31 brun Exp $
+// @(#)root/meta:$Name:  $:$Id: TStreamerInfo.cxx,v 1.217 2005/01/12 07:50:02 brun Exp $
 // Author: Rene Brun   12/10/2000
 
 /*************************************************************************
@@ -1645,6 +1645,7 @@ Double_t  TStreamerInfo::GetValueAux(Int_t type, void *ladd, Int_t k, Int_t len)
 {
    switch (type) {
       // basic types
+      case kBool:              {Bool_t *val   = (Bool_t*)ladd;   return Double_t(*val);}
       case kChar:              {Char_t *val   = (Char_t*)ladd;   return Double_t(*val);}
       case kShort:             {Short_t *val  = (Short_t*)ladd;  return Double_t(*val);}
       case kInt:               {Int_t *val    = (Int_t*)ladd;    return Double_t(*val);}
@@ -1665,6 +1666,7 @@ Double_t  TStreamerInfo::GetValueAux(Int_t type, void *ladd, Int_t k, Int_t len)
       case kBits:              {UInt_t *val   = (UInt_t*)ladd;   return Double_t(*val);}
 
          // array of basic types  array[8]
+      case kOffsetL + kBool:    {Bool_t *val   = (Bool_t*)ladd;   return Double_t(val[k]);}
       case kOffsetL + kChar:    {Char_t *val   = (Char_t*)ladd;   return Double_t(val[k]);}
       case kOffsetL + kShort:   {Short_t *val  = (Short_t*)ladd;  return Double_t(val[k]);}
       case kOffsetL + kInt:     {Int_t *val    = (Int_t*)ladd;    return Double_t(val[k]);}
@@ -1699,6 +1701,7 @@ Double_t  TStreamerInfo::GetValueAux(Int_t type, void *ladd, Int_t k, Int_t len)
          }
 
          // pointer to an array of basic types  array[n]
+      case kOffsetP + kBool_t:    READ_ARRAY(Bool_t)
       case kOffsetP + kChar_t:    READ_ARRAY(Char_t)
       case kOffsetP + kShort_t:   READ_ARRAY(Short_t)
       case kOffsetP + kInt_t:     READ_ARRAY(Int_t)
@@ -2076,6 +2079,7 @@ void TStreamerInfo::PrintValueAux(char *ladd, Int_t atype,
 
    switch (atype) {
       // basic types
+      case kBool:              {Bool_t    *val = (Bool_t*   )ladd; printf("%d" ,*val);  break;}
       case kChar:              {Char_t    *val = (Char_t*   )ladd; printf("%d" ,*val);  break;}
       case kShort:             {Short_t   *val = (Short_t*  )ladd; printf("%d" ,*val);  break;}
       case kInt:               {Int_t     *val = (Int_t*    )ladd; printf("%d" ,*val);  break;}
@@ -2092,6 +2096,7 @@ void TStreamerInfo::PrintValueAux(char *ladd, Int_t atype,
       case kBits:              {UInt_t    *val = (UInt_t*   )ladd; printf("%d" ,*val);  break;}
 
          // array of basic types  array[8]
+      case kOffsetL + kBool:    {Bool_t    *val = (Bool_t*   )ladd; for(j=0;j<aleng;j++) { printf("%c " ,val[j]); PrintCR(j,aleng,20); } break;}
       case kOffsetL + kChar:    {Char_t    *val = (Char_t*   )ladd; for(j=0;j<aleng;j++) { printf("%c " ,val[j]); PrintCR(j,aleng,20); } break;}
       case kOffsetL + kShort:   {Short_t   *val = (Short_t*  )ladd; for(j=0;j<aleng;j++) { printf("%d " ,val[j]); PrintCR(j,aleng,10); } break;}
       case kOffsetL + kInt:     {Int_t     *val = (Int_t*    )ladd; for(j=0;j<aleng;j++) { printf("%d " ,val[j]); PrintCR(j,aleng,10); } break;}
@@ -2107,6 +2112,7 @@ void TStreamerInfo::PrintValueAux(char *ladd, Int_t atype,
       case kOffsetL + kULong64: {ULong64_t *val = (ULong64_t*)ladd; for(j=0;j<aleng;j++) { printf("%llu ",val[j]);PrintCR(j,aleng, 5); } break;}
 
          // pointer to an array of basic types  array[n]
+      case kOffsetP + kBool:    {Bool_t   **val = (Bool_t**  )ladd; for(j=0;j<*count;j++) { printf("%d " ,(*val)[j]);  PrintCR(j,aleng,20); } break;}
       case kOffsetP + kChar:    {Char_t   **val = (Char_t**  )ladd; for(j=0;j<*count;j++) { printf("%d " ,(*val)[j]);  PrintCR(j,aleng,20); } break;}
       case kOffsetP + kShort:   {Short_t  **val = (Short_t** )ladd; for(j=0;j<*count;j++) { printf("%d " ,(*val)[j]);  PrintCR(j,aleng,10); } break;}
       case kOffsetP + kInt:     {Int_t    **val = (Int_t**   )ladd; for(j=0;j<*count;j++) { printf("%d " ,(*val)[j]);  PrintCR(j,aleng,10); } break;}
diff --git a/meta/src/TStreamerInfoReadBuffer.cxx b/meta/src/TStreamerInfoReadBuffer.cxx
index 094bf606eefe2fd1e48af5cf8fe77655cbac2ffb..153ad9ce2daeb5f2d7834a8f04b478ee3e9e25d4 100644
--- a/meta/src/TStreamerInfoReadBuffer.cxx
+++ b/meta/src/TStreamerInfoReadBuffer.cxx
@@ -145,6 +145,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
    switch (kase) {
 
       // skip basic types
+      case TStreamerInfo::kSkip + TStreamerInfo::kBool:      SkipCBasicType(Bool_t);
       case TStreamerInfo::kSkip + TStreamerInfo::kChar:      SkipCBasicType(Char_t);
       case TStreamerInfo::kSkip + TStreamerInfo::kShort:     SkipCBasicType(Short_t);
       case TStreamerInfo::kSkip + TStreamerInfo::kInt:       SkipCBasicType(Int_t);
@@ -161,6 +162,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
       case TStreamerInfo::kSkip + TStreamerInfo::kBits:      SkipCBasicType(UInt_t);
 
          // skip array of basic types  array[8]
+      case TStreamerInfo::kSkipL + TStreamerInfo::kBool:     SkipCBasicArray(Bool_t);
       case TStreamerInfo::kSkipL + TStreamerInfo::kChar:     SkipCBasicArray(Char_t);
       case TStreamerInfo::kSkipL + TStreamerInfo::kShort:    SkipCBasicArray(Short_t);
       case TStreamerInfo::kSkipL + TStreamerInfo::kInt:      SkipCBasicArray(Int_t);
@@ -176,6 +178,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
       case TStreamerInfo::kSkipL + TStreamerInfo::kULong64:  SkipCBasicArray(ULong64_t);
 
    // skip pointer to an array of basic types  array[n]
+      case TStreamerInfo::kSkipP + TStreamerInfo::kBool:     SkipCBasicPointer(Bool_t);
       case TStreamerInfo::kSkipP + TStreamerInfo::kChar:     SkipCBasicPointer(Char_t);
       case TStreamerInfo::kSkipP + TStreamerInfo::kShort:    SkipCBasicPointer(Short_t);
       case TStreamerInfo::kSkipP + TStreamerInfo::kInt:      SkipCBasicPointer(Int_t);
@@ -323,6 +326,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
          name u;                                                          \
          b >> u;                                                          \
          switch(fNewType[i]) {                                            \
+            case TStreamerInfo::kBool:    {Bool_t   *x=(Bool_t*)(arr[k]+ioffset);   *x = (Bool_t)u;   break;} \
             case TStreamerInfo::kChar:    {Char_t   *x=(Char_t*)(arr[k]+ioffset);   *x = (Char_t)u;   break;} \
             case TStreamerInfo::kShort:   {Short_t  *x=(Short_t*)(arr[k]+ioffset);  *x = (Short_t)u;  break;} \
             case TStreamerInfo::kInt:     {Int_t    *x=(Int_t*)(arr[k]+ioffset);    *x = (Int_t)u;    break;} \
@@ -355,6 +359,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
       DOLOOP {                                                            \
           b.ReadFastArray(readbuf, len);                                  \
           switch(newtype) {                                               \
+             case TStreamerInfo::kBool:     ConvCBasicArrayTo(Bool_t);    \
              case TStreamerInfo::kChar:     ConvCBasicArrayTo(Char_t);    \
              case TStreamerInfo::kShort:    ConvCBasicArrayTo(Short_t);   \
              case TStreamerInfo::kInt:      ConvCBasicArrayTo(Int_t);     \
@@ -401,6 +406,7 @@ Int_t TStreamerInfo::ReadBufferSkip(TBuffer &b, const T &arr, Int_t i, Int_t kas
          Int_t *l = (Int_t*)(arr[k]+imethod);                             \
          if (*l>0) readbuf = new name[*l];                                \
          switch(newtype) {                                                \
+            case TStreamerInfo::kBool:     ConvCBasicPointerTo(Bool_t);   \
             case TStreamerInfo::kChar:     ConvCBasicPointerTo(Char_t);   \
             case TStreamerInfo::kShort:    ConvCBasicPointerTo(Short_t);  \
             case TStreamerInfo::kInt:      ConvCBasicPointerTo(Int_t);    \
@@ -446,6 +452,7 @@ Int_t TStreamerInfo::ReadBufferConv(TBuffer &b, const T &arr,  Int_t i, Int_t ka
    switch (kase) {
 
       // convert basic types
+      case TStreamerInfo::kConv + TStreamerInfo::kBool:    ConvCBasicType(Bool_t);
       case TStreamerInfo::kConv + TStreamerInfo::kChar:    ConvCBasicType(Char_t);
       case TStreamerInfo::kConv + TStreamerInfo::kShort:   ConvCBasicType(Short_t);
       case TStreamerInfo::kConv + TStreamerInfo::kInt:     ConvCBasicType(Int_t);
@@ -466,6 +473,7 @@ Int_t TStreamerInfo::ReadBufferConv(TBuffer &b, const T &arr,  Int_t i, Int_t ka
       case TStreamerInfo::kConv + TStreamerInfo::kBits:    ConvCBasicType(UInt_t);
 
          // convert array of basic types  array[8]
+      case TStreamerInfo::kConvL + TStreamerInfo::kBool:    ConvCBasicArray(Bool_t);
       case TStreamerInfo::kConvL + TStreamerInfo::kChar:    ConvCBasicArray(Char_t);
       case TStreamerInfo::kConvL + TStreamerInfo::kShort:   ConvCBasicArray(Short_t);
       case TStreamerInfo::kConvL + TStreamerInfo::kInt:     ConvCBasicArray(Int_t);
@@ -485,6 +493,7 @@ Int_t TStreamerInfo::ReadBufferConv(TBuffer &b, const T &arr,  Int_t i, Int_t ka
 #endif
 
    // convert pointer to an array of basic types  array[n]
+      case TStreamerInfo::kConvP + TStreamerInfo::kBool:    ConvCBasicPointer(Bool_t);
       case TStreamerInfo::kConvP + TStreamerInfo::kChar:    ConvCBasicPointer(Char_t);
       case TStreamerInfo::kConvP + TStreamerInfo::kShort:   ConvCBasicPointer(Short_t);
       case TStreamerInfo::kConvP + TStreamerInfo::kInt:     ConvCBasicPointer(Int_t);
@@ -584,6 +593,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
       switch (kase + typeOffset) {
 
          // read basic types
+         case TStreamerInfo::kBool:               ReadBasicType(Bool_t);    continue;
          case TStreamerInfo::kChar:               ReadBasicType(Char_t);    continue;
          case TStreamerInfo::kShort:              ReadBasicType(Short_t);   continue;
          case TStreamerInfo::kInt:                ReadBasicType(Int_t);     continue;
@@ -602,6 +612,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kBool   + kHaveLoop: ReadBasicTypeLoop(Bool_t);    continue;
          case TStreamerInfo::kChar   + kHaveLoop: ReadBasicTypeLoop(Char_t);    continue;
          case TStreamerInfo::kShort  + kHaveLoop: ReadBasicTypeLoop(Short_t);   continue;
          case TStreamerInfo::kInt    + kHaveLoop: ReadBasicTypeLoop(Int_t);     continue;
@@ -623,6 +634,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
          }
 
          // read array of basic types  like array[8]
+         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool:   ReadBasicArray(Bool_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar:   ReadBasicArray(Char_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort:  ReadBasicArray(Short_t);   continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt:    ReadBasicArray(Int_t);     continue;
@@ -640,6 +652,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool    + kHaveLoop: ReadBasicArrayLoop(Bool_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar    + kHaveLoop: ReadBasicArrayLoop(Char_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort   + kHaveLoop: ReadBasicArrayLoop(Short_t);   continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt     + kHaveLoop: ReadBasicArrayLoop(Int_t);     continue;
@@ -660,6 +673,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
          }
 
          // read pointer to an array of basic types  array[n]
+         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool:   ReadBasicPointer(Bool_t);  continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar:   ReadBasicPointer(Char_t);  continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort:  ReadBasicPointer(Short_t);  continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt:    ReadBasicPointer(Int_t);  continue;
@@ -688,6 +702,7 @@ Int_t TStreamerInfo::ReadBuffer(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool    + kHaveLoop: ReadBasicPointerLoop(Bool_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar    + kHaveLoop: ReadBasicPointerLoop(Char_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort   + kHaveLoop: ReadBasicPointerLoop(Short_t);   continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt     + kHaveLoop: ReadBasicPointerLoop(Int_t);     continue;
diff --git a/meta/src/TStreamerInfoWriteBuffer.cxx b/meta/src/TStreamerInfoWriteBuffer.cxx
index 35d6e9203c520b71ad5f7ff49b03b5daeb3ba89c..e95cb1c9bf934dbb5b982ebaf80b1649eecbd3b8 100644
--- a/meta/src/TStreamerInfoWriteBuffer.cxx
+++ b/meta/src/TStreamerInfoWriteBuffer.cxx
@@ -135,6 +135,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
          // 'break' to avoid running the 2nd switch (see later in this
          // function).
 
+         case TStreamerInfo::kBool:                WriteBasicType(Bool_t);    continue;
          case TStreamerInfo::kChar:                WriteBasicType(Char_t);    continue;
          case TStreamerInfo::kShort:               WriteBasicType(Short_t);   continue;
          case TStreamerInfo::kInt:                 WriteBasicType(Int_t);     continue;
@@ -153,6 +154,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kBool    + kHaveLoop: WriteBasicTypeLoop(Bool_t);    continue;
          case TStreamerInfo::kChar    + kHaveLoop: WriteBasicTypeLoop(Char_t);    continue;
          case TStreamerInfo::kShort   + kHaveLoop: WriteBasicTypeLoop(Short_t);   continue;
          case TStreamerInfo::kInt     + kHaveLoop: WriteBasicTypeLoop(Int_t);     continue;
@@ -174,6 +176,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
          }
 
          // write array of basic types  array[8]
+         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool:   WriteBasicArray(Bool_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar:   WriteBasicArray(Char_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort:  WriteBasicArray(Short_t);   continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt:    WriteBasicArray(Int_t);     continue;
@@ -191,6 +194,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kOffsetL + TStreamerInfo::kBool    + kHaveLoop: WriteBasicArrayLoop(Bool_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kChar    + kHaveLoop: WriteBasicArrayLoop(Char_t);    continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kShort   + kHaveLoop: WriteBasicArrayLoop(Short_t);   continue;
          case TStreamerInfo::kOffsetL + TStreamerInfo::kInt     + kHaveLoop: WriteBasicArrayLoop(Int_t);     continue;
@@ -211,6 +215,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
          }
 
          // write pointer to an array of basic types  array[n]
+         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool:   WriteBasicPointer(Bool_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar:   WriteBasicPointer(Char_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort:  WriteBasicPointer(Short_t);   continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt:    WriteBasicPointer(Int_t);     continue;
@@ -237,6 +242,7 @@ Int_t TStreamerInfo::WriteBufferAux(TBuffer &b, const T &arr, Int_t first,
             continue;
          }
 
+         case TStreamerInfo::kOffsetP + TStreamerInfo::kBool    + kHaveLoop: WriteBasicPointerLoop(Bool_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kChar    + kHaveLoop: WriteBasicPointerLoop(Char_t);    continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kShort   + kHaveLoop: WriteBasicPointerLoop(Short_t);   continue;
          case TStreamerInfo::kOffsetP + TStreamerInfo::kInt     + kHaveLoop: WriteBasicPointerLoop(Int_t);     continue;
diff --git a/table/inc/TTable.h b/table/inc/TTable.h
index bd8eaf22c6af8473e0cd74b6bd7310f5b71b5c25..adc7f1da38fbb76b11527b9d58e98ad3307b9c17 100644
--- a/table/inc/TTable.h
+++ b/table/inc/TTable.h
@@ -1,4 +1,4 @@
-// @(#)root/star:$Name:  $:$Id: TTable.h,v 1.7 2004/02/09 21:38:28 rdm Exp $
+// @(#)root/star:$Name:  $:$Id: TTable.h,v 1.8 2004/07/23 16:52:53 brun Exp $
 // Author: Valery Fine(fine@mail.cern.ch)   03/07/98
  
 /*************************************************************************
@@ -90,8 +90,8 @@ protected:
 public:
 
    enum EColumnType {kNAN, kFloat, kInt, kLong, kShort, kDouble, kUInt
-                          ,kULong, kUShort, kUChar, kChar, kPtr
-                    , kEndColumnType };
+                     ,kULong, kUShort, kUChar, kChar, kPtr, kBool
+                     ,kEndColumnType };
    enum ETableBits {
       kIsNotOwn      = BIT(23)   // if the TTable wrapper doesn't own the STAF table
 		                 // As result of the Update() method for example
diff --git a/table/src/TTable.cxx b/table/src/TTable.cxx
index 054e34ceb14f4239b40b761e189b85ce11276db1..aa85a7203a010ecad3aab0a05adb679d71aa5c92 100644
--- a/table/src/TTable.cxx
+++ b/table/src/TTable.cxx
@@ -1,4 +1,4 @@
-// @(#)root/star:$Name:  $:$Id: TTable.cxx,v 1.7 2004/07/23 16:52:53 brun Exp $
+// @(#)root/star:$Name:  $:$Id: TTable.cxx,v 1.8 2004/10/29 16:07:32 rdm Exp $
 // Author: Valery Fine(fine@bnl.gov)   03/07/98
 // Copyright (C) Valery Fine (Valeri Faine) 1998-2001. All right reserved
 
@@ -248,6 +248,9 @@ void TTable::AsString(void *buf, EColumnType type, Int_t width,ostream &out) con
     case kChar:
          out << setw(width) << *(char *)buf;
          break;
+    case kBool:
+         out << setw(width) << *(bool *)buf;
+         break;
     case kPtr:
          out << "->" << setw(width) << *(void **)buf;
          break;
@@ -2265,6 +2268,7 @@ void TTable::Streamer(TBuffer &R__b)
            StreamElementIn(ULong);
            StreamElementIn(UChar);
            StreamElementIn(Char);
+           StreamElementIn(Bool);
           case TTableDescriptor::kPtr: {
             Ptr_t readPtr;
             R__b >> readPtr;
@@ -2318,6 +2322,7 @@ void TTable::Streamer(TBuffer &R__b)
            StreamElementOut(ULong);
            StreamElementOut(UChar);
            StreamElementOut(Char);
+           StreamElementOut(Bool);
           case TTableDescriptor::kPtr:
               R__b << *(Ptr_t *)(row+nextCol->fOffset);
               break;
diff --git a/table/src/TTableSorter.cxx b/table/src/TTableSorter.cxx
index c2b3f34fb296d121d0817267ff11a62b6db8f6eb..29652bf9eed7628e3206758686d8f21ebd9ec5b3 100644
--- a/table/src/TTableSorter.cxx
+++ b/table/src/TTableSorter.cxx
@@ -1,6 +1,6 @@
-// @(#)root/star:$Name:  $:$Id: TTableSorter.cxx,v 1.1 2004/05/19 00:56:42 fine Exp $
+// @(#)root/star:$Name:  $:$Id: TTableSorter.cxx,v 1.3 2004/07/05 13:31:10 brun Exp $
 // Author: Valery Fine   26/01/99  (E-mail: fine@bnl.gov)
-// $Id: TTableSorter.cxx,v 1.1 2004/05/19 00:56:42 fine Exp $
+// $Id: TTableSorter.cxx,v 1.3 2004/07/05 13:31:10 brun Exp $
 
 #include <stdlib.h>
 #include "TTableSorter.h"
@@ -467,6 +467,8 @@ TTableSorter::~TTableSorter()
            return SelectSearch(ULong_t(value));       \
          case  TTable::kUShort:                               \
            return SelectSearch(UShort_t(value));      \
+         case  TTable::kBool:                                 \
+           return SelectSearch(Bool_t(value));        \
          case  TTable::kUChar:                                \
            return SelectSearch(UChar_t(value));       \
          case  TTable::kChar:                                 \
@@ -477,7 +479,8 @@ TTableSorter::~TTableSorter()
       };                                              \
 }                                                     \
 Int_t TTableSorter::BSearch(valuetype value) const{ \
-  union {  Char_t   Char;                             \
+  union {  Bool_t   Bool;                             \
+           Char_t   Char;                             \
            UChar_t  UChar;                            \
            Short_t  Short;                            \
            UShort_t UShort;                           \
@@ -510,6 +513,8 @@ Int_t TTableSorter::BSearch(valuetype value) const{ \
            Value.UChar = UChar_t(value); break;       \
          case  TTable::kChar:                                 \
            Value.Char  = Char_t(value); break;        \
+         case  TTable::kBool:                                 \
+           Value.Bool  = Bool_t(value); break;        \
          default:                                     \
            return -1;                                 \
            break;                                     \
@@ -581,6 +586,7 @@ BINARYSEARCH(valuetype)
   COMPAREVALUES(UShort_t)
   COMPAREVALUES(UChar_t)
   COMPAREVALUES(Char_t)
+  COMPAREVALUES(Bool_t)
 
 #define COMPAREORDER(valuetype) Compare##valuetype
 #define SEARCHORDER(valuetype) Search##valuetype
@@ -821,6 +827,10 @@ void  TTableSorter::SetSearchMethod()
            fSearchMethod = SEARCHORDER(Char_t);
            fCompareMethod = COMPAREORDER(Char_t);
            break;
+         case  TTable::kBool:
+           fSearchMethod = SEARCHORDER(Bool_t);
+           fCompareMethod = COMPAREORDER(Bool_t);
+           break;
          default:
             break;
 
@@ -888,6 +898,8 @@ void TTableSorter::LearnTable()
       fColType = TTable::kUChar;
     else if (!strcmp("char", types))
       fColType= TTable::kChar;
+    else if (!strcmp("bool", types))
+      fColType= TTable::kBool;
 
     if (fColType != TTable::kNAN) {
       Int_t dim = 0;
diff --git a/tree/src/TBranchElement.cxx b/tree/src/TBranchElement.cxx
index 46a4b3642000b1d841b236190fe1b51f0ed36639..095207c45505a9f76271e554d4ee212dd93c62c3 100644
--- a/tree/src/TBranchElement.cxx
+++ b/tree/src/TBranchElement.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TBranchElement.cxx,v 1.161 2005/01/12 07:50:03 brun Exp $
+// @(#)root/tree:$Name:  $:$Id: TBranchElement.cxx,v 1.162 2005/01/13 20:07:46 brun Exp $
 // Authors Rene Brun , Philippe Canal, Markus Frank  14/01/2001
 
 /*************************************************************************
@@ -1052,6 +1052,7 @@ void TBranchElement::FillLeaves(TBuffer &b)
           case 15:  {b.WriteFastArray((UInt_t*)   fAddress, n); break;}
           case 16:  {b.WriteFastArray((Long64_t*) fAddress, n); break;}
           case 17:  {b.WriteFastArray((ULong64_t*)fAddress, n); break;}
+          case 18:  {b.WriteFastArray((Bool_t*)   fAddress, n); break;}
           case  9:  {Double_t *xx = (Double_t*)fAddress;
                      for (Int_t ii=0;ii<n;ii++) b << (Float_t)xx[ii];
                      break;}
@@ -1317,13 +1318,13 @@ const char *TBranchElement::GetTypeName() const
       return "Int_t";
    }
    if (fStreamerType <=0 || fStreamerType >= 60) return fClassName.Data();
-   const char *types[18] = {"",
+   const char *types[19] = {"",
                             "Char_t","Short_t","Int_t","Long_t","Float_t",
                             "Int_t","",
                             "Double_t","Double32_t",
                             "",
                             "UChar_t","UShort_t","UInt_t","ULong_t","UInt_t",
-                            "Long64_t","ULong64_t"};
+                            "Long64_t","ULong64_t","Bool_t"};
    Int_t itype = fStreamerType%20;
    return types[itype];
 }
@@ -1649,6 +1650,7 @@ void TBranchElement::ReadLeaves(TBuffer &b)
                 case 15:  {length = ((UInt_t*)   len_where)[k]; break;}
                 case 16:  {length = ((Long64_t*) len_where)[k]; break;}
                 case 17:  {length = ((ULong64_t*)len_where)[k]; break;}
+                case 18:  {length = ((Bool_t*)   len_where)[k]; break;}                   
                 default: continue;
              }
              b >> isArray;
@@ -1669,7 +1671,8 @@ void TBranchElement::ReadLeaves(TBuffer &b)
                 case 15:  {*where=new char[sizeof(UInt_t)*length]; b.ReadFastArray((UInt_t*)  *where, length); break;}
                 case 16:  {*where=new char[sizeof(Long64_t)*length]; b.ReadFastArray((Long64_t*)  *where, length); break;}
                 case 17:  {*where=new char[sizeof(ULong64_t)*length]; b.ReadFastArray((ULong64_t*)*where, length); break;}
-             }
+                case 18:  {*where=new char[sizeof(Bool_t)*length]; b.ReadFastArray((Bool_t*) *where, length); break;}
+            }
           }
           return;
        }
@@ -1693,6 +1696,7 @@ void TBranchElement::ReadLeaves(TBuffer &b)
           case 15:  {b.ReadFastArray((UInt_t*)  fAddress, n); break;}
           case 16:  {b.ReadFastArray((Long64_t*)fAddress, n); break;}
           case 17:  {b.ReadFastArray((ULong64_t*)fAddress, n); break;}
+          case 18:  {b.ReadFastArray((Bool_t*)  fAddress, n); break;}
           case  9:  {Double_t *xx = (Double_t*)fAddress;
                      Float_t afloat;
                      for (Int_t ii=0;ii<n;ii++) {
@@ -1722,6 +1726,7 @@ void TBranchElement::ReadLeaves(TBuffer &b)
              case 15:  {b.ReadFastArray((UInt_t*)  fAddress, n); break;}
              case 16:  {b.ReadFastArray((Long64_t*) fAddress, n); break;}
              case 17:  {b.ReadFastArray((ULong64_t*)fAddress, n); break;}
+             case 18:  {b.ReadFastArray((Bool_t*)   fAddress, n); break;}
              case  9:  {Double_t *xx = (Double_t*)fAddress;
                         Float_t afloat;
                         for (Int_t ii=0;ii<n;ii++) {
diff --git a/tree/src/TTree.cxx b/tree/src/TTree.cxx
index 4d2d74bea50df2ba26c2e4d569f135dcea733a3d..9c133255fb0ddbf24e84ea1eeca0b5ab0e352187 100644
--- a/tree/src/TTree.cxx
+++ b/tree/src/TTree.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TTree.cxx,v 1.225 2005/01/13 10:10:01 brun Exp $
+// @(#)root/tree:$Name:  $:$Id: TTree.cxx,v 1.226 2005/01/13 20:07:46 brun Exp $
 // Author: Rene Brun   12/01/96
 
 /*************************************************************************
@@ -1127,7 +1127,7 @@ TBranch *TTree::BranchOld(const char *name, const char *classname, void *addobj,
                      // char array by the fact that there is NO specified
                      // size for a string (see next if (code == 1)
                      sprintf(leaflist,"%s[%s]/%s",&rdname[0],index,"B");
-                  else if (code == 11)
+                  else if (code == 11 || code == 18)
                      sprintf(leaflist,"%s[%s]/%s",&rdname[0],index,"b");
                   else if (code ==  2)
                      sprintf(leaflist,"%s[%s]/%s",&rdname[0],index,"S");
@@ -1190,7 +1190,7 @@ TBranch *TTree::BranchOld(const char *name, const char *classname, void *addobj,
 //*-*-------------Data Member is a basic data type----------
          if (dm->IsBasic()) {
             if      (code ==  1) sprintf(leaflist,"%s/%s",rdname,"B");
-            else if (code == 11) sprintf(leaflist,"%s/%s",rdname,"b");
+            else if (code == 11 || code ==18) sprintf(leaflist,"%s/%s",rdname,"b");
             else if (code ==  2) sprintf(leaflist,"%s/%s",rdname,"S");
             else if (code == 12) sprintf(leaflist,"%s/%s",rdname,"s");
             else if (code ==  3) sprintf(leaflist,"%s/%s",rdname,"I");
diff --git a/treeplayer/inc/TBranchProxy.h b/treeplayer/inc/TBranchProxy.h
index 5f060cf7f2cd8923ea9a8bcc1fa4bea1200b329b..e51c34a63652443993323eb7a62cdda08bdc0bfb 100644
--- a/treeplayer/inc/TBranchProxy.h
+++ b/treeplayer/inc/TBranchProxy.h
@@ -1,4 +1,4 @@
-// @(#)root/treeplayer:$Name:  $:$Id: TBranchProxy.h,v 1.4 2004/07/29 18:09:40 brun Exp $
+// @(#)root/treeplayer:$Name:  $:$Id: TBranchProxy.h,v 1.5 2004/10/18 21:07:05 brun Exp $
 // Author: Philippe Canal 01/06/2004
 
 /*************************************************************************
@@ -576,6 +576,7 @@ namespace ROOT {
    typedef TImpProxy<Long64_t>   TLong64Proxy;
    typedef TImpProxy<Short_t>    TShortProxy;
    typedef TImpProxy<Char_t>     TCharProxy;
+   typedef TImpProxy<Bool_t>     TBoolProxy;
 
    typedef TArrayProxy<Double_t>   TArrayDoubleProxy;
    typedef TArrayProxy<Double32_t> TArrayDouble32Proxy;
@@ -590,6 +591,7 @@ namespace ROOT {
    typedef TArrayProxy<Long64_t>   TArrayLong64Proxy;
    typedef TArrayProxy<UShort_t>   TArrayShortProxy;
    //specialized ! typedef TArrayProxy<Char_t>  TArrayCharProxy;
+   typedef TArrayProxy<Bool_t>     TArrayBoolProxy;
 
    typedef TClaImpProxy<Double_t>   TClaDoubleProxy;
    typedef TClaImpProxy<Double32_t> TClaDouble32Proxy;
@@ -604,6 +606,7 @@ namespace ROOT {
    typedef TClaImpProxy<Long64_t>   TClaLong64Proxy;
    typedef TClaImpProxy<Short_t>    TClaShortProxy;
    typedef TClaImpProxy<Char_t>     TClaCharProxy;
+   typedef TClaImpProxy<Bool_t>     TClaBoolProxy;
 
    typedef TClaArrayProxy<Double_t>    TClaArrayDoubleProxy;
    typedef TClaArrayProxy<Double32_t>  TClaArrayDouble32Proxy;
@@ -617,6 +620,7 @@ namespace ROOT {
    typedef TClaArrayProxy<Long_t>      TClaArrayLongProxy;
    typedef TClaArrayProxy<Long64_t>    TClaArrayLong64Proxy;
    typedef TClaArrayProxy<UShort_t>    TClaArrayShortProxy;
+   typedef TClaArrayProxy<Bool_t>      TClaArrayBoolProxy;
    //specialized ! typedef TClaArrayProxy<Char_t>  TClaArrayCharProxy;
 
 } // namespace ROOT
diff --git a/treeplayer/src/TFormLeafInfo.cxx b/treeplayer/src/TFormLeafInfo.cxx
index fcf5d1965bd31f19d5fdab5d237ef7e171c7ed21..0d4e79adcebefb6eb2796d79aa53b262b4d90674 100644
--- a/treeplayer/src/TFormLeafInfo.cxx
+++ b/treeplayer/src/TFormLeafInfo.cxx
@@ -1,4 +1,4 @@
-// @(#)root/treeplayer:$Name:  $:$Id: TFormLeafInfo.cxx,v 1.11 2005/01/18 21:05:43 brun Exp $
+// @(#)root/treeplayer:$Name:  $:$Id: TFormLeafInfo.cxx,v 1.12 2005/01/19 07:52:45 brun Exp $
 // Author: Philippe Canal 01/06/2004
 
 /*************************************************************************
@@ -175,6 +175,7 @@ char* TFormLeafInfo::GetObjectAddress(TLeafElement* leaf, Int_t &instance)
          case TStreamerInfo::kSTL:
             thisobj = (char*)(address+offset);
             break;
+         case kBool_t:
          case kChar_t:
          case kUChar_t:
          case kShort_t:
@@ -190,6 +191,7 @@ char* TFormLeafInfo::GetObjectAddress(TLeafElement* leaf, Int_t &instance)
          case kDouble32_t:
          case kchar:
          case TStreamerInfo::kCounter:
+         case TStreamerInfo::kOffsetL + kBool_t:
          case TStreamerInfo::kOffsetL + kChar_t:
          case TStreamerInfo::kOffsetL + kUChar_t:
          case TStreamerInfo::kOffsetL + kShort_t:
@@ -286,6 +288,7 @@ Bool_t TFormLeafInfo::IsInteger() const
    switch (atype) {
       // basic types
       case kchar:
+      case kBool_t:
       case kChar_t:
       case kUChar_t:
       case kShort_t:
@@ -497,6 +500,7 @@ void* TFormLeafInfo::GetLocalValuePointer(char *thisobj, Int_t instance)
 
    switch (fElement->GetNewType()) {
       // basic types
+      case kBool_t:
       case kChar_t:
       case kUChar_t:
       case kShort_t:
@@ -515,6 +519,8 @@ void* TFormLeafInfo::GetLocalValuePointer(char *thisobj, Int_t instance)
                       return (Int_t*)(thisobj+fOffset);
 
          // array of basic types  array[8]
+      case TStreamerInfo::kOffsetL + kBool_t :
+         {Bool_t *val   = (Bool_t*)(thisobj+fOffset);      return &(val[instance]);}
       case TStreamerInfo::kOffsetL + kChar_t :
          {Char_t *val   = (Char_t*)(thisobj+fOffset);      return &(val[instance]);}
       case TStreamerInfo::kOffsetL + kShort_t:
@@ -559,6 +565,7 @@ void* TFormLeafInfo::GetLocalValuePointer(char *thisobj, Int_t instance)
          }
 
          // pointer to an array of basic types  array[n]
+      case TStreamerInfo::kOffsetP + kBool_t:    GET_ARRAY(Bool_t)
       case TStreamerInfo::kOffsetP + kChar_t:    GET_ARRAY(Char_t)
       case TStreamerInfo::kOffsetP + kShort_t:   GET_ARRAY(Short_t)
       case TStreamerInfo::kOffsetP + kInt_t:     GET_ARRAY(Int_t)
@@ -672,6 +679,7 @@ Double_t TFormLeafInfo::ReadValue(char *thisobj, Int_t instance)
    //   return fInfo->ReadValue(thisobj+fOffset,fElement->GetNewType(),instance,1);
    switch (fElement->GetNewType()) {
          // basic types
+      case kBool_t:     return (Double_t)(*(Bool_t*)(thisobj+fOffset));
       case kChar_t:     return (Double_t)(*(Char_t*)(thisobj+fOffset));
       case kUChar_t:    return (Double_t)(*(UChar_t*)(thisobj+fOffset));
       case kShort_t:    return (Double_t)(*(Short_t*)(thisobj+fOffset));
@@ -690,6 +698,8 @@ Double_t TFormLeafInfo::ReadValue(char *thisobj, Int_t instance)
                       return (Double_t)(*(Int_t*)(thisobj+fOffset));
 
          // array of basic types  array[8]
+      case TStreamerInfo::kOffsetL + kBool_t :
+         {Bool_t *val    = (Bool_t*)(thisobj+fOffset);    return Double_t(val[instance]);}
       case TStreamerInfo::kOffsetL + kChar_t :
          {Char_t *val    = (Char_t*)(thisobj+fOffset);    return Double_t(val[instance]);}
       case TStreamerInfo::kOffsetL + kShort_t:
@@ -738,6 +748,7 @@ Double_t TFormLeafInfo::ReadValue(char *thisobj, Int_t instance)
          }
 
          // pointer to an array of basic types  array[n]
+      case TStreamerInfo::kOffsetP + kBool_t:    READ_ARRAY(Bool_t)
       case TStreamerInfo::kOffsetP + kChar_t:    READ_ARRAY(Char_t)
       case TStreamerInfo::kOffsetP + kShort_t:   READ_ARRAY(Short_t)
       case TStreamerInfo::kOffsetP + kInt_t:     READ_ARRAY(Int_t)
diff --git a/treeplayer/src/TTreeProxyGenerator.cxx b/treeplayer/src/TTreeProxyGenerator.cxx
index 7a3bd1b4b0242d4946fc7c7800342b3d917c6e71..e6891c8e4d20ca090e995a8d30eb96c66becf272 100644
--- a/treeplayer/src/TTreeProxyGenerator.cxx
+++ b/treeplayer/src/TTreeProxyGenerator.cxx
@@ -1,4 +1,4 @@
-// @(#)root/treeplayer:$Name:  $:$Id: TTreeProxyGenerator.cxx,v 1.9 2004/12/04 19:47:00 brun Exp $
+// @(#)root/treeplayer:$Name:  $:$Id: TTreeProxyGenerator.cxx,v 1.10 2005/01/05 22:22:13 brun Exp $
 // Author: Philippe Canal 06/06/2004
 
 /*************************************************************************
@@ -439,6 +439,7 @@ namespace ROOT {
          bool 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; }
@@ -457,6 +458,7 @@ namespace ROOT {
             case TStreamerInfo::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; }
@@ -473,6 +475,7 @@ namespace ROOT {
             case TStreamerInfo::kOffsetL + TStreamerInfo::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; }
@@ -1268,6 +1271,7 @@ namespace ROOT {
       bool 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; }
@@ -1286,6 +1290,7 @@ namespace ROOT {
          case TStreamerInfo::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; }
@@ -1302,6 +1307,7 @@ namespace ROOT {
          case TStreamerInfo::kOffsetL + TStreamerInfo::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; }
diff --git a/xml/src/TXMLPlayer.cxx b/xml/src/TXMLPlayer.cxx
index 393c07e658c3a52febc311687b158ac2d9d8390e..478669fdf237656c51c3f58f33ebfb0e4fad5148 100644
--- a/xml/src/TXMLPlayer.cxx
+++ b/xml/src/TXMLPlayer.cxx
@@ -1,4 +1,4 @@
-// @(#)root/xml:$Name:  $:$Id: TXMLPlayer.cxx,v 1.4 2004/06/30 09:34:27 brun Exp $
+// @(#)root/xml:$Name:  $:$Id: TXMLPlayer.cxx,v 1.5 2004/12/20 17:15:48 brun Exp $
 // Author: Sergey Linev, Rene Brun  10.05.2004
 
 /*************************************************************************
@@ -227,6 +227,7 @@ TString TXMLPlayer::GetMemberTypeName(TDataMember* member)
        if ((first=='B') || (first=='b')) return "bool";
                                     else return "unsigned char";         
      }
+     case kBool_t:     return "bool";
      case kUShort_t:   return "unsigned short";
      case kUInt_t:     return "unsigned int";
      case kULong_t:    return "unsigned long";
@@ -259,6 +260,7 @@ TString TXMLPlayer::GetBasicTypeName(TStreamerElement* el)
        if ((first=='B') || (first=='b')) return "bool";
                                     else 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";
@@ -290,6 +292,7 @@ TString TXMLPlayer::GetBasicTypeReaderMethodName(Int_t type, const char* realnam
        if (isbool) return "ReadBool";
               else return "ReadUChar";         
      }
+     case TStreamerInfo::kBool:     return "ReadBool";
      case TStreamerInfo::kUShort:   return "ReadUShort";
      case TStreamerInfo::kUInt:     return "ReadUInt";
      case TStreamerInfo::kULong:    return "ReadULong";
@@ -446,6 +449,7 @@ 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:  
@@ -468,6 +472,7 @@ 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:     
@@ -489,6 +494,7 @@ 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:     
@@ -642,6 +648,7 @@ 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:  
@@ -666,6 +673,7 @@ 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:     
@@ -686,6 +694,7 @@ 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:     
@@ -810,6 +819,7 @@ 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:  
@@ -868,6 +878,7 @@ 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: