diff --git a/base/inc/TROOT.h b/base/inc/TROOT.h
index f1244a926bfe53cd3afa2d2c93cc79d931da7b53..05327ba32e0fa70194697f3c9e0f0ff6793346c3 100644
--- a/base/inc/TROOT.h
+++ b/base/inc/TROOT.h
@@ -1,4 +1,4 @@
-// @(#)root/base:$Name:  $:$Id: TROOT.h,v 1.5 2000/09/05 10:55:30 brun Exp $
+// @(#)root/base:$Name:  $:$Id: TROOT.h,v 1.6 2000/09/08 07:34:50 brun Exp $
 // Author: Rene Brun   08/12/94
 
 /*************************************************************************
@@ -71,7 +71,7 @@ protected:
    Bool_t          fEditHistograms;       //True if histograms can be edited with the mouse
    Bool_t          fFromPopUp;            //True if command executed from a popup menu
    Bool_t          fMustClean;            //True if object destructor scans canvases
-   Bool_t          fReadingBasket;        //True while reading a basket buffer
+   Bool_t          fReadingObject;        //True while reading an object
    Bool_t          fForceStyle;           //Force setting of current style when reading objects
    Bool_t          fInterrupt;            //True if macro should be interrupted
    Int_t           fEditorMode;           //Current Editor mode
@@ -182,7 +182,7 @@ public:
    void              ProcessLineSync(const char *line);
    Long_t            ProcessLineFast(const char *line);
    void              Proof(const char *cluster = "proof");
-   Bool_t            ReadingBasket() {return fReadingBasket;}
+   Bool_t            ReadingObject() {return fReadingObject;}
    void              Reset(Option_t *option="");
    void              SaveContext();
    void              SetApplication(TApplication *app) { fApplication = app; }
@@ -195,7 +195,7 @@ public:
    void              SetInterrupt(Bool_t flag=kTRUE) { fInterrupt = flag; }
    void              SetLineIsProcessing() { fLineIsProcessing++; }
    void              SetLineHasBeenProcessed() {if (fLineIsProcessing) fLineIsProcessing--;}
-   void              SetReadingBasket(Bool_t flag=kTRUE) {fReadingBasket = flag;}
+   void              SetReadingObject(Bool_t flag=kTRUE) {fReadingObject = flag;}
    void              SetMustClean(Bool_t flag=kTRUE) { fMustClean=flag; }
    void              SetSelectedPrimitive(TObject *obj) { fPrimitive = obj; }
    void              SetSelectedPad(TVirtualPad *pad) { fSelectPad = pad; }
diff --git a/base/src/TKey.cxx b/base/src/TKey.cxx
index 7e45c1b0d00372e546cc68453011a3c8010c8680..160826a334dd45b35ea6fa45a8112d7d32c30073 100644
--- a/base/src/TKey.cxx
+++ b/base/src/TKey.cxx
@@ -1,4 +1,4 @@
-// @(#)root/base:$Name:  $:$Id: TKey.cxx,v 1.2 2000/05/24 10:31:47 brun Exp $
+// @(#)root/base:$Name:  $:$Id: TKey.cxx,v 1.3 2000/09/05 09:21:22 brun Exp $
 // Author: Rene Brun   28/12/94
 
 /*************************************************************************
@@ -430,6 +430,7 @@ TObject *TKey::ReadObj()
        return 0;
    }
    // Create an instance of this class
+   gROOT->SetReadingObject(kTRUE);
    obj = (TObject*)cl->New();
    if (!obj) {
       Error("ReadObj", "Cannot create new object of class %s", fClassName.Data());
@@ -458,6 +459,7 @@ TObject *TKey::ReadObj()
    } else {
       obj->Streamer(*fBufferRef);
    }
+   gROOT->SetReadingObject(kFALSE);
 
    if (gROOT->GetForceStyle()) obj->UseCurrentStyle();
 
@@ -539,7 +541,7 @@ void TKey::ReadBuffer(char *&buffer)
    fClassName.ReadBuffer(buffer);
    fName.ReadBuffer(buffer);
    fTitle.ReadBuffer(buffer);
-   if (!gROOT->ReadingBasket()) {
+   if (!gROOT->ReadingObject()) {
       if (fSeekPdir != gDirectory->GetSeekDir()) gDirectory->AppendKey(this);
    }
 }
diff --git a/base/src/TROOT.cxx b/base/src/TROOT.cxx
index 6aa69ab2545a10f93d2185ea5afd62e2387a5422..623a42fd94d691a8a8bb07e0e8c22a8465113d56 100644
--- a/base/src/TROOT.cxx
+++ b/base/src/TROOT.cxx
@@ -1,4 +1,4 @@
-// @(#)root/base:$Name:  $:$Id: TROOT.cxx,v 1.14 2000/09/08 07:34:50 brun Exp $
+// @(#)root/base:$Name:  $:$Id: TROOT.cxx,v 1.15 2000/09/08 16:05:20 rdm Exp $
 // Author: Rene Brun   08/12/94
 
 /*************************************************************************
@@ -283,7 +283,7 @@ TROOT::TROOT(const char *name, const char *title, VoidFuncPtr_t *initfunc)
 
    fForceStyle    = kFALSE;
    fFromPopUp     = kFALSE;
-   fReadingBasket = kFALSE;
+   fReadingObject = kFALSE;
    fInterrupt     = kFALSE;
    fMustClean     = kTRUE;
    fPrimitive     = 0;
diff --git a/gpad/src/TCanvas.cxx b/gpad/src/TCanvas.cxx
index 6ebc61e89cc9360da711066e240197676153d2db..123acb9686fa45bb2906578edfe2e0a7179bbf4c 100644
--- a/gpad/src/TCanvas.cxx
+++ b/gpad/src/TCanvas.cxx
@@ -1,4 +1,4 @@
-// @(#)root/gpad:$Name:  $:$Id: TCanvas.cxx,v 1.9 2000/09/08 16:05:21 rdm Exp $
+// @(#)root/gpad:$Name:  $:$Id: TCanvas.cxx,v 1.10 2000/09/11 06:18:24 brun Exp $
 // Author: Rene Brun   12/12/94
 
 /*************************************************************************
@@ -119,7 +119,19 @@ TCanvas::TCanvas() : TPad()
 {
    // Canvas default constructor.
 
-   Constructor();
+   if (gROOT->ReadingObject()) {
+      Constructor();
+   } else {
+      const char *defcanvas = gROOT->GetDefCanvasName();
+      char *cdef;
+
+      TList *lc = (TList*)gROOT->GetListOfCanvases();
+      if (lc->FindObject(defcanvas))
+         cdef = StrDup(Form("%s_n%d",defcanvas,lc->GetSize()+1));
+      else
+         cdef = StrDup(Form("%s",defcanvas));
+      Constructor(cdef, cdef, 1);
+   }
 }
 
 //______________________________________________________________________________
diff --git a/gpad/src/TPad.cxx b/gpad/src/TPad.cxx
index 73a44c8c5ac550e456432c170928eb6e75b2bc39..3ecd03a3607495a58a9dd8564dd39f02f5bc128e 100644
--- a/gpad/src/TPad.cxx
+++ b/gpad/src/TPad.cxx
@@ -1,4 +1,4 @@
-// @(#)root/gpad:$Name:  $:$Id: TPad.cxx,v 1.14 2000/09/08 07:36:18 brun Exp $
+// @(#)root/gpad:$Name:  $:$Id: TPad.cxx,v 1.15 2000/09/08 16:05:21 rdm Exp $
 // Author: Rene Brun   12/12/94
 
 /*************************************************************************
@@ -4060,7 +4060,7 @@ void TPad::Streamer(TBuffer &b)
 // read objects and their drawing options
 //      b >> fPrimitives;
       readLevel++;
-      gROOT->SetReadingBasket(kTRUE);
+      gROOT->SetReadingObject(kTRUE);
       fPrimitives = new TList;
       b >> nobjects;
       if (nobjects > 0) {
@@ -4077,7 +4077,7 @@ void TPad::Streamer(TBuffer &b)
          gPad = padsav;
       }
       readLevel--;
-      gROOT->SetReadingBasket(kFALSE);
+      gROOT->SetReadingObject(kFALSE);
 //-------------------------
       if (v > 3) {
          b >> fExecs;
diff --git a/hist/src/TH1.cxx b/hist/src/TH1.cxx
index 75968732b60830ad3ece03061622019882c1ecfe..f0733627aec8419b47c08493fc4bf42dd6654db0 100644
--- a/hist/src/TH1.cxx
+++ b/hist/src/TH1.cxx
@@ -1,4 +1,4 @@
-// @(#)root/hist:$Name:  $:$Id: TH1.cxx,v 1.22 2000/08/30 16:58:18 brun Exp $
+// @(#)root/hist:$Name:  $:$Id: TH1.cxx,v 1.23 2000/09/08 16:05:21 rdm Exp $
 // Author: Rene Brun   26/12/94
 
 /*************************************************************************
@@ -2939,7 +2939,7 @@ void TH1::Streamer(TBuffer &b)
       fOption.Streamer(b);
       fFunctions->Delete();
       fFunctions->Streamer(b);
-      if (!gROOT->ReadingBasket()) {
+      if (!gROOT->ReadingObject()) {
          fDirectory = gDirectory;
          if (!gDirectory->GetList()->FindObject(this)) gDirectory->Append(this);
       }
diff --git a/io/src/TKey.cxx b/io/src/TKey.cxx
index 7e45c1b0d00372e546cc68453011a3c8010c8680..160826a334dd45b35ea6fa45a8112d7d32c30073 100644
--- a/io/src/TKey.cxx
+++ b/io/src/TKey.cxx
@@ -1,4 +1,4 @@
-// @(#)root/base:$Name:  $:$Id: TKey.cxx,v 1.2 2000/05/24 10:31:47 brun Exp $
+// @(#)root/base:$Name:  $:$Id: TKey.cxx,v 1.3 2000/09/05 09:21:22 brun Exp $
 // Author: Rene Brun   28/12/94
 
 /*************************************************************************
@@ -430,6 +430,7 @@ TObject *TKey::ReadObj()
        return 0;
    }
    // Create an instance of this class
+   gROOT->SetReadingObject(kTRUE);
    obj = (TObject*)cl->New();
    if (!obj) {
       Error("ReadObj", "Cannot create new object of class %s", fClassName.Data());
@@ -458,6 +459,7 @@ TObject *TKey::ReadObj()
    } else {
       obj->Streamer(*fBufferRef);
    }
+   gROOT->SetReadingObject(kFALSE);
 
    if (gROOT->GetForceStyle()) obj->UseCurrentStyle();
 
@@ -539,7 +541,7 @@ void TKey::ReadBuffer(char *&buffer)
    fClassName.ReadBuffer(buffer);
    fName.ReadBuffer(buffer);
    fTitle.ReadBuffer(buffer);
-   if (!gROOT->ReadingBasket()) {
+   if (!gROOT->ReadingObject()) {
       if (fSeekPdir != gDirectory->GetSeekDir()) gDirectory->AppendKey(this);
    }
 }
diff --git a/tree/src/TBranch.cxx b/tree/src/TBranch.cxx
index 048d4d1f0929a8dfc08df133023a08f31dc2af7a..9ffc0f20efbefc6c4e58cb165c15a9899e99e9bc 100644
--- a/tree/src/TBranch.cxx
+++ b/tree/src/TBranch.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TBranch.cxx,v 1.5 2000/09/05 09:21:24 brun Exp $
+// @(#)root/tree:$Name:  $:$Id: TBranch.cxx,v 1.6 2000/09/06 07:17:49 brun Exp $
 // Author: Rene Brun   12/01/96
 
 /*************************************************************************
@@ -887,7 +887,7 @@ void TBranch::Streamer(TBuffer &b)
    if (b.IsReading()) {
       gBranch = this;
       fTree = gTree;
-      gROOT->SetReadingBasket(kTRUE);
+      gROOT->SetReadingObject(kTRUE);
       Version_t v = b.ReadVersion(&R__s, &R__c);
       TNamed::Streamer(b);
       b >> fCompress;
@@ -929,7 +929,7 @@ void TBranch::Streamer(TBuffer &b)
          if (fFileName.Length() != 0) fDirectory = 0;
       }
       if (v < 4) SetAutoDelete(kTRUE);
-      gROOT->SetReadingBasket(kFALSE);
+      gROOT->SetReadingObject(kFALSE);
       b.CheckByteCount(R__s, R__c, TBranch::IsA());
    } else {
       R__c = b.WriteVersion(TBranch::IsA(), kTRUE);