Index: trunk/Mars/Changelog
===================================================================
--- trunk/Mars/Changelog	(revision 9850)
+++ trunk/Mars/Changelog	(revision 9851)
@@ -28,4 +28,20 @@
      - added new data members to Clear function
 
+   * mimage/MHHillas.cc, mimage/MHHillasExt.cc, mimage/MHNewImagePar.cc,
+     mimage/MHVsSize.cc, mimage/MHHillasSrc.cc, mimage/MHImagePar.cc,
+     mhcalib/MHGausEvents.cc, mhflux/MHThetaSq.cc,  mhflux/MHAlpha.cc,
+     mhflux/MHFalseSource.cc, mhflux/MHEffectiveOnTime.cc,
+     mhflux/MHCollectionArea.cc, mhflux/MHThetaSqN.cc, mhflux/MHDisp.cc,
+     mhflux/MHThreshold.cc, mhflux/MHEnergyEst.cc, mjtrain/MJTrainDisp.cc,
+     mtools/MHSimulatedAnnealing.cc, mmuon/MHSingleMuon.cc,
+     mmuon/MHMuonPar.cc, mpointing/MHSrcPosCam.cc, 
+     mpedestal/MHPedestalCor.cc, mhist/MHCamEventRot.cc, 
+     mhist/MHStarMap.cc, mjobs/MJSpectrum.cc, mbadpixels/MHBadPixels.cc,
+     mfbase/MFEventSelector2.cc, mhbase/MBinning.cc, mhbase/MH.[h,cc], 
+     mhbase/MH3.cc, mhbase/MHMatrix.cc, msim/MHPhotonEvent.cc:
+     - changes MH::SetBinning and similar functions to take references 
+       instead of pointers
+     - for the time being wrappers are kept not to break macros
+
 
 
Index: trunk/Mars/NEWS
===================================================================
--- trunk/Mars/NEWS	(revision 9850)
+++ trunk/Mars/NEWS	(revision 9851)
@@ -21,4 +21,10 @@
    * Added a new class MJTrainImpact to estimate the impact parameter by use
      of a random forest
+
+   * Changed MH::SetBinning and similar functions to take references instead
+     of pointers. Except for SetBinning(TH1&, const TH1&), which was renamed
+     to CopyBinning(const TH1&, TH1&) wrapper functions are provided so that
+     old macros should still work.
+     WARNING: These wrappers might be removed in future releases.
 
  ;ceres:
Index: trunk/Mars/mbadpixels/MHBadPixels.cc
===================================================================
--- trunk/Mars/mbadpixels/MHBadPixels.cc	(revision 9850)
+++ trunk/Mars/mbadpixels/MHBadPixels.cc	(revision 9851)
@@ -80,6 +80,6 @@
     fBinsPix->SetEdges(578, -0.5, 577.5);    // pixel id
 
-    SetBinning(fBadId, fBinsTheta, fBinsPix);
-    SetBinning(fBadN,  fBinsTheta, fBinsPix);
+    SetBinning(*fBadId, *fBinsTheta, *fBinsPix);
+    SetBinning(*fBadN,  *fBinsTheta, *fBinsPix);
 
     //-----------------------------------------
@@ -151,10 +151,9 @@
     const UInt_t npix1 = fPedPhot->GetSize()+1;
     //*fLog << "MHBadPixels::SetupFill(); npix1 = " << npix1 << endl;
-    MBinning binspix("BinningPixel");
-    binspix.SetEdges(npix1, -0.5, npix1-0.5);
+    const MBinning binspix(npix1, -0.5, npix1-0.5);
 
     // Set binnings in histograms
-    SetBinning(fBadId, binstheta, &binspix);
-    SetBinning(fBadN,  binstheta, &binspix);
+    SetBinning(*fBadId, *binstheta, binspix);
+    SetBinning(*fBadN,  *binstheta, binspix);
 
     *fLog << "MHBadPixels::SetupFill(); binnings were set" << endl;
Index: trunk/Mars/mfbase/MFEventSelector2.cc
===================================================================
--- trunk/Mars/mfbase/MFEventSelector2.cc	(revision 9850)
+++ trunk/Mars/mfbase/MFEventSelector2.cc	(revision 9851)
@@ -196,8 +196,8 @@
 
     // duplicate the fHistNom histogram
-    hist = (MH3*)fHistNom->New();
+    hist = static_cast<MH3*>(fHistNom->New());
 
     // copy binning from one histogram to the other one
-    MH::SetBinning(&hist->GetHist(), &fHistNom->GetHist());
+    MH::SetBinning(hist->GetHist(), fHistNom->GetHist());
 
     return hist->GetHist();
Index: trunk/Mars/mhbase/MBinning.cc
===================================================================
--- trunk/Mars/mhbase/MBinning.cc	(revision 9850)
+++ 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 9850)
+++ 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 9850)
+++ 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 9850)
+++ 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 9850)
+++ 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);
Index: trunk/Mars/mhcalib/MHGausEvents.cc
===================================================================
--- trunk/Mars/mhcalib/MHGausEvents.cc	(revision 9850)
+++ trunk/Mars/mhcalib/MHGausEvents.cc	(revision 9851)
@@ -674,5 +674,5 @@
   // the _less_ bins, you have!)
   //
-  StripZeros(&fHGausHist,
+  StripZeros(fHGausHist,
              fBinsAfterStripping ? fBinsAfterStripping 
              : (fNbins > 1000 ? fNbins/10 : 0));
Index: trunk/Mars/mhflux/MHAlpha.cc
===================================================================
--- trunk/Mars/mhflux/MHAlpha.cc	(revision 9850)
+++ trunk/Mars/mhflux/MHAlpha.cc	(revision 9851)
@@ -142,5 +142,5 @@
     binsa.Apply(fHistTime);
 
-    MH::SetBinning(&fHist, &binst, &binse, &binsa);
+    MH::SetBinning(fHist, binst, binse, binsa);
 }
 
@@ -334,5 +334,5 @@
     binst.Apply(fHTheta);
     binsa.Apply(fHistTime);
-    MH::SetBinning(&fHist, &binst, &binse, &binsa);
+    MH::SetBinning(fHist, binst, binse, binsa);
 
     MAlphaFitter *fit = (MAlphaFitter*)pl->FindObject("MAlphaFitter");
@@ -353,6 +353,5 @@
     // If this is the first call we have to initialize the time-histogram
     //
-    MBinning bins;
-    bins.SetEdges(1, t.GetAxisTime()-60, t.GetAxisTime());
+    const MBinning bins(1, t.GetAxisTime()-60, t.GetAxisTime());
     bins.Apply(fHTime);
 
Index: trunk/Mars/mhflux/MHCollectionArea.cc
===================================================================
--- trunk/Mars/mhflux/MHCollectionArea.cc	(revision 9850)
+++ trunk/Mars/mhflux/MHCollectionArea.cc	(revision 9851)
@@ -109,6 +109,6 @@
     binse.Apply(fHEnergy);
 
-    MH::SetBinning(&fHistSel, &binst, &binse);
-    MH::SetBinning(&fHistAll, &binst, &binse);
+    MH::SetBinning(fHistSel, binst, binse);
+    MH::SetBinning(fHistAll, binst, binse);
 
     // For some unknown reasons this must be called after
@@ -202,6 +202,6 @@
     binse.Apply(fHEnergy);
 
-    MH::SetBinning(&fHistSel, &binst, &binse);
-    MH::SetBinning(&fHistAll, &binst, &binse);
+    MH::SetBinning(fHistSel, binst, binse);
+    MH::SetBinning(fHistAll, binst, binse);
 
     fMcAreaRadius   = -1;
Index: trunk/Mars/mhflux/MHDisp.cc
===================================================================
--- trunk/Mars/mhflux/MHDisp.cc	(revision 9850)
+++ trunk/Mars/mhflux/MHDisp.cc	(revision 9851)
@@ -132,10 +132,10 @@
     binsx.SetEdges(fHist, 'x');
     binsy.SetEdges(fHist, 'y');
-    MH::SetBinning(&fHistBg, &binsx, &binsy);
+    MH::SetBinning(fHistBg, binsx, binsy);
 
     if (!fHistOff)
     {
-        MH::SetBinning(&fHistBg1, &binsx, &binsy);
-        MH::SetBinning(&fHistBg2, &binsx, &binsy);
+        MH::SetBinning(fHistBg1, binsx, binsy);
+        MH::SetBinning(fHistBg2, binsx, binsy);
     }
 
Index: trunk/Mars/mhflux/MHEffectiveOnTime.cc
===================================================================
--- trunk/Mars/mhflux/MHEffectiveOnTime.cc	(revision 9850)
+++ trunk/Mars/mhflux/MHEffectiveOnTime.cc	(revision 9851)
@@ -435,5 +435,5 @@
     btime.SetEdges(50, 0, 0.1);
 
-    MH::SetBinning(&fH2DeltaT, &btime, &btheta);
+    MH::SetBinning(fH2DeltaT, btime, btheta);
 
     btime.Apply(fH1DeltaT);
@@ -480,5 +480,5 @@
    }
    if (binstheta && binsdtime)
-       SetBinning(&fH2DeltaT, binsdtime, binstheta);
+       SetBinning(fH2DeltaT, *binsdtime, *binstheta);
 
    fTotalTime = 0;
Index: trunk/Mars/mhflux/MHEnergyEst.cc
===================================================================
--- trunk/Mars/mhflux/MHEnergyEst.cc	(revision 9850)
+++ trunk/Mars/mhflux/MHEnergyEst.cc	(revision 9851)
@@ -113,9 +113,9 @@
     binsi.SetEdges(1, 0, 1000);
 
-    SetBinning(&fHEnergy,     &binse, &binse, &binst);
-    SetBinning(&fHImpact,     &binsi, &binsr);
-
-    SetBinning(&fHResolutionEst, &binse, &binsr);
-    SetBinning(&fHResolutionMC,  &binse, &binsr);
+    SetBinning(fHEnergy, binse, binse, binst);
+    SetBinning(fHImpact, binsi, binsr);
+
+    SetBinning(fHResolutionEst, binse, binsr);
+    SetBinning(fHResolutionMC,  binse, binsr);
 
     // For some unknown reasons this must be called after
@@ -165,9 +165,9 @@
     binsr.SetEdges(*plist, "BinningEnergyRes");
 
-    SetBinning(&fHEnergy,     &binse, &binse, &binst);
-    SetBinning(&fHImpact,     &binsi, &binsr);
-
-    SetBinning(&fHResolutionEst, &binse, &binsr);
-    SetBinning(&fHResolutionMC,  &binse, &binsr);
+    SetBinning(fHEnergy, binse, binse, binst);
+    SetBinning(fHImpact, binsi, binsr);
+
+    SetBinning(fHResolutionEst, binse, binsr);
+    SetBinning(fHResolutionMC,  binse, binsr);
 
     fChisq = 0;
Index: trunk/Mars/mhflux/MHFalseSource.cc
===================================================================
--- trunk/Mars/mhflux/MHFalseSource.cc	(revision 9850)
+++ trunk/Mars/mhflux/MHFalseSource.cc	(revision 9851)
@@ -258,5 +258,5 @@
 
     if (fHistOff)
-        MH::SetBinning(&fHist, fHistOff);
+        MH::SetBinning(fHist, *fHistOff);
     else
     {
@@ -269,10 +269,9 @@
             const Float_t r = (geom ? geom->GetMaxRadius()/3 : 200)*fMm2Deg;
 
-            MBinning b;
-            b.SetEdges(20, -r, r);
-            SetBinning(&fHist, &b, &b, &binsa);
+            const MBinning b(20, -r, r);
+            SetBinning(fHist, b, b, binsa);
         }
         else
-            SetBinning(&fHist, bins, bins, &binsa);
+            SetBinning(fHist, *bins, *bins, binsa);
     }
 
@@ -502,5 +501,5 @@
 
     TH2D h;
-    MH::SetBinning(&h, h2);
+    MH::SetBinning(h, *h2);
 
     // Divide by number of entries in off region (of off-data)
Index: trunk/Mars/mhflux/MHThetaSq.cc
===================================================================
--- trunk/Mars/mhflux/MHThetaSq.cc	(revision 9850)
+++ trunk/Mars/mhflux/MHThetaSq.cc	(revision 9851)
@@ -95,5 +95,5 @@
     binsa.Apply(fHistTime);
 
-    MH::SetBinning(&fHist, &binst, &binse, &binsa);
+    MH::SetBinning(fHist, binst, binse, binsa);
 }
 
@@ -132,5 +132,5 @@
     // Apply binning
     binsa.Apply(fHistTime);
-    MH::SetBinning(&fHist, &binst, &binse, &binsa);
+    MH::SetBinning(fHist, binst, binse, binsa);
 
     // Remark: Binnings might be overwritten in MHAlpha::SetupFill
Index: trunk/Mars/mhflux/MHThetaSqN.cc
===================================================================
--- trunk/Mars/mhflux/MHThetaSqN.cc	(revision 9850)
+++ trunk/Mars/mhflux/MHThetaSqN.cc	(revision 9851)
@@ -98,5 +98,5 @@
     binsa.Apply(fHistTime);
 
-    MH::SetBinning(&fHist, &binst, &binse, &binsa);
+    MH::SetBinning(fHist, binst, binse, binsa);
 
     fParameter = new MParameterD;
@@ -142,5 +142,5 @@
     // Apply binning
     binsa.Apply(fHistTime);
-    MH::SetBinning(&fHist, &binst, &binse, &binsa);
+    MH::SetBinning(fHist, binst, binse, binsa);
 
     // Remark: Binnings might be overwritten in MHAlpha::SetupFill
Index: trunk/Mars/mhflux/MHThreshold.cc
===================================================================
--- trunk/Mars/mhflux/MHThreshold.cc	(revision 9850)
+++ trunk/Mars/mhflux/MHThreshold.cc	(revision 9851)
@@ -98,5 +98,5 @@
     }
 
-    ApplyBinning(*pl, "Threshold", &fHEnergy);
+    ApplyBinning(*pl, "Threshold", fHEnergy);
 
     return kTRUE;
Index: trunk/Mars/mhist/MHCamEventRot.cc
===================================================================
--- trunk/Mars/mhist/MHCamEventRot.cc	(revision 9850)
+++ trunk/Mars/mhist/MHCamEventRot.cc	(revision 9851)
@@ -128,10 +128,9 @@
         const Float_t r = fGeom->GetMaxRadius()*fGeom->GetConvMm2Deg();
 
-        MBinning b;
-        b.SetEdges(41, -r, r);
-        SetBinning(&fHist, &b, &b);
+        const MBinning b(41, -r, r);
+        SetBinning(fHist, b, b);
     }
     else
-        SetBinning(&fHist, bins, bins);
+        SetBinning(fHist, *bins, *bins);
 
     fPointPos = (MPointingPos*)plist->FindObject(AddSerialNumber("MPointingPos"));
Index: trunk/Mars/mhist/MHStarMap.cc
===================================================================
--- trunk/Mars/mhist/MHStarMap.cc	(revision 9850)
+++ trunk/Mars/mhist/MHStarMap.cc	(revision 9851)
@@ -153,10 +153,9 @@
             r *= fMm2Deg;
 
-        MBinning b;
-        b.SetEdges(100, -r, r);
-        SetBinning(fStarMap, &b, &b);
+        const MBinning b(100, -r, r);
+        SetBinning(*fStarMap, b, b);
     }
     else
-        SetBinning(fStarMap, bins, bins);
+        SetBinning(*fStarMap, *bins, *bins);
 
     if (!geom)
Index: trunk/Mars/mimage/MHHillas.cc
===================================================================
--- trunk/Mars/mimage/MHHillas.cc	(revision 9850)
+++ trunk/Mars/mimage/MHHillas.cc	(revision 9851)
@@ -157,9 +157,9 @@
 
 
-    ApplyBinning(*plist, "Width",  fWidth);
-    ApplyBinning(*plist, "Length", fLength);
-    ApplyBinning(*plist, "Dist",   fDistC);
-    ApplyBinning(*plist, "Delta",  fDelta);
-    ApplyBinning(*plist, "Size",   fSize);
+    ApplyBinning(*plist, "Width",  *fWidth);
+    ApplyBinning(*plist, "Length", *fLength);
+    ApplyBinning(*plist, "Dist",   *fDistC);
+    ApplyBinning(*plist, "Delta",  *fDelta);
+    ApplyBinning(*plist, "Size",   *fSize);
 
     const MBinning *bins = (MBinning*)plist->FindObject("BinningCamera");
@@ -168,10 +168,9 @@
         const Float_t r = fGeomCam->GetMaxRadius()*fGeomCam->GetConvMm2Deg();
 
-        MBinning b;
-        b.SetEdges(61, -r, r);
-        SetBinning(fCenter, &b, &b);
+        const MBinning b(61, -r, r);
+        SetBinning(*fCenter, b, b);
     }
     else
-        SetBinning(fCenter, bins, bins);
+        SetBinning(*fCenter, *bins, *bins);
 
 
Index: trunk/Mars/mimage/MHHillasExt.cc
===================================================================
--- trunk/Mars/mimage/MHHillasExt.cc	(revision 9850)
+++ trunk/Mars/mimage/MHHillasExt.cc	(revision 9851)
@@ -129,7 +129,7 @@
     binsx.Apply(fHAsym);
 
-    binsx.SetEdges(100,     0,  1.5);
-    binsy.SetEdges(100,    -9,    9);
-    MH::SetBinning(&fHSlopeL, &binsx, &binsy);
+    binsx.SetEdges(100,   0, 1.5);
+    binsy.SetEdges(100,  -9,   9);
+    MH::SetBinning(fHSlopeL, binsx, binsy);
 }
 
@@ -167,8 +167,8 @@
     }
 
-    ApplyBinning(*plist, "Asym", &fHAsym);
-    ApplyBinning(*plist, "M3Long", &fHM3Long);
-    ApplyBinning(*plist, "M3Trans", &fHM3Trans);
-    ApplyBinning(*plist, "Dist", "Slope", &fHSlopeL);
+    ApplyBinning(*plist, "Asym",             fHAsym);
+    ApplyBinning(*plist, "M3Long",           fHM3Long);
+    ApplyBinning(*plist, "M3Trans",          fHM3Trans);
+    ApplyBinning(*plist, "Dist",    "Slope", fHSlopeL);
 
     return kTRUE;
Index: trunk/Mars/mimage/MHHillasSrc.cc
===================================================================
--- trunk/Mars/mimage/MHHillasSrc.cc	(revision 9850)
+++ trunk/Mars/mimage/MHHillasSrc.cc	(revision 9851)
@@ -135,8 +135,8 @@
     }
 
-    ApplyBinning(*plist, "Alpha",    fAlpha);
-    ApplyBinning(*plist, "Dist",     fDist);
-    ApplyBinning(*plist, "DCA",      fDCA);
-    ApplyBinning(*plist, "DCADelta", fDCADelta);
+    ApplyBinning(*plist, "Alpha",    *fAlpha);
+    ApplyBinning(*plist, "Dist",     *fDist);
+    ApplyBinning(*plist, "DCA",      *fDCA);
+    ApplyBinning(*plist, "DCADelta", *fDCADelta);
 
     return kTRUE;
Index: trunk/Mars/mimage/MHImagePar.cc
===================================================================
--- trunk/Mars/mimage/MHImagePar.cc	(revision 9850)
+++ trunk/Mars/mimage/MHImagePar.cc	(revision 9851)
@@ -145,13 +145,13 @@
 Bool_t MHImagePar::SetupFill(const MParList *plist)
 {
-    ApplyBinning(*plist, "Pixels",  &fHistSatLo);
-    ApplyBinning(*plist, "Pixels",  &fHistSatHi);
-    ApplyBinning(*plist, "Pixels",  &fHistNumSP);
-
-    ApplyBinning(*plist, "Islands", &fHistIslands);
-
-    ApplyBinning(*plist, "Size",    &fHistSizeSubIslands);
-    ApplyBinning(*plist, "Size",    &fHistSizeMainIsland);
-    ApplyBinning(*plist, "Size",    &fHistSizeSP);
+    ApplyBinning(*plist, "Pixels",  fHistSatLo);
+    ApplyBinning(*plist, "Pixels",  fHistSatHi);
+    ApplyBinning(*plist, "Pixels",  fHistNumSP);
+
+    ApplyBinning(*plist, "Islands", fHistIslands);
+
+    ApplyBinning(*plist, "Size",    fHistSizeSubIslands);
+    ApplyBinning(*plist, "Size",    fHistSizeMainIsland);
+    ApplyBinning(*plist, "Size",    fHistSizeSP);
 
     return kTRUE;
Index: trunk/Mars/mimage/MHNewImagePar.cc
===================================================================
--- trunk/Mars/mimage/MHNewImagePar.cc	(revision 9850)
+++ trunk/Mars/mimage/MHNewImagePar.cc	(revision 9851)
@@ -197,17 +197,17 @@
     }
 
-    ApplyBinning(*plist, "Leakage", &fHistLeakage1);
-    ApplyBinning(*plist, "Leakage", &fHistLeakage2);
-
-    ApplyBinning(*plist, "Pixels",  &fHistUsedPix);
-    ApplyBinning(*plist, "Pixels",  &fHistCorePix);
-
-    //ApplyBinning(*plist, "Area",    &fHistUsedArea);
-    //ApplyBinning(*plist, "Area",    &fHistCoreArea);
-
-    ApplyBinning(*plist, "Conc",     &fHistConc);
-    ApplyBinning(*plist, "Conc1",    &fHistConc1);
-    ApplyBinning(*plist, "ConcCOG",  &fHistConcCOG);
-    ApplyBinning(*plist, "ConcCore", &fHistConcCore);
+    ApplyBinning(*plist, "Leakage", fHistLeakage1);
+    ApplyBinning(*plist, "Leakage", fHistLeakage2);
+
+    ApplyBinning(*plist, "Pixels",  fHistUsedPix);
+    ApplyBinning(*plist, "Pixels",  fHistCorePix);
+
+    //ApplyBinning(*plist, "Area",    fHistUsedArea);
+    //ApplyBinning(*plist, "Area",    fHistCoreArea);
+
+    ApplyBinning(*plist, "Conc",     fHistConc);
+    ApplyBinning(*plist, "Conc1",    fHistConc1);
+    ApplyBinning(*plist, "ConcCOG",  fHistConcCOG);
+    ApplyBinning(*plist, "ConcCore", fHistConcCore);
 
     return kTRUE;
Index: trunk/Mars/mimage/MHVsSize.cc
===================================================================
--- trunk/Mars/mimage/MHVsSize.cc	(revision 9850)
+++ trunk/Mars/mimage/MHVsSize.cc	(revision 9851)
@@ -100,18 +100,17 @@
     fM3Long.SetYTitle("M3Long [\\circ]");
 
-    MBinning binse, binsl, binsd, binsc, binsa, binsm;
-    binse.SetEdgesLog( 50,   10, 1e5);
-    binsl.SetEdges(   100,    0, 0.5);
-    binsd.SetEdges(   100,    0, 2.0);
-    binsc.SetEdgesLog(100, 3e-3, 1);
-    binsa.SetEdges(   100,    0, 0.25);
-    binsm.SetEdges(   100, -1.5, 1.5);
-
-    MH::SetBinning(&fLength, &binse, &binsl);
-    MH::SetBinning(&fWidth,  &binse, &binsl);
-    MH::SetBinning(&fDist,   &binse, &binsd);
-    MH::SetBinning(&fConc1,  &binse, &binsc);
-    MH::SetBinning(&fArea,   &binse, &binsa);
-    MH::SetBinning(&fM3Long, &binse, &binsm);
+    const MBinning binse( 50,   10, 1e5, "", "log");
+    const MBinning binsc(100, 3e-3, 1,   "", "log");
+    const MBinning binsl(100,    0, 0.5);
+    const MBinning binsd(100,    0, 2.0);
+    const MBinning binsa(100,    0, 0.25);
+    const MBinning binsm(100, -1.5, 1.5);
+
+    MH::SetBinning(fLength, binse, binsl);
+    MH::SetBinning(fWidth,  binse, binsl);
+    MH::SetBinning(fDist,   binse, binsd);
+    MH::SetBinning(fConc1,  binse, binsc);
+    MH::SetBinning(fArea,   binse, binsa);
+    MH::SetBinning(fM3Long, binse, binsm);
 
     fLength.UseCurrentStyle();
Index: trunk/Mars/mjobs/MJSpectrum.cc
===================================================================
--- trunk/Mars/mjobs/MJSpectrum.cc	(revision 9850)
+++ trunk/Mars/mjobs/MJSpectrum.cc	(revision 9851)
@@ -1648,5 +1648,5 @@
     TH2D hist;
     hist.UseCurrentStyle();
-    MH::SetBinning(&hist, &bins3, &bins2);
+    MH::SetBinning(hist, bins3, bins2);
     if (!ReadOrigMCDistribution(set, hist, weight))
         return kFALSE;
Index: trunk/Mars/mjtrain/MJTrainDisp.cc
===================================================================
--- trunk/Mars/mjtrain/MJTrainDisp.cc	(revision 9850)
+++ trunk/Mars/mjtrain/MJTrainDisp.cc	(revision 9851)
@@ -142,5 +142,5 @@
     heff.SetYTitle("Efficiency");
 
-    MH::SetBinning(&heff, hist.GetXaxis());
+    MH::SetBinning(heff, hist);
 
     for (int x=0; x<=hist.GetNbinsX()+1; x++)
Index: trunk/Mars/mmuon/MHMuonPar.cc
===================================================================
--- trunk/Mars/mmuon/MHMuonPar.cc	(revision 9850)
+++ trunk/Mars/mmuon/MHMuonPar.cc	(revision 9851)
@@ -164,8 +164,8 @@
     }
 
-    ApplyBinning(*plist, "Radius",          &fHistRadius);
-    ApplyBinning(*plist, "ArcWidth",        &fHistArcWidth);
-    ApplyBinning(*plist, "RingBroadening",  &fHistBroad);
-    ApplyBinning(*plist, "SizeVsRadius",    &fHistSize);
+    ApplyBinning(*plist, "Radius",          fHistRadius);
+    ApplyBinning(*plist, "ArcWidth",        fHistArcWidth);
+    ApplyBinning(*plist, "RingBroadening",  fHistBroad);
+    ApplyBinning(*plist, "SizeVsRadius",    fHistSize);
 
     return kTRUE;
Index: trunk/Mars/mmuon/MHSingleMuon.cc
===================================================================
--- trunk/Mars/mmuon/MHSingleMuon.cc	(revision 9850)
+++ trunk/Mars/mmuon/MHSingleMuon.cc	(revision 9851)
@@ -184,7 +184,7 @@
     fMargin = setup->GetMargin()/fGeomCam->GetConvMm2Deg();
 
-    ApplyBinning(*plist, "ArcPhi",    &fHistPhi);
-    ApplyBinning(*plist, "MuonWidth", &fHistWidth);
-    ApplyBinning(*plist, "MuonTime",  &fHistTime);
+    ApplyBinning(*plist, "ArcPhi",    fHistPhi);
+    ApplyBinning(*plist, "MuonWidth", fHistWidth);
+    ApplyBinning(*plist, "MuonTime",  fHistTime);
 
     return kTRUE;
Index: trunk/Mars/mpedestal/MHPedestalCor.cc
===================================================================
--- trunk/Mars/mpedestal/MHPedestalCor.cc	(revision 9850)
+++ trunk/Mars/mpedestal/MHPedestalCor.cc	(revision 9851)
@@ -95,6 +95,6 @@
     fProf.SetDirectory(0);
 
-    MBinning binsx(15, -0.5, 14.5);
-    MH::SetBinning(&fProf, &binsx);
+    const MBinning binsx(15, -0.5, 14.5);
+    MH::SetBinning(fProf, binsx);
 }
 
@@ -181,7 +181,7 @@
 
     const Axis_t xmax = fProf.GetXaxis()->GetXmax();
-    MBinning bins(n, -xmax, xmax);
-
-    MH::SetBinning(&h, &bins, &bins);
+
+    const MBinning bins(n, -xmax, xmax);
+    MH::SetBinning(h, bins, bins);
 
     for (int x=0; x<n; x++)
Index: trunk/Mars/mpointing/MHSrcPosCam.cc
===================================================================
--- trunk/Mars/mpointing/MHSrcPosCam.cc	(revision 9850)
+++ trunk/Mars/mpointing/MHSrcPosCam.cc	(revision 9851)
@@ -81,8 +81,7 @@
     const Int_t   n = wobble ? 101    : 51;
 
-    MBinning bins;
-    bins.SetEdges(n, -x, x); // bin=0.01ø  ~0.5SE
-
-    MH::SetBinning(&fHist, &bins, &bins);
+    const MBinning bins(n, -x, x); // bin=0.01ø  ~0.5SE
+
+    MH::SetBinning(fHist, bins, bins);
 }
 
Index: trunk/Mars/msim/MHPhotonEvent.cc
===================================================================
--- trunk/Mars/msim/MHPhotonEvent.cc	(revision 9850)
+++ trunk/Mars/msim/MHPhotonEvent.cc	(revision 9851)
@@ -146,11 +146,10 @@
     Init(name, title);
 
-    MBinning binsd, binsa;
-    binsd.SetEdges(50, -max, max);
-    binsa.SetEdges(50, -1, 1);
-
-    SetBinning(&fHistXY, &binsd, &binsd);
-    SetBinning(&fHistUV, &binsa, &binsa);
-    SetBinning(&fHistT,  &binsd, &binsd);
+    const MBinning binsd(50, -max, max);
+    const MBinning binsa(50, -1,   1);
+
+    SetBinning(fHistXY, binsd, binsd);
+    SetBinning(fHistUV, binsa, binsa);
+    SetBinning(fHistT,  binsd, binsd);
 }
 
@@ -166,8 +165,7 @@
     Init(name, title);
 
-    MBinning binsd, bins;
-    bins.SetEdges(50, -1, 1);
-
-    SetBinning(&fHistUV, &bins, &bins);
+    const MBinning bins(50, -1, 1);
+
+    SetBinning(fHistUV, bins, bins);
 }
 
@@ -183,9 +181,9 @@
     MH::FindGoodLimits(num, num, min, max, kFALSE);
     MH::FindGoodLimits(num, num, min, max, kFALSE);
-    MBinning binsd, binsa, binsz;
-    binsd.SetEdges(num, min, max);
-
-    SetBinning(&fHistXY, &binsd, &binsd);
-    SetBinning(&fHistT,  &binsd, &binsd);
+
+    const MBinning binsd(num, min, max);
+
+    SetBinning(fHistXY, binsd, binsd);
+    SetBinning(fHistT,  binsd, binsd);
 }
 
Index: trunk/Mars/mtools/MHSimulatedAnnealing.cc
===================================================================
--- trunk/Mars/mtools/MHSimulatedAnnealing.cc	(revision 9850)
+++ trunk/Mars/mtools/MHSimulatedAnnealing.cc	(revision 9851)
@@ -74,5 +74,5 @@
     binsx.SetEdges(fMoves+1, 0, 1);
     binsy.SetEdges(fDim, 0.5, fDim+0.5);
-    MH::SetBinning(&fBestEver, &binsx, &binsy);
+    MH::SetBinning(fBestEver, binsx, binsy);
     
     // For better visibility, omit the first entry in fBestFuncEval
