Index: /trunk/MagicSoft/Mars/macros/MagicHillas.C
===================================================================
--- /trunk/MagicSoft/Mars/macros/MagicHillas.C	(revision 1022)
+++ /trunk/MagicSoft/Mars/macros/MagicHillas.C	(revision 1023)
@@ -24,5 +24,5 @@
 
 
-void MagicHillas()
+void MagicHillas(const char *filename="data/camera.root")
 {
     //
@@ -50,15 +50,4 @@
 
     //
-    // The Hillas histograms (MHHillas) could be created automatically
-    // but to make sure, that they are not deleted when the macro is
-    // finished you must create them yourself and add it to the list
-    //
-    MHHillas *hists = new MHHillas;
-    plist.AddToList(hists);
-
-    MHStarMap *smap = new MHStarMap;
-    plist.AddToList(smap);
-
-    //
     // Now setup the tasks and tasklist:
     //
@@ -76,17 +65,19 @@
     //   CalEvents:  Calibration Events
     //
-    MReadTree read("Events", "data/octobertest.root");
+    MReadTree read("Events", filename);
     // read.AddFile("data/cer000019.root");
 
-    MCerPhotCalc    ncalc;
-    MImgCleanStd    clean;
-    MHillasCalc     hcalc;
-    MFillH          hfill("MHillas", "MHHillas");
-    MFillH          sfill("MHillas", "MHStarMap");
+    MCerPhotCalc ncalc;
+    MImgCleanStd clean;
+    MHillasCalc  hcalc;
+    MFillH       hfill("MHillas", "MHHillas");
+    MFillH       sfill("MHillas", "MHStarMap");
 
-    MWriteRootFile  write("hillas.root");
+    //
+    // Crete and setup Tasklist
+    //
+    MWriteRootFile write("hillas.root");
     write.AddContainer("MHillas");
-    write.AddContainer("MHHillas");
-    write.AddContainer(smap);
+    write.AddContainer("MHStarMap");
 
     tlist.AddToList(&read);
@@ -113,6 +104,6 @@
     // After the analysis is finished we can display the histograms
     //
-    hists->Draw();
-    smap->Draw();
+    plist.FindObject("MHHillas")->DrawClone();
+    plist.FindObject("MHStarMap")->DrawClone();
 }
 
Index: /trunk/MagicSoft/Mars/manalysis/MCerPhotPix.h
===================================================================
--- /trunk/MagicSoft/Mars/manalysis/MCerPhotPix.h	(revision 1022)
+++ /trunk/MagicSoft/Mars/manalysis/MCerPhotPix.h	(revision 1023)
@@ -24,21 +24,21 @@
     MCerPhotPix(Int_t pix = -1, Float_t phot=0., Float_t errphot=0.);
 
-    void Print(Option_t *opt = NULL) const;
+    Int_t   GetPixId() const         { return fPixId;   }
+    Float_t GetNumPhotons() const    { return fPhot;    }
+    Float_t GetErrorPhot() const     { return fErrPhot; }
 
-    Int_t   GetPixId() const      { return fPixId;   }
-    Float_t GetNumPhotons() const { return fPhot;    }
-    Float_t GetErrorPhot() const  { return fErrPhot; }
+    void    SetPixelContent(Int_t pix, Float_t phot, Float_t errphot);
 
-    void SetPixelContent(Int_t pix, Float_t phot, Float_t errphot);
+    Bool_t  IsPixelUsed() const      { return fIsUsed;   }
+    void    SetPixelUnused()         { fIsUsed = kFALSE; }
+    void    SetPixelUsed()           { fIsUsed = kTRUE;  }
 
-    Bool_t IsPixelUsed() const    { return fIsUsed;   }
-    void   SetPixelUnused()       { fIsUsed = kFALSE; }
-    void   SetPixelUsed()         { fIsUsed = kTRUE;  }
+    void    SetCorePixel()           { fIsCore = kTRUE; }
+    Bool_t  IsCorePixel() const      { return fIsCore;  }
 
-    void   SetCorePixel()         { fIsCore = kTRUE; }
-    Bool_t IsCorePixel() const    { return fIsCore;  }
+    void    SetNumPhotons(Float_t f) { fPhot    = f; }
+    void    SetErrorPhot(Float_t f)  { fErrPhot = f; }
 
-    void SetNumPhotons(Float_t f) { fPhot    = f; }
-    void SetErrorPhot(Float_t f)  { fErrPhot = f; }
+    void    Print(Option_t *opt = NULL) const;
 
     ClassDef(MCerPhotPix, 1)  // class containing information about the Cerenkov Photons in a pixel
Index: /trunk/MagicSoft/Mars/mbase/MParList.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MParList.cc	(revision 1022)
+++ /trunk/MagicSoft/Mars/mbase/MParList.cc	(revision 1023)
@@ -66,6 +66,4 @@
     fContainer  = new TOrdCollection;
     fAutodelete = new TOrdCollection;
-
-    fAutodelete->SetOwner();
 }
 
@@ -89,6 +87,21 @@
 MParList::~MParList()
 {
-    if (TestBit(kIsOwner))
-        fContainer->SetOwner();
+    const Bool_t isowner = TestBit(kIsOwner);
+
+    //
+    // Case:
+    //  1) MParList is owner of the containers:
+    //     All container are stored in fContainer, and become deleted by
+    //     'delete fContainer'. Some of these containers, which were
+    //     created automatically are stored in fAutodelete, too. To prevent
+    //     double deletion this containers are not deleted by the destructor
+    //     of fAutodelete.
+    //  2) MParList is not owner of the containers:
+    //     The containers which were Added by AddToList are not touched.
+    //     Only the containers which were created automatically are also
+    //     automatically deleted.
+    //
+    fContainer->SetOwner(isowner);
+    fAutodelete->SetOwner(!isowner);
 
     delete fContainer;
@@ -113,14 +126,5 @@
 void MParList::SetLogStream(MLog *log)
 {
-    TIter Next(fContainer);
-
-    MParContainer *cont=NULL;
-
-    //
-    // loop over all tasks for preproccesing
-    //
-    while ( (cont=(MParContainer*)Next()) )
-        cont->SetLogStream(log);
-
+    fContainer->ForEach(MParContainer, SetLogStream)(log);
     MParContainer::SetLogStream(log);
 }
@@ -209,43 +213,5 @@
     MParContainer *cont = NULL;
     while ((cont=(MParContainer*)Next()))
-    {
         AddToList(cont);
-/*        //
-        // Get Name of new container
-        //
-        const char *name = cont->GetName();
-
-        //
-        // Check if the new container is already existing in the list
-        //
-        const TObject *objn = fContainer->FindObject(name);
-        const TObject *objt = fContainer->FindObject(cont);
-
-        if (objn || objt)
-        {
-            //
-            // If the container is already in the list ignore it.
-            //
-            if (objt || objn==cont)
-            {
-                *fLog << dbginf << "Warning: Container '" << cont->GetName() << ", 0x" << (void*)cont;
-                *fLog << "' already existing in '" << GetName() << "'... ignoring." << endl;
-                continue;
-            }
-
-            //
-            // Otherwise add it to the list, but print a warning message
-            //
-            *fLog << dbginf << "Warning: Container with the same name '" << cont->GetName();
-            *fLog << "' already existing in '" << GetName() << "'." << endl;
-            *fLog << "You may not be able to get a pointer to container task by name." << endl;
-        }
-
-        *fLog << "Adding " << name << " to " << GetName() << "... " << flush;
-
-        fContainer->Add(cont);
-
-        *fLog << "Done." << endl;*/
-    }
 }
 
@@ -426,14 +392,5 @@
 void MParList::SetReadyToSave(Bool_t flag)
 {
-    TIter Next(fContainer);
-
-    MParContainer *cont=NULL;
-
-    //
-    // loop over all tasks for preproccesing
-    //
-    while ( (cont=(MParContainer*)Next()) )
-        cont->SetReadyToSave(flag);
-
+    fContainer->ForEach(MParContainer, SetReadyToSave)(flag);
     MParContainer::SetReadyToSave(flag);
 }
@@ -445,13 +402,5 @@
 void MParList::Reset()
 {
-    TIter Next(fContainer);
-
-    MParContainer *cont=NULL;
-
-    //
-    // loop over all tasks for preproccesing
-    //
-    while ((cont=(MParContainer*)Next()))
-        cont->Reset();
+    fContainer->ForEach(MParContainer, Reset)();
 }
 
Index: /trunk/MagicSoft/Mars/mbase/MTaskList.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 1022)
+++ /trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 1023)
@@ -113,17 +113,5 @@
 void MTaskList::SetLogStream(MLog *log)
 {
-    //
-    // create the Iterator over the tasklist
-    //
-    TIter Next(fTasks);
-
-    MTask *task=NULL;
-
-    //
-    // loop over all tasks for preproccesing
-    //
-    while ((task=(MTask*)Next()))
-        task->SetLogStream(log);
-
+    fTasks->ForEach(MTask, SetLogStream)(log);
     MParContainer::SetLogStream(log);
 }
@@ -383,13 +371,5 @@
     //  create the Iterator for the TaskList
     //
-    TIter Next(fTasks);
-
-    MTask *task=NULL;
-    //
-    //  loop over all tasks for postprocessing
-    //  only tasks which have successfully been preprocessed are postprocessed.
-    //
-    while ( (task=(MTask*)Next()) )
-        task->PrintStatistics(lvl+1);
+    fTasks->ForEach(MTask, PrintStatistics)(lvl+1);
 
     if (lvl==0)
Index: /trunk/MagicSoft/Mars/meventdisp/MGEvtDisplay.cc
===================================================================
--- /trunk/MagicSoft/Mars/meventdisp/MGEvtDisplay.cc	(revision 1022)
+++ /trunk/MagicSoft/Mars/meventdisp/MGEvtDisplay.cc	(revision 1023)
@@ -28,8 +28,11 @@
 
 #include <TGTab.h>                // TGTab
+#include <TGMenu.h>               // TGPopupMenu
+#include <TCanvas.h>              // TCanvas::Print
 #include <TGLabel.h>              // TGLabel
 #include <TGButton.h>             // TGPictureButton
 #include <TGMsgBox.h>             // TGMsgBox
 #include <TGTextEntry.h>          // TGTextEntry
+#include <TGFileDialog.h>         // TGFileDialog
 #include <TRootEmbeddedCanvas.h>  // TRootEmbeddedCanvas
 
@@ -46,10 +49,16 @@
 enum MGCamDisplayCommand
 {
-    M_PREVEVT,
-    M_NEXTEVT,
-    M_EVTNUMBER,
-
-    M_PRINT,
-    M_CLOSE
+    kEvtPrev,
+    kEvtNext,
+    kEvtNumber,
+
+    kFileSaveAs,
+    kFileSaveAsRoot,
+    kFileSaveAsC,
+    kFileSaveAsPS,
+    kFileSaveAsEPS,
+    kFileSaveAsGIF,
+    kFilePrint,
+    kClose
 }; 
 
@@ -155,10 +164,10 @@
     // Create the gui elements
     //
-    TGTextButton *prevevt = new TGTextButton(top2, "<< Previous Event", M_PREVEVT);
+    TGTextButton *prevevt = new TGTextButton(top2, "<< Previous Event", kEvtPrev);
     prevevt->Associate(this);
 
     TGLabel *evtnr = new TGLabel(top2, new TGString("Event: "));
 
-    fTxtEvtNr = new TGTextEntry(top2, new TGTextBuffer(100), M_EVTNUMBER);
+    fTxtEvtNr = new TGTextEntry(top2, new TGTextBuffer(100), kEvtNumber);
     fTxtEvtNr->Resize(60, fTxtEvtNr->GetDefaultHeight());
     fTxtEvtNr->Associate(this);
@@ -166,5 +175,5 @@
     fNumOfEvts = new TGLabel(top2, "out of           Events.");
 
-    TGTextButton *nextevt = new TGTextButton (top2, "Next Event >>", M_NEXTEVT);
+    TGTextButton *nextevt = new TGTextButton (top2, "Next Event >>", kEvtNext);
     nextevt->Associate(this);
 
@@ -252,18 +261,14 @@
 void MGEvtDisplay::AddLowFrame(TGHorizontalFrame *frame)
 {
-    TGTextButton *but1 = new TGTextButton(frame, "Print", M_PRINT);
-    TGTextButton *but2 = new TGTextButton(frame, "Close", M_CLOSE);
-
-    but1->Associate(this);
-    but2->Associate(this);
-
-    fList->Add(but1);
-    fList->Add(but2);
+    TGTextButton *but = new TGTextButton(frame, "Close", kClose);
+
+    but->Associate(this);
+
+    fList->Add(but);
 
     TGLayoutHints *laybut = new TGLayoutHints(kLHintsLeft, 10, 10, 10, 10);
     fList->Add(laybut);
 
-    frame->AddFrame(but1, laybut);
-    frame->AddFrame(but2, laybut);
+    frame->AddFrame(but, laybut);
 }
 
@@ -330,4 +335,42 @@
 //  Constructor
 //
+void MGEvtDisplay::AddMenuBar()
+{
+    //
+    // Add all GUI elements and update the event counter
+    //
+    TGLayoutHints *laymenubar  = new TGLayoutHints(kLHintsTop|kLHintsLeft|kLHintsExpandX, 2, 2, 2, 2);
+    TGLayoutHints *laymenuitem = new TGLayoutHints(kLHintsTop|kLHintsLeft, 0, 4, 0, 0);
+    TGLayoutHints *laylinesep  = new TGLayoutHints(kLHintsTop|kLHintsExpandX);
+
+    fList->Add(laymenubar);
+    fList->Add(laymenuitem);
+    fList->Add(laylinesep);
+
+    TGPopupMenu *filemenu = new TGPopupMenu(gClient->GetRoot());
+    filemenu->AddEntry("Save &As...",           kFileSaveAs);
+    filemenu->AddEntry("Save As display.&ps",   kFileSaveAsPS);
+    filemenu->AddEntry("Save As display.&eps",  kFileSaveAsEPS);
+    filemenu->AddEntry("Save As display.&gif",  kFileSaveAsGIF);
+    filemenu->AddEntry("Save As display.&C",    kFileSaveAsC);
+    filemenu->AddEntry("Save As display.&root", kFileSaveAsRoot);
+    filemenu->AddSeparator();
+    filemenu->AddEntry("&Print...", kFilePrint);
+    filemenu->AddSeparator();
+    filemenu->AddEntry("E&xit", kClose);
+    filemenu->Associate(this);
+
+    TGMenuBar *menubar = new TGMenuBar(this, 1, 1, kHorizontalFrame);
+    menubar->AddPopup("File", filemenu, laymenuitem);
+    AddFrame(menubar, laymenubar);
+
+    TGHorizontal3DLine *linesep = new TGHorizontal3DLine(this);
+    AddFrame(linesep, laylinesep);
+
+    fList->Add(filemenu);
+    fList->Add(menubar);
+    fList->Add(linesep);
+}
+
 MGEvtDisplay::MGEvtDisplay(const char *fname, const char *tname,
                            const TGWindow *p, const TGWindow *main,
@@ -346,5 +389,4 @@
     // (via SetOwner())
     //
-
     MTaskList *tlist = new MTaskList;
     tlist->SetOwner();
@@ -353,5 +395,5 @@
     tlist->AddToList(read);
 
-    MParList *plist = new MParList();
+    MParList *plist = new MParList;
     plist->SetOwner();
     plist->AddToList(tlist);
@@ -361,12 +403,9 @@
     fEvtLoop->SetParList(plist);
 
-    //
-    // Add all GUI elements and update the event counter
-    // 
+    AddMenuBar();
     AddFrames(fname, tname);
     UpdateEventCounter();
 }
 
-
 // --------------------------------------------------------------------------
 //
@@ -375,8 +414,8 @@
 MGEvtDisplay::~MGEvtDisplay()
 {
-    delete fList;
-
     fEvtLoop->PostProcess();
     delete fEvtLoop;
+
+    delete fList;
 }
 
@@ -404,10 +443,10 @@
     Int_t retval  = 0;
 
+    //
     //  first check if the new event is in the range of possible events
-  
+    //
     if (iEvt >= GetReader()->GetEntries())
     {
-        new TGMsgBox(gClient->GetRoot(), this,
-                     "WARNING!",
+        new TGMsgBox(gClient->GetRoot(), this, "WARNING!",
                      "The event number is out of range!!!",
                      kMBIconExclamation, buttons, &retval);
@@ -435,4 +474,52 @@
 
     fTxtEvtNr->SetText(txt);
+}
+
+// --------------------------------------------------------------------------
+//
+//  Opens a save as dialog, and tries to store the canvas
+//  in the given output format
+//
+void MGEvtDisplay::SaveAsDialog() const
+{
+    static const char *gSaveAsTypes[] =
+    {
+        "PostScript",   "*.ps",
+        "Encapsulated PostScript", "*.eps",
+        "Gif files",    "*.gif",
+        "Macro files",  "*.C",
+        "ROOT files",   "*.root",
+        "All files",    "*",
+        NULL,           NULL
+    };
+
+    static TString dir(".");
+
+    TGFileInfo fi;
+
+    fi.fFileTypes = gSaveAsTypes;
+    fi.fIniDir    = StrDup(dir);
+
+    new TGFileDialog(fClient->GetRoot(), this, kFDSave, &fi);
+
+    if (!fi.fFilename)
+        return;
+
+    dir = fi.fIniDir;
+
+    if (strstr(fi.fFilename, ".root") ||
+        strstr(fi.fFilename, ".ps")   ||
+        strstr(fi.fFilename, ".eps")  ||
+        strstr(fi.fFilename, ".gif"))
+    {
+        fCanvas->SaveAs(fi.fFilename);
+        return;
+    }
+    if (strstr(fi.fFilename, ".C"))
+    {
+        fCanvas->SaveSource(fi.fFilename);
+        return;
+    }
+    Warning("SaveAsDialog", "Unknown Extension: %s", fi.fFilename);
 }
 
@@ -456,5 +543,5 @@
             switch (parm1)
             {
-            case M_PREVEVT:
+            case kEvtPrev:
                 //
                 // '-2' is because MReadTree::Process increases the
@@ -465,5 +552,5 @@
                 return kTRUE;
 
-            case M_NEXTEVT:
+            case kEvtNext:
                 //
                 // '+0' is because MReadTree::Process increases the
@@ -474,5 +561,35 @@
                 return kTRUE;
 
-            case M_CLOSE:
+            case kClose:
+                CloseWindow();
+                return kTRUE;
+            }
+            return kTRUE;
+
+        case kCM_MENU:
+            switch (parm1)
+            {
+            case kFileSaveAs:
+                SaveAsDialog();
+                return kTRUE;
+            case kFileSaveAsRoot:
+                fCanvas->SaveAs("display.root");
+                return kTRUE;
+            case kFileSaveAsC:
+                fCanvas->SaveSource("display.C");
+                return kTRUE;
+            case kFileSaveAsPS:
+                fCanvas->SaveAs("display.ps");
+                return kTRUE;
+            case kFileSaveAsEPS:
+                fCanvas->SaveAs("display.eps");
+                return kTRUE;
+            case kFileSaveAsGIF:
+                fCanvas->SaveAs("display.gif");
+                return kTRUE;
+            case kFilePrint:
+                fCanvas->Print();
+                return kTRUE;
+            case kClose:
                 CloseWindow();
                 return kTRUE;
Index: /trunk/MagicSoft/Mars/meventdisp/MGEvtDisplay.h
===================================================================
--- /trunk/MagicSoft/Mars/meventdisp/MGEvtDisplay.h	(revision 1022)
+++ /trunk/MagicSoft/Mars/meventdisp/MGEvtDisplay.h	(revision 1023)
@@ -29,4 +29,5 @@
     TGTextEntry *fTxtEvtNr;
 
+    void AddMenuBar();
     void AddTopFramePart1(TGVerticalFrame *frame,
                           const char *filename,
@@ -37,4 +38,6 @@
 
     void AddFrames(const char *filename, const char *treename);
+
+    void SaveAsDialog() const;
 
     void ReadinEvent(UInt_t iEvt);
Index: /trunk/MagicSoft/Mars/mgui/MCamDisplay.cc
===================================================================
--- /trunk/MagicSoft/Mars/mgui/MCamDisplay.cc	(revision 1022)
+++ /trunk/MagicSoft/Mars/mgui/MCamDisplay.cc	(revision 1023)
@@ -2,4 +2,5 @@
 
 #include <math.h>
+#include <fstream.h>
 
 #include <TClonesArray.h>
@@ -308,2 +309,15 @@
     }
 }
+
+// ------------------------------------------------------------------------
+//
+// Save primitive as a C++ statement(s) on output stream out
+//
+void MCamDisplay::SavePrimitive(ofstream &out, Option_t *opt)
+{
+    if (!gROOT->ClassSaved(TCanvas::Class()))
+        fDrawingPad->SavePrimitive(out, opt);
+
+    out << "   " << fDrawingPad->GetName() << "->SetWindowSize(";
+    out << fDrawingPad->GetWw() << "," << fDrawingPad->GetWh() << ");" << endl;
+}
Index: /trunk/MagicSoft/Mars/mgui/MCamDisplay.h
===================================================================
--- /trunk/MagicSoft/Mars/mgui/MCamDisplay.h	(revision 1022)
+++ /trunk/MagicSoft/Mars/mgui/MCamDisplay.h	(revision 1023)
@@ -57,4 +57,5 @@
     void Reset();
     void Draw(Option_t *option="");
+    void SavePrimitive(ofstream &out, Option_t *);
 
     ClassDef(MCamDisplay, 0) // Displays the magic camera
Index: /trunk/MagicSoft/Mars/mgui/MHexagon.cc
===================================================================
--- /trunk/MagicSoft/Mars/mgui/MHexagon.cc	(revision 1022)
+++ /trunk/MagicSoft/Mars/mgui/MHexagon.cc	(revision 1023)
@@ -30,4 +30,5 @@
 #include "MHexagon.h"
 
+#include <fstream.h>
 #include <iostream.h>
 
@@ -51,5 +52,5 @@
 //
 MHexagon::MHexagon(Float_t x, Float_t y, Float_t d)
-: TAttFill(0, 1001), fX(x), fY(y), fD(d)
+: TAttLine(1, 1, 1), TAttFill(0, 1001), fX(x), fY(y), fD(d)
 {
 }
@@ -60,5 +61,5 @@
 //
 MHexagon::MHexagon(MGeomPix &pix)
-: TAttFill(0, 1001)
+: TAttLine(1, 1, 1), TAttFill(0, 1001)
 {
     fX = pix.GetX();
@@ -246,9 +247,33 @@
 void MHexagon::Print(Option_t *) const
 {
-    cout << GetName() << ": x=" << fX << "mm y=" << fY << "mm r=" << fD << "mm" << endl;
-
-    cout << " Color="     << GetLineColor() << ",";
-    cout << " Style="     << GetLineStyle() << ",";
-    cout << " Width="     << GetLineWidth() << ",";
-    cout << " FillColor=" << GetFillColor() << endl;
-}
+    cout << "MHexagon - " << GetName() << ": ";
+    cout << "x=" << fX << "mm y=" << fY << "mm r=" << fD << "mm" << endl;
+
+    cout << " Line:";
+    cout << " Color=" << GetLineColor() << ",";
+    cout << " Style=" << GetLineStyle() << ",";
+    cout << " Width=" << GetLineWidth() << endl;
+    cout << " Fill:";
+    cout << " Color=" << GetFillColor() << ",";
+    cout << " Style=" << GetFillStyle() << endl;
+}
+
+// ------------------------------------------------------------------------
+//
+// Save primitive as a C++ statement(s) on output stream out
+//
+void MHexagon::SavePrimitive(ofstream &out, Option_t *)
+{
+
+    if (gROOT->ClassSaved(MHexagon::Class()))
+       out << "   ";
+    else
+       out << "   MHexagon *";
+
+    out << "hexagon = new MHexagon(" << fX << "," << fY << "," << fD << ");" << endl;
+
+    SaveFillAttributes(out, "hexagon");
+    SaveLineAttributes(out, "hexagon");
+
+    out << "   hexagon->Draw();" << endl;
+}
Index: /trunk/MagicSoft/Mars/mgui/MHexagon.h
===================================================================
--- /trunk/MagicSoft/Mars/mgui/MHexagon.h	(revision 1022)
+++ /trunk/MagicSoft/Mars/mgui/MHexagon.h	(revision 1023)
@@ -44,8 +44,8 @@
     virtual ~MHexagon();
 
-    void Copy (TObject &hexagon);
+    virtual void  Copy(TObject &hexagon);
 
     virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
-    virtual void  DrawHexagon( Float_t x, Float_t y, Float_t d);
+    virtual void  DrawHexagon(Float_t x, Float_t y, Float_t d);
 
     //virtual void  ExecuteEvent(Int_t event, Int_t px, Int_t py);
@@ -55,4 +55,5 @@
     virtual void  PaintHexagon(Float_t x, Float_t y, Float_t d);
     virtual void  Print(Option_t *Option="") const; // *MENU*
+    virtual void  SavePrimitive(ofstream &out, Option_t *);
 
     ClassDef(MHexagon, 0)    // A hexagon for MAGIC
Index: /trunk/MagicSoft/Mars/mhist/MHHillas.cc
===================================================================
--- /trunk/MagicSoft/Mars/mhist/MHHillas.cc	(revision 1022)
+++ /trunk/MagicSoft/Mars/mhist/MHHillas.cc	(revision 1023)
@@ -36,5 +36,5 @@
     // connect all the histogram with the container fHist
     //
-    fAlpha  = new TH1F("Alpha [deg]", "Alpha of Hillas",   90, 0,  90);
+    fAlpha  = new TH1F("Alpha [°]", "Alpha of Hillas",   90, 0,  90);
     fWidth  = new TH1F("Width [mm]",  "Width of Hillas",  100, 0, 300);
     fLength = new TH1F("Length [mm]", "Length of Hillas", 100, 0, 300);
@@ -46,5 +46,5 @@
     fWidth->SetDirectory(NULL);
 
-    fAlpha->GetXaxis()->SetTitle("Alpha [deg]");
+    fAlpha->GetXaxis()->SetTitle("Alpha [°]");
     fLength->GetXaxis()->SetTitle("Length [mm]");
     fDist->GetXaxis()->SetTitle("Dist [mm]");
Index: /trunk/MagicSoft/Mars/mmain/MDataCheck.cc
===================================================================
--- /trunk/MagicSoft/Mars/mmain/MDataCheck.cc	(revision 1022)
+++ /trunk/MagicSoft/Mars/mmain/MDataCheck.cc	(revision 1023)
@@ -28,6 +28,4 @@
 #include <TGButton.h>  // TGTextButton
 
-// ---
-
 #include "MParList.h"
 #include "MTaskList.h"
@@ -42,8 +40,8 @@
 
 enum {
-  M_BUTTON_PEDADC,
-  M_BUTTON_CRADC,
-  M_BUTTON_PEDTDC,
-  M_BUTTON_CRTDC
+    kButPedAdc,
+    kButEvtAdc,
+    kButPedTdc,
+    kButEvtTdc
 };
 
@@ -58,8 +56,8 @@
 : MBrowser(main, p, w, h)
 {
-    TGTextButton *pedadc = new TGTextButton(fTop2, "ADC Spectra of Pedestals", M_BUTTON_PEDADC);
-    TGTextButton *cradc  = new TGTextButton(fTop2, "ADC Specta of Cosmics",    M_BUTTON_CRADC);
-    TGTextButton *pedtdc = new TGTextButton(fTop3, "TDC Spectra of Pedestals", M_BUTTON_PEDTDC);
-    TGTextButton *crtdc  = new TGTextButton(fTop3, "TDC Specta of Cosmics",    M_BUTTON_CRTDC);
+    TGTextButton *pedadc = new TGTextButton(fTop2, "ADC Spectra of Pedestals", kButPedAdc);
+    TGTextButton *cradc  = new TGTextButton(fTop2, "ADC Specta of Cosmics",    kButEvtAdc);
+    TGTextButton *pedtdc = new TGTextButton(fTop3, "TDC Spectra of Pedestals", kButPedTdc);
+    TGTextButton *crtdc  = new TGTextButton(fTop3, "TDC Specta of Cosmics",    kButEvtTdc);
 
     pedadc->Associate(this);
@@ -129,4 +127,6 @@
     magic.SetParList(&plist);
 
+    // ADD ProgressBar, TGHProgressBar::ShowStatus();
+
     //
     // start the loop running
@@ -151,8 +151,8 @@
     switch (parm1)
     {
-    case M_BUTTON_PEDADC:
-    case M_BUTTON_CRADC:
-    case M_BUTTON_PEDTDC:
-    case M_BUTTON_CRTDC:
+    case kButPedAdc:
+    case kButEvtAdc:
+    case kButPedTdc:
+    case kButEvtTdc:
         if (!InputFileSelected())
         {
@@ -163,17 +163,17 @@
         switch (parm1)
         {
-        case M_BUTTON_PEDADC:
+        case kButPedAdc:
             ViewAdcSpectra(fInputFile, "PedEvents");
             return kTRUE;
 
-        case M_BUTTON_CRADC:
+        case kButEvtAdc:
             ViewAdcSpectra(fInputFile, "Events");
             return kTRUE;
 
-        case M_BUTTON_PEDTDC:
+        case kButPedTdc:
             // fOctober.PedTdcSpectra(fInputFile) ;
             return kTRUE;
 
-        case M_BUTTON_CRTDC:
+        case kButEvtTdc:
             return kTRUE;
         }
