Index: trunk/MagicSoft/Mars/mbase/MClone.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MClone.cc	(revision 8898)
+++ trunk/MagicSoft/Mars/mbase/MClone.cc	(revision 8899)
@@ -66,5 +66,5 @@
 // constructors.
 //
-void MClone::Init(const char *name, const char *title)
+void MClone::Init(const char *name, const char *title) : fForceClone(kFALSE)
 {
     fName  = name  ? name  : "MClone";
@@ -160,15 +160,14 @@
 Int_t MClone::Process()
 {
-    //
-    // Delete an existing clone
-    //
+    if (fClone && !fForceClone)
+    {
+        fObject->Copy(*fClone);
+        return kTRUE;
+    }
+
     Clear();
 
-    //
-    // Clone the given parameter container
-    //
     fClone = fObject->Clone();
+    return kTRUE;
+}
 
-    return kTRUE;
-} 
-
Index: trunk/MagicSoft/Mars/mbase/MClone.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MClone.h	(revision 8898)
+++ trunk/MagicSoft/Mars/mbase/MClone.h	(revision 8899)
@@ -1,8 +1,4 @@
 #ifndef MARS_MClone
 #define MARS_MClone
-
-#ifndef MARS_MAGIC
-#include "MAGIC.h"
-#endif
 
 #ifndef MARS_MTask
@@ -20,5 +16,12 @@
     TObject* fClone;        // pointer to the cloned object. deletion is handled by MClone
 
+    Bool_t fForceClone;
+
+    // MClone
     void Init(const char *name, const char *title);
+
+    // MTask
+    Int_t PreProcess(MParList *pList);
+    Int_t Process();
 
 public:
@@ -27,11 +30,12 @@
     ~MClone();
 
-    Int_t PreProcess(MParList *pList);
-    Int_t Process();
+    // TObject
+    void Clear(Option_t *opt=NULL);
 
+    // MClone
     TObject *GetClone() const  { return fClone; }
     const TObject *GetObject() const { return fObject; }
 
-    void Clear(Option_t *opt=NULL);
+    void SetForceClone(Bool_t b=kTRUE) { fForceClone = b; }
 
     ClassDef(MClone, 0) // Task to clone (duplicate) an object in memory
Index: trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc	(revision 8898)
+++ trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc	(revision 8899)
@@ -825,7 +825,7 @@
 // to the corresponding TCanvas. If it isn't found NULL is returned.
 //
-TRootEmbeddedCanvas *MStatusDisplay::GetEmbeddedCanvas(TGCompositeFrame *cf) const
-{
-    TIter Next(cf->GetList());
+TRootEmbeddedCanvas *MStatusDisplay::GetEmbeddedCanvas(TGCompositeFrame &cf)
+{
+    TIter Next(cf.GetList());
 
     TGFrameElement *f;
@@ -843,5 +843,5 @@
 // to the corresponding TCanvas. If it isn't found NULL is returned.
 //
-TCanvas *MStatusDisplay::GetCanvas(TGCompositeFrame *cf) const
+TCanvas *MStatusDisplay::GetCanvas(TGCompositeFrame &cf)
 {
     TRootEmbeddedCanvas *ec = GetEmbeddedCanvas(cf);
@@ -877,5 +877,5 @@
     }
 
-    return GetCanvas(fTab->GetTabContainer(i));
+    return GetCanvas(*fTab->GetTabContainer(i));
 }
 
@@ -938,5 +938,5 @@
         TObject *frame = f->fFrame;
         if (frame->InheritsFrom(TGCompositeFrame::Class()))
-            return GetCanvas((TGCompositeFrame*)frame);
+            return GetCanvas(*(TGCompositeFrame*)frame);
     }
 
@@ -1113,5 +1113,5 @@
         return;
 
-    TCanvas *c=GetCanvas(f);
+    TCanvas *c=GetCanvas(*f);
     if (!c)
         return;
@@ -1315,5 +1315,5 @@
         return;
 
-    TRootEmbeddedCanvas *ec = GetEmbeddedCanvas(f);
+    TRootEmbeddedCanvas *ec = GetEmbeddedCanvas(*f);
     if (!ec)
         return;
Index: trunk/MagicSoft/Mars/mbase/MStatusDisplay.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MStatusDisplay.h	(revision 8898)
+++ trunk/MagicSoft/Mars/mbase/MStatusDisplay.h	(revision 8899)
@@ -118,6 +118,4 @@
     void AddLogTab();
 
-    TCanvas *GetCanvas(TGCompositeFrame *f) const;
-
     Bool_t ProcessMessageCommandMenu(Long_t mp1);
     Bool_t ProcessMessageCommand(Long_t submsg, Long_t mp1, Long_t mp2);
@@ -146,6 +144,4 @@
     void RemoveTab(int i);
     void SetStatusLine(const char *txt, Int_t idx);
-
-    TRootEmbeddedCanvas *GetEmbeddedCanvas(TGCompositeFrame *cf) const;
 
     Bool_t SaveAsImage(Int_t num, TString name, TImage::EImageFileTypes type);
@@ -274,4 +270,8 @@
      void EventInfo(Int_t event, Int_t px, Int_t py, TObject *selected);
 
+     // Public helper functions
+     static TRootEmbeddedCanvas *GetEmbeddedCanvas(TGCompositeFrame &cf);
+     static TCanvas *GetCanvas(TGCompositeFrame &f);
+
      ClassDef(MStatusDisplay, 0)   // Window for a status display
 };
