Index: trunk/MagicSoft/Mars/mbase/MParContainer.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MParContainer.cc	(revision 2386)
+++ trunk/MagicSoft/Mars/mbase/MParContainer.cc	(revision 2410)
@@ -114,5 +114,4 @@
 TObject *MParContainer::Clone(const char *newname) const
 {
-
    MParContainer *named = (MParContainer*)TObject::Clone();
    if (newname && strlen(newname)) named->SetName(newname);
@@ -584,2 +583,57 @@
     return ((TEnv&)env).GetValue(prefix, dflt);
 }
+
+void MParContainer::DrawTS(TObject *obj, TVirtualPad *pad, Option_t *option)
+{
+    if (!obj)
+    {
+        gLog << warn << "MParContainer::DrawTS: obj==NULL" << endl;
+        return;
+    }
+
+    if (!pad)
+        pad = gPad;
+
+    // FIXME: Move MH to mbase
+    //if (!pad)
+    //    pad = MakeDefCanvas(this);
+
+    if (!pad)
+    {
+        if (!gROOT->GetMakeDefCanvas())
+            return;
+        (gROOT->GetMakeDefCanvas())();
+        pad = gPad;
+    }
+
+    if (!pad->IsEditable())
+        return;
+
+    obj->SetBit(kMustCleanup);
+
+    pad->GetListOfPrimitives()->Add(obj, option);
+    pad->Modified(kTRUE);
+}
+
+TObject *MParContainer::DrawCloneTS(const TObject *obj, TVirtualPad *pad, Option_t *option)
+{
+    // Draw a clone of this object in the current pad
+    if (!obj)
+        return 0;
+
+    TObject *newobj = obj->Clone();
+    if (!newobj)
+        return 0;
+
+    /*
+     gLog << dbg << "MParConatiner::DrawCloneTS - ";
+     gLog << (int)newobj->InheritsFrom(MParContainer::Class()) << " ";
+     gLog << pad << endl;
+     */
+    if (newobj->InheritsFrom(MParContainer::Class()))
+        ((MParContainer*)newobj)->DrawTS(pad, strlen(option) ? option : obj->GetDrawOption());
+    else
+        DrawTS(newobj, pad, strlen(option) ? option : obj->GetDrawOption());
+
+    return newobj;
+}
