diff --git a/test/stress.cxx b/test/stress.cxx
index fd7916fd4403b66de3035b19c068092cb20dfebf..1fb2d40ade583bcee72752c58fcbdb106060b0af 100644
--- a/test/stress.cxx
+++ b/test/stress.cxx
@@ -1,4 +1,4 @@
-// @(#)root/test:$Name:  $:$Id: stress.cxx,v 1.44 2003/06/17 16:45:25 brun Exp $
+// @(#)root/test:$Name:  $:$Id: stress.cxx,v 1.45 2003/06/22 13:51:01 brun Exp $
 // Author: Rene Brun   05/11/98
 
 /////////////////////////////////////////////////////////////////
@@ -1258,16 +1258,11 @@ void stress13()
       chain->Add(filename);
    }
 
-   Event *event = 0;
-   chain->SetBranchAddress("event",&event);
-
    chain->Merge("Event.root");
 
    Double_t chentries = chain->GetEntries();
    delete chain;
 
-   event->ResetHistogramPointer(); // fH was deleted above!!
-   delete event;
    Event::Reset();
    gROOT->GetList()->Delete();
 
diff --git a/tree/src/TChain.cxx b/tree/src/TChain.cxx
index 017b54639dc641b31bb85217d7c7f843adcae613..b6849dc65ac7b0ea2d3aa438fdf84dbea7c92aa2 100644
--- a/tree/src/TChain.cxx
+++ b/tree/src/TChain.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TChain.cxx,v 1.69 2003/06/30 15:45:52 brun Exp $
+// @(#)root/tree:$Name:  $:$Id: TChain.cxx,v 1.70 2003/07/04 13:27:35 brun Exp $
 // Author: Rene Brun   03/02/97
 
 /*************************************************************************
@@ -932,24 +932,16 @@ Int_t TChain::Merge(TFile *file, Int_t basketsize, Option_t *option)
 //     if (basketsize > 1000, the basket size for all branches of the
 //     new Tree will be set to basketsize.
 //
-// IMPORTANT Note 1: Before invoking this function, the branch addresses
-//            of the TTree must have been set.
 //  example using the file generated in $ROOTSYS/test/Event
 //  merge two copies of Event.root
 //
 //        gSystem.Load("libEvent");
-//        Event *event = new Event();
 //        TChain ch("T");
-//        ch.SetBranchAddress("event",&event);
 //        ch.Add("Event1.root");
 //        ch.Add("Event2.root");
 //        ch.Merge("all.root");
 //
-//  The SetBranchAddress statement is not necessary if the Tree
-//  contains only basic types (case of files converted from hbook)
-//  NOTE that the merged Tree contains only the active branches.
-//
-// IMPORTANT Note 2: AUTOMATIC FILE OVERFLOW
+// IMPORTANT Note 1: AUTOMATIC FILE OVERFLOW
 // -----------------------------------------
 // When merging many files, it may happen that the resulting file
 // reaches a size > TTree::fgMaxTreeSize (default = 1.9 GBytes). In this case
@@ -958,7 +950,7 @@ Int_t TChain::Merge(TFile *file, Int_t basketsize, Option_t *option)
 // will be named "merged_1.root", "merged_2.root", etc.
 // fgMaxTreeSize may be modified via the static function TTree::SetMaxTreeSize.
 //
-// IMPORTANT Note 3: The input file is automatically closed and deleted.
+// IMPORTANT Note 2: The input file is automatically closed and deleted.
 // This is required because in general the automatic file overflow described
 // above may happen during the merge.
 //
@@ -971,7 +963,7 @@ Int_t TChain::Merge(TFile *file, Int_t basketsize, Option_t *option)
 
 // Clone Chain tree
    //file->cd();  //in case a user wants to write in a file/subdir
-   TTree *hnew = (TTree*)fTree->CloneTree(0);
+   TTree *hnew = CloneTree(0);
    hnew->SetAutoSave(2000000000);
 
 // May be reset branches compression level?
@@ -1000,34 +992,6 @@ Int_t TChain::Merge(TFile *file, Int_t basketsize, Option_t *option)
    Int_t nentries = Int_t(GetEntriesFast());
    for (Int_t i=0;i<nentries;i++) {
       if (GetEntry(i) <= 0) break;
-      if (treeNumber != fTreeNumber) {
-         treeNumber = fTreeNumber;
-         TIter next(fTree->GetListOfBranches());
-         Bool_t failed = kFALSE;
-         while ((branch = (TBranch*)next())) {
-            TBranch *new_branch = hnew->GetBranch( branch->GetName() );
-            if (!new_branch) continue;
-            void *add = branch->GetAddress();
-            // in case branch addresses have not been set, give a last chance
-            // for simple Trees (h2root converted for example)
-            if (!add) {
-               TLeaf *leaf, *new_leaf;
-               TIter next_l(branch->GetListOfLeaves());
-               while ((leaf = (TLeaf*) next_l())) {
-                  add = leaf->GetValuePointer();
-                  if (add) {
-                     new_leaf = new_branch->GetLeaf(leaf->GetName());
-                     if(new_leaf) new_leaf->SetAddress(add);
-                  } else {
-                     failed = kTRUE;
-                  }
-               }
-            } else {
-               new_branch->SetAddress(add);
-            }
-            if (failed) Warning("Merge","Tree branch addresses not defined");
-         }
-      }
       hnew->Fill();
    }
 
diff --git a/tree/src/TTree.cxx b/tree/src/TTree.cxx
index f39e55d34fb2692de73937efa06e22ec24bf2a4a..ee10b00223b8f8b9d36ad88663bf360990570185 100644
--- a/tree/src/TTree.cxx
+++ b/tree/src/TTree.cxx
@@ -1,4 +1,4 @@
-// @(#)root/tree:$Name:  $:$Id: TTree.cxx,v 1.149 2003/06/30 15:45:52 brun Exp $
+// @(#)root/tree:$Name:  $:$Id: TTree.cxx,v 1.150 2003/07/04 13:27:35 brun Exp $
 // Author: Rene Brun   12/01/96
 
 /*************************************************************************
@@ -1479,9 +1479,14 @@ TTree *TTree::CloneTree(Int_t nentries, Option_t *)
 // option is reserved for future use
 // Note that only active branches are copied.
 //
-// IMPORTANT: Before invoking this function, the branch addresses
-//            of this TTree must have been set if one or more branches
-//            is not a basic type.
+// IMPORTANT: The cloned tree stays connected with this tree until this tree
+//            is deleted.  In particular, any changes in branch addresses
+//            in this tree are forwarded to the clone trees.  Any changes 
+//            made to the branch addresses of the cloned trees are over-ridden
+//            anytime this tree changes its branch addresses.
+//            Once this tree is deleted, all the addresses of the cloned tree
+//            are reset to their default values.
+//
 // For examples of CloneTree, see tutorials
 //  -copytree:
 //    Example of Root macro to copy a subset of a Tree to a new Tree
@@ -1630,9 +1635,14 @@ TTree *TTree::CopyTree(const char *selection, Option_t *option, Int_t nentries,
 //*-*-*-*-*-*-*-*-*copy a Tree with selection*-*-*-*-*-*
 //*-*              ==========================
 //
-// IMPORTANT: Before invoking this function, the branch addresses
-//            of this TTree must have been set if one or more branches
-//            is not a basic type.
+// IMPORTANT: The copied tree stays connected with this tree until this tree
+//            is deleted.  In particular, any changes in branch addresses
+//            in this tree are forwarded to the clone trees.  Any changes 
+//            made to the branch addresses of the copied trees are over-ridden
+//            anytime this tree changes its branch addresses.
+//            Once this tree is deleted, all the addresses of the copied tree
+//            are reset to their default values.
+//
 // For examples of CloneTree, see tutorials
 //  -copytree:
 //    Example of Root macro to copy a subset of a Tree to a new Tree
diff --git a/treeplayer/src/TTreePlayer.cxx b/treeplayer/src/TTreePlayer.cxx
index bc73a14b73972118c0f863241b10dca8257d46ae..d966480dd9270d49862a7ca5d9d882b371b94e69 100644
--- a/treeplayer/src/TTreePlayer.cxx
+++ b/treeplayer/src/TTreePlayer.cxx
@@ -1,4 +1,4 @@
-// @(#)root/treeplayer:$Name:  $:$Id: TTreePlayer.cxx,v 1.127 2003/06/27 11:02:34 rdm Exp $
+// @(#)root/treeplayer:$Name:  $:$Id: TTreePlayer.cxx,v 1.128 2003/07/04 13:27:35 brun Exp $
 // Author: Rene Brun   12/01/96
 
 /*************************************************************************
@@ -314,7 +314,14 @@ TTree *TTreePlayer::CopyTree(const char *selection, Option_t *, Int_t nentries,
    // nentries is the number of entries to process (default is all)
    // first is the first entry to process (default is 0)
    //
-   // Note that the branch addresses must be correctly set before calling this function
+   // IMPORTANT: The copied tree stays connected with this tree until this tree
+   //            is deleted.  In particular, any changes in branch addresses
+   //            in this tree are forwarded to the clone trees.  Any changes 
+   //            made to the branch addresses of the copied trees are over-ridden
+   //            anytime this tree changes its branch addresses.
+   //            Once this tree is deleted, all the addresses of the copied tree
+   //            are reset to their default values.
+   //
    // The following example illustrates how to copy some events from the Tree
    // generated in $ROOTSYS/test/Event
    //
@@ -328,7 +335,7 @@ TTree *TTreePlayer::CopyTree(const char *selection, Option_t *, Int_t nentries,
    //   T2->Write();
 
 
-  // we make a copy of the tree header
+   // we make a copy of the tree header
    TTree *tree = fTree->CloneTree(0);
    if (tree == 0) return 0;