Index: trunk/Mars/mhbase/MBinning.cc
===================================================================
--- trunk/Mars/mhbase/MBinning.cc	(revision 9829)
+++ trunk/Mars/mhbase/MBinning.cc	(revision 9851)
@@ -537,5 +537,5 @@
     }
 
-    MH::SetBinning(&h, this);
+    MH::SetBinning(h, *this);
 }
 
Index: trunk/Mars/mhbase/MH.cc
===================================================================
--- trunk/Mars/mhbase/MH.cc	(revision 9829)
+++ trunk/Mars/mhbase/MH.cc	(revision 9851)
@@ -20,5 +20,5 @@
 !   Author(s): Thomas Bretz  07/2001 <mailto:tbretz@astro.uni-wuerzburg.de>
 !
-!   Copyright: MAGIC Software Development, 2000-2008
+!   Copyright: MAGIC Software Development, 2000-2010
 !
 !
@@ -256,10 +256,10 @@
 // labels.
 //
-void MH::SetBinning(TH1 *h, const MBinning *binsx)
+void MH::SetBinning(TH1 &h, const MBinning &binsx)
 {
     //
     // Another strange behaviour: TAxis::Set deletes the axis title!
     //
-    TAxis &x = *h->GetXaxis();
+    TAxis &x = *h.GetXaxis();
 
 #if ROOT_VERSION_CODE < ROOT_VERSION(3,03,03)
@@ -278,5 +278,5 @@
     // TH1D::fNcells must be set correctly.
     //
-    h->SetBins(binsx->GetNumBins(), 0, 1);
+    h.SetBins(binsx.GetNumBins(), 0, 1);
 
     //
@@ -284,5 +284,5 @@
     // in one of the two given histograms
     //
-    x.Set(binsx->GetNumBins(), binsx->GetEdges());
+    x.Set(binsx.GetNumBins(), binsx.GetEdges());
 
     // All this is reset by TAxis::Set
@@ -292,5 +292,5 @@
 #else
     if (!x.GetLabels())
-        h->SetBins(binsx->GetNumBins(), binsx->GetEdges());
+        h.SetBins(binsx.GetNumBins(), binsx.GetEdges());
 #endif
 
@@ -307,11 +307,11 @@
 // the binning is set according to the labels.
 //
-void MH::SetBinning(TH2 *h, const MBinning *binsx, const MBinning *binsy)
-{
-    TAxis &x = *h->GetXaxis();
-    TAxis &y = *h->GetYaxis();
-
-    const MBinning bx(GetBinningForLabels(x, binsx));
-    const MBinning by(GetBinningForLabels(y, binsy));
+void MH::SetBinning(TH2 &h, const MBinning &binsx, const MBinning &binsy)
+{
+    TAxis &x = *h.GetXaxis();
+    TAxis &y = *h.GetYaxis();
+
+    const MBinning bx(GetBinningForLabels(x, &binsx));
+    const MBinning by(GetBinningForLabels(y, &binsy));
 
     //
@@ -337,6 +337,6 @@
     // TH1D::fNcells must be set correctly.
     //
-    h->SetBins(bx.GetNumBins(), 0, 1,
-               by.GetNumBins(), 0, 1);
+    h.SetBins(bx.GetNumBins(), 0, 1,
+              by.GetNumBins(), 0, 1);
 
     //
@@ -355,10 +355,10 @@
     y.SetTimeFormat(tfy);
 #else
-    if (h->InheritsFrom(TProfile2D::Class()))
-    {
-        h->SetBins(bx.GetNumBins(), 0, 1, 
-                   by.GetNumBins(), 0, 1);
-
-        h->SetBinsLength();
+    if (h.InheritsFrom(TProfile2D::Class()))
+    {
+        h.SetBins(bx.GetNumBins(), 0, 1,
+                  by.GetNumBins(), 0, 1);
+
+        h.SetBinsLength();
 
         x.Set(bx.GetNumBins(), bx.GetEdges());
@@ -366,6 +366,6 @@
     }
     else
-        h->SetBins(bx.GetNumBins(), bx.GetEdges(),
-                   by.GetNumBins(), by.GetEdges());
+        h.SetBins(bx.GetNumBins(), bx.GetEdges(),
+                  by.GetNumBins(), by.GetEdges());
 #endif
 
@@ -385,16 +385,16 @@
 // the binning is set according to the labels.
 //
-void MH::SetBinning(TH3 *h, const MBinning *binsx, const MBinning *binsy, const MBinning *binsz)
+void MH::SetBinning(TH3 &h, const MBinning &binsx, const MBinning &binsy, const MBinning &binsz)
 {
     //
     // Another strange behaviour: TAxis::Set deletes the axis title!
     //
-    TAxis &x = *h->GetXaxis();
-    TAxis &y = *h->GetYaxis();
-    TAxis &z = *h->GetZaxis();
-
-    const MBinning bx(GetBinningForLabels(x, binsx));
-    const MBinning by(GetBinningForLabels(y, binsy));
-    const MBinning bz(GetBinningForLabels(z, binsz));
+    TAxis &x = *h.GetXaxis();
+    TAxis &y = *h.GetYaxis();
+    TAxis &z = *h.GetZaxis();
+
+    const MBinning bx(GetBinningForLabels(x, &binsx));
+    const MBinning by(GetBinningForLabels(y, &binsy));
+    const MBinning bz(GetBinningForLabels(z, &binsz));
 
 #if ROOT_VERSION_CODE < ROOT_VERSION(3,03,03)
@@ -422,7 +422,7 @@
     // TH1D::fNcells must be set correctly.
     //
-    h->SetBins(bx.GetNumBins(), 0, 1,
-               by.GetNumBins(), 0, 1,
-               bz.GetNumBins(), 0, 1);
+    h.SetBins(bx.GetNumBins(), 0, 1,
+              by.GetNumBins(), 0, 1,
+              bz.GetNumBins(), 0, 1);
 
     //
@@ -462,9 +462,9 @@
 // Applies given binning (the n+1 edges)  to the axis of a 1D-histogram
 //
-void MH::SetBinning(TH1 *h, const TArrayD &binsx)
+void MH::SetBinning(TH1 &h, const TArrayD &binsx)
 {
     MBinning bx;
     bx.SetEdges(binsx);
-    SetBinning(h, &bx);
+    SetBinning(h, bx);
 }
 
@@ -474,5 +474,5 @@
 // 2D-histogram
 //
-void MH::SetBinning(TH2 *h, const TArrayD &binsx, const TArrayD &binsy)
+void MH::SetBinning(TH2 &h, const TArrayD &binsx, const TArrayD &binsy)
 {
     MBinning bx;
@@ -480,5 +480,5 @@
     bx.SetEdges(binsx);
     by.SetEdges(binsy);
-    SetBinning(h, &bx, &by);
+    SetBinning(h, bx, by);
 }
 
@@ -488,5 +488,5 @@
 // 3D-histogram
 //
-void MH::SetBinning(TH3 *h, const TArrayD &binsx, const TArrayD &binsy, const TArrayD &binsz)
+void MH::SetBinning(TH3 &h, const TArrayD &binsx, const TArrayD &binsy, const TArrayD &binsz)
 {
     MBinning bx;
@@ -496,5 +496,5 @@
     by.SetEdges(binsy);
     bz.SetEdges(binsz);
-    SetBinning(h, &bx, &by, &bz);
+    SetBinning(h, bx, by, bz);
 }
 
@@ -504,11 +504,11 @@
 // of a 1D-histogram
 //
-void MH::SetBinning(TH1 *h, const TAxis *binsx)
-{
-    const Int_t nx = binsx->GetNbins();
+void MH::SetBinning(TH1 &h, const TAxis &binsx)
+{
+    const Int_t nx = binsx.GetNbins();
 
     TArrayD bx(nx+1);
-    for (int i=0; i<nx; i++) bx[i] = binsx->GetBinLowEdge(i+1);
-    bx[nx] = binsx->GetXmax();
+    for (int i=0; i<nx; i++) bx[i] = binsx.GetBinLowEdge(i+1);
+    bx[nx] = binsx.GetXmax();
 
     SetBinning(h, bx);
@@ -520,15 +520,15 @@
 // two axis' of a 2D-histogram
 //
-void MH::SetBinning(TH2 *h, const TAxis *binsx, const TAxis *binsy)
-{
-    const Int_t nx = binsx->GetNbins();
-    const Int_t ny = binsy->GetNbins();
+void MH::SetBinning(TH2 &h, const TAxis &binsx, const TAxis &binsy)
+{
+    const Int_t nx = binsx.GetNbins();
+    const Int_t ny = binsy.GetNbins();
 
     TArrayD bx(nx+1);
     TArrayD by(ny+1);
-    for (int i=0; i<nx; i++) bx[i] = binsx->GetBinLowEdge(i+1);
-    for (int i=0; i<ny; i++) by[i] = binsy->GetBinLowEdge(i+1);
-    bx[nx] = binsx->GetXmax();
-    by[ny] = binsy->GetXmax();
+    for (int i=0; i<nx; i++) bx[i] = binsx.GetBinLowEdge(i+1);
+    for (int i=0; i<ny; i++) by[i] = binsy.GetBinLowEdge(i+1);
+    bx[nx] = binsx.GetXmax();
+    by[ny] = binsy.GetXmax();
 
     SetBinning(h, bx, by);
@@ -540,19 +540,19 @@
 // three axis' of a 3D-histogram
 //
-void MH::SetBinning(TH3 *h, const TAxis *binsx, const TAxis *binsy, const TAxis *binsz)
-{
-    const Int_t nx = binsx->GetNbins();
-    const Int_t ny = binsy->GetNbins();
-    const Int_t nz = binsz->GetNbins();
+void MH::SetBinning(TH3 &h, const TAxis &binsx, const TAxis &binsy, const TAxis &binsz)
+{
+    const Int_t nx = binsx.GetNbins();
+    const Int_t ny = binsy.GetNbins();
+    const Int_t nz = binsz.GetNbins();
 
     TArrayD bx(nx+1);
     TArrayD by(ny+1);
     TArrayD bz(nz+1);
-    for (int i=0; i<nx; i++) bx[i] = binsx->GetBinLowEdge(i+1);
-    for (int i=0; i<ny; i++) by[i] = binsy->GetBinLowEdge(i+1);
-    for (int i=0; i<nz; i++) bz[i] = binsz->GetBinLowEdge(i+1);
-    bx[nx] = binsx->GetXmax();
-    by[ny] = binsy->GetXmax();
-    bz[nz] = binsz->GetXmax();
+    for (int i=0; i<nx; i++) bx[i] = binsx.GetBinLowEdge(i+1);
+    for (int i=0; i<ny; i++) by[i] = binsy.GetBinLowEdge(i+1);
+    for (int i=0; i<nz; i++) bz[i] = binsz.GetBinLowEdge(i+1);
+    bx[nx] = binsx.GetXmax();
+    by[ny] = binsy.GetXmax();
+    bz[nz] = binsz.GetXmax();
 
     SetBinning(h, bx, by, bz);
@@ -564,23 +564,23 @@
 // Both histograms must be of the same type: TH1, TH2 or TH3
 //
-void MH::SetBinning(TH1 *h, const TH1 *x)
-{
-    if (h->InheritsFrom(TH3::Class()) && x->InheritsFrom(TH3::Class()))
-    {
-        SetBinning((TH3*)h, x->GetXaxis(), x->GetYaxis(), x->GetZaxis());
+void MH::CopyBinning(const TH1 &x, TH1 &h)
+{
+    if (h.InheritsFrom(TH3::Class()) && x.InheritsFrom(TH3::Class()))
+    {
+        SetBinning(static_cast<TH3&>(h), *x.GetXaxis(), *x.GetYaxis(), *x.GetZaxis());
         return;
     }
-    if (h->InheritsFrom(TH3::Class()) || x->InheritsFrom(TH3::Class()))
+    if (h.InheritsFrom(TH3::Class()) || x.InheritsFrom(TH3::Class()))
         return;
-    if (h->InheritsFrom(TH2::Class()) && x->InheritsFrom(TH2::Class()))
-    {
-        SetBinning((TH2*)h, x->GetXaxis(), x->GetYaxis());
+    if (h.InheritsFrom(TH2::Class()) && x.InheritsFrom(TH2::Class()))
+    {
+        SetBinning(static_cast<TH2&>(h), *x.GetXaxis(), *x.GetYaxis());
         return;
     }
-    if (h->InheritsFrom(TH2::Class()) || x->InheritsFrom(TH2::Class()))
+    if (h.InheritsFrom(TH2::Class()) || x.InheritsFrom(TH2::Class()))
         return;
-    if (h->InheritsFrom(TH1::Class()) && x->InheritsFrom(TH1::Class()))
-    {
-        SetBinning(h, x->GetXaxis());
+    if (h.InheritsFrom(TH1::Class()) && x.InheritsFrom(TH1::Class()))
+    {
+        SetBinning(h, *x.GetXaxis());
         return;
     }
@@ -652,25 +652,24 @@
 // Scales the binning of one, two or three axis of a histogram by a float f
 //
-void MH::ScaleAxis(TH1 *h, Double_t fx, Double_t fy, Double_t fz)
-{
-    if (h->InheritsFrom(TH3::Class()))
-    {
-        SetBinning((TH3*)h,
-                   ScaleAxis(*h->GetXaxis(), fx),
-                   ScaleAxis(*h->GetYaxis(), fy),
-                   ScaleAxis(*h->GetZaxis(), fz));
+void MH::ScaleAxis(TH1 &h, Double_t fx, Double_t fy, Double_t fz)
+{
+    if (h.InheritsFrom(TH3::Class()))
+    {
+        SetBinning(static_cast<TH3&>(h),
+                   ScaleAxis(*h.GetXaxis(), fx),
+                   ScaleAxis(*h.GetYaxis(), fy),
+                   ScaleAxis(*h.GetZaxis(), fz));
         return;
     }
 
-    if (h->InheritsFrom(TH2::Class()))
-    {
-        SetBinning((TH2*)h,
-                   ScaleAxis(*h->GetXaxis(), fx),
-                   ScaleAxis(*h->GetYaxis(), fy));
+    if (h.InheritsFrom(TH2::Class()))
+    {
+        SetBinning(static_cast<TH2&>(h),
+                   ScaleAxis(*h.GetXaxis(), fx),
+                   ScaleAxis(*h.GetYaxis(), fy));
         return;
     }
 
-    if (h->InheritsFrom(TH1::Class()))
-        SetBinning(h, ScaleAxis(*h->GetXaxis(), fx));
+    SetBinning(h, ScaleAxis(*h.GetXaxis(), fx));
 }
 
@@ -683,9 +682,9 @@
 // no binning is applied.
 //
-Bool_t MH::ApplyBinning(const MParList &plist, TString name, TH1 *h)
-{
-    if (h->InheritsFrom(TH2::Class()) || h->InheritsFrom(TH3::Class()))
-    {
-        gLog << warn << "MH::ApplyBinning: '" << h->GetName() << "' is not a basic TH1 object... no binning applied." << endl;
+Bool_t MH::ApplyBinning(const MParList &plist, const TString name, TH1 &h)
+{
+    if (h.InheritsFrom(TH2::Class()) || h.InheritsFrom(TH3::Class()))
+    {
+        gLog << warn << "MH::ApplyBinning: '" << h.GetName() << "' is not a basic TH1 object... no binning applied." << endl;
         return kFALSE;
     }
@@ -704,9 +703,9 @@
     }
 
-    SetBinning(h, bins);
+    SetBinning(h, *bins);
     return kTRUE;
 }
 
-Bool_t MH::ApplyBinning(const MParList &plist, TString x, TString y, TH2 *h)
+Bool_t MH::ApplyBinning(const MParList &plist, const TString x, const TString y, TH2 &h)
 {
     const MBinning *binsx = (MBinning*)plist.FindObject("Binning"+x);
@@ -738,13 +737,13 @@
 
     MBinning binsxx, binsyy;
-    binsxx.SetEdges(*h, 'x');
-    binsyy.SetEdges(*h, 'y');
-
-    SetBinning(h, binsx?binsx:&binsxx, binsy?binsy:&binsyy);
+    binsxx.SetEdges(h, 'x');
+    binsyy.SetEdges(h, 'y');
+
+    SetBinning(h, binsx?*binsx:binsxx, binsy?*binsy:binsyy);
 
     return kTRUE;
 }
 
-Bool_t MH::ApplyBinning(const MParList &plist, TString x, TString y, TString z, TH3 *h)
+Bool_t MH::ApplyBinning(const MParList &plist, const TString x, const TString y, const TString z, TH3 &h)
 {
     const MBinning *binsx = (MBinning*)plist.FindObject("Binning"+x);
@@ -786,9 +785,9 @@
 
     MBinning binsxx, binsyy, binszz;
-    binsxx.SetEdges(*h, 'x');
-    binsyy.SetEdges(*h, 'y');
-    binszz.SetEdges(*h, 'z');
-
-    SetBinning(h, binsx?binsx:&binsxx, binsy?binsy:&binsyy, binsz?binsz:&binszz);
+    binsxx.SetEdges(h, 'x');
+    binsyy.SetEdges(h, 'y');
+    binszz.SetEdges(h, 'z');
+
+    SetBinning(h, binsx?*binsx:binsxx, binsy?*binsy:binsyy, binsz?*binsz:binszz);
 
     return kTRUE;
@@ -1189,7 +1188,7 @@
 //  Returns the new (real) number of bins
 //
-Int_t MH::StripZeros(TH1 *h, Int_t nbins)
-{
-    TAxis &axe = *h->GetXaxis();
+Int_t MH::StripZeros(TH1 &h, Int_t nbins)
+{
+    TAxis &axe = *h.GetXaxis();
 
     const Int_t min1   = axe.GetFirst();
@@ -1205,5 +1204,5 @@
     Int_t min2 = 0;
     for (int i=min1; i<=max1; i++)
-        if (h->GetBinContent(i) != 0)
+        if (h.GetBinContent(i) != 0)
         {
             min2 = i;
@@ -1219,5 +1218,5 @@
     Int_t max2 = 0;
     for (int i=max1; i>=min2; i--)
-        if (h->GetBinContent(i) != 0)
+        if (h.GetBinContent(i) != 0)
         {
             max2 = i;
@@ -1229,6 +1228,6 @@
     // But this workaround helps quite fine
     //
-    Axis_t min = h->GetBinLowEdge(min2);
-    Axis_t max = h->GetBinLowEdge(max2)+h->GetBinWidth(max2);
+    Axis_t min = h.GetBinLowEdge(min2);
+    Axis_t max = h.GetBinLowEdge(max2)+h.GetBinWidth(max2);
 
     Int_t nbins2 = max2-min2;
@@ -1238,8 +1237,8 @@
     if (nbins > 0)
       {
-        const Int_t ngroup = (Int_t)(nbins2*h->GetNbinsX()/nbins/(max1-min1));
+        const Int_t ngroup = (Int_t)(nbins2*h.GetNbinsX()/nbins/(max1-min1));
         if (ngroup > 1)
           {
-            h->Rebin(ngroup);
+            h.Rebin(ngroup);
             nbins2 /= ngroup;
           }
Index: trunk/Mars/mhbase/MH.h
===================================================================
--- trunk/Mars/mhbase/MH.h	(revision 9829)
+++ trunk/Mars/mhbase/MH.h	(revision 9851)
@@ -21,5 +21,6 @@
 class MBinning;
 class MParList;
-
+#include <TH2.h>
+#include <TH3.h>
 class MH : public MParContainer
 {
@@ -64,31 +65,48 @@
     static void RemoveFromPad(const char *name);
 
-    // FIXME: * --> & !!!
+    // Functions to applay new binnings to histograms
+    static void SetBinning(TH1 &h, const MBinning &binsx);
+    static void SetBinning(TH2 &h, const MBinning &binsx, const MBinning &binsy);
+    static void SetBinning(TH3 &h, const MBinning &binsx, const MBinning &binsy, const MBinning &binsz);
 
-    static void SetBinning(TH1 *h, const MBinning *binsx);
-    static void SetBinning(TH2 *h, const MBinning *binsx, const MBinning *binsy);
-    static void SetBinning(TH3 *h, const MBinning *binsx, const MBinning *binsy, const MBinning *binsz);
+    static void SetBinning(TH1 &h, const TArrayD &binsx);
+    static void SetBinning(TH2 &h, const TArrayD &binsx, const TArrayD &binsy);
+    static void SetBinning(TH3 &h, const TArrayD &binsx, const TArrayD &binsy, const TArrayD &binsz);
 
-    static void SetBinning(TH1 *h, const TArrayD &binsx);
-    static void SetBinning(TH2 *h, const TArrayD &binsx, const TArrayD &binsy);
-    static void SetBinning(TH3 *h, const TArrayD &binsx, const TArrayD &binsy, const TArrayD &binsz);
+    static void SetBinning(TH1 &h, const TAxis &binsx);
+    static void SetBinning(TH2 &h, const TAxis &binsx, const TAxis &binsy);
+    static void SetBinning(TH3 &h, const TAxis &binsx, const TAxis &binsy, const TAxis &binsz);
 
-    static void SetBinning(TH1 *h, const TAxis *binsx);
-    static void SetBinning(TH2 *h, const TAxis *binsx, const TAxis *binsy);
-    static void SetBinning(TH3 *h, const TAxis *binsx, const TAxis *binsy, const TAxis *binsz);
+    static void CopyBinning(const TH1 &x, TH1 &h);
 
-    static void SetBinning(TH1 *h, const TH1 *x);
+    static Bool_t ApplyBinning(const MParList &plist, const TString x, TH1 &h);
+    static Bool_t ApplyBinning(const MParList &plist, const TString x, TString y, TH2 &h);
+    static Bool_t ApplyBinning(const MParList &plist, const TString x, TString y, TString z, TH3 &h);
 
+    // Warpper functions not to break macros (new functions take references)
+    static void SetBinning(TH1 *h, const MBinning *binsx) { SetBinning(*h, *binsx); }
+    static void SetBinning(TH2 *h, const MBinning *binsx, const MBinning *binsy) { SetBinning(*h, *binsx, *binsy); }
+    static void SetBinning(TH3 *h, const MBinning *binsx, const MBinning *binsy, const MBinning *binsz) { SetBinning(*h, *binsx, *binsy, *binsz); }
+
+    static void SetBinning(TH1 *h, const TArrayD &binsx) { SetBinning(*h, binsx); }
+    static void SetBinning(TH2 *h, const TArrayD &binsx, const TArrayD &binsy) { SetBinning(*h, binsx, binsy); }
+    static void SetBinning(TH3 *h, const TArrayD &binsx, const TArrayD &binsy, const TArrayD &binsz)  { SetBinning(*h, binsx, binsy, binsz); }
+
+    static void SetBinning(TH1 *h, const TAxis *binsx) { SetBinning(*h, *binsx); }
+    static void SetBinning(TH2 *h, const TAxis *binsx, const TAxis *binsy) { SetBinning(*h, *binsx, *binsy); }
+    static void SetBinning(TH3 *h, const TAxis *binsx, const TAxis *binsy, const TAxis *binsz) { SetBinning(*h, *binsx, *binsy, *binsz); }
+
+    static Bool_t ApplyBinning(const MParList &plist, TString x, TH1 *h) { return ApplyBinning(plist, x, *h); }
+    static Bool_t ApplyBinning(const MParList &plist, TString x, TString y, TH2 *h) { return ApplyBinning(plist, x, y, *h); }
+    static Bool_t ApplyBinning(const MParList &plist, TString x, TString y, TString z, TH3 *h) { return ApplyBinning(plist, x, y, z, *h); }
+
+    // Other helpers for histogram treatment
     static void SetBinomialErrors(TH1 &hres, const TH1 &h1, const TH1 &h2, Double_t c1=1, Double_t c2=1);
 
     static void RemoveFirstBin(TH1 &h);
 
-    static Bool_t ApplyBinning(const MParList &plist, TString x, TH1 *h);
-    static Bool_t ApplyBinning(const MParList &plist, TString x, TString y, TH2 *h);
-    static Bool_t ApplyBinning(const MParList &plist, TString x, TString y, TString z, TH3 *h);
-
     static void    ScaleArray(TArrayD &bins, Double_t f);
     static TArrayD ScaleAxis(TAxis &axe, Double_t f);
-    static void    ScaleAxis(TH1 *bins, Double_t fx=1, Double_t fy=1, Double_t fz=1);
+    static void    ScaleAxis(TH1 &bins, Double_t fx=1, Double_t fy=1, Double_t fz=1);
 
     static Double_t GetBinCenterLog(const TAxis &axe, Int_t nbin);
@@ -109,5 +127,5 @@
     static void FindGoodLimits(Int_t nbins, Int_t &newbins, Double_t &xmin, Double_t &xmax, Bool_t isInteger);
     static Double_t GetMinimumGT(const TH1 &h, Double_t gt=0);
-    static Int_t StripZeros(TH1 *h, Int_t nbins);
+    static Int_t StripZeros(TH1 &h, Int_t nbins);
 
     static TH1I* ProjectArray(const TArrayF &array, Int_t nbins=30,
Index: trunk/Mars/mhbase/MH3.cc
===================================================================
--- trunk/Mars/mhbase/MH3.cc	(revision 9829)
+++ trunk/Mars/mhbase/MH3.cc	(revision 9851)
@@ -682,11 +682,11 @@
     {
     case 1:
-        SetBinning(fHist, binsx);
+        SetBinning(*fHist, *binsx);
         return kTRUE;
     case 2:
-        SetBinning(static_cast<TH2*>(fHist), binsx, binsy);
+        SetBinning(static_cast<TH2&>(*fHist), *binsx, *binsy);
         return kTRUE;
     case 3:
-        SetBinning(static_cast<TH3*>(fHist), binsx, binsy, binsz);
+        SetBinning(static_cast<TH3&>(*fHist), *binsx, *binsy, *binsz);
         return kTRUE;
     }
Index: trunk/Mars/mhbase/MHMatrix.cc
===================================================================
--- trunk/Mars/mhbase/MHMatrix.cc	(revision 9829)
+++ trunk/Mars/mhbase/MHMatrix.cc	(revision 9851)
@@ -777,5 +777,5 @@
     hta.SetName("hta");
     hta.SetTitle("Distribution after reduction");
-    SetBinning(&hta, &hth);
+    CopyBinning(hth, hta);
 
     for (Int_t i=0; i<fM.GetNrows(); i++)
@@ -888,5 +888,5 @@
     TH1F hth;
     hth.SetNameTitle("th", "Distribution before reduction");
-    SetBinning(&hth, &thsh);
+    CopyBinning(thsh, hth);
     hth.SetDirectory(NULL);
     for (Int_t j=0; j<nrows; j++)
@@ -896,5 +896,5 @@
     TH1F hthd;
     hthd.SetNameTitle("thd", "Correction factors");
-    SetBinning(&hthd, &thsh);
+    CopyBinning(thsh, hthd);
     hthd.SetDirectory(NULL);
     hthd.Divide(&thsh, &hth, 1, 1);
