Index: trunk/MagicSoft/Mars/mhbase/MBinning.cc
===================================================================
--- trunk/MagicSoft/Mars/mhbase/MBinning.cc	(revision 4840)
+++ trunk/MagicSoft/Mars/mhbase/MBinning.cc	(revision 4891)
@@ -44,6 +44,6 @@
 using namespace std;
 
-static const TString gsDefName  = "MBinning";
-static const TString gsDefTitle = "Container describing the binning of an axis";
+const TString MBinning::gsDefName  = "MBinning";
+const TString MBinning::gsDefTitle = "Container describing the binning of an axis";
 
 // --------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/mhbase/MBinning.h
===================================================================
--- trunk/MagicSoft/Mars/mhbase/MBinning.h	(revision 4840)
+++ trunk/MagicSoft/Mars/mhbase/MBinning.h	(revision 4891)
@@ -15,5 +15,10 @@
 class MBinning : public MParContainer
 {
+public:
+    static const TString gsDefName;
+    static const TString gsDefTitle;
+
 private:
+
     TArrayD fEdges;
 
@@ -80,4 +85,6 @@
     Bool_t IsUserArray() const { return fType==kIsUserArray; }
 
+    Bool_t HasTitle() const { return gsDefTitle!=fTitle; }
+
     void Apply(TH1 &) const;
 
Index: trunk/MagicSoft/Mars/mhbase/MH3.cc
===================================================================
--- trunk/MagicSoft/Mars/mhbase/MH3.cc	(revision 4840)
+++ trunk/MagicSoft/Mars/mhbase/MH3.cc	(revision 4891)
@@ -48,4 +48,16 @@
 // SetScaleY and SetScaleZ.
 //
+//
+// Axis titles
+// ===========
+//
+// 1) If no other title is given the rule for this axis is used.
+// 2) If the MBinning used for this axis has a non-default Title
+//    (MBinning::HasTitle) this title is used for the corresponding axis
+// 3) If the MH3 has a non-default title (MH3::SetTitle called)
+//    this title is set as the histogram title. It can be used to overwrite
+//    the axis titles. For more information see TH1::SetTitle, eg.
+//       SetTitle("MyHist;x[mm];y[cm];Counts");
+//
 // For example:
 //   MH3 myhist("MHillas.fLength");
@@ -83,6 +95,6 @@
 using namespace std;
 
-static const TString gsDefName  = "MH3";
-static const TString gsDefTitle = "Container for a %dD Mars Histogram";
+const TString MH3::gsDefName  = "MH3";
+const TString MH3::gsDefTitle = "Container for a n-D Mars Histogram";
 
 // --------------------------------------------------------------------------
@@ -113,5 +125,5 @@
 
     fName  = gsDefName;
-    fTitle = Form(gsDefTitle.Data(), fDimension);
+    fTitle = gsDefTitle;
 
     if (fHist)
@@ -141,5 +153,5 @@
 
     fName  = gsDefName;
-    fTitle = Form(gsDefTitle.Data(), 1);
+    fTitle = gsDefTitle;
 
     fHist->UseCurrentStyle();
@@ -168,5 +180,5 @@
 
     fName  = gsDefName;
-    fTitle = Form(gsDefTitle.Data(), 2);
+    fTitle = gsDefTitle;
 
     fHist->UseCurrentStyle();
@@ -195,5 +207,5 @@
 
     fName  = gsDefName;
-    fTitle = Form(gsDefTitle.Data(), 3);
+    fTitle = gsDefTitle;
 
     fHist->UseCurrentStyle();
@@ -266,9 +278,12 @@
             return kFALSE;
         }
+        if (fData[2] && !fData[2]->PreProcess(plist))
+            return kFALSE;
+        if (fData[2])
+            fHist->SetZTitle(fData[2]->GetTitle());
+        if (binsz->HasTitle())
+            fHist->SetZTitle(binsz->GetTitle());
         if (binsz->IsLogarithmic())
             fHist->SetBit(kIsLogz);
-        if (fData[2]) fHist->SetZTitle(fData[2]->GetTitle());
-        if (fData[2] && !fData[2]->PreProcess(plist))
-            return kFALSE;
     case 2:
         binsy = (MBinning*)plist->FindObject(bname+"Y", "MBinning");
@@ -278,9 +293,12 @@
             return kFALSE;
         }
+        if (fData[1] && !fData[1]->PreProcess(plist))
+            return kFALSE;
+        if (fData[1])
+            fHist->SetYTitle(fData[1]->GetTitle());
+        if (binsy->HasTitle())
+            fHist->SetYTitle(binsy->GetTitle());
         if (binsy->IsLogarithmic())
             fHist->SetBit(kIsLogy);
-        if (fData[1]) fHist->SetYTitle(fData[1]->GetTitle());
-        if (fData[1] && !fData[1]->PreProcess(plist))
-            return kFALSE;
     case 1:
         binsx = (MBinning*)plist->FindObject(bname+"X", "MBinning");
@@ -297,13 +315,22 @@
 
         }
+        if (fData[0] && !fData[0]->PreProcess(plist))
+            return kFALSE;
+        if (fData[0]!=NULL)
+            fHist->SetXTitle(fData[0]->GetTitle());
+        if (binsx->HasTitle())
+            fHist->SetXTitle(binsx->GetTitle());
         if (binsx->IsLogarithmic())
             fHist->SetBit(kIsLogx);
-
-      if (fData[0]!=NULL)  fHist->SetXTitle(fData[0]->GetTitle());
-        if (fData[0] && !fData[0]->PreProcess(plist))
-            return kFALSE;
     }
 
     fHist->SetName(fName);
+    fHist->SetDirectory(0);
+
+    if (fTitle!=gsDefTitle)
+    {
+        fHist->SetTitle(fTitle);
+        return kTRUE;
+    }
 
     TString title("Histogram for ");
@@ -325,6 +352,7 @@
         return kTRUE;
     }
-    cout << "Still alive...?" << endl;
-    return kTRUE;
+
+    *fLog << err << "ERROR - MH3 has " << fDimension << " dimensions!" << endl;
+    return kFALSE;
 }
 
@@ -335,5 +363,9 @@
 void MH3::SetName(const char *name)
 {
-    fHist->SetName(name);
+    if (fHist)
+    {
+        fHist->SetName(name);
+        fHist->SetDirectory(0);
+    }
     MParContainer::SetName(name);
 }
@@ -345,5 +377,6 @@
 void MH3::SetTitle(const char *title)
 {
-    fHist->SetTitle(title);
+    if (fHist)
+        fHist->SetTitle(title);
     MParContainer::SetTitle(title);
 }
@@ -644,5 +677,5 @@
         out << "   " << name << ".SetName(\"" << fName << "\");" << endl;
 
-    if (fTitle!=Form(gsDefTitle.Data(), fDimension))
+    if (fTitle!=gsDefTitle)
         out << "   " << name << ".SetTitle(\"" << fTitle << "\");" << endl;
 
Index: trunk/MagicSoft/Mars/mhbase/MH3.h
===================================================================
--- trunk/MagicSoft/Mars/mhbase/MH3.h	(revision 4840)
+++ trunk/MagicSoft/Mars/mhbase/MH3.h	(revision 4891)
@@ -15,4 +15,8 @@
 class MH3 : public MH
 {
+private:
+    static const TString gsDefName;
+    static const TString gsDefTitle;
+
 protected:
     // Could be const but root < 3.02/06 doesn't like this...
